Nostalgy. My early days as a software developer …
Posted by Valeriu Caraulean in General, Memories on April 28, 2011
Something brought up old memories from the days when I’ve been working in Embedded Systems development.
I’m third from the left…
The “big thing” in the back is a Diesel engine stripped from a big ship. Converted to an internal combustion engine working on natural gas and producing 6 Megawatts of Electrical power. Cooling/heating, turbo, oiling, ignition – those are only few subsystems of this complex.
One more picture:
My former employer, Romany Gaz Group, done all the electronics + software. It was a blast to work on. A mix of hardware, microprocessors and software, low level hacking and unforgettable feeling of true Research and Development work:
- writing in assembler for mythical Motorola 68HC11, an 8-bit microprocessor with a whopping 64 Kb of program memory and less than 1 Kb of RAM. Then come the HC12 with more memory and C compiler.
- in-house Real-Time Operational System with multi-tasking support.
- “advanced” user interfaces on 20×4 character displays and 5 button keyboards
- homebrew communication protocol spawning into few levels of OSI model
- tens of sensors and digital signals
- tens of output signals, valves, pumps
- a SCADA-like PC application for monitoring and control
And a fantastic team of talented engineers that tamed the beast. You have to hear it grumble…
Improving my writing skills
Posted by Valeriu Caraulean in General on April 27, 2011
Writing is (still) one of the important skills for anybody engaged in IT. I wrote about it more than one year ago, when I had to go over a bunch of CVs. I haven’t changed my mind since and it’s still a problem for me and a good part of non-native English speakers.
Yes, the problem is worse if English isn’t your first language. And not even the second. For me it’s fighting with French for third place. But it’s the “default” in IT industry. So, you may like it or not but in order to enjoy some interesting career opportunities you have to know how to use it properly.
One of the goals why I started this blog was to practice writing in English. It worked well. It worked so nice that now I’m thinking to start one in French. I remember writing first posts, every one took hours to write and rewrite. Now it’s much more easy, if you have something to say you just put it down. It just flows. This gave me an amazing opportunity to easily engage in discussions here and there in the Web and profit enormously from this experience.
But I still think my English is not good enough and I’ve been sad because of lack of the time to improve it.
Enter The Writer’s Handbook. God bless the (forgotten) place where I’ve spotted this site. It’s a book composed from small chapters on how to improve your Writing. The format and style (small, to the point, no clutter) makes it possible to read it whenever you have few minutes: in the morning, warming-up before going hunt that bug, enjoying a cup of tea in the evening. And that’s what I’m doing.
PS: Also, as an exercise (not only in writing) I’ve updated my CV. Any comments on design, writing style or content are welcome.
Update:
Ruslan Rusu shared in comments a link to a chapter from Getting Real by 37signals, here is a fragment:
Hire good writers
If you are trying to decide between a few people to fill a position, always hire the better writer. It doesn’t matter if that person is a designer, programmer, marketer, salesperson, or whatever, the writing skills will pay off. Effective, concise writing and editing leads to effective, concise code, design, emails, instant messages, and more.
That’s because being a good writer is about more than words. Good writers know how to communicate. They make things easy to understand. They can put themselves in someone else’s shoes. They know what to omit. They think clearly. And those are the qualities you need.
MIX11 day two, Windows Phone 7 announcements
Posted by Valeriu Caraulean in General, Uncategorized, wp7 on April 13, 2011
I’ve bee watching Channel 9 with WP7 announcements and there are very interesting things that are coming to the platform, both developer and end-user oriented. In no particular order, with my comments:
- Jump list (on letters using LongListSelector) and app search directly in application list. It’s a welcome change. When number of installed apps is past of 30-40, it’s very hard to find quickly the right app. I’ve tried to imagine a solution for this problem and came to idea that MS will let user’s create “folder” tiles to group apps, similarly to iOS. How will work solution from MS we’ll see when Mango will be released.
- Marketplace improvements and better search. Another much welcomed change. Whenever I had to find something in Marketplace I would rather fire up Zune if it’s available. Same, Games Hub is nice addition.
- Third party apps integrated in search.
- Improved hardware interoperability. Camera, gyro, compass. I’m cool for this stuff.
- Improved live tiles. You can “pin” part of your apps to a tile. Extremely powerful feature, if done right (by developer). Then you have animations and status updates on a tile, directly from the app and not a remote service.
- MULTITASKING. I’ve been waiting for it. “Only back” navigation isn’t the greatest experience when you’re trying to do few things at the same time. App switching speed is very impressive. I’ve seen demos of Blackberry’s PlayBook based on QNX and running few resource heavy games at once and I’ve beed astounded by how system manages that. I’m glad to see that WP7 offers similar experience.
- Sockets & low level network API. Skype is coming. Hope to see a decent IM app supporting ICQ & GTalk soon. And a VoIP/Softphone client too…
- SQL CE database. Good to have, may be useful for data intensive apps & offline capabilities.
- IE9 & HTML5.
So, Microsoft took a slow start strategy with Windows Phone 7. Got it out robust but low on features if compared with iOS & Android. Made first update (the NoDo) to make small improvements and polish the update process itself. And Mango will be coming this year to put it on par with competitors. When you add to the game the power of Microsoft’s marketing machine, strong partner relationships and Nokia deal, then forecasts about WP7 getting over iPhone by 2015 sound very realistic.
MIX11′s first day keynote on Web Platform. My impressions…
Posted by Valeriu Caraulean in General on April 12, 2011
Web technologies are one of gray areas in my career as a professional Software Engeneer. Historically, since I started working closely with .NET platform (2004 I think) I’ve been involved in server side and desktop development, my last mile in user interactions were WinForms, WPF and now Silverlight.
And even if I understand principles of Web technologies, giving I know what things are how they are used, my real experience with development for Web is limited to WCF services hosted in IIS. I don’t have a finalised project done from ground up with any of modern Web development techics.
That’s why I really enjoyed watching today the Mix11′s Web Platform keynote. I know it’s a demo. I know that samples were extremely simplistic. I know that real world requirements are cruel. But I’m trully amazed by how fast basic things are done. You have a dabase backed site running in minutes. You can pick and customize a CMS and while your coup of coffee isn’t finished yet you’re filling the site with content. Entity Framework 4.1 looks very appealing with it’s code first approach. ASP.NET MVC3 scaffolding makes shaping your apps very fast. Oh, and HTML 5, of course…
And I’m impressed how Microsoft accepted Open Source projects as a part of development ecosystem. Just look how seamless OSS offerings/products are integrated in WebMatrix. Take a look at open source package management system – NuGet – filled up with thousands of freely available packages. If you add also it’s own projects that MS is publishing with a open source licence, it’s pretty clear that MS tries to keep up with community and support not only “enterprise” vendors but also mere mortals, you and me.
Also looking forward for tommorow’s keynote. I hope there will be some great announcements for Windows Phone platform. I’m missing very few things, net sockets and multitasking being most wanted. And a legal way to sideload an application will make me (and some enterprises) very happy.
Installed NoDo update on my Samsung Omnia 7
Posted by Valeriu Caraulean in wp7 on March 23, 2011
Almost all Windows Phone 7 enthusiasts were waiting for first serious update for the platform, the NoDo. When I’ve seen first posts coming in my RSS stream that people started getting the NoDo from Microsoft I’ve plugged my phone to PC without too much hope. Pre-NoDo update came up in my Zune few days later than for other people.
Not this time. Zune popped up with new update. After a bit of hesitation (remember the pre-NoDo that went bad for some Samsung phones and even bricked a few?) and receiving encouragements in Twitter I’ve pushed the “Update now” button. I’ve logged it to my twitter @vcaraulean.
Times and steps:
- 21:50 start!
- 21:51 2 of 10, downloading
- 21:51 5 of 10, preparing to install
- 21:52 6 of 10, rebooting
- 21:52 7 of 10, creating backup
- 22:00 8 of 10, Installing updates, please wait…
- 22:10 9 of 10, rebooting
- 22:11 completed!
OS version: 7.0.7390.0
So, entire process took 21 minutes including backup of ~4GB worth of pictures and videos. And it went flawless…
My first impressions (subjective, of course) on running wp7 after NoDo:
- Applications are launching faster. Cudos to MS for this one. In one of my tweets I’ve compared it with a change from traditional HDD to an SSD drive, it feels very similar.
- Long list are scrolling smoother (in my apps, at least)
- Using phone is even smoother experience than before: less rough edges, faster touch feedback, fluid transitions
- Copy & Paste. Another famous part of update. Lot’s of pros and cons on this feature. But everyone will get ‘Copy’ icons popping up when taping a word in browser. And it works…
Now waiting for “Mango” update to bring new cool features (not-really-but-alike multitasking) and hope NoDo will bring no bad surprises in the long run.
Who is waiting for the update to arrive, Microsoft offered details on what is delivery state of NoDo for major mobile operators: International operators, USA operators.
Update:
For hacker souls who never mind exploring shadow areas, you can try get the update on your phones faster than others:
- Bypass allows select Windows Phone 7 devices to receive NoDo today
- How to unbrand any WP7 device to receive updates
You’ll be doing it on your own risk. If you brick you’re phone it’s your responsibility. Good luck!
Working with named branches using TortoiseHg 2.0. An illustrated workflow…
Posted by Valeriu Caraulean in Tools on March 9, 2011
Disclaimer: I’ve wrote this guide for my teammates that started diving in Mercurial. They came with Subversion background and after looking how they are working with Mercurial I wanted to show them one of more flexible workflows. It’s not a definitive guide. Just one of the ways to manage multiple work items with Mercurial and TortoiseHg 2.0. Oh, and it’s illustrated…
The Story, a real one…
One of the devs was working on a feature and wanted to push it to remote repository. Feature, being incomplete/not finished/full of bugs makes using some parts of the app awkward. And/or it’s keeping out other devs working in same source code area. Or the developer wants just push it and go fix an annoying bug he just spotted in other area…
What to do?
First of all, don’t keep it local! You should not try keep your modifications local. Mostly because your PC is not as reliable as our servers and also work you do isn’t visible to other team members.
Let’s formulate the problem: have ability to manage few work items simultaneously.
When it’s useful?
- A piece of work (issue/ticket/feature/bug) you’re tackling currently can take multiple days to implement. Even weeks.
- Multiple work items are useful when you have to quickly fix a bug in ‘default’ line when keep working on another feature
- You can share your unfinished work or ask an advice/review on it from your teammates
- You want to do something experimental, a crazy idea to try and then throw it to recycle bin.
Solution?
One of the options is use Mercurial named branches. I’ll describe a small workflow (with pictures, so you don’t get bored) describing how you can manage multiple work items at the same time.
Here is the algorithm, to get you on the track. It’s command line log with commentaries:
hg branch ticket-17 // creating branch ‘ticket-17’ (do some changes) hg commit –m “my commit message” // committing to the branch (more work, more commits) hg update default // switching to default line hg merge ticket-17 // merging branch ‘ticket-17’ to default line hg commit // committing your merge
And that’s all. I hope you’ve got the idea.
How to do it with Tortoise HG 2.0
Configuration
To be able to push your branches to remote repository you have to configure TortoiseHg to allow new branches.
The picture:
Steps:
- Click Synchronize
- Click Options
- Check “Allow push of a new branch”
Create new named branch
The picture:
Steps:
- Select the working directory in log view
- Click on button with name of current branch – “Branch: default”
- Select Open a new named branch and give it a name. Short and clean. Or long but anyway clean & descriptive.
When you’ll press OK your current branch button will change to “New branch: feature-1”
Get the work done and commit to your new branch
No pictures here as working with code is a very intimate process.
Just be sure you’re committing to the right branch.
Update to default branch
Picture:
Steps:
- Select the “head” of default branch (the green label with name of the branch). Or, if you want to get creative, another branch where you want to integrate the “feature-1”.
- Click “Update…”
Merging changes from feature-1 to default
The picture:
Steps:
- Ensure your working directory is default branch.
- Click on the head of “feature-1” branch and choose “Merge with local…”
A Merge dialog will open.
- Review one more time the what you’re about to do
- Click Merge
- You’ll be asked to commit your merge. Change message if you want and do commit.
You’re done!
Well, almost… Now when you’ll push to remote repository the “feature-1” branch will be also pushed and everyone will have access to it. And your work backed up on the server.
How we get inspiration…
Posted by Valeriu Caraulean in Design, Silverlight, wp7 on February 21, 2011
That’s interesting to observe how we’re getting influenced by things around us. How world we see and experience is determining what and how we do. Most of the time we’re not sensing the source of our actions and decisions. It’s very subtle. And often the “it feels right” moments are a sign that experience we’ve got, processed and incorporated is applied without realizing what exactly is done right…
But not this case:
I’m working on Windows Phone 7 application (yes, mGitHub and btw it’s already available in marketplace) in my spare time and weekends and I own a WP7 device which I really like. So, there was no surprise when I’ve seen that Metro UI, the visual style of Windows Phone 7 platform, influenced me and leaked in this screen that is part of a Silverlight application.
Asked people what they think, got mostly positive appreciations. It would be interesting to see how this concept will evolve. It’s only an early sketch, done by a “more developer than designer”. How you like it?
How can a productivity tool slow you down?
Posted by Valeriu Caraulean in Tools on February 10, 2011
– Easy!
ReSharper 5.1 will display two IntelliSense combo boxes when you’re editing your xaml. An extremely annoying, known and yet not fixed bug reported 5 months ago…
…It’s a developer oriented productivity tool. Oh my…
The best User Group meeting I’ve attended so far – Geneva JUG on Scala & Akka
Posted by Valeriu Caraulean in Community on January 18, 2011
Today’s meeting of Geneva JUG was the most entertaining User Group meeting I’ve attended. Excellent speakers, great topics, mind-blowing ideas…
Iulian Dragos had an introductory talk about Scala. This isn’t my first meeting with Scala, but today I’ve “got it” a bit more. Not at the level to wiling to use it and start writing apps, but I’ve understood some ideas and concepts behind it. For me it sometimes looked like C# with all the ‘language noise’ stripped down as it has some language constructs very similar with dynamics, vars and functions in C#. And also it remembered me a bit about Boo, a strongly-typed language based on .NET runtime. Nice language with interesting features that failed to get enough traction in .NET world.
Oh, and then was the Jonas Bonèr, talking about Akka. What a great talk. As I’ve been diving deeper last weeks in distributed systems (and using NServiceBus to get some parts of architecture right) it was a real eye opener. Jonas was talking about three main problems in distributed world – scalability, fault-tolerance and remote interactions. Those concepts are pretty platform agnostic. But for me, living mostly in .NET word, it was very entertaining to see how things are implementing using other language on a different platform. Jonas, like a magician, where pulling from pockets akka pieces and concepts – one greater that another. And I should admit it’s something I’ve never seen in .NET. Scala’s flexibility and extensibility allows getting really complex things wrapped in a clean syntax and simple flow. Things like new async syntax in C# 5 are looking now as badly put shortcuts and “not so sweet” syntactic sugar when compared to what Scala has to offer.
And a big thanks to organizers of this session. Keep up rolling, guys…
Telerik’s RadTabControl and Caliburn.Micro
Posted by Valeriu Caraulean in Silverlight, Tools on December 11, 2010
* A more complete solution is available in this blog post
It contains code, examples and a NuGet package
Well, again a story about having a problem, searching for a solution and finally sharing it
So, this time it’s about trying to marry the RadTabControl from Telerik’s control set with Caliburn.Micro. I’m evaluating Telerik for our pilot project in Silverlight since I would like to speed up our development process in few areas. And then we’re using happily Caliburn.Micro in it’s Silverlight flavor.
Scenario: a RadTabControl should contain multiple individual TabItems composed in runtime and backed each by a View Model. And it should be completely ViewModel driven.
Let’s start with ViewModel, as a central piece of our code:
public class MainPageViewModel : Conductor<IScreen>.Collection.OneActive { private readonly FirstTabItemViewModel first; private readonly SecondTabItemViewModel second; public MainPageViewModel(FirstTabItemViewModel first, SecondTabItemViewModel second) { this.first = first; this.second = second; } protected override void OnInitialize() { base.OnInitialize(); Items.Add(first); Items.Add(second); ActivateItem(first); } }
Pretty straightforward.
Now, we have to wrap this model in a view. In better traditions of Caliburn.Micro it’s extremely succinct and simple:
<telerik:RadTabControl x:Name="Items"> <telerik:RadTabControl.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding DisplayName}" /> </DataTemplate> </telerik:RadTabControl.ItemTemplate> </telerik:RadTabControl>
It looks nice, but it actually doesn’t work. Yet… Caliburn.Micro is handling this way the TabControl from WPF but that of Silverlight is horribly broken (and MS isn’t in hurry to fix it). To have it work nicely with Telerik’s Silverlight RadTabControl we have to add another convention to Caliburn to hint how he should be dealing when doing bindings for RadTabControl. The code is very similar to binding conventions for WPF’s TabControl, I’ve simply adapted it to handle new case.
We will be adding new convention and we should do that in our override of Configure method in our Bootstrapper. The code:
ConventionManager .AddElementConvention<RadTabControl>(RadTabControl.ItemsSourceProperty, "ItemsSource", "SelectionChanged") .ApplyBinding = (viewModelType, path, property, element, convention) => { if (!ConventionManager.SetBinding(viewModelType, path, property, element, convention)) return false; var tabControl = (RadTabControl)element; if (tabControl.ContentTemplate == null && tabControl.ContentTemplateSelector == null && property.PropertyType.IsGenericType) { var itemType = property.PropertyType.GetGenericArguments().First(); if (!itemType.IsValueType && !typeof(string).IsAssignableFrom(itemType)) tabControl.ContentTemplate = ConventionManager.DefaultItemTemplate; } ConventionManager.ConfigureSelectedItem(element, RadTabControl.SelectedItemProperty, viewModelType, path); if (string.IsNullOrEmpty(tabControl.DisplayMemberPath)) ConventionManager.ApplyHeaderTemplate(tabControl, RadTabControl.ItemTemplateProperty, viewModelType); return true; };
And it works.
I’ve posted complete source code with my solution on GitHub, RadTabControlAndCaliburn.
Update 14/04/2011: Updated convention code to work with latest Caliburn.Micro 1.0 RTW.
This blog is about things I'm passionated - Software Development, User Experience, gadgets and few other facets of IT that are keeping me busy at work as well as fueling my knowledge and self-improvement demons.