Free project planner and estimator tool

I ran into interesting tool today, it is a project estimator, task breakdown tool.

http://geon.github.io/estimator/

Screen Shot 2015-02-02 at 10.55.09 PM

First it is free to use and interface is a little bit rought, yet it does work and breakdown of the tasks is really well done. Providing estimates is bonus on top of that. Honestly when you look at this, you realize that for realistic estimates you don’t really need significantly more then this.

Screen Shot 2015-02-02 at 10.57.06 PM

Taking into account how many projects get started with less then this amount of planning, I find this tool very useful.

Light Table – a real work surface

It started with video about intentional programming or interfaces. It is a very impressive demo. Then Chris Granger went on to create a demo of his own in 2012 and start a Kickstarter project to support creation of open source ide. What he created is a fun environment, not as ground shattering as we were led to believe, but still great place to have fun while programming. In the end, as his interests moved on, he published everything on github where it still have some development, but I believe it kind of died down for now mostly.

Screen Shot 2015-02-02 at 10.46.36 PM

I decided to try it out few months ago and had a lot of fun. I am not as adept in Clojure but in Javascript you still can have fun with it. There are number of modern features, workspace with fuzzy logic search for filenames for example, but I would say the most interesting one is instant repl, which allows you to execute any line as you write it. This really has to be experienced, more then anything, because it does help and shortens development path. There is also ability to have synchronized preview window on the right (you can have it anywhere) for web apps, that would spin instance of the app and offer preview.

Also, it would be a disservice not to mention large number of plugins available that provide support for most languages and formats.

As a development environment, I can’t say I could use it exclusively, but it is fun to use for occasional project and it does have productivity enhancements. Where I could see it would be useful is in workshop setting where groups are provided training, so instant execution and visibility of variable values would be of most use.

Command Line Productivity (Part 3)

Here are links to Part 1 and Part 2 of this series.

OK, back to productivity post. I wanted to make my command line work more efficient and streamlined. Even with wonderful zsh autocomplete of remote ssh server paths, git branches etc, there is a lot of typing going on and not all is necessary.

One big annoyance for me is that I have several projects, and often I need to get from one to the other quickly. Often I would have several tabs open in iTerm2 and each would be for some context, and within that context that window would be split further. Often I would keep those for several days, just to avoid having to type all of this again.

This is all fine, but I started using sometime 2+ years ago aliases for projects and spaces I go frequently. As long as I have similar file organization on all my machines, and that aliases file is kept on Dropbox, things are great. Dropbox is awesome :), just saying.

Back to my aliases file which I mentioned in Part 2 of this series.

# apps
alias reload=”source ~/.zshrc”
alias be=”bundle exec”
alias cuke=”bundle exec cucumber”
alias rs=”bundle exec rspec”

# locations
alias work=”cd ~/work”
alias fit=”cd ~/work/fitclub”
alias zelio=”cd ~/work/zelio”
alias home=”cd ~”
alias aliases=”mvim ~/Dropbox/Apps/aliases”
alias web=”cd /Library/WebServer/Documents/”

I removed several projects from this, as I feel exposed by having all my aliases here.

First part shortens long app related commands, obviously I do a lot of rails, if you use different tools, it pays to shorten them. Other part is for different location on my machine I feel like I like to have their locations.

This all works really well. However recently I came across … bash script I can’t find source to properly attribute credits… well here it is, it is very short and uses symlinks to remember folders aliases. Just include this in your .bashrc or .profile or .zshrc

# JUMPEROO
export MARKPATH=$HOME/.marks
function jump {
cd -P $MARKPATH/$1 2>/dev/null || echo “No such mark: $1”
}

function j {
cd -P $MARKPATH/$1 2>/dev/null || echo “No such mark: $1”
}

function mark {
mkdir -p $MARKPATH; ln -s $(pwd) $MARKPATH/$1
}
function unmark {
rm -i $MARKPATH/$1
}
function marks {
ls -l $MARKPATH | sed ‘s/  / /g’ | cut -d’ ‘ -f9- | sed ‘s/ -/\t-/g’ && echo
}

It usage is to cd into folder let’s say ~/work/my_awesome_code, then say ‘mark awesome’ and in future, if you say ‘jump awesome’ you will be there. If you say ‘marks’ it will list all remembered locations. Very simple, awesome.

While my aliases served me well for years, this solution is very elegant and I really like how it is done.

This is pretty much what I had so far. There some smaller tricks I like to do, like creating todo.txt in folder and in .rvmrc or some other file to add ‘cat todo.txt’, so each time I open a folder, it will tell me what next it is supposed to happen in that project. This obviosly can be done in .zshrc as independent function, I just didn’t spend time on it.

Also,  whenever I notice I am typing same command over and over, I will make an alias for duration of project if nothing else, to save me from typing.

Command line productivity (Part 2)

So yesterday I was looking into my command line usage and what are the most frequent command(s).

Here is link to part 1.

Obviously I spend a lot of time working the git. So most benefits I would gain if I could do something to improve that part. I already noticed that typing git commands is very verbose.

I also remember in the past when I was doing such analysis, tool would produce aliases for commands you frequently use. This is all fine, but it was hard to remember those commands, and it would take me more time to remember what was exactly shortcut, then to type it. So I quickly abandoned such system.

This time it will be different. For start, I am pretty sure that aliases like gp, gc etc, will not give me benefits. This got me thinking, how else can I name aliases that I can skip step where I pronounce command I want to be able to remember beggining letter. How about removing git from beginning?

Here is what I did:

first, so that I don’t have to create separate aliases in laptop and multiple desktops, I created a file in dropbox ‘aliases’ and in my .zshrc I added line to source it like this:

source /Users/zeljko/Dropbox/Apps/aliases

Then I started creating aliases. I made point to make them like I would think of those commands. For example ‘push’ is for ‘git push’

# git commands
alias s=”git status -s”
alias c=”git commit -m”
alias gd=”git diff”
alias add=”git add ”
alias log=”git log –oneline”
alias reset=’git reset HEAD –hard’
alias push=”git push”
alias pull=”git pull”
alias pick=”git cherry-pick ”

This helps me great deal. First day it took me a little time to get used to it, old habits die slowly. However, since it is intuitive, it works great.

One thing I am not super happy is gd for git diff, but diff is utility and we should not create confusion. On the other hand, as someone who likes to call git status, between pretty much most of the steps, shortening this and commit, is awesome.

Now, workflow would be something like this:

s (git status)

add . (git add .)

c “zd [#xxx] my feature” (git commit -m …)

push

sometimes

push –tags

So this alone helps me great deal. What else I would like to improve is folder traversing. This will be topic of next post tomorrow.

 

Command line productivity (Part 1)

Being productive, we all want it, we rarely implement it. Most of the time, we have no idea where to start.

Since I spend most of my day in terminal, I felt this is a place I can make more productive. It is already made more pleasant to look at by choosing a custom font and tweaking several other settings.I also spent time to learn terminal shortcuts (iterm2), so I can quickly split windows, switch tabs etc. If you don’t do  those things in your terminal, and that is where you spend your day, you should start by learning shortcuts and customizing settings. One great terminal I really enjoy on Linux is Terminator. On Windows there is PowerShell and Console2.

I tried to make OSX open in terminal on startup, like you could do in Linux, but I didn’t find simple way to do this. I don’t shut down it anyway, so it is OK.

So, how can we be more productive on command line. For start, I wanted to learn better how I use commands and what and how often I am using them. From few years back I remember someone had neat oneliner that would analyze frequency of command in history.

Didn’t have to search long to find this blog post ‘Command Line Analytics

In essence all you need to enter is this command:

history | awk ‘{a[$2]++}END{for(i in a){print a[i] ” ” i}}’ | sort -rn | head -10

It goes through your history, takes first part of command line entered, sorts it, takes first 10 items and displays them along with frequency of usage. For my analysis, I wanted to see top 25 commands I used:

3014 git
630 cd
568 ls
378 brew
355 mvim
304 ack
285 bundle
281 rm
260 be
204 rake
180 rvm
169 ssh
165 tig
160 lime
150 gem
142 cat
121 curl
117 l
109 sudo
90 rails
86 open
79 npm
79 gd
73 touch

Some of these are duplicates, like ls and l (l is alias for ls) mvim and lime are editors.

Let’s stare at this for a moment… I will continue tomorrow on what I did next.

Command Line Productivity (Part 2)

Mobile First Strategy

These days it is not enough to have a website, oh no, those days are long gone. Even for business geared apps, it is expected not only good online presence, but also apps for major phones and tablets. This obviously puts a lot of pressure on founders of new companies as it requires effort times 3, often more to get to same place as before.

#Mobile First
Some popular startup thinkers suggested mobile first strategy for several reasons. First one would be that you get into hands of potential customers, target audience quickly, so if you have to develop something, do it mobile first, that way you will always have that essential mobile presence and you can always develop website later.

For a large number of startups this makes sense.
Another argument in favor of this approach is that mobile first also provides best experience on mobile devices, as it was developed for them first, not as a copy of the website.

Another advantage with this approach is, that is very hard finding mobile developers who are good, so once you are done with that, other things are much easier.

In essence, mobile experience is very unique format and developing specifically for it does bring better experience for end user whoever that might be. Also, features like location, position, snapping pictures, these are all things that are natural for phone or tablet and not so much for desktop.

#Disadvantages
Main dissadvantage is that still most activity is happening on the web a.k.a. desktop and not having a website can put you at disadvantage when you need to be discovered. It is much harder making people install new app on their already overcrowded phones and tablets.
If you app is genuinely unique, it would be very hard to explain that without good website.
Another really worrying trend for all the mobile apps is that people don’t stick with them, they use it for a short while and then abandon for next thing. It has to be really super useful to stay on the phone or tablet.

#Middle ground
So far middle ground is to develop webapp with responsive design. Responsive design even with frameworks that aid it’s development is hard to do right, because it is simply one site to serve two different platforms.

For some apps, this will work well and it will be just fine. For some, not so much.

#Games
Also, for games, making it mobile first will make it very addictive as customers can play it at any moment in time. On the other hand, making it like facebook app would allow this app to be spread virally much easily. FB apps can be mobile as well, but it is much easier to notice others playing and be inticed into playing if you are on the desktop.

#Conclusion
I personally like responsive design that adjusts to mobile, tablet or desktop. It allows me to orchestrate user experience from single point. There are apps that simply require well done mobile app.

Use ack to search code

I needed something to search codebase with and after trying to do

sudo gem install rak

and rak installed like that is a little flaky. Probably something missing but I didn’t want to spend time researching, so ack to the rescue.

ack is perl utility to search codebase.

In ubuntu install is super simple.

sudo apt-get install ack-grep

however on OSX things usually require more work. Here is how to install ack on OSX that worked for me (Snow Leopard)

download it: curl http://betterthangrep.com/ack-standalone > ~/ack
make it executable: chmod 0755 ack
move it to bin so it would be in path: sudo mv ack /usr/local/bin/

enjoy.

more info at http://betterthangrep.com/