Poem - Epic

    Epic

    ‘Tis their chase littered with unending corpses
    ‘Tis a dogged race with the savages of Norse’s
    I’ve slain them again and again
    Still their shadows circle us from bloody skies
    Fire breathing dragons like Satan’s kites

    Fragrance of jasmine from her lovely tresses
    Mixes odours with the rotting carcasses
    Her warm breath behind my neck
    Holding me tight, her lips part ways
    Fear not, I comfort with resolute gaze

    A deranged one dives with burning eyes
    Unsheathing the sword over the precipice
    Life plays a ghastly roll of the dice
    A swift evasion and a mighty sweep
    A dismembered head shrieks over the heap

    On the handle of my sword my fingers tightened
    She held me tight, lithe arms wrapped from behind
    Her lovely countenance rests lightly on me
    My palm placed on hers, my mind easen
    My steed gallops gently towards the horizon

    Comments →

    The Secret of Innovation

    Why is the human body such a perfectly designed machine? I mean, it is such an incredibly complicated system consisting of million of cells, designed by a genetic code, each with a specific purpose. It is an incredibly complex feat of engineering if one were to design it from scratch.

    Artistic representation of Cells

    The answer is Evolution. Evolution is a continuous process of attaining perfection through small steps. The steps are some what like this

    • Lets start with a fairly evolved species
    • On a global scale creating life is cheap
    • Every generation is an minor experiment involving producing a unique combination of genetic attributes
    • The attributes might or might not help the offspring that only time will tell
    • The ones with beneficial attributes like intelligence, attractiveness thrives
    • One in a long period of time, a mutation i.e. significant change in attributes happen.
    • This mutant might or might not survive.
    • If it survives and multiplies, it might or might not supplant the earlier species.

    This cycle continues over millions of years. This cycle has resulted in millions of diverse and interesting flora and fauna. The key to all this is, in fact, step 2. It is cheap to create something. Something different. The difference might be minor at first, but the cumulative effect of several minor changes is very significant.

    This is how creativity works. This is how innovations work. There must be an environment to experiment and create without too much overhead. The time from conception (of an idea) to birth (i.e. implementation) must be short. This is the basic idea behind prototyping.

    Taking this analogy to computer languages, most of the innovative applications are now first implemented in a dynamic language than a statically compiled language. The traditional statically typed languages require more overhead due to increased line count and lack of ready to use libraries. The time from concept to implement is longer. Dynamic languages permit the prototyping of more ideas at the cost of less optimal implementations.

    This is why copying ideas and applying it to areas different from where it was intended often works. It is cheap to reproduce an idea. It might have been a result of thousand iterations. But the idea is already born now. The genetic code has been designed and it has been proven. The next step is to clone the idea and start tinkering with it in small ways. You might very well be innovating.

    The real secret of innovation is in making prototyping, experimenting, iterating or whatever you call it, cheap.

    Comments →

    Managing Creative Assets - 3: TortoiseHg Tutorial

    Managing Creative Assets is a multi-part series on how you can manage your creative works such as a novel or even blog post without impairing your creativity. It highlights the importance of using a version control system as an integral part of one’s creative workflow. Part 1 gives a good introduction to the series which is aimed at technology novices

    Getting started with Mercurial: A tutorial

    The concluding part of this series will be the installation and typical usage of Tortoise Mercurial, a user friendly GUI front-end for Mercurial. It is commonly referred to as TortoiseHg (the chemical symbol for mercury).

    This will be a fairly simple tutorial to follow as each description is followed by a screenshot. These screenshots were taken on Windows XP, but they will be pretty similar in other OSes

    Download Tortoise mercurial from the Bitbucket site. There are installables for Windows as well as for Linux. Installation on Windows is fairly straightforward as it is wizard-based.

    1. Create a new folder for keeping your art assets. This will be your project folder. In this screenshot (click for a larger image), I have created a project folder for the purpose of composing this series of blog posts. Simply right-click, and select ‘Create Repository here’ under the TortoiseHg sub-menu:

      010 - Create.png

    2. The defaults in the ‘Create Repository’ dialogs are fine. Just click Create.

      020 - Create Dialog.png

    3. The new repository has been created. That was easy, wasn’t it?

      030 - Created.png

    4. Now, enter the project folder and view the changes. On some OSes, you might see nothing here. These files are not intended to be seen or modified, hence they might be hidden. You can safely ignore them.

      040 - Project folder.png

    5. This is a screenshot of a new file that I am editing (using Emacs editor) inside the project folder. I am ready to check-in this file.

      050 - New File on Emacs.png

    6. Now, you will need to add this new file to your repository. Let’s skip that and directly perform a commit. We will be later given a chance to add this file.

      060 - First Commit.png

    7. Here you can see our newly added file as unchecked. This means that this file is not yet under version control

      070 - Commit Dialog.png

    8. Go ahead and mark the check box next to this file

      080 - Commit Dialog File Added.png

    9. In the edit box above, you can add a short comment about this commit. Since this is the initial commit, my comment is simply ‘First Commit’

      090 - Commit Dialog Comment Added.png

    10. Mercurial acknowledges the successful commit with the name(s) of the committed files

    100 - Commited.png

    1. Notice that your file has a green tick icon indicating a successful check-in

    110 - Overlay Icons Added.png

    1. Many hours and many check-ins later, my post is nearly close to completion. I commit this version as well.

    115 - Emacs Final Screen.png

    1. In the commit dialog, notice the Repository Explorer in the menu.

    120 - Going to repo explorer.png

    1. You can view the history of changes in reverse chronological order. You can right click on any of them to compare the changes or revert back to an earlier version.

    130 - Repo explorer.png

    1. Simply clicking on each version will show the diff (in UNIX format) between the consecutive versions in the lower right window.

    140 - Repo explorer shows changes.png

    1. You can perform a revert by selecting the Revert option.

    150 - Reverting.png

    1. As indicated by the warning, your current file will be overwritten to an older version. But subsequently you can revert to the latest version as well, so this is not too much of an issue.

    160 - Revert Confirm.png

    That’s pretty much all you need to know to use Tortoise Hg. Hope you found this series informative!

    Comments →

    Managing Creative Assets - 2: Distributed Version Control Systems

    Managing Creative Assets is a multi-part series on how you can manage your creative works such as a novel or even blog post without impairing your creativity. It highlights the importance of using a version control system as an integral part of one’s creative workflow. Part 1 gives a good introduction to the series which is aimed at technology novices

    Who started the Fire?

    In April 7, 2005, Linus Torvalds wanted to use a version control system to replace the proprietary BitKeeper system for developing Linux Kernel. He absolutely hated CVS (the version control system in vogue then) with a passion. So, he did what he did best, he wrote his own. This resulted in the release of a version control system called git.

    The development of git led to a sudden interest in distributed version control systems (DVCS). Though it was not the first of its kind (earlier open-source DVCS existed like Arch and Monotone), it was the first mainstream DVCS.

    Today, one of the first choices you need to make while selecting a version control system is whether it is centralised or distributed. Let’s understand this from own unique stand-point i.e. for managing creative assets.

    Why I do not advice VSS, Subversion or a Central Version Control

    What is a Centralised Version Control (CVC)? The odds are that most of the version control systems that you might have heard of are Centralised for e.g. VSS (Microsoft Visual Sourcesafe), CVS, RCS, Clearcase or Subversion.

    If you are planning to use a version control for personal use involving no or minimal collaboration with others, I would strongly recommend not to use a centralised version control system. You can skip to the next section, if you don’t want a detailed set of reasons on why I recommend non-centralised version control.

    The reasons I would cite here are a mix of usability issues and technical limitations. The usability issues are subjective but I am sure many find them genuinely annoying. I am making an assumption that since this is for personal version control management, so your CVC server would probably be installed locally. The problems are:

    1. Everything is stored inside repositories: Adding your project to a CVC effectively creates a duplicate layout of your project inside the CVC server. For e.g. if you created your subversion repository within C:\svn, all your projects will be kept inside this folder. You will have to maintain another filesystem inside this server using arcane commands.

      In a distributed version control system, you simply manage the project directory inside your normal filesystem. All the version controlled files will still be inside the project directory. This is quite useful since your project directory can be moved to a different location easily and the version history will be completely intact.

    2. Server must be always running: If you have installed VSS or SVN locally, you must always remember to start the server. This can be configured to run as a service, but you will need admin privileges for this. This is not required in a distributed version control.

    3. Offline activity cannot be checked-in: This is an oft-quoted technical limitation. You need your svn server running to make any check-ins or check-outs, making it considerably less useful whenever you are offline. But this is less of an issue in our case, since I assume the svn server is installed locally.

    4. Remembering to checkout immediately after you import or check-in: Ever had the feeling that your files magically disappeared only to realise that you haven’t checked out? This is an irritating ‘feature’ of CVS. The files appear and disappear as you check in and out. Even worse is that they are sometimes read-only and sometimes writeable. This is confusing and irritating from a usability standpoint.

      Apparently, most people leave their relevant files checked out at all times to avoid this confusion. But that would defeat the purpose. In a distributed version control, the files are always present where you expect them to be. This leads to less confusion and a world of improvement in terms of usability.

    5. Weird layout: Ever seen a funny looking directory structure with truck, branches and tags directories? Then you might be looking at a project under SVN. Ever wondered which directory actually contains your code? The right answer is trunk. I am not sure, if this is the most intuitive structure possible.

    6. Distributed Version Control is a superset: This should have been my first point, almost every centralised workflow can be now supported by Distributed Version Control. You can still upload (or “push”) stuff from your branches to the project’s central server.

    If you are still not convinced and still prefer centralised version control, check out the easiest way to setup subversion in Windows written by Jeff Croft.

    Distributed Sounds Complex

    It is a common misconception that Distributed Version Control systems are difficult to use and hard to understand. In many ways, the concepts are simpler than traditional version control systems from a beginner’s perspective.

    Assume that the files (say documents or images) related to your project are kept under a particular directory. This is called the Project folder. Traditionally, your project folder will be stored in a central server. Hence the name centralised version control.

    Whenever you would need to use a particular file within this folder, you will need to check-out and once you have reached some logical point (say after adding a few paragraphs in your essay or sketching the torso of a toon) you would check-in.

    These check-ins are like check-points. More check-points you add, the more finer undo history you will get. Fewer check-points will mean that there will be a lot of differences from one check-in to another making it less useful.

    As you might have guessed, every time you need to check-in or check-out you will need to connect to the server. Hence, practically, you will need the server (installed on your machine or elsewhere) up and running at all times.

    If someone else would like to work with you on the same project, they will need to connect to your server. If they would like to work on the same files that you are working on (a rare case), they would need to create a branch and work on the branch.

    This collaborative scenario is slightly different when you are working with a DVCS.

    What About Distributed?

    In a distributed version control system, your friend would rather clone your entire project than branch it. After creating a clone, his copy will be identical to your repository in every way. It will have the entire version history intact.

    He no longer needs to be connect to your repository, he can work independently. In fact, there is really no need for a server in DVCS. The repository is actually created within the project folder.

    For instance, let’s take the initial scenario. You would like to add your project folder to version control. In a DVCS, the project folder is slightly modified to add some additional information (meta-data) which is typically hidden from the user. Hence, your project folder remains mostly intact and it doesn’t have to move into a server.

    In short, the defining feature of DVCS is that there can be more than one “central” repository for the same project. In case, your repository gets nuked, the cloned repository with your friend is always available as a perfect clone. To quote:

    “Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it ;)” – Linus Torvalds (1996-07-20)

    Types of DVCS

    These are the popular open-source DVCS available:

    • Git - Very fast DVCS by Linus which runs on UNIX but has a weak port to Windows.
    • Mercurial - Fast cross-platform DVCS by Matt Mackall of Selenic. Partly written in Python
    • Bazaar - User friendly cross-platform DVCS by Canonical (of Ubuntu fame). Written in pure Python

    Selecting a DVCS, like most things, is a personal choice. So, you might want to read a more detailed comparison before making a choice. I would be explaining Mercurial in my next article because it has a nice selection of all the desired features.

    Do comment if you found DVCS more interesting or otherwise…

    Comments →

    Managing Creative Assets - 1

    Managing Creative Assets is a multi-part series on how you can manage your creative works such as a novel or even blog post without impairing your creativity. It highlights the importance of using a version control system as an integral part of one’s creative workflow

    Why Do We Need A Version Control system?

    Let me start off by saying that this is article is not for the techies. Despite what the title might tell you, this is an article about how to make computers help your creative process. How does a creative process work?

    Most creative people follow the following simplified process attributed to Graham Wallas while thinking creatively:

    • Preparation (preparatory work on a problem that focuses the individual’s mind on the problem and explores the problem’s dimensions),
    • Incubation (where the problem is internalized into the unconscious mind and nothing appears externally to be happening),
    • Intimation (the creative person gets a ‘feeling’ that a solution is on its way),
    • Illumination or insight (where the creative idea bursts forth from its preconscious processing into conscious awareness); and
    • Verification (where the idea is consciously verified, elaborated, and then applied).

    Obviously, this is an iterative process. Most writers would have a pile of crumpled paper sheets overflowing their waste baskets. Be prepared to reject a lot of ideas (even good ones) when you are involved in some creative process. Sometimes, against your earlier good judgement you would like to go back and retrieve an idea that you had discarded. You may have to rummage your waste basket for that page and if you are lucky, you might find it among the pile.

    These days most of the creative works; be it a novel, a movie or even a comic is prepared on a computer. However, the process of throwing away drafts into the waste basket and later digging them out, is still the way we humans work. The various ways people achieve this in practise is:

    1. Saving multiple version: This results in a whole mess of files grouped by their prefixes. Some prefer to suffix them with version numbers like file-v0.5.doc, file-v1.0.doc etc, while others prefer to use descriptive suffixes like file-draft.doc, file-sentforreview.doc etc. As anyone who might have used this system would have experienced, this quickly becomes unwieldy. For example what is the difference between file-v0.5.doc and file-v1.0.doc? How can I revert to the earliest version while correcting many of the typos I found in the latest version?

    2. Using Undo and Redo: This is a very simple system to understand and hence quite popular among artists. If something doesn’t feel right, keep pressing the Undo button till you are satisfied and then start over. There are many problems with this approach. Firstly, the timeline is linear. You cannot try two different approaches at the same time. Secondly, the Undo history is available only for a single session. Close the application and the undo history is forgotten.

    3. Use a version control system: This approach relies on an version control system that remembers every version you had ever saved (rather checked-in). This system is the focus of this article.

    To extend the analogy further, a version control system can give you a bottomless waste basket with the ability to show you what changes you made from one version to another. Version control systems are powerful enough to allow you to branch out into various versions simultaneously, which is often useful when you are collaborating with others.

    In fact, the addition of a version control system makes a profound change to your creative process. You are no longer afraid to make mistakes. You can play around with your creations without the fear of what you had created so far. Most people are afraid to start from scratch, even though, it is often documented that subsequent creations become more refined and hence elegant due to the better understanding of the ‘problem’ mentioned in the Preparation phase above. But be mindful of drifting in the opposite direction too, as in the case of the Second System effect.

    In the next part, we will be introduced to two kinds of version control systems - Centralized and Distributed; and which one is suited for certain scenarios.

    Comments →

    « Newer Page 16 of 39 Older »