I am going to be spending the next weekend and the following week in the Netherlands.
So, if you know of a cool user group, geek get-together or whatnot, please let me know. Everything that has to do with web development (in any FW out there), large-scale systems, distributed data stores, agile processes, team leadership and management, ALM tools.
This is also a good opportunity if you are looking into a short consultation gig (a few hours) in one of the aforementioned areas, especially with MVC frameworks for .NET, client side JS/CSS guidance, setting up CI environment, DVCS usage and more. Give me a shout on email or through a comment on the blog (that will be kept private if you wish to)
I will mostly be in the area of Utrecht and Amsterdam, however I’ll have a leased car so I guess that everywhere within a reasonable driving range is acceptable.
I had tremendous fun coordinating work on the project, and I enjoy working with Monorail on my day job. I just do not have neither the time nor the attention to give the project anymore, and John is a much better fit, as he proved over the last few months with his efforts for the project.
So I treated myself to a one demanding hobby less.
I hope it will help me post more regularly now.
Interesting enough, I plan to do a few posts about recent performance issues I tackled in AspView. So I guess my MR days really aren’t over yet :)
I’ve just found out that my I’m being *quoted in a book !
the book is Testing ASP.NET Web Applications (Wrox Programmer to Programmer) from Ben Hall, a great guy I know from the first UK ALT.NET conf, and another guy, who happens to blog quite rarely, but I do like his
So You Think You’re A Web Developer series. Plus anyone investing time in Web apps testing is a worthy man, not to mention a guy that invests time in educating people into testing their web apps.
* Actually, it’s not anything smart that I’ve been saying, but rather my simple IoC implementation, which I originally created for a tiny project that couldn’t have had *any 3rd party dependency (including Windsor), and is now being used as a manner of teaching what an IoC is and how it can help you. neat, and thx for the credit.
Take a look at the following piece of code
namespace Egozi { class Baby { public static void Main() { var noam = new Baby(DateTime.Parse("2009/08/21 20:00 +3"), 2.750, "Noam"); while (true) noam.RelaxOnDaddy(); } public Baby(DateTime birthdate, double initialWeight, string name) { Birthdate = birthdate; InitialWeight = initialWeight; Name = name; } public ulong GetComputedCutenessLevel() { return Name == "Noam" ? ulong.MaxValue : GetRandomNumber(1, ulong.MaxValue); } public DateTime Birthdate { get; private set; } public double InitialWeight { get; private set; } public string Name { get; private set; } public void RelaxOnDaddy() { } public void Poo() { } public void Pee() { } public void Burp() { } public void Accept(IVisitorWithPresents visitorWithPresents) { visitorWithPresents.Apply(this); } } }
Not too exciting on it’s own, right?
Now take a look at on the binary format:
and here after call to RelaxOnDaddy():
super sweet :)
The little dude even acted as the resident super model during the “how to bathe your baby” session at the nursery, acting as if he was a Michael Phelps grade in Water Handling.
So if you were wondering why my general availability was not at it’s best lately, this tiny little miracle who crashed into our life just short of three days ago, is the reason.
Lots of experiences to have, lots of things to learn and explore. All very complicated. The amount of baby related *stuff* and *things* out there is mind blowing. And everything should be used just a wee bit differently then the next thing, and every nurse gives you a different advice with a 100% certainty. It is kind of like your regular OSS usergroup of choice actually.
So without any proper location to RTFM from, I guess it would come down to a mix of instincts, best judgement, and a good portion of trials and errors.
I’m popping back offline now to attend my amazing wife who took care of the whole thing, and our cute little wonder.
UPDATE (25/08): fixed a copy&paste type, added Main, added name
I hope that the new server will prove more stable.
Some interruptions etc. might occur, so please be patient. I hope it’ll be allright soon enough.
Please do not leave any comments meanwhile as they might not make it through to the new server.
I like the 'smell' of the airport.
I'll be spending the following week on a snowboard, and the guesthouse I'll be at has no internet access, so if you see me ignore emails, castle's usergroups, facebook 'join XYZ group' invitations etc., don't take it personally.
Except the facebook thing, I rarely join any group, cause or application. only friends requests (from people I know), thank you.
I might have a little time to post some more while waiting in the airport lounge, but don't count on that.
Took me a little while to set my mind on it, but after doing remote contracting for a year and a half I've had enough of pyjama-driven work, and I started looking for brilliant teams to become part of.
In the past I always worked at places where I was, in technical terms at least, *the* leader. At most, I shared that position with Oren Ellenbogen at SQLink for a while, but at the end of the day I always had the ability to veto on technological issues, and people were following my advice on seniority basis.
While contracting, I worked with this amazing start-up company in the UK. They have very experienced and smart people on boards, and it was the first time I found that I really need to fight to get my voice heard. It would be an understatement to say that the satisfaction from knowing this kind of team has accepted my proposals at times is enormous. That's because I was challenged, and needed to lead a change in a place I'm not the CTO/Team-leader of. When at later point we did things according to my suggested (and accepted) design, and was happy to work with it as it was easier and more fun, I was very proud of my work.
One more aspect of my past employment is that it was always in small to small-ish teams. at most I was a part of about 10 people R&D department.
So what I was looking for now was a company with a large(r) R&D team, with great people with whom I can learn together. A place that is being managed well, that is fun to work for, and that will challenge my skills and push me to learn and evolve.
Being the software geek that I am for so many years, and also active in the development community, I am blessed with friends who are holding various positions in R&D departments around the country. This gave me the opportunity to come in to amazing companies, and go through very interesting interviews (that goes *way* beyond abstract-class-vs-interface, testing my design, coding and testing skills, my knowledge in software architecture and problem-solving skills).
At the end I picked up www.delver.com. It's a cool startup company with embarrassingly smart people and I'm honoured to be in their ranks.
Oh, and they are also using AspView in production from day one ... ;)
To new beginnings,
Ken the devler
explanation (before the wife kills me): I have some free time in the coming months, so I'm looking for interesting consulting gigs.
So, if you're in a company / dev team, and looking for some help with Castle (Windsor, MonoRail), NHibernate, or general information system design and architecture advices or training, setting up build and test environments, or any other of the things I rant about in this blog, then I'm your guy.
I also do web-client ninja work, dancing the crazy css/html/javascript tango (jQuery: yes, Ms-Ajax: no)
I currently live in Israel, but I'm fine with going abroad for short terms if you're an off-shore client.
you can contact me at "ken@kenegozi.com"
I mean, see how dependant on rss I became.
I'm doing my blog reading through google reader and I'm quite happy with it. One of the first blogs I was subscribed to is Ayende's. This dude usually post about 100 articles a day, so it's a safe bet to see him in the Unread list when I fire up reader to help my morning coffee down the throat.
At 17 Sep. I stopped finding new posts there, knowing Oren personally, I knew he was doing some off-shore consulting gigs and I figured he had little time for that.
I even remember a certain known figure in the .NET OSS world who have asked me to try and visit Oren in his home, as this dude was worried due to the unlikely low profile on his blog for some time ...
I did reach him then by email and that was enough to prove he's alive and well, but I didn't think about asking him on the matter of the silence on the blog feed.
Today I opened up his blog to look at something in his blog's layout and the first thing that I noticed was that there's a new layout. Then I found that there are many new posts, which I did not get to my reader.
Apparently what happened is that the feed is being burned via feedburner now, and I was looking at his old Dasblog based feed endpoint, and the redirect from there is probably no more in place.
Lesson I've learned: pop onto my favourite bloggers' sites from time to time.
I've revisited my google-ajax-enabled search page (at www.kenegozi.com)
It can still look better of course, but it is much better than the former one.
Now I need to revisit my blog's design a wee bit ...
btw, I use this page as the home page on all my browsers. It makes googling much faster and productive, and you are all invited to use it for your search needs. I try to keep it as lightweight as possible so it would load as fast as possible. Suggestions etc. are always welcome.
Without even noticing, I've passed the 300th post on this blog this week.
As the first post was at 30th Jan 2006, it gives 305 posts over 31 months - that's almost 10 per month. And I started off very slow ...
Prepare to be surprised ...
http://flickr.com/photos/arikfr/2753627777/in/set-72157606676239795
I've been tagged by Mike Hadlow (Great blog - subscribe to it now, what are you waiting for?)
Ok, let's go.
My dad is one the IT dinosaurs. He have been doing the Punched card dance from early stages of public sector computing in Israel, and I guess I must have inherited the passion for programming. Before I got six, he bought me a ZX-Spectrum, alongside some BASIC beginners book in Hebrew and threw me into the deep water.
After a few months of getting comfy with the language, I've learned to read English and got my first serious programming book, one the tried to teach things like code reuse using GOTO and GOSUB.
I also had to learn some Assembler as the ZX's BASIC was pretty much limited.
BASIC, as noted above
A simple yet effective word processing application, written in Turbo Pascal 5.5. I was about 16 then.
This word processor was for the sole purpose of aiding my older sister go through Law School. I needed a way to type and printing her seminars and there was no built in WP in MS-DOS but edlin.exe back then, and no Internet to download a WP from.
At 18 I wrote another program in Pascal, aimed at keeping track of membership payments for a local Bnei-Akiva Branch. I learned the hard way that building a DB engine by hand without any theoretical background, and without ever hearing about terms like "SQL", "Relations", "Transaction" and the like, is not a simple thing to do. By the time this application had enough features I have already left to recruit to the IDF, so it never got into production.
Then there was a gap of a few years during which I didn't program until I was 24, and I needed to write my third and forth applications. They were in ACCESS, VBA and VB, written as part of my jobs in the army as a logistics officer. I needed a better inventory manager than the old MAGIC based that my unit had, and a better solution for keeping track of vacations utilisation of the staff.
There you go. Not only the first one, but the first four.
After leaving the army, I taught myself C#, HTML and ASP.NET, registered as self employed and ran a few projects for a few clients. The first of which was a simple VBA based automation for an import/export dealer in the aviation industry. The application was automating the read of RFQ emails, looking up for matched data in their propriety Interbase driven DB, and then exported a report containing highly probable sale items. They liked it so much that they started adding features, and other business-helping apps. They still are a valued customer.
An interesting note here - the last time I have updated or fixed a bug on the first application was almost two years ago. And it's still in daily use, so even though it's coded in a way I'd call blasphemy today, with all the VB-ness scattered around, I still am very proud of this piece of code, as professionally it is rock solid, and not too difficult to maintain, and from business prospective it had a huge benefit for the client.
I would have started even earlier :)
Be open to criticism. If you program alone, then try to share as much code with the community as you can, by participating in open source projects. The best place to learn is from your own mistakes, pointed out by others.
I can certainly testify on myself, that I've learned a lot more when I was part of teams where I was not THE tech leader, be it on paid gigs or on OSS.
During University when I took "Introduction to Algorithms" (learning part I of "Introduction to Algorithms") I had to build a Red-Black tree representation. Back then The only language I know well enough was VB, but I had write it in C++. I did know the basic syntax from my C background, and some vague knowledge of pointers and memory allocations, but that's about it. The project was supposed to be written by a team of three, but I then decided that I had to learn C++ decently and write this alone, so I sat down for a long weekend, got myself a copy of the STL to learn by example, and produces a working generic RB-Tree implementation using Templates to allow generic keys in the tree.
When I sent it over to the other team members, all they had to do was to smoothen up the rough edges.
Again, it wasn't very pretty, but I did prove a point to myself, with that little exercise.
In order to make the propagation of this topic even faster, I decided to tag 9 people (!):
One of the goals of this blog is for me to be able to get feedback from other people. Usually it means feedback regarding code I write, design decisions I make, and other technical stuff.
However one other goal is to improve my written English skills. Therefore I would be happy to accept any input regarding spelling, vocabulary and grammar mistakes. I won't be offended, that's a promise.
I've refined my "unit testing framework" a bit, to make it less awkward.
the code:
test(Fact/Test):-
current_predicate_under_test(Predicate),
retractall(test_def(Predicate/Fact/Test)),
assert(test_def(Predicate/Fact/Test)).
setup_tests(Predicate) :-
retractall(test_def(Predicate/_/_)),
assert(current_predicate_under_test(Predicate)).
end_setup_tests:-
retractall(current_predicate_under_test(_)).
run_tests :-
dynamic(tests_stats/2),
bagof(P/Tests, bagof((Fact/Test), test_def(P/Fact/Test), Tests), TestsPerPredicate),
run_tests(TestsPerPredicate, Passed/Failed),
write_tests_summary(Passed/Failed).
run_tests(TestsTestsPerPredicate, TotalPassed/TotalFailed) :-
run_tests(TestsTestsPerPredicate, 0/0, TotalPassed/TotalFailed).
run_tests([], Passed/Failed, Passed/Failed):-!.
run_tests([P/Tests|Rest], Passed/Failed, TotalPassed/TotalFailed):-
write('testing '), write(P),
foreach_test(Tests, PassedInPredicate/FailedInPredicate),
write(' passed:'), write(PassedInPredicate),
(FailedInPredicate > 0, write(' failed:'), write(FailedInPredicate) ; true),
nl,
Passed1 is Passed + PassedInPredicate,
Failed1 is Failed + FailedInPredicate,
run_tests(Rest, Passed1/Failed1, TotalPassed/TotalFailed).
foreach_test(Tests, Passed/Failed):-
foreach_test(Tests, 0/0, Passed/Failed).
foreach_test([], Passed/Failed, Passed/Failed):-!.
foreach_test([Fact/Test|Rest], Passed/Failed, NewPassed/NewFailed):-
assert((run_test:-Test)),
(
run_test, !,
NextPassed is Passed + 1,
NextFailed is Failed
;
NextFailed is Failed + 1,
NextPassed is Passed,
write('FAIL: '), write(Fact), nl
),
retract((run_test:-Test)),
foreach_test(Rest, NextPassed/NextFailed, NewPassed/NewFailed).
write_tests_summary(Passed/0) :- !,
nl,
write(Passed), write(' tests passed :)'),
nl.
write_tests_summary(Passed/Failed) :-
nl,
write(Passed), write(' tests passed, however'), nl,
write(Failed), write(' tests failed :('),
nl.
reset_all_tests:-
retractall(test_def(_/_/_)).
the usage:
:- setup_tests('conc/3').
:- test('empty and empty returns empty'/(
conc([], [], [])
)).
:- test('empty and nonempty returns L2'/(
conc([], [1,2], [1,2])
)).
:- test('nonempty and empty returns L1'/(
conc([1,2], [], [1,2])
)).
:- test('nonempty and nonempty returns L1 concatenated with L2'/(
conc([1,2], [3,4], [1,2,3,4])
)).
:- end_setup_tests.
my current test output:
| ?- run_tests.
testing conc/3 passed:4
testing create_list/3 passed:2
testing empty_pit/5 passed:1
testing get_opposite_pit/2 passed:2
testing in_range/2 passed:2
testing is_in_range/2 passed:4
testing put_seeds/5 passed:3
18 tests passed :)
yes
Finally I'm sitting down to be done with my Computer Science degree. I've been studying in the Israeli Open University starting 2003, while working full time and more. Over than two years ago I reached the point of having literally no time at all to finish it up, so I left it to be with only two final projects to complete, present and defend.
The first one is to write a simple AI enabled game (using depth delimited alpha-beta algorithm variation) , in PROLOG.
Back when I took that course, the whole paradigm was too strange to me. I've been doing procedural and OO coding for years, and the look of the programs just looked .... wrong.
Nowadays that I developed a lot of curiosity into declarative languages like Erlang and F#, (and being a much better and way more experienced developer) I can relate to that type of coding more easily.
So, dusting the rust of two year of not touching it at all, I sat down today to start working on that project (delivery is next month), I started with writing down a small helper for running unit tests on my code.
Ain't pretty, but it serves both the need to test my code, and the need to re-learn the language:
run_tests :-
dynamic([
tests_passed/1,
failing_tests/1,
total_tests_passed/1,
total_failing_tests/1 ]),
assert(tests_passed(0)),
assert(failing_tests([])),
assert(total_tests_passed(0)),
assert(total_failing_tests([])),
bagof(
(Module/Predicate, Tests),
tests(Module/Predicate, Tests),
TestDefinitions),
run_tests_definitions(TestDefinitions),
retract(total_tests_passed(TotalPassedAtEnd)),
retract(total_failing_tests(TotalFailedAtEnd)),
len(TotalFailedAtEnd, TotalFailedAtEndCount),
write('summary:'), nl,
write('Passed: '), write(TotalPassedAtEnd),
write(' Failed: '), write(TotalFailedAtEndCount), nl, nl,
(TotalFailedAtEndCount> 0, write_fails(TotalFailedAtEnd) ; write('Alles Gut'), nl).
run_tests_definitions([]) :- !.
run_tests_definitions([(Module/Predicate, Tests)|T]) :-
write('module: '), write(Module),
write(' predicate: '), write(Predicate),
write(' ... '),
run_tests(Tests),
retract(tests_passed(Passed)),
retract(failing_tests(Failed)),
assert(tests_passed(0)),
assert(failing_tests([])),
len(Failed, FailedCount),
write('Passed: '), write(Passed),
write(' Failed: '), write(FailedCount), nl,
retract(total_tests_passed(TotalPassed)),
retract(total_failing_tests(TotalFailed)),
NewTotalPassed is TotalPassed + Passed,
conc(Failed, TotalFailed, NewTotalFailed),
assert(total_tests_passed(NewTotalPassed)),
assert(total_failing_tests(NewTotalFailed)),
run_tests_definitions(T).
write_fails([]) :- !.
write_fails([H|T]) :-
write_fails(T),
write(H), write(' failed'), nl.
run_tests([]) :- !.
run_tests([H|T]) :-
run_test(H),
run_tests(T).
run_test(Test) :-
call(Test),!,
tests_passed(X),
retract(tests_passed(X)),
NewX is X + 1,
assert(tests_passed(NewX)).
run_test(Test) :-
failing_tests(X),
retract(failing_tests(X)),
NewX = [Test|X],
assert(failing_tests(NewX)).
% Asserts
assert_all_members_equal_to([], _).
assert_all_members_equal_to([H|T], H) :-
assert_all_members_equal_to(T, H).
this code is allowing me to define my tests like the following:
tests(moves/change_list, [
change_list__add_first__works,
change_list__add_middle__works,
change_list__add_last__works,
change_list__empty_first__works,
change_list__add_middle__works,
change_list__add_last__works
]).
change_list__add_first__works :-
L = [1,1,1],
change_list(L, L1, 1, add),
L1 = [2,1,1].
change_list__add_middle__works :-
L = [1,1,1],
change_list(L, L1, 2, add),
L1 = [1,2,1].
...
invoking the tests is as simple as the predicate:
:- run_tests.
and the current output from my project is:
module: utils predicate: in_range ... Passed: 4 Failed: 0
module: utils predicate: create_list ... Passed: 2 Failed: 0
module: moves predicate: change_list ... Passed: 6 Failed: 0
module: moves predicate: move ... Passed: 1 Failed: 0
module: moves predicate: step ... Passed: 1 Failed: 1
summary:
Passed: 14 Failed: 1
step__when_ends_within_same_player_pits__works failed
yes
Ahm. A failing test .... back to work I guess.
btw, The game I am implementing is Kalah.
I've just stumbled upon an old post on this very blog.
In the post I actually quote a comment I have left on Ayende's blog. The nice excerpt from there:
Maybe having a ViewEngine that's use c# or VB.NET instead of boo (not the WebForm ViewEngine which suck, but somthing similar to Brail)
This was on 26/10/2006 ...
Three weeks later (on 14/11/2006) I've announced AspView, after starting working with the first bits for my employer at the time, SQLink
Two days later I have made a first release public.
on 01/12/2006 I was granted a Write access to castle/contrib - AspView started gaining some recognition from the community
The rest is history. You can follow on the AspView tag here
What's there to come? stay tuned and find out
Hadn't been writing a lot lately, even though exciting things were happening, especially in the AspView front (stay tuned).
Why, you ask?
Well, I'll tell you why.
Had a tooth implant on Sunday, and the antibiotics and pain killers were distracting me. To the point of loosing time over extremely stupid mistakes.
Anyway, I hope to fell better next week, and to have some spare time for writing some interesting stuff.
Wow, it feels like yesterday.
On last December, the feedburner's subscribers count on this blog has first reached 200.
Two weeks ago I've noticed that:
Silly, useless, but pats a certain shoulder nonetheless.
30, that is.
I've been snatched to birthday dinners all week, like it's not enough that Im on the most full-of-work time of my life. Non-urgent things (like improving AspView or taking a shower) got pushed aside. Just kidding, AspView is important enough ...
Sarit took me on a surprise vacation.
Mt. Hermon, view from Kefar Giladi:
That's me at the Zavitan pools next to the waterfall:
As for "next year resolutions" - hmm, I did not put much thought in that so I'm just scribbling:
1. Complete the bachelor's degree. High time I did that;
2. Give at least three talks. I really enjoy sharing knowledge, and it also pushes me to know more on things I consider myself proficient in. First talk is already scheduled for 14 May, at "The Developers Group" meeting on Microsoft Victoria, London UK. I hope there'd more to come;
3. Delve into Silverlight 2.0;
4. Learn F#;
5. Increase my NHibernate skills;
6. Find time to contribute to Linq For NHibernate;
7. Continue pushing Castle forward. The whole stack. It's just great;
8. Do more sports (cycling and/or swimming);
I'm terribly sorry, but it seam that I've had a problem with my mail server, so during the last two month I did not receive any mail sent to my mail address on this domain.
I was able to access some of those now, and I'm going over the messages, so if you were waiting for a response regarding any Castle / AspView / Other issue, I hope Ill get in contact soon.
I swear that this post's content is true:
I certainly remember a few occurrences of going to sleep with some coding/design problem or idea (of late - SQL Query Generator), just to wake up with a solution. I also tend to wake up from disturbing dreams, with some of those being just the regular night horrors, but at times they involve irresolvable build errors, ASP.NET yellow screens, and TortoiseSVN irritating noises.
Anyone like to share his Coding Dreams?
Last Thursday I was informed by the organizers of alt.net UK conference that they have managed to squeeze me in, so I immediatly booked a flight to London, and have attendet.
I was superb, and I've written a few posts, but since I was not online during the last few days I had no chance of publishing 'em. Hopefully they'll get during the next few days.
A lot have also been piling up on my MonoRail and AspView "desktops" so I appreciate the patience of the users, and I promise to do my best to keep up with the requests and patches being sent to me ...
When I've started using feedburner (mid Sep.) there were about 160 subscribers.
Nowadays:
Next to super-blogers like Scott Hanselman or even local blog heros like Ayende, its nothing.
But it's mine.
I can also see a very (obvious) correlation between the amount of code posts per month and the growth in popularity.
That mean that people likes reading code samples, and that they find it useful, so I'd do my best to make more of these, should time permit.
Not MS-Excel.
As if it was not enough that wife has graduated her B.A. with honors, now she has just given a notice that she is about to gain honors on her M.A. studies, too.
And as if that's not enough, during the course of the studies, she has been employed at 80%-100%.
And now she starts looking at doing a Ph.D.
Now I feel the urge to complete my damn Bachelor's (and I'm around 84, so no honors for me), and learn so much, and code that much so I'd become a great good better-than-I-am-now developer, and just to try and keep up.
I wish I had the time (and cash) to go there, as great speakers would host there.
Anyway - if I would've got there, I'd go for:
Anecdotes:
So you can tell me what you think on the new design, or any other thing (like what you think on the new changes to AspView, how you like working with the Castle stack, how great AspView is, how good looking I am, and any other kind of constructive criticism).
It's time to reveal one of my major handicaps, that didn't make it to my "five things you didn't know about me" list:
I can't dance.
I hate to dance.
I won't dance.
Therefore: I am getting bored at weddings.
Yesterday at a wedding party of a good friend of ours, I found myself sitting at the table by myself, with only my old PDA to accompany me.
So I wrote a post about the new release of AspView.
I would've written that one, too, however the PDA went low on battery, so I've had to find something else to do.
That was, drawing some domain design concepts for a portion of my new project at Music Glue, not on napkins, but rather on the back side of my checkbook ...
When we went home, the happy groom and bride hugged and thanked Sarit who was dancing all night like a party animal, and then gave me The Look. Yep, That one. That say "You'd better leave a fine present as no happiness came from your's tonight".
Just been back from a few days in Ireland, where I went with Sarit for a vacation, and for getting to a clearer state of mind. At least on that level it proved to be very productive, as I came back with more than a few solutions to problems I've been facing ,and even some new ideas for expanding the line of services that we, at Music Glue, can provide.
Just so you'd understand how muse-ful can Ireland be:
and:
(All pictures were taken on a Canon S3 IS Camera - a perfect thing for a photo-newbie like me)
I'll upload some more pictures in the next days. Actually, I guess it is high time I'll get me a proper image sharing service subscription.
Any recommendation of a free (or low cost) ones?
I guess my priorities would be:
High availability;
Fast;
Easy to use (allow multiple uploads, allow easy post-upload tagging);
More pictures to come ...
*Craic: Irish word for fun/enjoyment that has been brought into the English language. usu. when mixed with alcohol and/or music. source: http://www.urbandictionary.com/define.php?term=craic
It seams that everybody is making their Simpsons themed avatars lately.
So, I present you with the Egozi family's Simpson pic.
I was sorry that we could not make Simpsons Cats for our kitties, so we settled for putting cats on our shirts ...
See if you can guess who's who.
Liked it? Grab yourself one, right here
It was absolutely brilliant.
I started to work for SQLink on late December 2005 as a Team Leader in the Web Projects Department.
Colleaged by Oren Ellenbogen, it has been a pleasure. Our department head, Moti, was doing the best he can to create a very likeable working environment, and all our developers were enjoing a workplace that enabled them to learn a lot. Oren and I were directing all kinds of sessions with the developers, showing them stuff about .NET and the CLR, from "what are nullables", through "What does the 'using' reserved word mean", to "how the GC is actually working".
We have built this great website called GotFriends, that gave the company a great new source for recruiting new employees, and actually is ground breaking in the Israeli HR world. Building that site, we've used many technologies to make it work smoothly with the company's inner legacy HR system, and with the aid of the SQL master Moran Benisty, it even worked in an efficient way, and coded in a maintainable manner.
Mixing WebForms and Monorail, CodeSmith based BLL with ActiveRecord/NH, ASP.NET WebServices (asmx) and POX/JSON services, it was a very fun thing to work on, in addition to the business benefit to the company.
However, a few months ago the Web Project Department was closed, and the company started a new R&D team, leaded by Elad, the company's VP of Business Development. We were two developers (Moran and I), and we worked on several initiatives that the CEO Tamir, and Elad, were cooking all the time. Those projects were all Community-Driven-So-Called-Web-2.0-Kinda-Websites. It was a real delight, and I got the chance to learn a lot about the business side of running an Internet related initiative, as both Tamir and Elad are experienced and intelligent, and the process of refining ideas, with those two, was a real treat.
They also gave me the freedom to make all the technology decisions, and they've had enough faith in me to allow me run the projects using MonoRail and AspView, and running Castle ActiveRecord for DB access. Actually, most of the drive behind creating AspView was actually driven by Elad and Tamir, as I've promised to do the best I can to make sure that future additions to the team won't need to learn Boo / Velocity in addition to learn the Monorail MVC and hql.
Which actually worked great. Moran has left the team about two months ago, and we've brought three new guys along (Ili, Ofir and last but not least, Itay), and they have seam to easily get control of all the "funky" technologies I've put in use in our projects.
Sadly enough, one of the initiatives has stalled just before airing, due to some business decisions. Then we started a new one, and in about 3 weeks we've had a working proof-of-concept, and I really hope that the site will air during August. I give the credit to the team, and to the use of MonoRail/ActiveRecord, as it's such agile and suits highly-changing-environment, as most web initiatives are.
A point of interest: This very blog's engine was actually a beta testing for some of the stuff we were using on our last project.
That's it folks. I wish the SQLink family all the best, and I'm going to keep an eye on the cool stuff the R&D team is doing, and hopefully I'll report on their success (which would be an AspView success too ...) right here on my blog.
Following Scott's post, here are my listings (is four okay?):
Four things I learned about software (in University, not College):
1. If you'll help a friend with a red-black tree implementation in C++, he'd eventually help you with an assembler precompiler in C.
2. Software Engineering is the only course where you can write a fully working program, with no compile warnings, with all tests green, and still get 60 out of a 100. (I'm sorry that my printing method was named ToString, while supposedly in ADA I should name it Put to keep convention with the language)
3. The good looking gals usually do not attend CS classes. If they do, they take DB Basics and DBMS implementations.
4. Watefall / BUFD is the ONLY WAY to manage software projects. I've had a 6 points course that dealt almost only on that. And they gave me 10% off the grade for doing a final design document without the proper fonts and colors.
Three things I learned about software while not in the university:
1. A code you write alone is bad. At least get someone to do code-review, and at best, pair program, or open-source your code so it'd get looked at.
2. You can either eat Pizzas, or have a loot of sugar-loaded-coffe mugs. If you do both, you'll get fat. (that ofcourse, unless you are a gal who attended a non DB related CS course, and then you're screwed anyway).
3. O.O. languages is not the only way to go. Static typing is not always the best thing. Javascipt is actually a programming language.
4. Scrum / XP / TDD / IoC / DI / MVC / UnitOfWork
just added a blogroll.
To the DB, to the Domain, to the controller and to the view.
Took me (all in all) 30 minutes, including all the coding, CSS-ing, uploading to the webserver, setting up the DB table on the hosted server, adding a few entries, clearing the browser's cache, and viewing it.
ah, and committing changes to Google code.
All of that was made in the Budapest Airport cafeteria, while waiting for my flight home (was a great trip. Photos, though not many of them, will be posted later on).
Rest assure that the DB access code is tested, and that the calls to the DB and to the cached data from the Controller and View are all typed.
I'd like to thank NHibernate, Castle and AspView (hey - that's me !), who made this possible.
I bet Ayende would have done it in 20 ...
Just added.
Commited to the repository, too (hosted at google code).
Look for the link on each post's footer.
Since this blog is running on an engine that I wrote (available on Google code site, here), it lack some features that more mature blog engines already have. (the other engines lacks the combined power of ActiveRecord/MonoRail/AspView ...)
So, that's currently my list:
1. Blogroll, for obvious reasons.
2. Email alert for me when anyone posts a comment for one of my posts.
3. Comments feed (via ATOM).
UPDATE - Done
4. Email subscriptions for new posts, or new comments on specific posts.
5. I have a problem with the font. I should fix the CSS but the Internet connection here (I'm at a Budapest hotel) is quite poor. Will be fixed next week.
UPDATE - Done
Any other suggestions?
note that I do not intent on implementing Pingbacks and Trackbacks, since those were littering my blog in the past.
So long dasBlog. It was great to have you, but it's time to move on.
After a lot of work, I am proud to announce that my blog is running on MonoRail, using AspView for the views, and ActiveRecord to do DB stuff.
Not too fancy codewise, since I have very little spare time.
Most of the time spent on the blog upgrade process was on:
1. Exporting the data from the "old" blog, and
2. making a decent markup and design for the new one.
oh. and 3. letting WindowsLiveWriter do the edits, since I wasn't in the mood to create a backoffice.
I'll blog more about the process, and I'll make the source available.
Please leave your comments here about the overall look'n'feel. There must be tons of bugs and I want your feedback.
I haven't written much lately, since I was:
a. Learning for my final exam so I'd get my Bachelor's Degree at this decade.
b. Under a lot of preassure at work, since we have a cool web2.0 thingie approaching a public beta real soon (will be followed).
c. Sneasing my heart out, darn flew.
d. Got into a new project at my personal business. This one is driven by Castle's ActiveRecord+MonoRail+AspView, and due to the client's request it'll use Access as the backend DB, and that would be a first-time-ActiveRecord/access for me. I still hope to convince him to at-least go for embedded FireBird.
So, stay tuned to some experiences with AspView, and hopefully in about a month you'll have two MonoRail/AspView driven websites out in the open. I am excited. Are you?
I've posted an article to CodeProject about building my Google Ajax Search Enabled Homepage.
So, go there, read it, comment it, vote for it, tell your friends about it, print it and glue it to your forehead, whatever you think is appropriate.
Unless you didn't like it. In that case, you shouldn't do anything. why bother ? :)
I have loaded a new homepage, and used a little of the Google AJAX Search API to make it interesting. Actually, I'm using it now as my browser's default homepage, instead of google.com
Not only that, but I have documented the process of making it, and have sent it to codeproject, to be published, as my first contribution there, in hope for more to come.
So, please leave your impressions, eiether here or in the codeproject article (I'll post the addresss once it will be up).
So, I've been tagged.
Actually, it was more than a week ago. Since I am not much of a writer, it takes me a lot of effort to write non-technical stuff. I've worked on a "5 things" post on notepad, and mistakenly closed it without saving. It took me while to recover (myself, not the file) and gather the courage to redo this post.
So, with no further ado, here are 5 thing you didn't know about me, nor will you probably remember tomorrow.
1. I grew up in a religious family. I even learn a few months in a Yeshiva. I used to like (and was quite good) the studies of "Talmud" and "Halacha" (the basis for Jewish laws) since those involve strict logic methods, and much resembles the way you prove mathematical theorems.
2. Before I was programming professionally, I was in the IDF. I attended the IAF flight course for a while, then went through combat training in the infantry forces until my knees almost fell apart, and I found myself doing paperwork. Later on I moved to the Logistics force, and became expert in Warehouse Management, and small scale HR management.
3. Before I was in the army, I was a musician. I own a great acoustic guitar (by Takamine), two sound modules (Korg and Roland), an electric guitar (Washburn), two Multi-Effect modules for guitar (Boss and Zoom), a synth (Ensoniq), two dedicated sound-cards (hoontech/Yamaha and an old SBLive Premium), Shure mics. I ran a full featured MIDI recording studio, and produced playbacks for people who wanted demos for the radio. I have also did musical direction for song contests, of the religious youth movement "Bnei Akiva". But I cannot read notes.
4. When I grew up I was afraid of animals. Of any kind. Even kittens. Now I live with three ex-stray cats and they sleep with me. Actually, they fight and I try to sleep ... I'll flickr some photos of them sometime. One of them play "fetch" like a dog. When I throw one of his toys, he runs to it, take it in his mouth, and bring it to me to throw again. The second is a beautiful cat who acts like a lady, and the third is blind from birth, but rules the house easily.
5. I have been coding since I was 5. really. My father have bought me a ZX-80 and a bunch of BASIC books, and I went CAREZY about it. I remember that when I was about 7 I coded a simple Space Invaders mock and invited two of my classmates to play with me. however, then I came to learn the importance of QA, since the game was very buggy and the friends went to play hide-and-seek while I tried to debug my spaghetti ...
So those were 60 minutes, about Ken Egozi. The movie feature is due this summer (kenegozimovie.com ...)
Eli Golovinsky, Dror Engel, Yosi Taguri, Hamilton Verissimo de Oliveira, Omer van Kloeten, Roy Daya
Hey people - you have been tagged !