Posts Tagged ‘Software Development’

Could Israel Lead The Data Science Revolution?

October 13, 2012
Tel Aviv Yarkon River Kayaking

Tel Aviv Yarkon River Kayaking

Israel has an enormous potential to play a major role in the new “Big Data” and Data Science ecosystem. Data Scientist is becoming a very “sexy” profession and since “Big Data” is expected to create a huge market, the opportunity should not be missed.

Israel’s has the following advantages:

  • A World class academic activity in machine learning , pattern recognition & text analytics. Some example are: Prof. Yishay Mansour , Prof. Naftali Tishby ,Prof. Yair Weiss and Prof. Amnon Shashua.
  • Large supply of candidates – there are quite a lot of great PhD or MSC graduates in Applied math, Statistics  Physics , Biology, Bioinformatics and Chemistry . Since the universities have a very limited supply for tenures, the pool is quite deep. In Europe and US there is shortage of these skills.
  • These are not new topics For the Israeli Intelligence community and broader Israeli security sector. There are experienced experts who built proven,production systems. The experts are not only on the math side, but also on the business analysis side.
  • Typical Israeli data scientist has more IT\programming skills. While these are not mandatory features for success,they tend to accelerate the discovery process and add a lot value.
  • There are quite a few business applied Data Mining companies in the commercial sector and in start-ups arena (e.g. Pursway).
  • The excellent communication skills, domain understanding and language diversity , especially compared to classical never-worked-outside-of-university PhD. Many Israeli PhD are “forced” to work in teams and in the industry to make a living, or during their army service, so even the more introvert types make a solid team player 🙂
  • 50% reduced cost compared to US – for various historical reasons the PHD\Masters title is not as economical as in the states. An amazing Java developer with no degree at all would probably earn twice as much as an amazing chemistry POST-Doc from Harvard. While this is a shame, it presents an opportunity for Data Science service out of Israel. Moreover, there are less hedge-funds to waste people talent 🙂

There are various directions to capitalize the potential:

  • Providing Data Scientists as a service, out of Israel. While remoteness presents some challenges, we have seen early success. It seems that the pros outweigh the cons.
  • Build infrastructure products for Big data – around Hadoop, Hive, Mahoot etc. Adding the enterprise features and improving performance  These are similar in nature to traditional Israeli expertise in networking, storage and security. In my opinion, there is higher chance for na Israeli start-up to succeed here, bigger than in a new social application.
  • Develop innovative services that use Machine Learning internally to gain a competitive edge (In advertisement, Retail or Medicine)

In a world where “old-fashioned” software engineers are more and more common, each one of these direction can help maintain Israel’s Hi-Tech uniqueness.

P.S

I just saw that other people also think Israel has the chance to be a world leader in big data . Although the quote is from EMC, I knew nothing about it 🙂

Tel Aviv Bicycle Race Sukkoth 2012

Tel Aviv Bicycle Race Sukkot 2012

Advertisements

Three Examples on How not to Lead by Example

April 14, 2012

Three stories that never happend and probably never will 🙂

Porsche and Outdoor Camping

Porsche and Outdoor Camping

CEO in a Tent

As a CEO Invite your top executive team,some over 50 years old,  to an outdoor seminar, sleeping in tents.

Explain to them that sleeping two in a tent would bond the team together and allow an early start in the next morning.

Drive home with your Porsche Jeep and personal driver to sleep with your spouse.

Arrive late the next morning because of traffic, while everyone is waiting for you to start the training.

VP Engineering and the Hacked Weekend

Following a major security vulnerability found in your department code you call all developers to look for more bugs on the weekend.

Explain that while you don’t expect a one ay effort to find bugs that were not found in year, it is a critical method to communicate  the importance of secure coding.

On the same weekend stay with your family at home. After all , you don’t even know how to check out the code from RCS, let alone find security bugs in it.

Banana Performance Review

Banana Performance Review

VP HR slow Performance (Review)

Force the entire organization to a methodical yearly performance review.

Force the managers to put the employees on a standard distribution curve.

Calculate the bonuses as a direct result of the performance review, with 1% flexibility.

Perform the performance review for your own direct reports three months behind the deadline, in a casual and quick manner.

The Hardest Bugs in The World – Part One

May 29, 2010

Some bugs in software are extremely hard to track down. One keeps trying to “kill” them and fail for a long time. Much like the guys in this video.

The most difficult bugs in the world can take months to track down and isolate. While not always deadly, Sometimes even when the bug location is known (like George Bush in Washington DC) the fix itself can be extremely difficult.

Bugs are hard to solve when they are non deterministic, non reproducible or out of control. They happen only in production system, or only during load, only at certain places, or just on the customer desktop.

Here are few examples of elusive software bugs, their characteristics and how to turn them into butterflies of code :).

[picapp align=”none” wrap=”false” link=”term=bugs&iid=8872334″ src=”2/4/c/5/A_model_displays_5ecb.jpg?adImageId=13028575&imageId=8872334″ width=”380″ height=”492″ /]

Bugs in other people code

We just found a bug in the way Firefox loads plug-ins. It appears that Firefox tries to cache a plug-in DLL so it does not have to load it many times. While the feature is useful there is a flaw in the caching mechanisms that causes Java plug-in to load instead of our plug-in for our object.

Why was it hard to find ? The bug only happens at very specific conditions, and not all the time. It only happens on Firefox 3.6.3. It only happens when the Plug-In uses the Object HTML tag and not the “SRC” attribute. It only happens when Java and our Plug-In are loaded in the same page, in a certain order …

What did we do ? we  (which means Leeor) compiled Firefox and ran the source code with a debugger . Thanks god for Open Source. If we had the same issue in IE, we would not have had much of a chance to solve it. We submitted the bug to Firefox,but since we needed a solution right away, we were able to find a workaround, by finding the root cause.

Memory Leaks

Why was it hard to find ? Memory leaks are extremely hard to find because they tend to be non deterministic.  When the memory of the process just keeps growing, it is relatively easy to find the problems source. But in many operating systems the memory management and garbage collection have become so sophisticated, it is not trivial to know if there is a leak or not. Memory goes up and down , or just stays still.

In theory,  memory management problems were supposed to go away in Java,C# and Python. While most of them have, the ones that remain are the hardest one to solve.  For a while we kept hunting an “Out Of memory’ problem in IronPython. In the good (?) old days of C++ we could have used a memory profiler to locate our lost memory chunks.  In IronPython this is next to impossible, since the .Net object are so mangled it is not possible to correlate them to original language objects. therefore, traditional tools like Quantify have little value.

What did we do ? Sometime the best resolution is to write a custom memory management library. We used this trick in Check Point when we needed to debug memory leaks in the kernel, where no standard tool works. This approach works especially well when this infrastructure is written form the ground up.

A similar approach can be used in Python, but the performance implications are too hard to run it in production. Unfortunately , the memory leaks only happens in production …

If the problem can be reproduced with unit tests, life is a bit better. One innovative idea that Idan came up with is Binary Search over the code.  Since we moved to GIT we can now change the past retroactively. In other words, we perform a binary search on the code, to track down the line of code in which the memory leak started. We “Pretend” the unit test was written in the past and run it against the old branch. Using binary search we can locate the exact commit in which the problem arose.

Another option is to look for the usual suspects – unmanaged code .In one case we used NetApp SDK that was written in C++ in our .Net code.  It took three iterations to resolve all the memory leaks caused by their library. Pretty much a trail an error process.

[picapp align=”none” wrap=”false” link=”term=bugs&iid=8927280″ src=”c/9/f/b/Kew_Gardens_Launch_f1c7.jpg?adImageId=13028580&imageId=8927280″ width=”380″ height=”570″ /]

The Best Tool for Creating GUI Mockups

February 10, 2010

Digressions, objections, delight in mockery, carefree mistrust are signs of health; everything unconditional belongs in pathology.

Friedrich Nietzsche, Beyond Good and Evil

I just found (Thanks Uri) the greatest tool for UI Mocuups – Balsamiq Mockups. If you are a product manager, a UI developer or a techie marketing person, I highly recommend it.

The traditional ways of creating Mockups are quite annoying.

  • Visio is expensive and is not really suitable for this task, although It is a wonderful tool in other cases.
  • MsPaint requires some artistic sense, and using the fill brush to erase screen bits feels so 80’s 🙂 .
  • Coding is time-consuming and not relevant to many product managers.

The things I like about Balsamiq Mockups :

  • It works ! I created Seven mockups screens in 5 hours for a complex feature
  • It feels “Just Right” . It does not try to create a real application, but it comes with many components to make life easy
  • The UI looks great, but it is intentionally “sketchy” to avoid Graphic Design distractions
  • The developers seem nice and “get it”. I even got an evaluation copy as a blogger.
  • Fair price – just $79
  • It’s really cute. For example this is how the comments look like, within the mockup.
Comment in Balsamiq

Comment in Balsamiq

Some minor issues:

  • The properties pane behavior is quite bizarre, it keeps popping up in the wrong place and fading away. Should be dockable.
  • Sometimes the Flash application feels a bit sluggish.
  • The regular evaluation is very limited, and does not allow one to save their work.

I’m looking forward for the SaaS version that would allow easier team work and revision control. A grouphub and TRAC plugin would be cool as well.It would also be amazing to generate “applications” from the Mocks.

To summarize

try it out , it is well worth your $79 and would put a smile on your face.

Alas, poor Yorick! I knew him, Horatio: a fellow of infinite jest, of most excellent fancy. He hath borne me on his back a thousand times; and now, how abhorred in my imagination it is! my gorge rises at it. Here hung those lips that I have kissed I know not how oft. Where be your gibes now; your gambols, your songs? your flashes of merriment, that were wont to set the table on a roar? Not one now, to mock your own grinning? Quite chap-fallen? Now get you to my lady’s chamber, and tell her, let her paint an inch thick, to this favour she must come.

William Shakespeare, “Hamlet”, Act 5 scene 1

Code Review Checklist

March 28, 2009

Here is a plea
From my heart to you
Nobody knows me
As well as you do

Depeche Mode, Ramat Gan Stadium , May 2009, Assuming no new war in the next two months

You don’t have to do code reviews, but if you do, do them the right way.

Code review  is a managerial process, IMO, and should be done by managers, not peers. The reviewer does not inspect just the code, but also the development process, guidelines and state. For example. If a peer detects a problem requiring a change in the code, a fix will happen for the specific problem. If the manager detects a difficulty in the code, he can make sure the cause is fixed. Peer review is an interesting tool and has its own benefits, but the two should not be confused.

The great benefit for the reviewing manager is education. He learns about the real problems his engineers are facing, the real status of code, documentation and people skills.It also allows him to stay connected with the source. It is  a great trade-off point between easy-to-shout-global-always-true declarations ( “No code with printf, ever”) to the reality of day to day (“printf is ugly, but it works”).Of course, he gets to learn more about core issues  in the code worth fixing. The same issues that he never prioritized.

There are some nice guidelines here http://www.macadamian.com/codereview.htm and below are some bullets you might want to use in your own process.

1.       Was the change tested to work in real environment?

2.       How do you KNOW if does what it is supposed to do?

3.       Are there potential similar bugs in the code? Were they fixed?

4.       Is the change\feature documented in the code?

5.       Are there unit tests to check the new feature?

6.       Are there any compilation warnings? Why?

7.       Is there an open ticket for the change?

8.       Has the change been checked for security issues?

9.       Did you  check memory allocations and releases?

10.   Is the change accompanied with right debug messages and logs?

11.   Functions have clear descriptions, return values, input and output

12.   Standard type definitions are used

13.   No arbitrary constants are used in the code

14.   What are the risks involved in the change? How are they minimized?

15.   Does the reviewer fully understand what the code does?

16.   Are state machines documented as such (clear states and transitions)?

17.   How will the change affect performance? Did you run a profiler?

18.   Was the design document updated to reflect the change?

19.   Textual messages should be check for spelling and clarity

20.   How are errors, exceptions and lack of resources dealt with?

21.   Can the new functions be useful to other team members? Did you tell them about it ?

Cat Doing Code Review

Cat Doing Code Review

Python for Executives

July 20, 2008
I’m very happy with our choice to use Python as one of our core development languages. It has proven to be a great time saver, in overall development costs and allowing an excellent pace of changes.

When we started IT Structures we debated over using Java\Linux combo or .Net\Windows duo.  Python was pushed in as an “experiment” by Ronnie. Our collective experience was derived from C , C++,JAVA , the hard core programming languages of past decades.

Python Logo

We started with Java, as our core belief was that Linux is a much stronger server platform than windows and that integration with a large number of distributed servers would be much easier in Java.

It took us less than a month to throw Java\J2EE out of the window. It was just far too complicated to get a simple combo box done, too many library options, too many eco-systems which are magically incompatible.

We decided to move to .Net and IronPython, preferring the developer productivity over the server utilization. This was done two weeks before the deadline. The combination allowed us to finish the version in the original time frame with minimal delay.

IronPython is cool because Python can be used together with C# and .Net . We are using C# for the more “traditional” business logic and UI elements, while Python is used for orchestration of a highly sophisticated real time server environment. That way we enjoy the best of both worlds.

The main fears managers have around Python are: Risk, Recruiting, Performance and Immaturity. At this stage I can say we have overcome all these reservations.

  • Recruiting – It turns out that smart and innovative people are attracted by Python .Innovative smart people can also learn Python very quickly.
  • Risk – in one year we had only five cases where a Python specific bug occurred. We had many more ASP. NET, JavaScript, HTML and even Java specific problems.
  • Maturity – not only is Python very solid, so is IronPython. The code is stable, the smart features work, the community is responsive and the libraries are rich. The only downside is the IDE and Visual studio integration, but this is progressing as well.
  • Performance – Python flexibility allowed extremely fast optimizations at the system and algorithmic levels, without requiring premature optimization. The system and algorithm changes are the ones critical in a real world environment. Some issues are showing up, but it seems they can be solved with a reasonable cost.

As time passed time our confidence grew we started using Python in a more and more places across our service. Overall it was an excellent choice and well worth the risk. I would not go into the reasons for Python success in this post, but you can read about it around the web.