Friday, December 30, 2005

Network resource KILLERS

I’m not a Web programmer, so I can’t say how you should write web sites. I do, however, have enough experience in software development and networking in order to know some of the thing you should not do.
I had to play quite a lot with the Windows Event Viewer lately. While working, I noticed an ever recurring warning that goes like so:
“TCP/IP has reached the security limit imposed on the number of concurrent TCP connect attempts.”
Since it even happened very shortly after having rebooted my system, I decided to track down the source of it. Here are results of playing with the netstat utility:

1. No particular application open. Netstat returns 3 TCP connection owned by the following processes: MsnMsngr.exe, Skype.exe and gnotify.exe. Makes sense, doesn’t it

2. I opened one instance of Internet Explorer and entered YNET. Now, in addition to the above-mentioned 3 connections I had 61 other connections, all owned by IEXPLORE.EXE

That’s definitely a huge WTF ?!?!?! You open one single web site and you’re swamped with so many connections that in the end the OS has to start imposing limitations because it believes you may be running a virus/worm or some other threatening application.
Needless to say that when I checked with FireFox the behavior was more or less the same (didn’t count exactly the number of connections but it’s close enough).
Also, most other sites I checked, although they do use quite a lot of connections, it’s still not that much.

Sunday, December 18, 2005

.NET 2.0 Goodies

I’ve finally started to work with .NET 2.0. I know, it’s considered very late, but I had my reasons...
Anyway, here is one line of code I had to use today that makes use of several new features I find very cool (and useful):

Array.ForEach(threads, delegate(Thread t) { t.Join(); });

Assuming you have an array of threads named ‘threads’, this line will make sure you wait for all of them to complete. It uses Generics, Anonymous Methods and Anonymous Delegates all at once…

Sunday, December 11, 2005

IDesign's Serializer

In one of my first posts I reported on a MessageLoop object I wrote and posted to the CodeProject.
Today I discovered that at IDesign they wrote a Synchronizer object (go to the link and search for the word 'Synchronizer') that provides the same functionality. Their implementation has the advantage to implement the ISynchronizeInvoke interface, which means the solution is much more complete. But then again it means that my implementation, is much simpler. Also, I have added some features to my implementation that you won't find in Synchronizer:
1. Priority on messages (i.e. make it possible to execute a message before older messages)
2. Limit the queue size - when the limit is reached, new messages are being dropped.
I haven't added these features to the published version yet, but for my personal needs they are important, so I'll keep using it (although I might merge both some time in the future).

Thanks to my friend Moshe Anconina for pointing this out to me.

Saturday, December 10, 2005

I burned my wife...

Believe it or not, but last week I actually burned my wife. After having served her a boiling cup of tea, I made a wrong movement and the cup turned over, spilling all of the boiling liquid on her leg.
It was a nightmare! Even though it took us only 2 or 3 seconds to get her pants off and put enormous quantities of water on the burn, the damage was already done. She has a 2nd level burn on an area of 20x40 centimeters. She said that the pain during the first day was worse than giving birth. And she gave birth without epidural!!!
I can't emphasize how sorry I am and how bad I feel about this. She's not angry, of course, for it was obviously and accident, but I still feel I would have better liked doing it to myself on both legs than having her suffering this.

Maybe the most infuriating thing it that if the water was just a few degrees lower, the burn would have been much lighter. So what I do from now on, and that's my tip as an experienced leg-burner: whenever I prepare some hot beverage, I make sure to add a bit of cold water before serving it!!!

I sincerely hope that maybe this post will help avoid such accidents for other people.

Thursday, December 08, 2005

Had some problem with my Atom feed

There was a problem in my last post - it caused my Atom XML to be corrupted, so anyone who reads my posts through RSS got dissapointed.
I fixed it and apologize in the name of Blogger.com (it was a post automatically generated by sending an email to Blogger, to which I made small modifications).

Tuesday, December 06, 2005

Visual SourceSafe madness

Say you want to install Visual Studio 2005 WITH the new Visual Source Safe client.
Well, apparently it’s much more complicated than you’d have thought.
Just go here and you’ll see what I mean.

Amazing!!!

(Thanks to my friend Gil for pointing this out to me)

Friday, December 02, 2005

FireFox dillema

In the past I have tried using FireFox. It left me with mixed feelings. On one hand, I liked the tabs A LOT and felt the configuration options are much more usable than with IE. I also felt that the way favorites could be saved in groups (also by saving all open tabs in one click) was particularly helpful to me. But on the other hand I was disappointed to see that: a) the memory footprint was very similar to that of IE (sometimes higher sometimes lower) and b) Since many sites are still incompatible with FireFox, I had to keep using both all the time.

In the end I decided that there was no point wasting my time juggling between them all the time, so I crawled back (with my tail between my legs) to our not-so-good but certainly old IE and stopped using FireFox.

Until today.

Today I found out there is an add-on that seems to be able to solve that exact problem: the IETab. It provides you with the possibility to view web pages in an IE tab from within FF. You can switch between using the IE engine or the FF engine with a single click, or even configure a list of websites that will be opened in an IE tab by default. This seems to be exactly what I needed!

Bottom line: I’m going to download the latest version of FireFox right-away, and install it with the IETab. Hopefully it will make it possible for me to enjoy both worlds and live happily ever after…

Thursday, November 24, 2005

The Kite Runner

I’d like to talk a little bit about something else – a book…

A few days ago I’ve started to read The Kite Runner. I know, it’s a little cliché talking about this book, after all the publicity and success it had since it was first published. Nevertheless, I want to give my own point of view.

I haven’t read it through yet. Actually, I’ve read only about 20%, so most of the book is still ahead of me. Frankly, I wish I will never finish it, and keep reading it endlessly. It’s not suspense that drives me of course, it’s the way I feel during the few minutes I spend every day reading it. When I read, it’s as if I’m a child again. Not only does it make me think like a child, or see the world from a child’s eyes, it really makes me FEEL like I’m a child again. I actually dreamed being a child again last night! I think that that, above all, is the real magic of this book. It really transports you to another world you once knew, not only in imagination, but also in real feeling – body and soul.

Add to that great writing, the description of a very interesting culture you never knew, a very special friendship between two boys and a boy’s craving of attention from his father – and you’ve got an experience you really shouldn’t miss!

That’s it about this really incomparable piece of art. I may follow-up on this in a later post when I’m done reading it (hopefully in a few decades…).

Wednesday, November 23, 2005

Making GUI Thread Programming in C# easier - take 3

In my first post on this subject I referred to John Wood’s SafeInvokeHelper. I’ve been using it a lot lately and grown to love it...

I’ve decided to add to it a few features:

  1. In order to avoid having to know (or test using InvokeRequired) whether Invoke should be used or not, I’ve added a mechanism that checks InvokeRequired. If Invoke is not required, the method is called directly (without Invoke), which dramatically improves performance.
  2. In some cases you may want to call a method that does not belong to a Control object using Invoke. One example is when you want to alter the ListView.Items collection or one of the ListViewItem objects in it. Both the collection and the ListViewItem are not descendent of Control, hence do not support Invoke. However, it is pretty obvious that altering these objects has an impact on the UI and thus must be done through the UI thread (imagine changing a ListViewItem.BackColor property). So I’ve added an overload to SafeInvokeHelper that lets you specify the control on which Invoke should be called and the object of the method we actually want to execute.

For more details about the SafeInvokeHelper, please read John’s post.

Thank you John!

P.S: Note that the current implementation does not support overloaded methods.

using System;

using System.Collections;

using System.Reflection;

using System.Reflection.Emit;

using System.Windows.Forms;

...

public class SafeInvokeHelper

{

private static readonly ModuleBuilder builder;

private static readonly AssemblyBuilder myAsmBuilder;

private static readonly Hashtable methodLookup;

static SafeInvokeHelper()

{

AssemblyName name = new AssemblyName();

name.Name = "temp";

myAsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

builder = myAsmBuilder.DefineDynamicModule("TempModule");

methodLookup = new Hashtable();

}

public static object Invoke(Control obj, string methodName, params object[] paramValues)

{

return Invoke(obj, obj, methodName, paramValues);

}

public static int counter = 0;

public static object Invoke(Control control, object obj, string methodName, params object[] paramValues)

{

if (!control.InvokeRequired)

{

if (methodName.StartsWith("set_"))

{

string propertyName = methodName.Substring(4);

return obj.GetType().InvokeMember(propertyName, BindingFlags.Instance BindingFlags.NonPublic

BindingFlags.Public BindingFlags.SetProperty BindingFlags.Static,

null, obj, paramValues);

}

else

{

return obj.GetType().InvokeMember(methodName, BindingFlags.Instance BindingFlags.InvokeMethod

BindingFlags.NonPublic BindingFlags.Public BindingFlags.Static,

null, obj, paramValues);

}

}

else

{

counter++;

Delegate del = null;

string key = obj.GetType().Name + "." + methodName;

if (paramValues != null)

{

foreach (object o in paramValues)

{

key += "." + o.GetType().Name;

}

}

if (methodLookup.Contains(key))

del = (Delegate) methodLookup[key];

else

{

Type[] paramList = new Type[obj.GetType().GetMethod(methodName).GetParameters().Length];

int n = 0;

foreach (ParameterInfo pi in obj.GetType().GetMethod(methodName).GetParameters()) paramList[n++] = pi.ParameterType;

TypeBuilder typeB = builder.DefineType("Del_" + obj.GetType().Name + "_" + methodName, TypeAttributes.Class TypeAttributes.AutoLayout TypeAttributes.Public TypeAttributes.Sealed, typeof (MulticastDelegate), PackingSize.Unspecified);

ConstructorBuilder conB = typeB.DefineConstructor(MethodAttributes.HideBySig MethodAttributes.SpecialName MethodAttributes.RTSpecialName, CallingConventions.Standard, new Type[] {typeof (object), typeof (IntPtr)});

conB.SetImplementationFlags(MethodImplAttributes.Runtime);

MethodBuilder mb = typeB.DefineMethod("Invoke", MethodAttributes.Public MethodAttributes.Virtual MethodAttributes.HideBySig, obj.GetType().GetMethod(methodName).ReturnType, paramList);

mb.SetImplementationFlags(MethodImplAttributes.Runtime);

Type tp = typeB.CreateType();

MethodInfo mi = obj.GetType().GetMethod(methodName);

del = MulticastDelegate.CreateDelegate(tp, obj, methodName);

methodLookup.Add(key, del);

}

return control.Invoke(del, paramValues);

}

}

}

Monday, November 21, 2005

How to Retrieve the Viewable Area of a Window or Control

I was trying to figure out how to find out whether a control is currently viewable or not (in C#). When I say ‘viewable’, I don’t mean ‘Visible’, which is a known property of the control. I wanted to know whether the control is currently hidden by some other application/form or whether part of it or all of it can be seen. I remembered vaguely that there was some way to do that with the Win32 API, but didn’t remember exactly how. Googling a bit I found out that Conrad Jones wrote a nice piece of code that does just that: http://www.codeguru.com/Csharp/Csharp/cs_misc/article.php/c4237/

 

Thanks man!

Sunday, November 20, 2005

Specialized Queues - A Cyclic Queue

I'ts been a while, but I hope I'll be able to keep a normal pace now (a blog post once every few days).
I've posted a new article on the CodeProject: Specialized Queues - A Cyclic Queue .
The idea is to provide a Queue with a limited buffer size. Once the buffer is full and new items are added, the 'oldest' items in the buffer are being dropped. I am using this article also to give a few tips about writing specialized collections in .NET.
Hope it will be useful...

Wednesday, October 19, 2005

Making GUI Thread Programming in C# easier - take 2

(Update 2: I've had several iterations with John on his blog post . First, I wish to thank him for his help and the time he's taken to answer my questions. It turns out I was mostly wrong. I always thought (God knows why) that the UI may be created by several threads and that there is no guarantee that a form and its child controls would all be created on the same thread. I was wrong, and there lay the root of what I thought was missing in the SafeInvokeHelper. For all the details of our discussion, I suggest you take a look at the original post and its comments.)

(Updated following John's remark: SafeInvoke and BackgroundWorker don't solve the exact same problem, although in many cases you can choose either one of them. In general, SafeInvoke is much simpler to call and can be used to run just any UI function on a control. However, if you want your code to run asynchronously and get various progress events, you'll probably want to use the BackgroundWorker instead.
Another feature I'm missing in the SafeInvokeHelper is the ability to call a non-UI function through the Invoke method of a UI control. In other words, sometimes you centralize several operations on a control in a private method, and you want this method to be executed with the control's Invoke method. This scenario is not currently supported by the SafeInvokeHelper, since it requires the method passed as argument to belong to the control on which it is executed.)

A few weeks ago I posted a message about SafeInvoke – an elegant solution to use the correct thread for UI methods (reminder – a control should only be accessed by the thread that created it).
Well, in .NET 2.0 they introduced the BackgroundWorker object, which can be used to fix that exact problem (among others). In addition, Juval Löwy has published quite some time ago an article about the BackgroundWorker , how it works and how to work with it. In addition, he developed a similar BackgroundWorker for .NET 1.1, which will allow you to transparently migrate your code from .NET 1.1 to 2.0 (assuming you haven’t done it already…).

A few related links:
Juval's article
IDesign - Juval's company - it's a great site, loaded with useful tips, demos, ready-to-use classes etc.
MSDN's documentation for the BackgroundWorker class in .NET 2.0

Sunday, October 16, 2005

Machine Learning vs. Data Mining

Many people I tell I work on Machine Learning, give a quick nod implying "I know what it is - no need to explain". Then, while the conversation continues, it becomes completely clear that they don't have a clue what I'm talking about, but now they feel a little embarrassed to admit it. When I delve a little further, it becomes apparent that they confused Machine Learning for E-Learning...
So what is Machine Learning anyway?
Machine Learning is the ability of a computer (program) to learn from experience (i.e. samples or training set) and to generalize its knowledge to handle unseen data. It is an area of Artificial Intelligence, and of course overlaps heavily with statistics. Some of the most commonly known algorithms are: Neural Networks, Bayes Classifiers, Genetic Algorithms, Decision Trees and many more. Machine Learning is very much concerned with complexity of the algorithms - the idea is to come up with an algorithm that performs sufficiently well to be realistic. Therefore, and since the overall best solution is almost always exponential, every Machine Learning algorithm has an Inductive Bias. This bias implies that the algorithm makes all kinds of assumptions about the data and/or the best solution, which limit the size of the search space.
And what about Data Mining? Isn't that the same thing?
Well, yes and no. The difference between the two is something not everybody agrees about. The most commonly used differentiation is that Data Mining uses Machine Learning algorithms for real-world applications, usually on very large databases. The most important difference, then, is that Data Mining includes process to clean and organize the data such that it would be suitable for the learning algorithm to work with. It may seem only a small difference, but bear in mind that usually this cleaning process takes up 50% of the resources for a project (time, money, etc.).

Hope this helps clear things out...

Wednesday, October 05, 2005

Google Image Search API

I really really needed an API to query images from Google programatically. Since Google don't provide such an API and I couldn't find anything worthwile on the internet, I had to do it on my own.
If you're interested, I posted an article on The Code Project:
http://www.codeproject.com/cs/library/google_image_search_api.asp

Please, if you liked it, place a vote - I'd like to know what people think of it.

Monday, October 03, 2005

First SQL Server Week in Israel

Microsoft Israel and Solid Quality Learning have announced a joint SQL
Server conference that will be held in Israel on November
13-17 in Sheraton City Tower Ramat-Gan.

SQL Server week promises to be a great learning experience devoted to SQL
Server 2005, which is scheduled to be released early November.

For more details I suggest you dig into:
http://www.microsoft.com/israel/sql/sqlweek/default.mspx

Wednesday, September 28, 2005

SafeInvoke: Making GUI Thread Programming Easier in C#

John Wood has written a pretty tricky and seemingly very helpful solution to call methods on UI controls easily (as in – much lesser code).

You know the problem: if you want to call a UI component’s method in a thread-safe manner, you must use the Invoke (or BeginInvoke and EndInvoke) method. In addition, you need a delegate and a special method for every such method you call, and then you have to do that again in each project! (I’m not talking about C# 2).

I’ve seen various ways people have tried to work around this painful bit, but I think that John’s looks particularly nice.

Performance-wise, for a single call it may be too expensive since it’s based on Reflection, but in most cases those calls are performed again and again and since he uses a caching mechanism I wouldn’t worry about that.

I’m certainly going to try it out next time I need it!

Ah, I almost forgot, here’s the link: http://dotnetjunkies.com/WebLog/johnwood/archive/2005/08/31/132267.aspx

 

 

Sunday, September 25, 2005

Back to the basics - recursive iterators

Stephen Toub did it again!

He’s posted a series of 3 posts on recursion versus iteration with C# iterators. Although it’s really basic, it’s important to be reminded of the cases where the difference in performance should be considered and how to do it.

Part 1: http://blogs.msdn.com/toub/archive/2004/10/29/249858.aspx

Part 2: http://blogs.msdn.com/toub/archive/2004/10/31/250303.aspx

Part 3: http://blogs.msdn.com/toub/archive/2004/11/04/252415.aspx

 

 

I'm back

Well, moving is really a pain. I never remembered how hard it is (guess it's my selective memory).
Anyway, I'm back working, with a much more adequate working space, which is really nice.

I know I've promised a well-performing pseudo-Activator (a.k.a. DynamicClassFactory), but I haven't finished polishing it for publishing yet.
Since I currently have to get some work done, this post will have to be delayed a bit.

I need to use a well performing replacement for the ListView control. It will be used in a sort of online logging mechanism, so I need it to be able to cope with a very large number of items (and items are being added very often). Actually, it should have a cyclic buffer - very old items are really irrelevant, so there is no need to keep them in memory.
I'm looking for something that could give this functionality. The best would be if the buffer size was configurable, but could perform well even with a very large buffer.
I have a few ideas how to implement it such that it would provide optimal performance, but I'm trying to avoid it. I'll Google for it a bit and see what I come up with. I'll send a follow-up post on this with the results.

Monday, September 12, 2005

Where am I?

Next Sunday we are moving. Besides, I've been pretty sick for the last couple of days (somewhere between really bad allergies and the flu) and it doesn't seem to be getting better.
So I will most probably get back to blogging in a week or two, after I get things in order in the new house, and hopefully I'll also feel better.
Sorry...

Thursday, September 08, 2005

Israel Visual C++ Users Group September Meeting

Israel Visual C++ Users Group September Meeting

 

Date:    Wednesday, September 21, 17:00 - 20:00

Place:   Microsoft Israel 

            Hapnina 2  (Amdocs Building)

            Ground Floor

            Raanana

+972 (9) 762-5100         

 

Parking is parking available at the Kurkar parking lot. Proceed straight past the traffic circle and the parking lot will be on your right.

 

Topic: Microsoft TCP stack implementation

Lecturer: Arkady Frenkel, Windows SDK MVP

  

In this presentation, Arkady will define how the OSI (Open Systems Interconnection) model is implemented in the desktop Windows operating systems (which exclude the Windows CE TCP stack).

Arkady will describe all the levels of the TCP stack; from the Layered Service Provider to the miniport layer of Network Driver Interface Specification (NDIS). He will cover the communication interfaces between layers.

He will show and analyze the Networking API (pipes, mailslots, winsock, RPC, Netbios, CIFS) as clients of the TCP stack on the application layer.

Name Resolution and binding will be reviewed too, as they are important aspects of networking.

Arkady will provide examples of what can be done using the Platform SDK and DDK.

If time allows, WMI and IPHLPAPI will be discussed as additional help subsystem for Windows networking (with code examples).

 

For nearly 25 years Arkady has been developing Wired and Wireless Real-Time Industrial Control Systems (SCADA). The environments include the RTE (Real-Time Executor) OS on HP 21xx and RT11, RSX on PDP-11. Fourteen of those years include experience with all versions of Windows (including all version of Windows CE from first the version till CE.NET).

His areas of interest have always ranged from low level kernel and drivers to GUI based user applications, using MFC, COM, and ATL.

He is familiar with the TCP stack from Winsock through LSP and the NDIS protocol and IM.

Last year he was offered a development position writing NDIS Wireless miniport drivers. He now works for Rokonet, a leading provider of comprehensive security solutions worldwide, developing UPnP solutions for its controllers in .NET (C#).

 

Arkady was awarded the Windows SDK MVP in 2001.

Although admission is free and you may attend without reserving a place, we kindly request that you notify us if you plan to attend so that we can be sure to have enough chairs and FOOD!

 

Thank you.

 

Moshe Raab

IVCUG@comconix.com

 

See more info at: http://www.comconix.com/ivcug/

 

Demistifying events

I ran today into a really annoying constraint regarding events. It is known as error CS0070, and says that events can only be invoked from the class in which they were declared. So even if you have a protected event (with public accessors to add/remove listeners) in a base class, derived classes can not directly use that event.
Googling a bit on this issue (mostly to find other people complaining about it, 'cause it was pretty clear that's the way it is and there's nothing I can do about it), I came accross a pretty nice post that could help explain some of the issues with events that are not all that clear in MSDN. I haven't read it from top to bottom, but from the skimming I did it looks pretty good. Enjoy!
C# events vs. delegates

Wednesday, September 07, 2005

.NET Performance Benchmarks

If you're having some code doing intensive mathematical calculations, I suggest you go check Wesner Moise's benchmarks:
Decimal Performance - Note the horrible performance of the Decimal datatype
Math Functions Performance - Note the difference between x*x and Math.Pow(x,2). How did this pass QA???

Thanks to my friend Gil for pointing these out to me.

Tuesday, September 06, 2005

Now that's how a software company should work!!!

I've been using JetBrain's ReSharper for a couple of weeks now, and I'm really pleased. I was used to Visual Assist and in my opinion there is no real competition between these two - ReSharper is clearly several leagues higher.
But, that's not what I was most impressed about. I soon found out that one of the features I used a lot in Visual Assist did not exist in ReSharper. I'm talking about multiple clipboards - the last few things you copied to your clipboard are all memorized, and with a few keboard strokes you get the list of last things on your clipboard and you can choose which you want to paste. A real coding-time saver. I was really sad - such a good tool and this particular little thing I am so fond of is missing. So I followed Tomer Gabel's recommendation and filed an RFE with the JetBrains guys. A week later, they sent me a message, asking me how I thought this feature should work. Another week later I got a message that the feature has been implemented in build nr. 206.

Did you get that? In 2 weeks they implemented a new feature, they didn't event intend to have in their next release, only because one potential customer has asked for it!!!!
Well, now I'm decided - I'm buying it!!! Not only I have that one feature I was missing, but I'm confident that the software will always be as cutting-edge as possible.

Fellow programmers/team leaders/project managers/etc. - that's the spirit!!!

Where I've been + a Barbecue Booster

Things that really matter - I haven't been very blog-active lately. My sister came from the States with her little son, so I spent some time with them and didn't have any left to blog...

Last week-end we had a family barbercue, and I used an old recipe to spice chicken (it is originally for chicken brochettes, but I used it for wings with tremendous success). I've been using this recipe for several years, and each time people keep talking about it for weeks after the barbecue. It's not my invention, but I don't remember where it came from...
So here's the things you should mix to put on around 2kgs of chicken wings. I suggest you let the wings rest a couple of hours in the refrigerator before putting them on the fire, so the tastes would be better impregnated.
Of course, the quantities are rough approximations and should be altered to suite your own taste.

  • Paprika (sweet, not hot) - 3 table spoons
  • Crushed Chili Pepper - 1 tea spoons
  • Cumin - 3 tea spoons
  • Cinnamon - 1 to 2 tea spoons
  • Nutmeg - 1 to 2 tea spoons
  • Crushed Garlic - 3 tea spoons
  • Lemon Juice - of 2 to 3 fresh lemons
  • Ground Black Pepper
  • Salt
  • Olive Oil - about 1 cup

You mix it all thoroughly and make sure all parts of the chicken are fully smeared with this stuff. After a couple of hours, put it on the barbecue and have some of the best chicken wings you've ever known!

I'd be glad to hear how it went...

Wednesday, August 31, 2005

Why "Why not?"

Why did I choose this name? Well, why not? OK, OK, I'll explain. Many people, when they are asked (for) something have a tendency to automatically respond in a negative way: "why should I do this?", "why do you want that from me?", "what's there for me to gain?", etc.
I want to propose a reversal pattern - when you're asked something and you want to say "no" or "why?", start by asking yourself "why not?". In most cases, you'll find out there are at least as many and as good reasons for a positive than for a negative approach.

A little about me

I promised, so now I'll try to fulfill my promise...
I am 30 years old, married to a wonderful wife (Shiri) and father to a not less wonderful girl (Gal) and a wonderfully crazy dog (Motek).
I've been in the software engineering business since '96 as a programmer, team leader and consultant, and enjoy it immensely. The major technologies and languages I've been using are C/C++, C#, MS SQL, COM, though I've touched others over the years. Currently I'm working primarily with C#, SQL and Matlab.
Two years ago I decided to start studying again. I'm now an MSc. student (in computer science, of course) at The Interdisciplinary Center Herzlia , working on my thesis under the supervision of Dr. Arik Shamir who'se pushing me hard to try and get our paper done. We are working on using Machine Learning techniques to improve the results of image search on the Internet.
On my first day of studies, two years ago, I had my first encounter with Machine Learning and I fell in love... There's really cool stuff out there. I've always felt that computers can and should do much more than they are doing and there's still a lot to do until they get better (in my opinion). It seems to me that Machine Learning is a good place to start.
Apart from that, I love cooking, baking bread, taking pictures (stills - I don't really fancy video) and I play the piano in my spare time, which sometimes helps relaxing my baby girl (though the television is becoming a tough competition).
So, what should you expect from this blog?

  • First and foremost, software engineering stuff. I've already posted my MessageLoop object. My next technical post will be a completely dynamic class factory (something like the .NET Activator but with performance almost like the 'new' operator - no more "one second activation"). Since I want to clarify quite a few things in this article, it won't be as soon as I'd have liked, but I will do my best. After that, we'll see. I've got a few ideas already, but I don't want to promise anything yet.
  • Remarks about interesting technical stuff I encounter, problems I had to solve/work around, links to other bloggers/articles, tools, etc.
  • Since I'm currently learning a lot in the domain of Machine Learning, I'll probably post some stuff on that. Once we have our paper done, I promise to post a link to it, of course (don't hold your breath, we're several month away...). Also, I might have to code some ML algorithms, in which case you can expect to find a link to that as well.
  • Cooking and food - When I find a good recipe, I'll let you know.
  • Harry Potter - I'm a great HP fan (the books, not the movies), and especially after having read the Half-Blood Prince, I have some things to say (like most the people I know who've read it). Yet, since I know it hasn't yet been published in languages other than English, I might wait another 6 months before I start with that. I would hate to spoil it to others.
  • The usual blogging stuff, you'll see.
  • Last but not least - pictures, primarily but not exclusively of my family.

To wrap it up, let me just say this: "I sollemnly declare that I'm up to no good!" (J. K. Rowling)

RSS feed + a promise

Blogger.com have a really nice blogging system, but they don't provide a simple means of finding the RSS feed URL. So if you're interested, the feed for this blog is:
http://ilanas.blogspot.com/atom.xml

Also, I've been asked to give some more details about myself and what I'm going to blog here. I'm on it, just have to find the few minutes required for posting. I'll post some more stuff about myself soon, promise.

Tuesday, August 30, 2005

A picture with my baby-girl (Gal)



Thanks to my friend Itay Shuv-Ami (a.k.a. Itaish) for taking this picture.

Thursday, August 25, 2005

A Message Loop object

I've posted a MessageLoop object implementation on CodeProject. Enjoy: http://www.codeproject.com/useritems/messageloop.asp

Wednesday, August 24, 2005

Hmm, where do we start?

Well, I'm all new to Blogging (as a Blogger). Since I've been enjoying various other Blogs very much laterly (Roy Osherove , Useless Inc. and others), I figured - let's give it a shot.
So here I am.
Well, if you're wondering what I plan to be posting, I guess it will be about the following:

  • Some programming stuff. I've written some nice infrastructure components in C#, have some SQL thoughts etc. I'll post them when time permits as well as stuff I encounter on the way
  • Academic stuff - especially related to Machine Learning
  • Some personal stuff (mostly pictures of my little girl)
  • Thoughts of all kinds

Well, that's it for a start. I guess I'll post some background about me in the near future. I don't promise I'll keep up blogging. I'm starting today, then we'll see.

Hell, Why not?