Tuesday, October 30, 2007

We've been...laid off :-)

So, it finally came to us - today we were officially laid off from company we've worked for two years.

It wasn't a surprise for us. To be honest we've expected this and we were prepared but of course it brought sad emotions. We expected this the previous time when company was cutting itself. That time we were left alone. This time (second and not the last time lay offs are done here) we were almost sure we would not be left in company. And we were right ;-)

To be honest I think we are all glad it's over. Am I right?

Now it's time for us to search for new opportunities. The best option for us would be to stay together and we're trying hard to achieve this.

That's why we've decided to publish our team profile here (just in case you want to find a great team of developers in Poland send me an e-mail 11110000b (at) gmail (dot) com :-)

So here it is, unfortunately it's not possible to attach PDF to blog entry so here's our profile included:

Team History
The team was formed in the fall of 2005, as a software engineering task-force dedicated to writing software for the Intel IT's Engineering Computing (EC) organization. Team was designed to be a center of competence for software development activities - all team members had strong background in software development supported by master degrees in computer science; together the team presented many years of experience in software engineering in various domains.

Team was assigned with many different projects related to Intel's IT infrastructure - most of them were innovative initiatives that were supposed to improve state of the overall environment by applying cutting-edge solutions (e.g. SOA, CMDB). In the summer of 2006 the team was selected to be responsible for creating and delivering SOA middleware infrastructure ready for use by other IT software projects driving environment toward better integration, greater robustness and service orientation.

Also, the team has been selected to maintain one of the most important part of Intel IT infrastructure - a system used for asset management for a global IT group (maintaining hundreds thousands of computer systems). The system had been deployed in production for a long time before it was handed to us. The team's initial goal was to keep it running, fix all important issues. When the team got familiar with the system and overall process related to asset management in Intel IT, it was possible to suggest many improvements. This effort was recognized and the team started refactoring existing solution (in a manner transparent from users' perspective) and creating new mechanisms that could improve asset management-related business processes.

Team Technical Proficiencies
Our technical skill set includes (but is not limited to) the following technologies, methodologies, development tools, and frameworks:
• Java (SE & EE) and especially:
• JMS
• JSP/Java Servlet
• Spring Framework
• Hibernate
• hundreds of open source tools
• .NET:
• C#
• ASP.NET
• C and C++ (gcc, Microsoft Visual C++, C++ Builder, STL, Boost)
• Scripting languages: Perl, PHP, Python, JavaScript, ActionScript
• SOA middleware and standards
• TIBCO EMS, WebSphere MQ, ActiveMQ
• Web Services (XFire, WSE, WCF, WS-*)
• Java Spaces
• Kerberos and X.509, JAAS, GSS, Active Directory integration
• Legacy technologies: OpenRoad, CORBA, Motif, Delphi, DOS
• Apache and Tomcat
• Databases
• MS SQL
• Oracle
• PostgreSQL
• MySQL
• Development tools (including administration)
• TWiki, MediaWiki, Confluence
• Subversion, CVS, ClearCase
• JIRA, Trac, Bugzilla, ClearQuest
• JUnit and NUnit, Maven 1 and 2, Ant, GNU Make, Continuum, Cobertura
• Eclipse, Microsoft Visual .NET, NetBeans
• Enterprise Architect for UML modelling
• Agile software development: XP, SCRUM, thin RUP
• Linux and Windows drivers development
• Embedded systems development
• Telecommunication and networking systems expertise
• Wireless networking expertise
• Linux system, Windows system and network administration


Development Methodology and Tools
As a newly formed organization with people having different background and experience, the team initially had no formally defined development process and fixed set of tools. Quickly the team evolved from waterfall process (standard in organizational unit and used by majority of tools) into fully agile process basing on short iterations, delivering incrementally working product and as close cooperation with customers as possible. The team now uses XP development practices governed by SCRUM project management process. The team actions are driven by the following values: honesty, transparency, expected business value and challenging the status-quo.

The current set of tools and practices which supports our agile development style includes:
• JUnit and NUnit (including mock frameworks) for full Test Driven Development (both unit and integration tests)
• Subversion for source code and document repository
• JIRA for issue tracking, product backlog management and high level tracking (augmented by old-fashioned but the most productive white and cork boards full of various diagram drawings and sticky notes :))
• TWiki for online collaboration inside and MediaWiki for public relationships
• Continuum for continuous integration and basic automatic quality assurance (test coverage, coding style checking)
• Maven 2 (with a lot of plugins) for fully automated project builds, tests, QA and releases
• Eclipse with many plugins (Spring, Hibernate, WTP, etc.), as an IDE of choice for Java development and Microsoft Visual Studio .NET for .NET development
• pair programming for constant code review, knowledge sharing and shared code ownership
• direct communication with customers to clarify and create real customer requirements/needs

Very high level of automation and robustness on the one hand, but lightness and simplicity on the other hand, let the team quickly achieve very high level of efficiency, software quality and satisfaction. It also resulted in promoting agile techniques and advanced tool-set in other teams from various peer organizations.
The team could quickly achieve such level of consistency and automation also thank to its Unix, Windows and DB administration skills - most of the development systems is supported by the team members themselves. The software development environment created is unique in the organization and is the most advanced in our surroundings. It also greatly matches organization's actions to achieve CMMI level 2 and 3 adoption.

These development techniques are supported and governed by a set of agile project management techniques including:
• short iterations (max. 4 weeks) finishing with demonstration session carried out to project stakeholders
• story-based requirements management - expecting requirements changes instead of blocking them
• planning poker for story estimation
• velocity-driven progress tracking on release level and hour burndown tracking on iteration level

The team members also try (as much as the company policies allows) to participate in various software development communities (providing bug reports, suggestions, patches, active participating in on-line forums, blogging) and major events (like JavaOne, TheServerSide and TechEd conferences).

Team Strengths
On top of technical expertise, the team has a few strengths that may provide competitive advantage over similar teams:
• team is located in Europe, with direct flights to UK, Ireland, Germany, Denmark and Norway, mostly using low fare airlines - which means that communication with customers can be the most efficient,
• team operates in GMT+1 time zone which makes it ideal partner for whole Europe, Middle East and convenient enough for both Americas
• team has a lot of experience with working in international, multicultural environment, using both telecommunication tools and physical travel,
• all team members are able to communicate fluently in English, both spoken and written,
• team is proficient in using agile software development methods, which allows quick delivery of high quality products,
• team members posses domain knowledge in multiple fields including embedded programming, airline, telecommunication and finance business, business to business communication and IT operations.

The Bond
The real team is more than a couple of people meeting for several hours at work every day. After 2 years the team became the team in many areas - sharing many hobbies, spending free time together, participating in various events, traveling. The team members know and understand each other very well (strong and weaker sides), respect and may count on each other. 26, 30 or 38 years old - it does not matter. We are the team.

Friday, October 26, 2007

Is the next Internet bubble coming?

Yesterday, Microsoft finally managed to buy 1.6% stake in FaceBook

That would nothing unusual as giants like Redmond one must invest, buy, takeover and often “cannibalize” smaller companies one after the other to survive.

But what struck me this time was incredible amount of money paid for this share: $240 million. This means that Microsoft values the whole company close to $15 billion. But FaceBook does not even have $200 million in annual revenue… And their income is estimated at ca. $30 million.

What does it mean: industry is ready again to value Internet companies more than 450 times more than their annual income.

Comparing to “old” companies like Intel which has their market valuation only about 20 times more than their annual income, it shocks me. Yes, I know that it’s about the future and betting on a good horse, but I am still surprised how much naive faith and trust in the future wellness of some companies exist in our world.

I am not sure if this time Internet market will accommodate such huge expectations of investors, or just are we going to face yet another dot-com bubble burst.

Wojtek

Thursday, October 25, 2007

Public Service Announcement

When sitting in a restaurant with your potential employer, never ever spill beer on them

Thursday, October 18, 2007

Cron sucks (probably. Or I am too stupid to tame it)

Dear Internets,

My wife has this laptop (with Windows XP on it), on which she stores photos among other stuff. Some time ago she has asked me to back these photos up to some other machine, so that when her disk craps up (which it has already done twice), the photos will not be lost. So I exported the directory with the photos using SMB and created a little perl script (it can also be a regular shell script, it does not matter) to rsync the contents to a linux box (some sort of Fedora, which used to be current some 2 years ago or so), like so:

$SRC="//192.168.1.4/obrazki";
$DST="/mnt/laptop-obrazki";
$BCKP="/home/samba";

system("mount.cifs $SRC $DST --verbose -o user=root,password=,iocharset=utf8") == 0 or die "can't mount $SRC";
system("rsync -vur --delete $DST $BCKP") == 0 or die "can't rsync";
system("umount $DST") == 0 or die "can't umount";

Note that I mount and unmount the directory only for the duration of the backup, because the laptop is not always connected to the LAN, so it cannot be a permanent mount.

Now, when I run the above script manually, everything runs fine. However, when I want cron to run it, like so:

0 5 * * * /root/scripts/backup.pl 2>&1 > /root/scripts/backup.log

then the script fails. Specifically, I the script is unable to mount the SMB share. It fails with "unknown error" (extremely helpful, thatkyouverymuch). Can somebody explain to me WTF is wrong with cron here? Am I failing at passing it some magic incantations? Env. variables missing? What? Does this linux box simply hate me?

Before you ask: yes, I have tried to google around, but nobody in the world seems to have a similar problem. Otherwise google would know, right?

Friday, October 5, 2007

Excessive integration is evil.

Modern IT world (especially big enterprises) strives to integrate everything with everything. Just take a look on how Microsoft software operates: MS Project integrated with Sharepoint which is integrated with MS SQL, which both are integrated with IIS, which is integrated with Windows OS, everything is integrated with Active Directory, integrated with BizTalk, orchestration, blah, blah, blah…
My recent thoughts as a humble developer are quite the contrary: integration of the system by creation dependencies unleashes the hell. This is especially visible in Microsoft world.
Just give me an example:

Not long ago I was fighting with .NET web application. I wanted to create decent development environment on my Win XP machine which would mimic production one.

First obstacle: language settings (localization).
On my machine IIS rendered all dates retrieved from MS SQL db using Polish locale (although I have English Windows XP), while I had to have English one (some stupid parsers couldn’t handle anything else than English). I googled heavily to find that there were various often contradictory pieces of advice, some claiming that you have to change collation or language settings in MS SQL itself, other recommending tweaking IIS settings (these ones included magical extraction of passwords for IWAM and IUSR system accounts, several reboots, etc.) and finally I found the solution – you have to set English language for non-Unicode programs and apply it also to default user profile (Control Panel -> Regional and Language Options -> Advanced tabs) and reboot the machine of course. So after a few hours I finally had my IIS working in English with SQL.

Second obstacle: indexing services.
Then it turned out that sometimes aspx pages (even though I had not touched them) did not compile – I got mysterious assembly access denied exception. Another session of googling: this time I found the root cause quite fast – it’s Windows indexing services which cause the problem (they fully lock files for 5 minutes and during this time IIS cannot compile them). Solution: switch off indexing service…

Third obstacle: single web app in IIS
Then it turned out that I need to have several concurrent web applications running under single IIS (normal with Apache or Tomcat). To my big disappointment, the answer found was ”you cannot have it under normal Windows XP". This is Microsoft strategy…?!? Developers are forced to use Windows Server editions to achieve it. Why? Probably politics. My colleague googled again and found some tool which somewhat hacks this constraint – it switches web application under one IIS on your request. Still better than having only one.

Fourth obstacle: .NET 1.x and 2.x bite each other
Then it turned out that I need to install .NET 2.x. Afterwards my ASP.NET 1.1 installation stopped working. I had to reinstall .NET 1.1 and apply special fix (AFAIR it was dotnetfx.exe with special parameters - http://support.microsoft.com/kb/306160)

Fifth obstacle: my SQL Server Management Studio Express ceased to execute any SQL queries
I thought that I finally did it. I was almost right. After a few days of work in my beautiful development environment, after applying some system patch, suddenly my SQL Server Management Studio Express (part of MS SQL 2005 Express package) stopped working. I cannot anymore execute any SQL statement (New Query opens Encoding window and afterwards all commands to execute the query disappear or are grayed out…). This time I could not find any solution in the net…

I wonder why using open source tools and open technologies (Linux, Apache, PostgreSQL, Tomcat, Java, etc.) I have never encountered such problems, nor have I wasted so much time on such things. I could have any number of Apache instances, any configuration of DB regardless of my user settings, any number of concurrent web applications, JRE versions, etc.). Maybe just because those tools do not enforce any integration on you – they are just capable of being integrated and leave you the decision: whether and how. And as they come from various vendors or organizations they can coexist peacefully.

What's the moral of it?
Do not create systems which depend on too much things. Integration is good, but it must be:
- optional (not enforced)
- based on well defined (the best open) interfaces
- reasonable :)

End of story.

Wojtek

Thursday, October 4, 2007

Microsoft open sourcing the .NET?

I have received a link to an article about Microsoft releasing the source of .NET libraries in read only mode.

Finally we would be able to debug .NET application in the way we are accustomed to with Java - with source code of the framework.

Are IT certificates worth anything?

I only can write something about Sun Java-related certificates because I'm happy owner of three of them (SCJP, SCJD and SCWCD - and preparing for SCEA). Do professional and experienced developers need such papers? Aren't they useless and worthless?

Many people don't believe in certificates. They claim that they do not give any value and are only PAPER. The only (is it really only?) thing they can help you is to find better job. They also claim that certificates' value is just bringing satisfaction to their owners - satisfaction that you passed difficult and worthless exam.

I absolutely don't agree with such opinions. First of all because developers tend to take their knowledge for granted. We think that our job is easy because it's easy for us. We forget that some of us worked for current knowledge state since early childhood (I started coding when I was 10 ;).

Certificates are almost as important as our university diplomas. I would risk saying that they are even more important because they prove that we do something with our knowledge after leaving university. But the most important factor that should convince everybody to try and take some exams is that they are really valuable (maybe except for SCJP). I learned a lot of useful stuff during preparation for my exams. And what is even more important I can easily apply what I learned in my daily job.

And YES, they help you very very much if you want to change your job!

If you can learn something useful that can help your daily job, if you want to have some fun and become more competent and competitive developer, why not give it a try? I highly recommend every developer who can spare some time to take Sun Java certificates - they are very useful and worth your effort!

Wednesday, October 3, 2007

Google interview process and why it sucks

No, it does not suck because I have a grudge from the fact that I have interviewed for them in the past and they didn't hire me. Well, it did piss me off at the time, but I got over it :).

A bit of an explanation for the uninitiated: when you interviewed for Google, they ask you upfront to spend a week or so preparing mentally, because they will be testing you in many fancy and unpleasant ways. The interviews themselves tend to test your knowledge of minute details of technical aspects of the job you will be doing. Like when you interview to be a software developer, they will test if you know how the balanced binary tree is supposed to get balanced. Ideally providing the full algorithm off the top of your head. Or answer what is the meaning of the third bit of the fourth octet of the ICMP packet, if you interview to be a network support guy.

Sort of like an exam session at my university, for which I was advised to study for something like 3 weeks to get a decent grade and usually ended up studying like crazy the last 2 days before the deadline and getting the minimum passing score. Well, I sort of had a life, and I have decided that memorizing all sorts of encyclopedic knowledge that can be easily found in a book was not the best use of my time.

And you know what? Now, after some 15 years of a more or less successful career in the field of software development, I have to tell that whatever I was supposed to learn for the exams turned out to be a pretty much useless knowledge. For a very simple reason - it is much faster to look up all necessary info in a book, or google it up, then to keep it all in the long term memory in my brain. What turned out to actually be necessary was something different, which the university did not teach me at all - I just turned out to be decent at it. What helped me most was the ability to learn fast, adapt fast, interact with people, have courage to challenge the status quo.

Same thing with Google - in my opinion, the people that are naturally able to pass these kinds of trick tests, tend towards being somewhat of an autistic nature. Or, to use the words of a coworker - they are usually total "nolifes". The ones that have a life (and a 3 year old daughter demanding that "Franklin and the treasure of the lake" is read to them daily) cannot be arsed to learn how the DNS zone transfer works if it has not been of direct importance to their day jobs in the last 6 months or so. But they can learn this stuff in like half a day by reading a relevant RFC if need arises, so don't worry Mr WhatsYourName from the Google EU HQ in Dublin, I would be able to supervise those DNS servers for you if you could recognize my true and undisputed talents.

Oh, and I have already bought one of these BuddaBags that you let your people relax on, so your superior working conditions no longer appeal to me. And don't get me started on evacuating the office because of an escaped snake :)