Thursday, December 1, 2011

Quick and dirty test data generation


I am a noob with postgres and linux, if you are an expert why are you reading this? So I just had to generate a large ammount (>1) of rows to test against. This is a step by step dirty way to get from SELECT to INSERT (I know you can do it with sql smart ass but can you do it in under 2 minutes?)

1) Get the table with some random row of data
psql -d <my-db> -c "SELECT * FROM <table> where id = <id>" > raw_sql
gedit raw_sql&
(GEDIT? I hear you scream. NOOB! I scream back.)

2) Format the raw_sql. Depends on the data your millage will vary.
Find and replace whitespace with nothing.
Find and replace || with | null |
Find and replace || with |
Find and replace | with ,
Save as <file>.csv

3) Delete the null stuff.
Open a spreadsheet and import the csv.
Select all columns with null and delete them.
(Basically the spreadsheet allows values and attribute names to be aligned and easily deleted.)
Export to csv.

4) Create the Insert
Open the new csv file (using gedit)
Add at the top psql -d <my-db> -c "INSERT INTO <table>
Then surround the attribute list with parens
Then add below that VALUES.
Then surround the values with parens and add a final " at the end.

5) Multiply
Copy and paste as many times as necessary and change the values that you want to differ manually.
Save as <something>.sh

And run ./<something>.sh

Till next time,
Stratos out.

Friday, October 7, 2011

Good bye Steve








So many have spoken about Jobs. It doesn't matter what I say, but I have to say it.

Steve was a usability wizard and every computer person should be striving to achieve what he did.
Steve made PCs usable by everybody.
Steve helped save the music industry.
Steve brought the smartphone to the non-geek, non-business world

Steve created the mobile computing market.
In one broad stroke Steve innovated preexisting industries and became the standard overnight.


Thank you Steve. You will be missed.

Monday, September 5, 2011

Long time no C

And then it was vacation time and then vacation time was over...

Teachers and students are in back to school mode and so am I, so this is a post about going back to school work.

Updates:

My app is coming along nicely, didn't get a lot of play time with the Xperia mini from the Sony-Ericsson loaner program but found two bugs that need fixing. Still loads of bugs remain, a help function doesn't exist yet and a couple of cosmetic updates for the app to be "ready-ready," then another month for "ready-ready-ready" you see where that one is heading, right? Last week I did a soft come back which was cut short cause I had to go to a job interview on Friday.

Job hunt is now on, I still haven't heard back from two folks that said they would meet with me over coffee to talk employment. I guess people are busy/away for labor day or they give the cold shoulder here by putting your address in their spam filter.

In an effort to become a better programmer I am reading Effective Java, solving Project Euler problems in Python and listening to the Java Posse during my walks. I am also planning to attend a web developer seminar and the largest AI class ever made.

It feels like the years I spent checking registers should have been spent sending JSON objects, doing CSS transforms and designing thread safe hash maps. It's never too late though loads of programmers are productive in their 30s... they take us out back and shoot us after 45 right?


Till next time,
Stratos out.

Saturday, July 30, 2011

We are anonymous! Or not?

Following Google's decision to use real names for g+ I saw the real name and anonymity debate spark up. Real name people argued that you are a coward for not using your own name while anonymity folks gently ignored them and created Biggus Dickus the third on g+.

To me the anti-anonymity crowd are either naive or evil. Evil because ultimately they want us using our own names so that the secret police and telemarketers can get to us faster. Naive because they do not realize that we all live in a totalitarian regime. Sure the secret Mountie police wont knock on my door for posting "Cartman like" jokes on my facebook to my army buddies but the Nazi judgmental recruiter who looks at my web presence evaluating me for a job might not appreciate the humor of Biggus Dickus the third. (Not only that, now I called her a Nazi. This will be an interesting interview.)

You see it is not that we are paranoid it is that we cannot be sure that every potential client, employer, CIA agent out there can appreciate irony. But this is not about dick jokes, rest assured. It is also that my loud Pastafarianism may really agitate my ultra-religious relatives, my call to arms to protest the G8 doesn't go well with my firm's CEO, my militant Islamism may land me in some cell somewhere away from toilet paper and lawyers. Anonymity protects forum trolls and flamers as much as it protects unpopular ideas and fosters revolutions.

Instead of fighting privacy I expect Google to understand the need for my SpiderMan33 persona and my Stratouklos nickname and Stratos and Mr Xakoustos they are all me, in different contexts. SpiderMan33 may admit that he spent half the day reading comics, Stratouklos shares dick jokes, Stratos posted some nice photos and Mr Xakoustos was working on a project. They all happen, they are all different and I do not need my comic buddies/mates/strangers/boss to know of each other's existence. Oh and while you are at it, Google please make my avatar change depending on who I post to so I don't have to juggle four Google accounts. Thanks!

Sincerely,

DickMan41 aka Helen from accounting.

Till next time,
Stratos out.

Monday, July 18, 2011

Fractals and design

So my first releasable app is already a month over my initial estimation. The Android learning curve is taking twists and turns, I am graphically challenged so it takes me longer to design a good icon, blah, blah, blah. Everything mentioned is true but what is interesting is that when it comes to design the challenges that need to be solved behave like fractals.


Or in other words in software design and in lesser extent electronics most problem domains are fractals. Design generally deals with fractals, for instance, to build a single engine one must build hundreds of components, that are built off hundreds of cogs and pieces, that have to have dozens of unique features. And once the engine is built it needs to go into a car/boat/plane composed of thousands of parts that they themselves represent millions of smaller problems each visible only once a designer focuses into the problem area.

Because of the fractal nature of the problem domains and the lack of serious standardization in design principles. software design is notorious for it's cost overruns, widening scope and date slips. In software a huge ten day design effort problem can be hiding behind every aspect of the project. A feature might be impossible to test without setting a ridiculous number of data by hand, a function takes too long to complete and concurrency at that stage requires redesign and so many more that volumes of books are not enough to list them all. Due to the number of unknown factors involved one could say that the model of solving a software engineering problem is chaotic and as such very difficult to correctly predict and estimate.

As software engineers we try to use our tools to accurately model and predict our future but when we actually look at our methods we generally look at the sky, lick our fingers and say hmm... it'll be OK. Only to find ourselves in a thunderstorm of epic proportions a week later. Unfortunately because business and money are also involved very often someone warns us of the coming storm but in an effort to keep our bosses, clients and investors happy we tape his/her mouth SHUT and throw them in the basement. Cause if you hope it will work out, it works out right? Ask any of sailors down at the bottom of the sea.

New methods are being developed all the time but rest assured that every tool in the world can be manipulated to predict good times when contracts full of money are at stake. I mean ask any construction company, they'll tell you: "Don't look at the sandy land we are developing on, look at the nice drawings instead and please give us money." Trust us, we won't go over budget before you are way too committed to pull out. And the world keeps on turning.

Till next time,
Stratos out.

Friday, July 15, 2011

Vertically integrated design in a 2.0 world

This is mostly inspired by the troubles faced by RIM and other companies.

Vertical integration in design used to be a good idea. The same company is in control of the architecture, the hardware, the software, the brand, the marketing, everything. Electronics produced this way rely on standardized interfaces to communicate with the outside world, everything is well contained and you as a company you control your products and subsequently your brand tightly.

It was such a good idea in the 70s and 80s but from the 90s onward the world started to accelerate. Design by comity and over-protectiveness slowed down innovation and created bottlenecks. To fight these, companies discovered outsourcing to speed up the mundane parts of design which at least allowed for features to have a quicker time to market. But the outsourcing solution is not enough in the 21st century world, time to market of 1-2 years is unacceptable in most industries if not all of them.

Mega projects are feeling the strain of trying to catch up with newer, leaner, more distributed designs and these growing pains seem to me to be the driving force behind agile methodology adoption by large corporations. If you have read some of the agile books out there the introductions sound like pitches aimed at alleviating the major problems faced by industrial mega projects. Elimination of bottlenecks via feature teams, knowledge transfer via team interactions, better control via transparency, etc, etc.

But agile has had mixed results. Change itself causes some initial slowdown in production or the fear of a slowdown. Management and employees don't easily embrace changes that undermine their job security which is a natural byproduct of some agile methods. Not to mention that often the wrong methodology is applied to the wrong project due to a silver bullet mentality.

And then came crowd-sourcing and the shit really hit the fan! The most affected industry of all is the mobile phone industry. The smartphone wars that have ensued are a testament of the changes going on in the world of electronics and software. Six companies are in the ring, one so far behind it is irrelevant, yes that's you HP, sorry. One already accepted defeat and hopes to band with competitors to survive, nice call Nokia. Microsoft, after having their crappy windows used to wipe the floor with, comes back with WP7 but is it too late? RIM is faced with mounting pressure to do something, market Blackberries to toddlers maybe? And the two kings of the ring right now, Apple and Google. Well Apple was the king to be precise before Google and their Android army started kicking their butt. But Apple, RIM, M$ and co have banded together in a last ditch effort to stop the green menace.

In the battle of Android vs everybody else it seems that Android cannot survive the constant barrage of patent trolling, leveraging the existing power in markets outside the mobile arena (WP7 and Xbox, iOS and AirPlay, MacBooks, iPad, iLife) and challenges posed by a newer and not as mature platform. In all this mess my money are still with Android. Why is that? It is not my natural tendency to side with David against Goliath, I mean Google is close to taking over the whole universe it isn't a David. It isn't even their motto "Don't be evil" that makes me like them so much.

Google will win because vertically integrated design in the 2.0 world is doomed to sink like a monolith. iPhone5s best features are already integrated into Android (smells like counter lawsuits by Google?) or are about to be topped by C2DM functionality. Simply put the practices of industrial secrecy, design by comity, content approval processes are no longer relevant in today's fast moving world. Time to market of over a month is too much at this age. Your only hope is to make your source open, attract as many individual designers as possible, give your platform to anyone who asks for it and let them change it as they please, in one word: Android.

Till next time,
Stratos out.

Tuesday, June 21, 2011

Lack of competence

Where I used to work "lack of competence" was the scapegoat for all the shortcomings of the organization. It annoyed the hell out of me because it reminded me George Carlin's critique of the use of euphemistic language. As the great man said: "American English is packed with euphemism because Americans have trouble dealing with reality and in order to shield themselves from it they use soft language." Well it is not just an American thing or at least it is not confined in America.

It wasn't just the descriptive nature of the phrase that bugged me it was the meaning and the way it was used. Lack of competence or incompetence was not the correct word to describe the problems that plagued our teams. If anything the competence level in that place was through the roof, however experience was lacking. Experience is the most valuable and expensive asset any employee carries and should be seen and managed by organizations as such. 

Experience is the difference between testing using the scatter-shot method (100 test cases and hopefully we'll get all the bugs) and knowing what four or five test cases will find bugs by reading the project's title. Experience creates experts/gurus/rock-star programmers, reduces design time, errors, increases quality and estimation accuracy but its cost is hefty because to create experience one has to go through the process of bad design, scatter-shot testing, blind estimations and failed projects. That is why experience needs to be actively managed, encouraged and guarded and that was why everybody blamed "lack of competence."

Hey I have been failing X amount of years so I must be experienced! Right? Wrong, just because you have been designing the same flawed solutions for X years doesn't mean you are a good programmer it means that you are an efficient, fast, proficient liability who should be promoted to management ASAP so that you stop poisoning young designers. Not everybody is capable of learning from experience and not all design configurations are conductive to building experience fast.

In the personal level experience is built with humility, drive for constant improvement and the thirst of learning of all these humility is the most difficult to hold on to once some experience is accrued yet it is what separates mediocracy from greatness because to lose humility is to lose the ability to learn.

So why was experience so lacking in my old organization were we all cocksure divas? No, it was quite the opposite actually. The culprit, for me, was the environment itself: testing was slow and cumbersome deterring experimentation, the platform system was extremely complicated and difficult to grasp, the documentation was "centrally" stored in multiple hard to reach locations and what is even worse was that a lot of the additional information (tutorials, presentations, descriptions) were not available as different individuals, teams, contractors and companies either guarded their "secrets," protected their work, or plainly were too busy to share.

This would be bad enough but adding the fear factor to the equation turned what was a bad dream into a full blown nightmare for experience building. In an economy where unemployment for youngsters reached 40% veiled termination threats were weaved into every discussion concerning human error rates which created an atmosphere of dread. In this atmosphere everybody tried to minimize their risks. There was an aversion to learning new skills, copy/paste programming was encouraged and new code was mostly shunned, estimations were based on formulas, while constant code peer reviews and scatter-shot testing strategies brought code production to a halt. Not only were we producing little to no value while working our fingers to the bone but we did not learn anything from it. Mistakes were not allowed, so they were swept under the rug.

Experience building is expensive because experience loves mistakes, but in order to learn from them we must be unafraid to assume responsibility, take ownership of error, document it, analyse it without prejudice and share the results. With the dread of error looming over our heads to take responsibility for our mistakes was an act of madness. In fact it took me accepting that "one day, I will quit this job" to allow me to spread my wings, try some crazy solutions and learn each day more than I was learning in a month under the veil of fear. How ironic that all this experience/value was being added after the decision that made it a temporary gain for the organization itself. In other words, by deciding I will leave the company I became a better employee.

All these thoughts are swimming in my head as I struggle to grasp the intricacies of building an Android app. I think they came to me because my schedule is slipping constantly, I refactor and alter the app's architecture every week, I strain to learn new concepts and I question my own competence all the time. I was trying to figure it out until it struck me, I am not incompetent I am just inexperienced. But I have no fear so I'll be fine.

Till next time,
Stratos out.

Tuesday, June 14, 2011

Re-evolution

Seeing the Windows8 vid got me thinking both in terms of possibilities but also the general direction of the industry. For a long time your OS choice depended on what you wanted to do, office activity, mainstream PC usage and gaming was Windows, Apple had the more arts and crafts with some devs and Linux was hardcore computer folks who loved re-writing drivers to hook up a printer. Then Linux started being more user friendly and cooler, Apple got more and more "one click to rule them all" simplistic, windows was... well loosing market share with Vista and regaining some with Windows 7. And then iOS hit tablets and Android emerged and Blackberry OS went tablet and Windows Phone 7 looked like a flash website. With the rise of the tablet and more and more crossover between home laptop usage and smartphone/tablet PC usage one begins to wander if home computing will remain the same.

Sure, sure there will always be enthusiasts building C games on a Linux machine, web devs running a server in their basement but the average user who only recently got a laptop and figured out the intricacies of a mouse (you know the folks who buy software) are giving up their mouse and laptop for the tablet/Smartphone combo. I guess what I am trying to get to is that there is a brave new world out there a mobile computing evolution with the internet coming out to the real world and interacting with it. A world of possibility but also a world without a particular shape.

What strikes me as peculiar is that Microsoft, who is significantly behind in getting that mobile computing market share, would so bravely pick up the glove and enter the mobile arena by acknowledging it's significance via the UI design of Windows 8 which has been traditionally the flagship of their products. As the market becomes more fractured and monopolies fall MS being brave is not only fresh but also risky business. Heaven forbid if the mobile OSes start invading home computer systems and high school students copy/paste from wikipedia using their docked smartphone what market will remain of traditional windows apps? What is it exactly that we do at home for entertainment that a tablet cannot accommodate? And why stop there, what exactly is a manager doing at work that a docked Blackberry cannot replace his computer? Do we even need DSL/wire-line phones and cable TV in a 4G world? Is TV even relevant in a streaming/torrent world?

The world's changing around us and Microsoft is jumping in the deep end, it will probably work out for them in the end and Google will either beat Oracle or work around it's lawsuits maybe there is even room for Playbooks and whatever tablet will carry Windows 8. But what is truly amazing is the world of possibilities that this new round of electronic evolution will bring good time to be alive and even better time to understand what a compiler is.

Till next time,
Stratos out.

Friday, June 3, 2011

European vs American

I recently moved to Toronto, Canada so I've had the chance to experience a small part of the North American (NA) way of life.

The most striking difference between the NA way and Europe's (EU) style, besides the unapologetic consumerism, is the spirit of do it yourself vs who are you to do it yourself. In EU to change the world via technology you need to get a degree from a university, get a master's, work as a lowly worker for X years in a large company to slowly get up the ranks and by the time anyone is willing to listen to your vision, your vision is no longer fresh and relevant. In NA you work as a coder for a couple of years, get a following in the social media of your choice and startup! The web world moves way too fast for old executives, here the difference between graduate and "acquired by Google" is a good idea and hard work. Here you CAN DO whereas in EU you can only hope to one day, maybe, change a line of text in an outdated webpage.

Things are not 100% rosy, sure. If your idea and/or execution sucks or maybe even if it doesn't but a competitor does it better than you, you become jobless, homeless, maybe even hopeless so fast your head will spin. Things moving fast means you get where you want faster or crash and burn. 35 is old, 40 is too old and 50 is dinosaur old. The startup scene is also filled with pretenders, 20 year old "social media experts," lawyers, smooth talkers and other leaches feasting upon the fresh fruit of Web 2.0 but being critical in who you hire can as always help. Did I mention you need a lawyer? Oh yeah a GOOD one!

Life's good here. It is not California for sure but a talented innovator can do real good. With Microsoft jumping on the app bandwagon with Windows 8, every player and their cat releasing a tablet and the Web 2.0 now requiring mobile apps coders will be in business for a VERY long time. Now excuse me I have to go read up on HTML5.

Till next time,
Stratos out.

Sunday, May 1, 2011

HTML color names in Android xml format

I am always too bored to switch back and forth to declare new colors, look them up in hex format or whatever so I copy/pasted, found and replaced and cooked up this little file:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="Black">#000000</color>
    <color name="Navy">#000080</color>
    <color name="DarkBlue">#00008B</color>
    <color name="MediumBlue">#0000CD</color>
    <color name="Blue">#0000FF</color>
    <color name="DarkGreen">#006400</color>
    <color name="Green">#008000</color>
    <color name="Teal">#008080</color>
    <color name="DarkCyan">#008B8B</color>
    <color name="DeepSkyBlue">#00BFFF</color>
    <color name="DarkTurquoise">#00CED1</color>
    <color name="MediumSpringGreen">#00FA9A</color>
    <color name="Lime">#00FF00</color>
    <color name="SpringGreen">#00FF7F</color>
    <color name="Aqua">#00FFFF</color>
    <color name="Cyan">#00FFFF</color>
    <color name="MidnightBlue">#191970</color>
    <color name="DodgerBlue">#1E90FF</color>
    <color name="ForestGreen">#228B22</color>
    <color name="SeaGreen">#2E8B57</color>
    <color name="DarkSlateGray">#2F4F4F</color>
    <color name="DarkSlateGrey">#2F4F4F</color>
    <color name="LimeGreen">#32CD32</color>
    <color name="MediumSeaGreen">#3CB371</color>
    <color name="Turquoise">#40E0D0</color>
    <color name="RoyalBlue">#4169E1</color>
    <color name="SteelBlue">#4682B4</color>
    <color name="DarkSlateBlue">#483D8B</color>
    <color name="MediumTurquoise">#48D1CC</color>
    <color name="Indigo">#4B0082</color>
    <color name="DarkOliveGreen">#556B2F</color>
    <color name="CadetBlue">#5F9EA0</color>
    <color name="CornflowerBlue">#6495ED</color>
    <color name="MediumAquaMarine">#66CDAA</color>
    <color name="DimGray">#696969</color>
    <color name="DimGrey">#696969</color>
    <color name="SlateBlue">#6A5ACD</color>
    <color name="OliveDrab">#6B8E23</color>
    <color name="SlateGray">#708090</color>
    <color name="SlateGrey">#708090</color>
    <color name="LightSlateGray">#778899</color>
    <color name="LightSlateGrey">#778899</color>
    <color name="MediumSlateBlue">#7B68EE</color>
    <color name="LawnGreen">#7CFC00</color>
    <color name="Chartreuse">#7FFF00</color>
    <color name="Aquamarine">#7FFFD4</color>
    <color name="Maroon">#800000</color>
    <color name="Purple">#800080</color>
    <color name="Olive">#808000</color>
    <color name="Gray">#808080</color>
    <color name="Grey">#808080</color>
    <color name="SkyBlue">#87CEEB</color>
    <color name="LightSkyBlue">#87CEFA</color>
    <color name="BlueViolet">#8A2BE2</color>
    <color name="DarkRed">#8B0000</color>
    <color name="DarkMagenta">#8B008B</color>
    <color name="SaddleBrown">#8B4513</color>
    <color name="DarkSeaGreen">#8FBC8F</color>
    <color name="LightGreen">#90EE90</color>
    <color name="MediumPurple">#9370D8</color>
    <color name="DarkViolet">#9400D3</color>
    <color name="PaleGreen">#98FB98</color>
    <color name="DarkOrchid">#9932CC</color>
    <color name="YellowGreen">#9ACD32</color>
    <color name="Sienna">#A0522D</color>
    <color name="Brown">#A52A2A</color>
    <color name="DarkGray">#A9A9A9</color>
    <color name="DarkGrey">#A9A9A9</color>
    <color name="LightBlue">#ADD8E6</color>
    <color name="GreenYellow">#ADFF2F</color>
    <color name="PaleTurquoise">#AFEEEE</color>
    <color name="LightSteelBlue">#B0C4DE</color>
    <color name="PowderBlue">#B0E0E6</color>
    <color name="FireBrick">#B22222</color>
    <color name="DarkGoldenRod">#B8860B</color>
    <color name="MediumOrchid">#BA55D3</color>
    <color name="RosyBrown">#BC8F8F</color>
    <color name="DarkKhaki">#BDB76B</color>
    <color name="Silver">#C0C0C0</color>
    <color name="MediumVioletRed">#C71585</color>
    <color name="IndianRed">#CD5C5C</color>
    <color name="Peru">#CD853F</color>
    <color name="Chocolate">#D2691E</color>
    <color name="Tan">#D2B48C</color>
    <color name="LightGray">#D3D3D3</color>
    <color name="LightGrey">#D3D3D3</color>
    <color name="PaleVioletRed">#D87093</color>
    <color name="Thistle">#D8BFD8</color>
    <color name="Orchid">#DA70D6</color>
    <color name="GoldenRod">#DAA520</color>
    <color name="Crimson">#DC143C</color>
    <color name="Gainsboro">#DCDCDC</color>
    <color name="Plum">#DDA0DD</color>
    <color name="BurlyWood">#DEB887</color>
    <color name="LightCyan">#E0FFFF</color>
    <color name="Lavender">#E6E6FA</color>
    <color name="DarkSalmon">#E9967A</color>
    <color name="Violet">#EE82EE</color>
    <color name="PaleGoldenRod">#EEE8AA</color>
    <color name="LightCoral">#F08080</color>
    <color name="Khaki">#F0E68C</color>
    <color name="AliceBlue">#F0F8FF</color>
    <color name="HoneyDew">#F0FFF0</color>
    <color name="Azure">#F0FFFF</color>
    <color name="SandyBrown">#F4A460</color>
    <color name="Wheat">#F5DEB3</color>
    <color name="Beige">#F5F5DC</color>
    <color name="WhiteSmoke">#F5F5F5</color>
    <color name="MintCream">#F5FFFA</color>
    <color name="GhostWhite">#F8F8FF</color>
    <color name="Salmon">#FA8072</color>
    <color name="AntiqueWhite">#FAEBD7</color>
    <color name="Linen">#FAF0E6</color>
    <color name="LightGoldenRodYellow">#FAFAD2</color>
    <color name="OldLace">#FDF5E6</color>
    <color name="Red">#FF0000</color>
    <color name="Fuchsia">#FF00FF</color>
    <color name="Magenta">#FF00FF</color>
    <color name="DeepPink">#FF1493</color>
    <color name="OrangeRed">#FF4500</color>
    <color name="Tomato">#FF6347</color>
    <color name="HotPink">#FF69B4</color>
    <color name="Coral">#FF7F50</color>
    <color name="Darkorange">#FF8C00</color>
    <color name="LightSalmon">#FFA07A</color>
    <color name="Orange">#FFA500</color>
    <color name="LightPink">#FFB6C1</color>
    <color name="Pink">#FFC0CB</color>
    <color name="Gold">#FFD700</color>
    <color name="PeachPuff">#FFDAB9</color>
    <color name="NavajoWhite">#FFDEAD</color>
    <color name="Moccasin">#FFE4B5</color>
    <color name="Bisque">#FFE4C4</color>
    <color name="MistyRose">#FFE4E1</color>
    <color name="BlanchedAlmond">#FFEBCD</color>
    <color name="PapayaWhip">#FFEFD5</color>
    <color name="LavenderBlush">#FFF0F5</color>
    <color name="SeaShell">#FFF5EE</color>
    <color name="Cornsilk">#FFF8DC</color>
    <color name="LemonChiffon">#FFFACD</color>
    <color name="FloralWhite">#FFFAF0</color>
    <color name="Snow">#FFFAFA</color>
    <color name="Yellow">#FFFF00</color>
    <color name="LightYellow">#FFFFE0</color>
    <color name="Ivory">#FFFFF0</color>
    <color name="White">#FFFFFF</color>
</resources>

Enjoy.

Thursday, April 28, 2011

Yes we Kanban!

Moving is over, easter vacations are over so now saturated with good food and beer I have finally setup the basement to my little work room. It is all very temporary and I have plenty of things that I could get but at least I have some strong lights, three whiteboards, a laptop and a sofa. There is a problem with the morning schedule though, interruptions are too frequent. Either over Skype, Gmail, phone or in person people talk to me and I talk to them and which makes working hard. I am contemplating going vampire (sleep during the day, work at night) but that could mean that my friends and family in Greece will not talk to me too often.

Lovely letters!
In other news the Personal Kanban board is up and populated and I am in the middle of writing a design document for my first professional application. In the meantime catching up with intents and activities (android thingies) may take longer than I thought but I have a whole weekend to read up on that.

Ok break over back to work.

Till next time Stratos out.

Friday, April 15, 2011

The game plan

I come from a scrum perspective and the processes of scrum have affected my thinking when developing software, but since I am going to be working alone and scrum is all about the team I think I should change my approach a bit. So here is how I attempt to avoid the major pitfalls of developing alone.

1) Structure.

Developing alone is not unlike working for a boss but in this instance the boss is you. Because we know how to lie to ourselves and manipulate our own self image it is necessary to attempt to control ourselves through structure.

Step one for me is to make a room the one and ONLY place where I will do considerable work. Set up the room with only work related objects keeping TVs and other distractions out. Yes, you can think of a problem when watching day time TV but you will not go anywhere before you get distracted.

The second step is accountability. Keep a log of all the time you are inside the work room. Decide the size of your work day and stick to it, overtime is acceptable but less than say 6-8 hours is not going to get you anywhere.

The third step is schedule make it, write it, keep it! Morning is the worst for me but the afternoon is when my girlfriend is home and I don't trust my night time decisions so morning it is.

2) Documentation.

This one is important, you have an idea for the next killer app, you close your eyes and can literally see it working, you can almost touch it. But can you describe it? Do that, start writing, follow established work flow and begin from the user description, move to high level design, down to lower level and implementation. Remember if you are alone there are definitely details you cannot think about all at once and most importantly you have no tester so while you are at it start writing test cases. Be thorough because this is the only time you are not be infected by your confirmation bias yet.

Do not begin writing code right away. You will re-write code either way but you do not want to spend a month on something to discover a bug that will force you to re-write everything. Think and most importantly write! Not everything can be set in stone but writing something creates a tangible goal to strive towards. It will keep you focused and it will enable you to deliver sooner rather than later or never.

3) Methodology.

This is still structure but it is related to the software side of things. The usual scrum rituals like daily stand up, planning poker and task board are out. Scrum in general is out and in comes Kanban.

Once your design document is ready create your backlog, estimate the work and get it all up in the board. Limit the work in progress according to what you can handle and keep your eye on the ball. It would be nice to work on the graphics now that the code kinda works but first clean it up, test it and make sure it is "Done, Done, Done." You will be swamped in no time unless you keep it lean.

Create a release schedule and stick to it, make yourself accountable tell your friends, wife, mom whoever that on this specific date you will show them the final version. Get it out there right after the demo don't keep on adding unnecessary tasks, features, optimizations. Trust in yourself and know that your first attempt will be awful but the experience you will gain is invaluable.

That is what I have so far as I start doing more work I will have more detailed information.

Till next time Stratos out.

Monday, April 11, 2011

Going cowboy

Software development is a unique endeavor there has to be a balance between "out of the box," creative thinking and realistic, grounded design the problem is how to keep the balance across all team and company sizes. A small team will focus more on getting results which can cause issues of proper documentation and even bad design; also on the creative side of things the smaller the team the fewer the chances to see things in alternative ways which means testing may suffer and solutions may be inefficient. On the other hand anyone who has experienced development in a large scale organization will testify that to control the chaos of writing code bureaucracy in the form of documentation, meetings, processes can become overwhelming and crush good ideas, spirits, productivity and in the end lead to more chaos.

Agile practices have been hailed as the messiah that will save us all from both the oppression of bureaucracy and the trap of coding madness. But the messiah asks for full obedience if not to all practices at least to the philosophy and as every messiah it is met with fierce resistance from the status quo. Going agile means more than getting a few post-it notes and a filling the timetables with rituals it means that the entire organization needs to relinquish control. The customer loses the well defined contract, the managers lose direct control over their employees, the designers are no longer in control of their own work and the one thing that gains all control is "The Team."

But I am no longer a member of a team, I have no manager, no scum master, no product owner, I don't know my customer by name. I am in the world of cowboy coding and I have very little in terms of methodology and practices. In the following weeks and months I will attempt, besides learning how to write good apps for the android platform, to lay out a method or perhaps a collection of practices that will keep me motivated, focused and productive while working alone. I will post updates, tips and lessons learned and hopefully in the end I will have a solid collection of practices to assist those who also walk this lonesome path. Queue the music I'm a cowboy, on a steel horse I ride...

Till next time Stratos out.

Hello World

Hello everybody, my name is Stratos Xakoustos. Up till very recently I was working as a software engineer in a large Telecommunications company subcontracting for an even larger Telecommunications company. For the last half year I have been dusting off my programming skills after work and lately I have delved into Android software development.

This blog will follow my journey into the world of applications design, development, debugging and deployment. My goal is by the end of the summer to have a speed of roughly two apps per month and maybe make some pocket money because being unemployed isn't cheap... By the way if anyone knows of any job opportunities feel free to drop me a line.
Wish me luck!

Till next time Stratos out.