- … tracing a four digits number all day long and not knowing if there is something wrong with it or not.
- … riding bicycle on a long straight road, seeing the end, wanting to be there
- … climbing a sand hill, falling back in every few steps
- … staring at a computer screen, frozen, wandering what the f*ck it would be doing while all you asked was a context menu
- … knowing it could be better
- …
Posted in Uncategorized | Tagged on software, vocabulary | 1 Comment »
Here is some highlights from Cristopher Avery’s speech “Team Work Is An Individual Skill: How To Build Any Team Any Time“.
- Responsibility is feeling of ownership. Don’t mix it up with accountability.
- Idea is to keep range of your responsibility bigger than your accountability. Most of the problems lay between the zones of accountability which are not owned by anybody.
- Team is shared responsibility
- Agile is a mind set, not a tool-set problem.
- There are five phases when faced with problems, know them so you can snap out of them until reaching the last one: 1. Lay blame, 2. Justify, 3. Shame, 4. Obligation (have to but don’t want to), 5. Responsibility
- It is prisoner’s dilemma. Turn it into win-win game.
Yep, as guessed, no silver bullet once more. Problem is summarized nicely at the beginning of the speech actually: What do you do when your reputation depends on other people whom you have no control over? Answer lies in the hope that everybody feels the same. There can be a solution once the game rules are for everybody.
Probably I was not very careful while listening the speech since I missed the part about how to play the same game.
Posted in Uncategorized | Leave a Comment »
I remember a friend saying “if you hate someone, stick a potato in his car’s exhaust pipe”. He will most likely start digging from the engine, make his way through all imaginable parts but not the exhaust pipe.
Today, I was that silly mechanic once more. I went through many methods, double and triple checked many numbers and dived into some theoretical discussions even. Almost two days of struggling just to find a stucked potato, just 10 minutes before Friday ends. A copy-paste error between two closely named variables.
I should find a nice exhaust pipe photo, or a desktop toy, and keep it somewhere visible.
Posted in on software | Leave a Comment »
I remember a bold moment of honesty. We were at university and one of the girls was having some conversation with few boys in between classes. I am not sure what was it about but a friend of mine could not stand anymore and decided to share an honest comment with a girl. He approached the girl and said: “I can not think any man approaching you for anything but sex“.
It was a rare moment where someone puts aside all social rules and dares to put thoughts as they are. You know, like a piece of shit suddenly drop in the middle, smelly and ugly that nobody can pretend that it is not there. You should be really really honest/daring person to do such things or you should have nothing to loose (everybody hates you already).
I think he is in the first category. I remember him when I manage to catch some honest words just before they escape from my mouth.
For me the radio reporter from The District was from the second category. I don’t remember if he ever had a face. He had this distinct voice coming out while camera is roaming over the city, criticizing Chief Jack Mannion. You would tolerate the others, they were human. But he would not. You would hate him having such hard comments without any understanding. After all they all were trying their best.
When I was preaching for intranet blogs in the company I thought about the second one. My unsuccessful attempt was not like that because I was a real human, meaning vulnerable. I turned the focus on myself to be on safe side and did my criticism through my own mistakes. Ironically, you are safer if you put yourself in the target mark. But, I missed the existence of such a voice in the company. A voice with honesty. It is almost like a super hero behind his mask. Someone that would dare to say you suck to… you know, to the ones who suck.
Posted in Uncategorized | 1 Comment »
I have a nice view, especially at night. It is not high raise buildings of a metropolis but still yo can see almost half of the city from window. That is when you are standing. From here, where I sit comfortably only the dark and the reflection of the room. It will not be possible to enlarge the windows and make them from bottom to up but raising the sitting position might be a solution. A platform in large living room so you can see lights of the city from where you sit.
It was a quite day. I sort of worked on another slowly progressing and tend to go nowhere pet projects. Cats were outside. Nice music on internet radio, some Turkish tea and occasional eating breaks. I managed to keep my wasted time in internet under control while successfully avoiding studying Romanian. Having no TV is a good think. You have less distractions and it forces you to be creative to waste your time. When I need to take my daily doze of video I am heading to the TED usually. It is less dangerous than youtube when it comes to getting lost within videos. Videos are relatively longer and you don’t really jump from one to other. Even if you find yourself spending some hours (I didn’t reach to that, yet) you don’t feel that bad.
I just listened Mena Trott there and it reminded me why I wanted to blog in the first place. I had few failed attempts on blogging and this is also going in that direction. I keep postponing writing for several reasons but mostly because I am not sure how to put words together so it makes sense. This urge to make sense is disturbing since I wanted to write just to keep record of things, put what is in my head to somewhere where I can come back later. It is more convenient than writing in paper and easier to archive. It doesn’t have to make sense, sometimes it just doesn’t. Maybe later. You just write.
You should just write. It is the start. If you don’t start it will never reach to someplace. If you do, it might.
My idea of raising the floor to see the lights outside will, most likely, not reach anywhere for example. But fortunately that is not the only thing I keep my mind busy with. I take notes on some of those other things here and there reminding myself that I should write about them. I should dig in the notes and start writing.
Posted in Uncategorized | Leave a Comment »
Lately I am catching myself with one hand on mouse, other on my chin infront of the computer. Not a very fortunate position for a software developer. It feels a lot better when both are on the keyboard.
I noticed this behavior when I start seeing other developers doing the same thing. Not very fortunate for a software development house.
I think this is a side effect of working on a large scale project. Everything takes time. Copying data files over network, compiling your last changes, executing the application for a quick test, everything. Any break over 5 seconds leads to one hand syndrome.
Reading is also a one handed process. I do quite some reading due to non-development related tasks in adition to filling larger than 5 seconds breaks with internet browsing. Scrolling and left click are the most used user interactions for such times.
I didn’t measure seriously but I think my getting things done probability is a lot higher if my both hands are on keyboard. One handed usage puts me in a passive mode where I actually wait something to happen, like a magic answer shines through the google search results after 20 pages (yes I have such desparete searchs time to time).
I think here is the right place to say sorry for those mouse dependent applications I wrote.
Posted in on software | Leave a Comment »
Note: This is one of failed “let’s start now and finish later” attempts. I decided to publish them even they are not finished. My experience with myself (more than 30 years) if I don’t complete it in a reasonable time, I never will. So here it is, with hope that it will all make sense one day…
Once in a while I decide that I had enough with the cats at home and kick them out. Out to the garden of course, not further. I lock my self in, or them out. When we were in an apartment in Bucharest it was difficult to keep them in. Now in a house with garden, they don’t want to go out. Anyway, I like them out and start cleaning around, and re-organizing. I had all sort of hopeless attempts to organize their living area to minimize the interaction with mine. I don’t really enjoy for example trying not to step on their foot plates, or stare each other in the bathroom. Their sand box and food court are things that I still believe I can control. I lost hope controlling where they leave their hair a while ago.
Leaving them out during re-organization is crucial so they don’t bother me during the process. I take everything somewhere else, clean all around, put them back where I think their disturbance will be minimum. Sandbox is especially important since they like going wild in it.
This time, when I looked back all the work done and pleased with my self, once again thought, it will not take long. Then I realized where I make my mistake (no not that one, they are in already, it’s too late to discuss on it now). A mistake that I tend to repeat during software development (yes, I also felt weird with this connection).
When I nicely isolate their sandbox, even thinking so they will not be disturbed by us in their private moments, I am after my own agenda. I set up everything nicely so they are not on my way. But things don’t stay as you leave. They come and start using it. It would work perfect if it wasn’t the cats around.
Clash of expectations. We all have our own agendas. As a programmer, even when I try to put myself in user’s shoes to design/implement a GUI, I have my programmer agenda. When I don’t pay attention, programmer reaches out and implements a weird hack which makes everything easy. I even feel pleased myself. Until someone else comes and can not frigging understand the beauty in it. His agenda does not necessarily involve all the stuff I have to deal with as a programmer. What do you mean at this stage you don’t have access to selected file he asks for example.
…
Posted in on software | Leave a Comment »
Note: This is one of failed “let’s start now and finish later” attempts. I decided to publish them even they are not finished. My experience with myself (more than 30 years) if I don’t complete it in a reasonable time, I never will. So here it is, with hope that it will all make sense one day…
Note II: “Scalability” here is used as the project size rather than problem size. I noticed that it was not the best choice of words.
I was listening a talk on google tech talks and this came up: This morning I was thinking modularity is key to simplicity at the office. As a developer I love modularity, especially if you are dealing with large scale projects involving tens of developers you appreciate the ability to take a piece of functionality and dig into it knowing it fits all together at some level.
A developer learns to appreciate the modulariy (either for scalability or for simplicity) but hopefully your software has some users, and users do not always makes the connection between lack of modularity and the pain he is facing. Since user has an easy way out (this software suck, let’s uninstall) it is better someone walks him through the logic.
Modularity requires avoiding duplications in functionality. Simpler your modules are, or more specialized in their functionality, the better. However, users like short cuts. Yes I know that command is available there but can’t we put a small button here too he says. Most of the time it is simple to add and developers like that. But then, can’t we have that list box here too he says. It looks like it’s becoming simple at first since number of clicks is getting less and less to perform a certain functionality with each click. But, short cuts start becoming duplicated or worse imitated functionalities since it is not always easy to be that much modular.
I thought about lego blocks this morning. Each block has a one and only one functionality (at least the ones I know). Success of lego comes from the way different blocks work together, not how much additional built-in functionality each block comes with.
…
Posted in on software | Tagged modularity, software | Leave a Comment »
I am not one. Not yet. I tend to generalize the problems and go for a more complicated solution instead of directly going for a solution. I tend to move the discussion on a more theoretical area. It’s not a bad thing, not always. But if you happen to work with deadlines it might not be the best strategy. This is a critic I receive about my work time to time. Solution is not totally giving up but to know when to generalize and when not to. I am working on it.
For example I wrote earlier that I gave up my pet project when Enso went open source. That was a very logical decision. At the end I wanted the functionality in the first place. Although writing your own gives a different satisfaction I had one of that rare moment and think about “cost/benefit” ratio. After all I would still write my own commands and taste that satisfaction anyway. So I put things on hold and wait for the windows code to come out. Meanwhile I re-installed Enso and start playing with developer prototype. First wall I hit was the way user commands are handled. User commands and Enso communicates through RPC and firs you need to write your own RPC server. It’s not something big but that means your command is actually another application which communicates with Enso rather then embed itself in Enso and share the same process. I don’t know you but since I read few articles on OLPC I changed the way I look at the resource usage (CPU and RAM mainly), having enough CPU power does not justify the unnecessary CPU load for example. Think about, when you are shopping you pay the money based on how much they worth not how much money you have (I will not go into some branding and actual worth discussion here, but it’s the basic idea at least). I already have problems with Enso using some extra memory (an issue addressed before and promised to be solved hopefully). There is a Command Server implementation to ease the developing of user commands, which I tried, but still it is an extra python process which should be started manually in addition to Enso. By the way, Enso open source version promises a different way of command handling so this issue will be absolute soon. I ported one of my own commands to Enso, the one I use to write accent characters (from Turkish and Romanian) without switching to keyboard language or using insert symbol menu. It was pretty straightforward but I ran into few problems. It was mainly how Enso handles the commands (they are all lower case) and how the command server was propagating Enso calls to user commands (dropping command name argument from execute function for example). Nothing too major but like a piece of stone in your shoe… I guess I am trying write down all my excuses to re-start my pet project. So I can keep it short as well.
Yes, then I decided that writing my own was a nice learning environment and if I had to loose time on such issues anyway, I could waste that time for my own code. So I started back. Of course after playing with Enso, first thing I wanted to make was changing the GUI. I used wxPython for the first version but GUI itself was quite small (a frame, application icon, one text editor and one list box in total) and wxPython was the major contributer to the memory usage (over 14MB out of 20). I spent quite a time looking for a light wight alternative. I also checked the Enso’s code to get an idea. And somewhere I woke up… I was wasting quite a time which does not really change the functionality. OK, it would give some memory back but memory was not the main concern at this stage, it was the functionality. Although I still say you need to justify the resource usage, being a single developer, you also need to make up your priorities. So I decided to use a single HTML window to display the user entered text. I will not hide the fact that colors are inspired from Enso, another issue that I decided to postpone. This tiny little decision greatly affected rest of the process in few ways:
- Limited development resource (me) can be used for more important stuff
- Application got a more professional look and it boost the motivation (sort of turbo mode for coding)
- Look on my wife’s face changed so I didn’t feel like I had to give excuses why I am wasting my time on this stupid looking text editor and list box
With this quick gain, I decided to do few more changes and ended up almost redesigning all on the fly. I had few more places where I thought application should support but I never actually needed. For example it supported states for commands. When it is activated all commands are listed, but then when user makes a selection and confirms (using tab to commit the selected command) command can provide a list of arguments if it has any. User can give an argument, use tab and go to next state still in the same command. This way a command can provide several options for each argument level. Handy if you need to provide several arguments for the command. But it created usability problems and managing the states were problematic. Also when I start using the application I noticed that for this application trying to provide multiple arguments was not really a good idea. If your command needs more than one argument, then better to go for a GUI solution (IMHO). So I cleaned up all this generalization form the code. Code size reduced remarkably and it was a lot easier to maintain. Also writing user provided commands become easier.
I decided to keep working on this tool and use it as a glue application for my quest on software development process. There’s plenty of things to do and learn with this tiny application. And now it’s fun to use and develop even better.
I didn’t put a link to my pet project yet because first installation process is still not pain free, second I don’t have a good name for it yet, Enso is already taken
And no before/after screen shot yet since I just noticed when application is activated print screen does not work, I minor issue to fix. Later.
Posted in on software | Leave a Comment »
Few days ago I had one of my coding week-ends. They are getting rare and rare so I make a big deal out of it. I was back to my pet project, reshaping and adding some make up. I am hoping to write some about it soon. Good thing with having pet projects, you don’t have to play by the rules. You can start with changing a tiny GUI element and end up re-writing all. That’s what happened more or less. Before I started feeling dizzy and shaking I managed to come to the point where everything started working again (sounds familiar?).
Along the journey I came where python meets automation objects. I thought it would be cool if I add few touches to Visual Studio which I use daily for development. Although it is not as popular as Microsoft Word, few attempts in google returns pretty reliable results. You can retrieve an automation object to talk with Visual Studio from your script. The problem is I often run multiple instances of Visual Studio jumping from one another it for anything useful I should be able to create an automation object for a specific Visual Studio instance. Unlikely, Visual Studio is a bit different than Microsoft Word. In Word you actually have a single instance with multiple documents, so accessing a specific application instance is not your concern. Long story short, I spent quite a lot of time trying to figure out how to access a specific application instance, for example the one which has the focus at the moment. I tried both google and google code search (which is one of my favorite while working with python) with all alternative queries that I could think of.
Did you know that google search might become addicted? With each query you come close to the answer than it falls away from you again. Finally when I was going old school (asking real human beings around) one of the queries returned something. Unfortunately I was so happy I forgot to record the lucky query. Below is the piece of code that made its way to my application. It traverses a list of running objects checking their name to find the visual studio instances. If a list of candidate process IDs are given, it tries to eliminate the running instances by the process ID. Display name of the running instance contains the application class together with process ID. Using python windows extensions you can get the window handle for the active window and check for the process ID for the found window handle (this function returns a list of process IDs).
Let’s see if this one will end up in somebody’s lucky query…
pids = win32process.GetWindowThreadProcessId(hwnd)
ctx = pythoncom.CreateBindCtx()
rot = pythoncom.GetRunningObjectTable()
for mk in rot:
name = mk.GetDisplayName(ctx, None)
if name.find('VisualStudio.DTE') < 0:
continue
pos = name.rfind(':')
if pos < 0:
continue
name = name[pos + 1:]
val = int(name)
if val in pids:
obj = rot.GetObject(mk)
interface = obj.QueryInterface (pythoncom.IID_IDispatch)
dte = com.client.Dispatch (interface)
break
Posted in on software | Leave a Comment »