Shital's Icel logo Shital's Icel

 
My Weblog



    Home 

    Stuff 2 Do 

    Cool Books 

    Downloads 

    Geeks Only 

    Essays 

    Photo Albums 

    Share 

    Say Something 

    My Blog 

    About me 

    About Site 




Some blogs on Gizmos, music, science, math, physics, hikes, adventure outings, programming, books and such stuff...

Subscribe feeds: RSS 2.0 | Atom 1.0 | CDF

 Wednesday, June 18, 2008
The Four Planet Dance Of 2008 6/18/2008 12:39:43 AM (Pacific Daylight Time, UTC-07:00)


The Observing Blog at S&T have posted this wonderful movie about celestial dance of some of the brightest objects in sky in August and September 2008, just after sunset. Unfortunately, for us in mid-northern latitudes (and especially Seattle weather), things won't be as bright and high but having these objects "collide" with each other and that too with crescent moon around looks beautiful!
More : Heavenly Stuff Permanent Link: #
 


 Saturday, March 08, 2008
Phun With Physics Simulations 3/8/2008 8:27:51 PM (Pacific Standard Time, UTC-07:00)


This addictive program can easily keep you busy for rest of the weekend so be careful :). Phun is a physics simulator that even kids can use and its absolutely a delight. I watched the video and had to immediately download to give it a try. At first the interface might seem not as easy but after reading tutorial in main page and forums, you might be able to accomplish everything shown in video in less than 15 min of learning curve! Simply the easiest, powerful and most fun physics program I’ve come across.

Enjoy!


More : Software To Download | Physics Permanent Link: #
 


 Sunday, May 06, 2007
Fast Asymmetric Generalized Hebbian Algorithm 5/6/2007 8:43:37 PM (Pacific Daylight Time, UTC-07:00)


I can get sucked in to challenges very easily especially when that involves Artificial Intelligence or statistical analysis. The challenge that has occupied my interests these days is the one that was put up by Netflix. It’s easy to describe: They give you 100 million data points for a triplet (Customer, Movie, Rating) and you have to predict the rating for given (customer, movie) pairs. If the average of squared errors of your predictions is below certain value you get a million dollar prize.

The problem is nothing new in the field. The researchers have been developing techniques for this class of problems since centuries – often without anticipating rewards. Any such material reward would be embarrassingly insignificant compared to the real prize - understanding the most unique and powerful thing in existence that we are aware of: The intelligence.

What makes Netflix prize an interesting challenge, however, is that it’s very well defined and several researchers are trying out their tools of trade so it also provides quantitative measurement for comparison. There are some consensus that Netflix have set the bar just high enough that no one would ever be able to achieve the lowest required RMS. But that shouldn’t stop you to enjoy the game and push extremes to new boundaries.

So how am I doing this? I started out brushing up on all existing techniques: Neural networks with linear elements, back propagation, principle component analysis and SVD, logistic regression (still many more to go: Bayesian networks, Markov decision process, SOMs and Recurrent networks). It’s one thing to read about these algorithms from text books and other to actually put in the practice to solve real world problems efficiently. The difficulty using these techniques straight from textbook (without domain specific enhancements) is that they suck when your data set is huge (matrix with 8.6 billion elements) and that there is no real generalized algorithms to determine several parameters such as learning rate, number of units and so on effectively.

The one algorithm that swept me away among all of these is called Generalized Hebbian Algorithm (GHA) - which probably is the most practical algorithm out there for linear problems since 1985 but is not described in even latest well known textbooks! This algorithm can deal with essentially infinite data that available serially, it will use only required amount of memory to hold eigenvectors and perform SVD starting with most significant eigenvalue!

In any case, I'm making my implementation of highly optimized version of this neural network algorithm available with source code.

Again limitation of GHA (and AGHA) is that they work best on linear problems only.


More : AI | Mathematics Permanent Link: #
 


Two Small Utilities 5/6/2007 7:38:03 PM (Pacific Daylight Time, UTC-07:00)


These two small utilities I'd wrote about an year ago and since then they were sitting on my network share. Meanwhile lot of people in my team used it and found them useful. There is still a large list of features that I'd like to add but even without it, these are pretty usable at this point. So enjoy!

SQL INSERT Script Genertor

Disk Defuzzer


More : Programming | Software To Download Permanent Link: #
 


 Tuesday, May 16, 2006
Math In Office 2007 5/16/2006 4:37:52 PM (Pacific Daylight Time, UTC-07:00)


I’d been attempting to post this entry right from inside Word 2007 Beta 2, but no luck so far interfacing with dasBlog. But the good thing is that most Office 2007 apps seems to be now blog and RSS aware. You can manage your blogging accounts right inside the Word or OneNote, although few things like pinging Technorati is missing.

The coolest thing in Office 12 is, though, new math related functionality. Now you can insert math equation in Word with rendering quality that matches LaTex (well, most of the time in Beta 2). The equation can be entered very interactively or in linear format which also allows TeX like symbol naming convention such as \alpha, \to, \infty and so on.  Full TeX syntax however is not yet supported and some features such as equation numbering is missing in this release. But the interactive UI to build equations is pretty funcky. You can align equations and form equation array by using shift+Enter key and right clicking on ‘=’ symbol.

Even cooler is the fact that this functionality is available from any Office app. So you can actually start writing equation in your emails and Excel sheet! The equations are converted in to png file when sent in an email so even the lousy email reader can handle it.  For example, here’s the Prime Number Theorem typed in Outlook 2007 is rendered as png image like this:

Andrei Burago working in with authoring team demoed this awesome power of Word12 and set out to rewrite my entire paper on twin primes just using Word 2007 (which I had written originally in TeX)!

The Ribbon bar is ultra cool and has replaced both menus and toolbar. This might drive you nuts however when you are trying to find some usual stuff such as list of recent files, print preview and so on. The trick is to click on Office symbol on upper left corner (hack, who would have known that!). The Lookout doesn’t seem to work any longer in Outlook 2007 but the instant searching is pretty satisfactory once you give it sometime to index stuff.


More : Software To Download Permanent Link: #
 


 Thursday, February 16, 2006
Introducing DSS 2/16/2006 7:04:01 AM (Pacific Standard Time, UTC-08:00)


There are tons and tons of things to blog but here is a quick one.

Last Thanksgiving (a 4 days of holidays in USA) I wanted to work on something really cool that is absolutely worth doing and something I can spend my entire 4 days continuosly. I looked over my list of pending projects to find something extraordinarily cool, kept thinking about new ideas flowing around, looked over to other idea websites and realized that my mind was just keept going blank all the while.

So when people asked what were my plans for thanksgiving, I'd reply "I'll be doing Project Blank" :).

It just so happened, at the very start of the thanksgiving I was casualy reading the SSE specs that was just announced by Ray Ozzie and immediately realized things missing in there and the huge possibilities of massive human collaboration that it can make happen. Rest of it is the story. I ended up spending about 16 hours a day in designing what I call now Data Syndication Services specifications and writing a reference application for it. While my efforts were inspired by SSE and Groove, the DSS design enables data sharing on a massive scale on much realistic grounds.

And guess what, I still call the project binaries Blank :).

Want to take a look? Go ahead and collaborate: http://www.ShitalShah.com/dss!


More : New Stuff On My Site | Software To Download Permanent Link: #
 


 Monday, November 14, 2005
Groove Hacks 11/14/2005 9:48:53 PM (Pacific Standard Time, UTC-08:00)


About a year and half ago, the new version of Groove had came out and it still didn't had an ability export IMs. It drove me nuts so I started to write my own Groove tool that would do it in excuse to explore its infamous internals. Ah! What a ride that was! Groove APIs have extremely huge surface area (which means there are thousands and thousands of them sprinkled all over in hard to find places). Tons of them have confusing names, misleading functionalities and put in the wrong place. The fun part? There is almost no documentation! And yeah, did I forgot to mention that they are heavy C++ oriented, frequently late bound and mostly proprietary stuff (they even have their own proprietary definition for rich text and APIs!)?

If your brain needs some challenge that's the place to dig in to. After sacrificing my 3 weekends I finally had a working tool that exports Groove IMs and put them to Outlook without loosing formatting or attachments! I consider this an equivalent feat of removing nag dialog of WinZip by changing a x86 jump instruction in its disassembled binary using only Visual Studio debugger and absolutely nothing else ;).

This tool had been sitting on my hard drive crying to get out for months and months. In between, I did some polishing up, adding wizards, support for Word and Excel, creating a help file and even created a website for it. So now I think it’s pretty much ready and have decided to give it away for free personal use (similar tools cost $50 something I guess). Check it out if you use Groove and want to save your invaluable messages! Call it laziness or ignorance or whatever but I really do feel guilty not to putting this out early when 3.0 came out and lot of people SO need it!

More : Software To Download Permanent Link: #
 


 Thursday, October 06, 2005
On The Run 10/6/2005 10:37:08 PM (Pacific Daylight Time, UTC-07:00)


It's easier to run.


More : Random Thoughts Permanent Link: #
 


Big Move 10/6/2005 8:46:54 PM (Pacific Daylight Time, UTC-07:00)


Okay... the (big) news time: We have moved out to all the way to the opposite coast and I've started my new work at Microsoft! More details will follow as I get some time from double pressure of moving and brand new job but suffice to say that Microsoft is possibly the ultimate geek destination on the planet and it shows up in all kind of little things. Lot of organizations out there fail to see the tremendous advantages of integration and try to mix and match in the hope they would get the best of both worlds. In reality they end up using only the lowest common denominator that exist between both worlds. Microsoft technologies are driven to its maximum at the MS campuses and its perhaps the best showcase for the power of these technologies. In other news, the fall colors in Seattle area is much vivid and really bright from what I used to see on east coast and something we thought we would be missing at this Evergreen State ;). This place rocks!


More : Personal News Permanent Link: #
 


 Tuesday, August 23, 2005
My New CodeProject Article On Equation Rendering 8/23/2005 7:31:01 PM (Pacific Daylight Time, UTC-07:00)


I just finished my new article on CodeProject. The mission on MimeTeX was started about couple of months ago when in a weekend I just got attracted to MimeTeX's C code like a magnet ;). Now I've built ASP.Net handler, caching, admin etc on the top of it and its looking great! Enabling scientific content on web seems to be my new obsession. So if you take pride in delighting your users with every new release, here's your brand new feature! Go ahead, download it, use it! If you run in to any problem, I'll be glad to offer you my help.

More : Permanent Link: #
 


 Monday, August 08, 2005
World's Most Beautiful Equation 8/8/2005 10:22:07 AM (Pacific Daylight Time, UTC-07:00)


UPDATE: Check out my article on detailed HowTo for this topic.

A weekend worth of effort has paid off so I can finally write about this equation. For those who wants to write about mathematics in their blogs knows what I'm talking about. Quite ironically, there is no built-in support for writing math equations in HTML. Of all types of knowledges, mathematics is something that remains invariant over time, cultures, languages. But the fact that the Internet, the largest knowledge resource of our times, does not yet have the capability to easily represent theses crown jewels is ironic.

That got to be changed. Thanks to John Forkosh who authored MimeTeX, the C code that parses equations in TeX format and renders them in to images. The code could be compiled as CGI executable to run under Windows. But my goal is different. I want to enable all forums, blogs, wikis and even desktop apps like Yahoo/MSN messenger so users can quickly write math equations. Considering some of forums and wikis have thousands of simultaneous users, the CGI executable just won't cut it. Neither it's usable for integration with desktop apps. So my decision was to convert original MimeTex code in to Win32 DLL and that's were the trouble begins (and weekend plans ends). I realized the MimeTeX code had several memory leaks which don't matter that much when you run it as a CGI EXE but could bring down the server if I'd to run it in-proc. Fortunately I was able to fix those leaks in just a weekend worth of effort and finally have my C# test app talking to MimeTeX Win32 DLL and displaying equations as I type! However the coolest part of the whole process was the long long emails with John Forkosh over next few days discussing every change I made in his code, carefully scrutinizing it, sending back and forth our changes to each other. While John would be updating his distro soon, you can download the code with fixes along with VB.Net and C# samples, DLL for desktop apps and my HttpHandler HttpModule code. This will enable you to integrate this functionality in any website or desktop app and let your users write equations as simply as:

Fermat's Last Theorem is <img src="$x^n + y^n = z^n$">

And Now without further ado, here's the answer to life, the universe and everything (and no, it's not 42):

Known as Euler's Identity, this equation reflects the relationship between four most fundamental numbers in the universe. There are not many important mathematical and physical equations where , or hasn't invaded yet and that in essence implies that these fundamental constants very tightly controls the ways the universe works (did you noticed ). So in nutshell, this equation just might be the concise definition of the universe ;).


More : Mathematics Permanent Link: #
 


 Friday, June 24, 2005
Some Cool .Net Nuggets 6/24/2005 3:00:46 PM (Pacific Daylight Time, UTC-07:00)


  • If type's constructor (i.e. static constructor) throws an exception, entire type becomes unusable. Any attempt to call any member of that type would result in TypeInitializationException.
  • Operator overloading should never be the only way to use the functionality if your code targets 1.x versions of frameworks because VB.Net can't access it without resorting to ugly calls such asop_Addition.
  • There is universal symbol for money (a generic version of $, £, ¥ etc) and it's ¤ (U+00A4). If you format the number as currency in culture invariant way then .net attaches this symbol to your number. I just think it's cool to have some universal symbol for money :).
  • Simplest way to convert hex number to int:Int32.Parse("1AFF", NumberStyles.HexNumber, null)
  • Simplest way to display array of bytes as hex values:BitConverter.ToString(byteArray)
  • If you updated something in your computer and suddenly your .Net app behaves bad, it is possible to do automatic rollback.. The .Net Framework keeps track of assemblies that was loaded by any managed app up. This info is stored in an INI file inLocalSettings\Application Data\ApplicationHistoryand is used by .Net Application Restore tool. I think this great debugging aid too.
  • In .Net world, zombies are not purely an imagination:
    class Person
    {
    	static object HoldOnToMe;
    
    	~Person()
    	{
    		HoldOnToMe = this;
    		GC.ReRegisterForFinalize(this);
    	}
    }
    
  • Values types are allocated on stack but not when you have an array of value types. For example,new Int32[100]allocates 100 unboxed integers on heap, not on stack.
  • The Finally block is not really always guaranteed to get executed. If any of these 3 special exceptions do happen, code in Finally won't be executed:OutOfMemoryException,StackOverFlowExceptionandExecutionEngineException(I'd be fortunate enough to experience all of these). That means you had created some global kernel objects, they will indeed hang around and may interfere when user restarts your app. BTW, if you see a code likecatch(Exception ex) {...}orcatch{...}, tell the developer that he has committed a sin.
  • Apparently GC.Collect() is not always a line of code you should disgust at. You might want to do it especially when you own the process and had created loads of objects which won't be used any further (for example moving on to a new tab in WinForms app). I used this in one of my projects to improve on the memory pressure and was really feeling guilty about it, until recently.
    	GC.Collect();
    	//block my thread till objects needing finalization are done
    	GC.WaitForPendingFinalizers();
    	GC.Collect();
    
  • You should always strong name your assemblies, especially if it is going to be used by assemblies in multiple AppDomains in the same process because only they are shared between domains; otherwise each AppDomain will have it's own copy. Why anyone would have multiple AppDomains, you ask. Well, if you are enabling your app to have 3rd party plugins, I strongly recommend loading all these plugins in to a separate domain. This way not only you can control the security policy on these plugins but also unload the bad plugins without shutting down your app. This is often overlooked in various plugin architectures for .Net but if you don't do this, you app might go on the same route as IE6.
  • If you have enabled your app or website for localization, don't forget to test it with Turkish language. If your thread is having CurrentCulture Turkish (tr-TR) and if you try to uppercase a letter i, you get İ instead of normal english I (i.e. Unicode character U+0130 instead of U+0049). Scott Hanselman has a first hand experience.
  • Many of you know Application.ThreadException event which lets you capture the unhandled exceptions in WinForms app and do something like Windows Error Reporting. But the better way is probablyAppDomain.UnhandledExceptionevent because that also lets you get notified for non-CLS compliant exceptions and without needing a reference toApplicationobject.
  • The values of public constants that you reference from other assemblies are embedded in your own assembly metadata. That means, if other assembly changes the value of the constant afterwards, you must recompile your own assembly or otherwise you still will be using that old value of the constant. I think this is as critical "bug" as lapsed event handlers.
  • Jagged arrays are not CLS compliant. If you are building a library that can be used by VB or C# guys, you can't have jagged arrays as public member type.
  • Visual Basic can do this:
    Try
    	...
    Catch e as Exception When x = 0
    	...
    End try
    

More : Programming Permanent Link: #
 


 Tuesday, June 21, 2005
Digits Of Pi 6/21/2005 1:20:14 PM (Pacific Daylight Time, UTC-07:00)


A famous quote from John Von Neumann goes like this,
Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin.

This is something I've intuitively believed since I was 15 and even hadn't heard of Neumann. Pure random numbers is (or probably more) as fascinating concept as or i. It is impossible to generate sequence of purely random numbers without tapping in to nature. That means I could never write a computer code that generates a sequence of random numbers without showing up absolutely any patterns in a long run. There are only better random generators, never a perfect one, except thy nature itself.

So when I saw an article that digits of Pi are so far empirically proven to be randomly distributed, I was shocked. Infect huge progress has been made to prove that digits of Pi are indeed randomly distributed. Now the fact is, π can indeed be calculated algebraically (i.e. without tapping in to any natural phenomenon) and the idea that this can produce a pure random distribution just gives me a feeling as if sky is falling. I'd been hypothesizing since long time that the ability to generate infinite sequence of pure random numbers is the most significant (and probably the only) property to identify the existence of real universe, if it at all exist, that is ;). Consider this question: How do you know, at this precise moment, that you aren't part of some simulation running on some huge alien computer, or that you aren't some character in StarTrek holosuit or that you aren't dreaming with all these things around you (however "real" they may feel) aren't really "real"? Ok, it's hard to explain what I'm asking you but in nutshell, I'm trying to find out from pure mathematical perspective if there is anything in the nature that I can't masquerade, a property of the physical world around us that is impossible to simulate by any artificial means however sophisticated.

My hypothesis is that this property of the real world is an ability to generate infinite sequence of pure random numbers. That means, if you really want to find out whether you are some simulation running in a giant alien computer, all you have to do is to observe some natural phenomenon over a time with precision P and verify that your readings demonstrate pure randomness over the period of time T, where the P and T depends on sophistication of that alien simulation. The P and T can be very large but can never be infinity, except unless you are in the real world, of course. This is the mathematician's version of "I exist because I think".

So now you know why randomness of digits of pi made my stomach cringe. When I think about it, I'm starting to feel that any transcendental number obtained through convergence of infinite series (lets call them algebric transcendentals or ATs) must indeed have its digits distributed randomly. If you remember Cantor, there are more transcendental numbers than any other kind. But what this really means is I'm able to generate sequence of pure random numbers only using algebric means. It's as simple as finding new AT and emitting its digits. If you were someone who had given lot of thoughts to the nature of random numbers for years, this would sound both frightening and exciting to you. But hold on, could this really be true? After giving this some thought I believe it couldn't possibly be. I've finally constructed the following conjecture:

From a finite sequence of minimum length L of digits of any AT, there exist a Turing machine program G(L) to calculate the next digit in that sequence in finite steps. In other words, for any AT there always exist a number L which is finite and for which G(L) is a computable function.
In simple language, if you just give me sequence of AT's digits I should be able to predict the next digits provided you gave me enough of them to start with. This simply means if the alien computer was trieng to fool you by feeding you digits of some AT as a stream of random numbers, you can just sit back, collect these digits for a while and when you get handful of those, you can run through your algorithm to predict the next digits and find out you are not really in a real world (and also the fact that aliens didn't knew about Shital's AT Conjecture)! So random distribution is not the one and only property to identify a sequence of pure random numbers. The sequence of pure random numbers would not satiesfy this conjecture (i.e. L would be ∞). Infect this should be outright obvious: For sequence of natural numbers 0, 1, 2, ... we have all digits equally distributed but this sequence isn't by any means random.

This also gets us on to something else: the L now becomes a valuable property of an AT. A random number with infinite digits can be considered as a special class of AT with L = ∞. Let's call set of all such number Ρ (greek capital letter Rho) then the cardinality of Ρ should be Aleph-1.

If all of this went over your head, here is fun part: Here you can look it up if your phone number has showed up in digits of pi calculated so far or even your name expressed as hex codes! For example, I can be found in pi at 67357954th digit ;).


More : Mathematics Permanent Link: #
 


 Tuesday, May 24, 2005
15 Questions On Leadership 5/24/2005 2:26:55 PM (Pacific Daylight Time, UTC-07:00)


These are interesting questions if you were pursuing an acadamy degree on management/leadership. I do have the answers but don't have enough room here to write it down (Fermat R.I.P.).
  1. What a good leader should do when a majority vote is different then his/her strongly held belief?
  2. If you must make a choice between hurting your team's goal or ethics, what a good leader should choose?
  3. Say your boss wants you and your team to do something that isn't good for your team's goals. After lots of arguments, your boss does not change his/her mind. How would you handle this situation?
  4. How a good leader should treat his/her equals in the team? What can you do to harness his/her abilities without producing conflicts in leadership or ego-clash?
  5. How a good leader would pass the unpleasant news to the team without hurting the morals and motivation?
  6. In certain phase of a project you need your team to heavily overwork for a some period. What are the good things to do to keep the team alive and motivated in such times?
  7. Some members of a large team may end up doing boring, repetative and otherwise uninteresting work. How a good leader would recruite them? How to keep them motivated?
  8. Statistically 90% of the projects goes over-budget and over-deadlines. Say if you did fell in to these 90%, how would you keep your boss and your team keep going?
  9. Communication is of atmost important to the team. But is it good or bad to have lots of discussions?
  10. What are the good rules of thumb for good signal-to-noise ratio for team brainstorming sessions?
  11. A very capable and essential team member of yours asks you for a raise but you do not have funds. How would you keep him/her?
  12. Say you lead a large team and you can't recruite every single team member personally any longer. What are the general good recruiting policies a leader can set up avoid the weak nodes in your team?
  13. If you had to choose between following two candidates, what job attributes you would consider for the best match? enthusiatic but unexperienced college grads and less passionate but highly experienced professionals.
  14. How a good leader should respond when he/she finds certain team members does not respect or have a belief in him/her?
  15. Lets say you came to knew that you might soon become the target for certain mishapes, which weren't really your fault. What would be your exit strategy?


More : Junk Permanent Link: #
 


 Monday, May 23, 2005
RSS And Calender Integration 5/23/2005 7:10:36 PM (Pacific Daylight Time, UTC-07:00)


The idea of wrapping calendar information in to the RSS feed may sound very appealing. Almost every website owned by some kind of group or organization has their event calendar. The thought that you can aggregate them in to your "Calendar Aggregator" is just so geekily cool. What if people started putting up their weekend plans through some kind of RSS-Calendar and you can subscribe to them in your calendar program! I dig through dozens of W3C and other specs and half a dozen of implementation to find out what has been done so far and why it hasn't happened yet. The result of my findings and possible solution are summarized in my essay in some reader friendly writing.


More : Events To Attend | Programming Permanent Link: #
 


 Tuesday, May 10, 2005
Trading Geek Dinner For Self-Theories Of Intelligence 5/10/2005 3:18:16 PM (Pacific Daylight Time, UTC-07:00)


I'd to ditch the grand New York geek dinner to attend a talk on how the Brain makes memories at New York Academy of Sciences. This is my current absolute favorite subject to spend all my free time so I HAD to be there. The talk also turned out to be very energetic, fun and fast paced by Jennifer Mangels of Columbia University. The first part of the talk was about the role of the hippocampus in forming long term memories and her research. What they tried to do was to record EEG signals from different areas of the neocortex when a person tries to memorize something and recall it back later. Her research attempts to imperially prove that different areas of the brain must strongly participate together to have hippocampus realize the importance of the incoming information and form the contextual long term memories. While I really disgust at how everyone in neuroscience these days just do some EEGs and fMRIs and run around to write conclusions, above theory fits well with Jeff Hawkin's On Intelligence.

However more interesting was the second part of the talk: The Self Theory of Intelligence. This is very interesting. In 1970s, Carol Dweck did some research on human motivation in school children and noted that some students intrinsically tend to persist in the face of failure while others quit as soon as the going gets rough. After more investigations, she discovered that student's beliefs about the nature of intelligence had a strong connection with the way they approach challenging intellectual tasks: Students who view their intelligence as an unchangeable internal characteristic tend to shy away from academic challenges, whereas students who believe that their intelligence can be increased through effort and persistence seek them out.
Students who hold an "entity" theory of intelligence agree with statements such as "Your intelligence is something about you that you can't change very much."   Since they believe their intelligence is fixed, these students place high value on success.   They worry that failure-or even having to work very hard at something-will be perceived as evidence of their low intelligence. Therefore, they make academic choices that maximize the possibility that they will perform well. For example, a student may opt to take a lower-level course because it will be easier to earn an A.   In contrast, students who have an "incremental" theory of intelligence are not threatened by failure.   Because they believe that their intelligence can be increased through effort and persistence, these students set mastery goals and seek academic challenges that they believe will help them to grow intellectually (Dweck, 1999b).

Dr. Dweck's research on the impact of praise suggests that many teachers and parents may be unwittingly leading students to accept an entity view of intelligence.   By praising students for their intelligence, rather than effort, many adults are sending the message that success and failure depend on something beyond the students' control.   Comments such as "You got a great score on your math test, Jimmy! You are such a smart boy!" are interpreted by students as "If success means that I am smart, then failure must mean that I am dumb."   When these students perform well they have high self-esteem, but this crashes as soon as they hit an academic stumbling block. Students who are praised for their effort are much more likely to view intelligence as being malleable, and their self-esteem remains stable regardless of how hard they may have to work to succeed at a task. (More at her page)
Dr.Mangels then showed some videos demonstrating how EEG patterns differ in these two types of people. This is very significant. It essentially implies that you can device a helmet for a person to wear and after few EEG recordings I would be able to tell if person is in one group or another! Think, interviews would be so different ;).


More : AI Permanent Link: #
 


Go Left Handed For Mouse 5/10/2005 2:10:13 PM (Pacific Daylight Time, UTC-07:00)


Recently I observed how unequally I use my right and left hands. It’s not because I don’t type with my both hands but it’s because I use only the right hand in maneuvering and clicking the mouse. Considering the number of clicks I make per day, this huge lack of load-balancing is terrible! So I switched the mouse on left hand and it’s been great (reminds me the first time I hold the mouse) except that my mouse is curved so it’s comfortable only on right hand. I guess I’m gonna get a new mouse which is left+right handed, wireless (easy to switch hands), optical and at least 5 buttons. Don’t forget to reverse the mouse buttons in control panel! This is really fun.

However, besides those sitting posture tips, I think the one factor that strongly affects your creativity at work is how far you can look from your desk.


More : Useful Info Permanent Link: #
 


 Saturday, April 30, 2005
The Review Of The Car That Rules 4/30/2005 2:19:52 PM (Pacific Daylight Time, UTC-07:00)


I guess it's the time to write down bits about Mazda RX-8 for the benefit of future buyers. This is the car we bought in year 2004. I've heard that the 2005 model is exactly the same but I haven't checked it. Anyway lets start the engines!

  • This car is a real head turner. I mean REAL. People see BMWs and Mercedes SLK350 and go ahh. This car is beyond that. Here, people not just go ahh but they literally stop you, tell you that they just went ahh and ask details about the car. And by "people" I mean complete strangers of all age and all types (even those truck and SUVs fans). It's not unusual for us to get one such stranger encounter every other week.
  • RX-8 has got automatic plus semi manual shifting called "sport" mode.  In sport mode, you can shift gears right on the steering wheel! Also this mode is safe even if you tend to screw up when driving manual.
  • This is a rear wheel drive and that means it really sucks on the snow. Actually it sucks more than average rear wheel drives. The semi-manual shifting doesn't help in snow because it looks like the automatic vehicle stability controls is turned off when you switch to manual so it's even more dangerous to manual on snow. When it was snowing heavily for couple of days, I preferred to park my car in parking lot and take the train.
  • It's little more above then ground (with those big tires, of course) then most sports car. This helps a lot when you on dirty-rocky road. However you may not cross lanes by going over divider lines like those SUVs do. On the plus side, it doesn't flip over like those SUVs do.
  • This car has rotary engines, not cylinders. So terms like V4, V6 doesn't apply to it. It simply doesn't have any pistons. It's fun to explain this to people when their first question for sports cars is "oh, is that V8?".
  • The coolest feature that might get peoples jaw dropped for this car is suicide doors. They are extremely cool. We have seen car passing us by and then backing up to us asking "what is that?".
  • It's even more fun when you try to get insurance for this car. "How many doors it has?" the agent might ask. It's technically neither 2 door or 4 door! This car defies the common mold.
  •  Many reviews I'd read said the trunk space is small. So far we didn't had problems putting our stuff including telescope, guest luggage, caving gear and what not.
  • If you frequently go outdoor places, GPS is not optional. In early 2004 model, the factory installed GPS had really bad software so we didn't took it and bought after market Garmin. However Mazda has upgraded this software in December, 2004 and it's as good as any after market GPS. I believe GPS is probably the most important thing in the car after steering wheel, gas and breaks.
  • RX-8 has cool design for in-between seat space. You get two cup holders in front and back, 3 big storage compartments, and two cigarette lighters. Totally worth it.
  • You want the red one.
  • The seat design and covers has star trekee looks. The covers are made from washable and really wear resistant special material. This means you can put heavy stuff like big luggage bags with pointy corners on the seats without worry.
  • This car is a huge gas guzzler. I guess it consumes at least 30% more gas then typical 4 door cars of similar size. We need to refill typically after every 5 hours of drive. And just so you know, this car only likes to have 93 octane premium gas.
  • On another luxury preferences of this car, you can only tow it on a flat bed. Other towing may damage the car.
  • RX-8 has powerful big breaks. Infect its breaks have same specs as Porsche Carrera GT. You might also notice that tires do not have wheel covers allowing faster cooling of those big breaks. The bad part is that lots of rust gets in to those parts and sometime it looks awful. However Mazda engineers have let us know that this is perfectly normal and nothing to worry about.
  • R8-8 dimensions are very similar to Porsche Carrera GT.
  • There are no rear wipers.
  • So far I've took it to 110 mph (higher speed isn't easy in tri-state area). High speed is pretty natural to this car.
  • RX-8 has rotary engines and it makes unique pleasant sound then engine with cylinders. The main advantage seems to be their super compact size and disadvantage being they are gas guzzlers.
  • Apparently only Mazda makes cars with rotary engines. They had released RX-7 about 8 years ago and the RX-8 is new incarnation with more compact and efficient engines. Check out RX-8 club which has tons of rotary engine fans.
  • It has almost enough head rooms for 6 ft people.
  • It has dumb headlights - totally manual, no photo sensors.
  • It doesn't have dumb doors (the ones you need to slam hard couple of times to get them shut).
  • This car requires mirrors to be perfectly set to avoid blind spots. It's more important than other cars. That means, if you are a couple, you both should be of nearly equal height people so if you switch seats, you don't have to reset the whole thing again.
  • Unlike typical 2-door sports cars, this car is excellent for new couples planning to start family in near future because you get the extra seats behind with own their little doors :). This car perfectly fits the title of "family sports car".
  • Other goodies included are digital speedometer and outside temperature. There is no compass.
  • One of the biggest thing I dislike in this car is non-standard stereo. The factory installed one is pretty low end and you can't replace it with after market ones because it's non standard! That's huge deal. It's a shame for Mazda because cars with half the price now comes with MP3 CD player and FM with text. The 9-speaker BOSS system is less them impressive when it comes to sound quality and to me it looks like waste of money. Actually 9 speakers are pretty much useless anyway because Mazda system can't play audio disks with DVD-A encoding which are specifically designed for surround sound experience. Mazda does sell proprietary MP3 replacement player, however, for $350 only.
  • Like most other cars, you would be required to heavily negotiate with dealers for pricing. In 2004, I kept hearing price tag of $29,000 (without tax) when I started looking and finally bought the car for $24,500 inclusive everything. The Wayne Mazda is an excellent dealer and service shop if you are in NJ.
  • Because RX-8 is pretty new, it's hard to tell anything about engine life and resell values. But I believe both are pretty good if you look at RX-7.
  • One of the problem with this car is that after you start the engine and then if you need to shut it down without driving, you have to step on gas while still in park mode and "rave up" the engines and then shut it down. Not doing this step causes something called flooding reported by many people.
  • RX-8 doesn't have 5 star safety ratings.
  • You get pretty powerful xenon headlights, sun-glass holder, automatic tire pressure indicator and no-traction indicator.


More : Useful Info Permanent Link: #
 


 Thursday, April 21, 2005
Lots Of Updates! 4/21/2005 11:44:07 AM (Pacific Daylight Time, UTC-07:00)


I would be writing all New York City related stuff at Metblogs rather then my own blog. This makes sense because lot of people who aren't in this region doesn't need to get those NYC stories. On the other hand, my NYC related writing will now reach to much larger audience. Check out some of my entries there about cool New York events, restaurants and such stuff.

On the other site news, you might have noticed new skin and more FireFox friendly design. I also decided to give away the engine that my website runs on (C# code I wrote almost 4 years ago) along with entire source code for this website (thats in VB.Net just for fun). Nothing special but main highlights of the engine is that it accepts raw HTML file as the base template and embeds your dynamic ASP.Net WebForm content inside that HTML. It also provides navigation control which runs off of XHTML templates and XML.

If you like my free utilities, don't forget to check out the massive updates in Geeks Only section. It has now many more of my programs and utilities that I kept it to myself. Specifically, the one called Browser History Analyzer analyses your IE history (support for FireFox coming soon), builds MS Access database and gives you tons of amusing info about your browsing habits such has the queries you fired on search engine, how do you refine your keywords progressively, how much time you usually spend on a page, how much time you spend on browsing and so on. Whilte still in development, it also features extensible architecture to let you make your own plugins. I've also put the link for article I wrote for CodeProject about how to show Explorer's progress dialog in your apps.

Finally some Alaska trip photos also have been added. Yenjoy :).


More : Go Somewhere, Do Something! | New Stuff On My Site | Programming Permanent Link: #
 


 Monday, March 28, 2005
On Truly Managed Operating Systems 3/28/2005 12:03:23 PM (Pacific Daylight Time, UTC-07:00)


Anyone who have worked with .Net or Java would have certainly thought about this: Is there a way to extend these runtimes/VMs to build truly managed operating system? As it turns out Longhorn would be "mostly" managed OS but this is not the kind of "managed" OS stuff we are talking about. We are talking about truly managed OS, in theory and in imagination, that is.

If you look at .Net runtime, it indeed provides several services that should be coming from OS otherwise: threading, security, PE loading and so on. When I was watching the documentary Revolution, Richard Stallman was describing similar situation in his days: they wanted to build an OS, they had compilers, all kind of command line utilities, code for various services and so on but they were missing a kernel. So even if they had got lot of functionality working, they still needed some base OS to run off their stuff. I think the .Net runtime/JVM are in the same situation.
 
So what a managed OS would look like?  Who handles all the system calls down the line and how? Say I want to turn on a pixel on the screen, what my lowest level code running on a truly managed OS would look like? Let’s think about it: the lowest level managed code you can write in .Net is IL, which is essentially an assembly language for a virtualized CPU and memory system. The IL essentially has no idea about the world outside its virtualized CPU and memory system. For instance, I can’t write any direct IL instructions to read sector 510 from my hard drive or turn on a pixel on my screen. In its current form, I would have no choice but to extend IL somehow so I can make low level system BIOS calls or embed native instruction for my graphic card inside my IL. That’s not good. If I’m allowed to embed such low level calls in IL, the whole thing isn’t "managed" anymore and also not independent of the hardware I’m using.

As I thought about this more, I converged to the answer that we need a "runtime" for each of the subsystem in the computer. If you think about it, a hard-drive controller is a CPU in its own right with its own instruction set and so is your graphics card. Your main CPU and memory are just "over hyped" subsystems of your computer. Our traditional runtime and IL only virtualizes main CPU and memory, not these other subsystems. Once we have this "runtime" for video subsystem, hard drive controller and so on, it should be possible to write pure IL instructions to say, draw a bitmap on the screen. Notice that the IL code should work on any graphics card which has been similarly virtualized. Now you see, these "runtimes" for subsystems are essentially equivalent to drivers in current world but with a twist that they follow exactly the same structure and standards as the main runtime.

So now imagination can go wild: You have several "runtimes" running and managing each subsystem in your computer. Obviously each of these runtimes needs to discover and talk with other. The traditional runtime only manages main processor and memory but now it needs to send out IL instructions to say, VM controlling hard drive. So we now have a need for a standard protocol to discover virtual machines in the system and talk to them (much like Plug And Play). Also we need a system boot-strapper, which initializes all the runtimes in your system and provides common "channel" for them to discover and talk with each other. I also speculate a base runtime from which all other runtimes must "inherit" so as to enforce common infrastructure such as secured access to instructions and inter-VM communication. If you let your imagination wilder, you can think of a runtime/VM as something that consumes bytecode, changes its own memory state and outputs bytecode to another VM or a hardware. So essentially you can have cascading VMs too. You can even pass objects around VMs and even create your own VM (for example, to emulate non-existent hardware or to create a OS level service).

So what is the managed OS again? It’s collection of VMs for each subsystem and a bootstrapper. Good, we got somewhere. Anything you code against it would be (really) 100% pure managed code with potential to be executed on variety of hardware. Infect you could even have a VM which simply delegates call to parent OS instead of real hardware subsystem. That could make it possible to build versions of this managed OS that could run off the host OS that you already have, without forcing you to partition your hard drive or reboot your machine. This would still let all your "managed" code run as is it but may be without extra-strength security and such stuff.

This all sounds really cool. Now only if I can figure out how performance won't suck... ;)



More : Programming Permanent Link: #
 


 Monday, March 14, 2005
Algorithm Puzzle - Sync'ing Big Lists And Nodes 3/14/2005 6:05:02 PM (Pacific Daylight Time, UTC-07:00)


Here's a mathematical algorithmic puzzle for all you bright challange-seeking minds:

I've my own big business contact list and so does my friends. One day we decide to call up with each other on phone (only 2 people on one line), talk to each other and have our lists sync'ed up with each other. That is to say, we add any contacts we didn't had already, update any outdated ones and delete anyone who has gone out of business. However, you will be pleased to know that content of any two contact lists are pretty much same with only few differences. Infect many of my friends have identical contact lists and so they don't need sync'ing at all (though they don't know if they do have identical lists). We'll let you arrange pairs of people calling each other any way and at any time you'd like. Eventually, we hope to end up with exactly identical one mega list. But we want you to be fair, i.e., schemes like appointing one "central person" and having everyone talk to him in turns and let him do all the sync work is not cool. That's not fair for him and that would take lot of time too because talking in turns uses only one phone line at a time. For us "fair" means each person only needs to talk with same number of people as every other person needs to. And yes, before I forget to mention, our contact lists are really big and so does the count of my friends - both currently running over a million - and of course, us busy tired souls want you to finish this exercise in as little time and effort as possible.

So how would you do that?

[UPDATE: I'd posted the answer in the off topic group. Excerpt is in comments. Enjoy!]

More : Mathematics | Programming Permanent Link: #
 


 Wednesday, March 09, 2005
Applications And Platforms, An Another Face Of Internet And Why I Hate Groove 3/9/2005 6:11:44 PM (Pacific Standard Time, UTC-08:00)


Groove is perhaps one of the finest example of technology in recent times which has tons of potential and no vision. If you ask Groove what their product is, they will probably reply with something like this: "it's a program that allows people to work together on files, projects, meetings and so on.". And that underlines their severe lack of vision and plain immaturity which otherwise could have changed the face of the Internet. What it could have been is this: A platform that allows developers to build applications that could work online or offline with automatic real-time database and file replication. There is a huge difference between creating an application and a platform. To put it in perspective, imagine Microsoft developers betting most of their time and energy to create vast variety of end user applications and paying little or no attention in producing well documented APIs, solid development tools and nurturing, supporting and enticing developer community to enable them to create applications. Would Microsoft have gone that way it would have become another Apple. And computers would still be privately manufactured expensive white boxes fancied by richies.

Why I like FireFox so much? If I was using it out of the box and without downloading any extensions, I would have dumped it in trash can right away. Without extentions support, it's not that powerful and cool out of the box as those guys would have like you to believe. But enter the hundreds of cool extensions made by other people, and FireFox is suddenly the most appealing and powerful browser to me. FireFox extension API has essentially became a platform.

If you want to create a fast spreading powerful software, the bottom line is simple: Through people the plateform and thou shalt built apps upon it. Invest more in platform, not applications. Groove hasn't learned this lesson.

Actually, they are learning. They have VS.Net integration with GTK now, managed wrappers for lot of things, Developer Tools division, more then zero documentation and (are you ready?) even a book! But when you look at all these, you immediately realize that this effort to make Groove as a platform is more like an afterthought, a low priority, a low budget corporate "hobby" project and definitely an unfocused one. Before GTK came out some hardcore people were still trying to figure out how to use capabilities of Groove even if they had to use JavaScript APIs without documentation! And lot of them even then built cool apps. Imagine what if a real developer friendly platform was available wide open? How many applications would be built upon it? How many people would have downloaded Groove just to use those apps?

So exactly how does Groove fails to deliver to developers? To start with, they are extremely reluctant to change, re-designing, re-factoring, modernizing and rewriting their aged stuff. Their original core engine C++ code and API design is beyond the edge of being outdated and that's an understatement to fully describe the troubles with it. Groove APIs are exposed through COM and has a massive surface area combined with no documentation for much of the part. It's bloated, broken and even not fully implemented in many cases. In latest version 3.0 they have changed their UI makeup (and file share performance) but they are still dragging along ancient under the hood code. Compare that to Microsoft rewriting and renewing their massive operating systems every 5 years or so.

Current development aids for Groove aren't just enough. Even if you are using VS.Net integration, lots of things needed for real world apps would require you to modify proprietary files in obscure places under the direction of support people. To publish a Groove tool there is 20+ step procedurewith warnings signs: don't screw up here. For anything more then "hello world" app, you would have no choice but to sign up with Groove as their partner and hire their super expensive consulting and support services (which on many instances just comes back with replies "we never thought you might want to do that with Groove. Sorry, that's not possible."). Groove doesn't realise that the worst way to make money for them would be by squeezing the developer and proding them away for ever. And I'm not talking about launching rockets with Groove, but things as trivial as programmatically hiding left pan is simply not possible. And yes, they have the largest surface area API I've seen anywhere, including Windows. They haven't reused almost anything: everything from files, data, installation - you name it - they have their own proprietary APIs that you need to learn from the scratch (I'd spent tons of time and energy to have them support standard ADO.Net instead of their properitory data API and we used it in our project but unfortunetely they have pulled it out from Groove 3.0). I wouldn't say those guys at Groove are uncompetitive (I'd been to their office for couple of days worth of meetings and those guys were smart and cool), it's just bloated outdated design that they have to live with and work with. What a waste of an outstanding concept...

There is lot more to it. Groove isn't good and inviting to developers. Besides terrible "partner only access" schemes, you will also get recommendations to use their expensive personal training classes (I'd  been to the one which was a week long). Can you imagine if FireFox didn't fully document their APIs and asked you to sign up for their really expensive training if you'd wanted to make extentions for their browser? On most instances you would also end up hiring their "per hour" support and consulting staff to actually solve your problems that comes dozen a dime in real-world Groove development. I think several companies like IBM, Apple and Oracle workes just in this way and Microsoft is the only one to actually get developers on their side, give them nice tools and make things easily and freely accessible to them.

Several bad unrealistic decisions made during Groove's inceptions are still stuck with it even after almost a decade. For instance, Groove's replicated store is maintained in the encrypted XML files rather then real relational database powerhouse. Those designers wanted plateform independence and they screwed up (such types of failures are becoming so common they deserve a name: "Cross-Plateform Wanna Be Failure Pattern"). Results? Groove sucks at scalability. In my experience, put more then 15 people in a space or more then 10,000 rows in "database" and you will be soon thinking about uninstalling Groove. Yet another example of carrying over ancient design misshapes is that the entire Groove engine works only from inside their proprietary "Transreceiver". You can't build your own EXE and consume those API from outside (actually you can at very limited extent but it's so ugly even some internal gurus don't want you to try that).

So what Groove could have been if they weren't what they have become? Well, they could have given a birth to thousands of applications that could work either online and offline and anywhere. These vast variety of apps would have almost magical capability to synchronize their data with other people and computers. If you look beyond, it's a whole new form of Internet and here is a highlight of what I mean: You won't need a webserver to host your website. You could have just created a "space", listed it somewhere and allowed open anonymous invitations to let anybody find it and browse it. So Internet would mostly become the collection of spaces hosted on individual computers instead of collection of web servers. It's far more advanced then client-server model of current Internet and far beyond then traditional file-sharing P2P apps. In that form of Internet, there truely can not be any censorship. You can have your private television station and serve your content to millions of users through distributed P2P network without a need for expensive webservers and requiring huge bandwidth. Same would happen to audio communication that is currently being done by Skype: you get standard P2P plateform to build VoIP and PodCast servers. Traditional websites would have major facelift: HTML would have been replaced by interactive GUI tools that runs in space running under a secured account. Webistes are no more just HTTPs but are fully functional interactive GUI applications. So you see, lots of software you see around - everything from Kazaa to SETI distributed computing screensavers to Freenet to BitTorrent to Skype - are just specific instances of this technology. All of these applications are screaming for common P2P plateform and because there is none, each have their own quick and dirty homegrown one. If Groove concept was done right, it could have been this universal peer-to-peer computing plateform to do all of these in clear homogeneous way and there would have been an avalanche of next generation P2P applications. And that's why I hate Groove for making it not happen.



More : Personal Views | Programming Permanent Link: #
 


 Monday, March 07, 2005
Electrons Are Out, Photons Are In 3/7/2005 6:42:08 PM (Pacific Standard Time, UTC-08:00)


Our custom made PC based "media center" just got its new replacement screen: Dell 2300MP Projector! Short review: It rocks and totally worth it (especially playing PS2 games wired with 5.1 sound system and WinAmp Visualizers on a big screen). And here are more tidbits for you geeks:
  • Dell 2300MP is new line of DLP projector which (I guess) came out in Oct 2004. It has whooping 2300 lumens and 2100 contrast ratio and cost me $1165 including shipping. It's native resolution is 1024X768 which exceeds many plasmas. Projector of this class used to cost almost twice a year ago.
  • PS2 even with S-Video connector gives pretty cool quality. Through 5.1 surround sound system with games like Grand Theft Auto and you can hear cars passing by around you as if you are on real road.
  • This projector doesn't have DVI connector (for digital video from PCs) and component video/RGB connection (for high resolution DVD movies or 1080i HDTV format). That means you can only go as good as S-Vide. Also it has only one S-Video port. I don't think this is a huge disadvantage because more resolution offered by these connectors can't be displayed by projector anyway.
  • It comes with lots of wires (though short in length) and a slick case. Remember projector wiring and screen is a significant portion of total projector cost. A 25ft VGA cable alone can cost easily over $50.
  • One big limitation of most projection system is that you can project only a specific size picture from specific distance. So say if you have have 85" diagonal area available project on be able place projector at around 10-12 ft from the wall. No more no less. And yes, you must buy enough long wires to hook up all your PS2s, cable TVs and PCs.
  • This projector is super bright and it looks terrific even on our direct white wall projection without using any screen at all. It’s so bright that we don’t even feel needed to turn off our lights. On the daytime, if you have really bright room (no curtains on big glass wall), picture would appear washed out – not good enough for DVD quality but still pretty good for talk shows like quality.
  • Because of high lumens and contrast, the most suitable screens for this projector are matt white screens with the gain 1.0 or even lower. This eliminated need for high gain screens means you get wide viewing angle just like usual TV set and uncompromised colors.
  • Many people complained about circular "rainbows" that appears when watching B&W movies. It doesn't seem to appear so far with us but I guess it might popup if you are watching high contrast black and white movie for a long time.
  • Because of high contrast, darker scenes in the movie would feel darker. You will need to mess around with settings for this for a while (Dogma=3 works for us pretty well). BTW, we run at only 40% of its maximum brightness.
  • When projector is not placed right at the center of screen but on lower or upper side. You get a distortion called keystone. This projector has built-in key-stone elimination feature which works great but it doesn't have any way to shrink picture horizontally or vertically or compensate for horizontal center-off alignment. If you are planning to project on for more than 100", you should consider exact center ceiling mount.
  • If you still don’t think projector is a best bet for a screen, do a math on movie tickets. And even then if you don’t get convinced, go watch Step into liquid on 85" screen projected by this little toy! It's brillient!

More : Geeky Gizmos Permanent Link: #
 


 Tuesday, February 01, 2005
AI - The Stage Is Set 2/1/2005 3:29:42 PM (Pacific Standard Time, UTC-08:00)


If all research papers were published the way Jeff Hawkins published his On Intelligence, the world would be a different place to live. I strongly feel that this is the most important work in the field which is otherwise so bloated with wasted directionless efforts. This book is nothing like any research paper you might have read so far. It's written in very personal way. Instead of just spitting out end product, thoughts and algorithms, author also tells you what other directions he was thinking about and what made him to go for this one. The book however is really low on technical "mojo". Infect I just barely found it technical enough to keep me interested. The biggest missing gap is that author haven't really formalized his ideas on strong mathematical foundation. Also at times you would feel as if content is just too overly sweetened and you can't just let it push it through your throat (talk about pages and pages of "for example" for one simple concept!), but hang on. A guy from Stanford, Dileep Geaorge, has done some work in formalizing authors ideas and even made a working software prototype showing that it successfully produces solid vision recognition. There are still few missing links but I've hardly any doubts that this is the right direction.

Jeff Hawkins will be giving a lecture at NY Science Acadamy tomorrow (2/2/2005).

The stage is set.


More : AI | Events To Attend | Programming Permanent Link: #
 


 Tuesday, November 30, 2004
Our Alaska Trip Photos 11/30/2004 9:57:38 AM (Pacific Standard Time, UTC-08:00)


Here are our March 2004 Alaska trip photos.

UPDATE: Some content was removed from this blog entry.


More : Go Somewhere, Do Something! | Personal News Permanent Link: #
 


 Monday, November 15, 2004
Virtual By Default 11/15/2004 12:33:19 PM (Pacific Standard Time, UTC-08:00)


Omar blogs about an age-old debate on whether class members should be virtual-by-default or final-by-default. Here's my take:

After my years of messing around with .Net class libraries, I would prefer virtual-by-default any day. Basically, when people designs their classes they really don't want to spend much time on analyzing how someone else would be overriding a particular method - unless they are really sure that lot of people really wants to do that. And so it makes a logical sense to be pessimistic for a language designer and assume that something bad indeed will happen and disable overriding by default. The bad part of this pessimistic assumption is that it doesn't go well with the real world statistics while its still logically pure and solid. In real world, you will find yourself in need so often to override a particular method, even if its "at your own risk", and hack your way through to satiesfy the requirements that original authors didn't spend time thinking about. Usually most people will test their such "hacks" and know that they might be shooting a bullet in their foot. But an ideal language should allow them to do so with warnings - just like unsafe keyword - rather then making it impossible. You had done that rather then relying on original authors (such Microsoft) to come out with new functionality after half a decade or wrapping entire interface in your custom classes. The problem is that people does wish that their methods be extensible but they don't have time to analyse all the side effects and make promises. My solution is that the compiler should just flag the warning that the method you are trying to override was not marked as virtual by default and may cause side effects (instead of current behavior of shadowing them). It should make all methods virtual unless specified otherwise and store additional metadata info that the method is virtual but wasn't marked explicitly so. Forcing virtual or final keywords explicitly does not solve the problem because most people will choose final anyway to be idealistic as they still haven't got time to analyze the side effects but those could have been statistically be mitigated by the authors who are willing to spend time in testing after they override.

As far as the performance goes, I believe, authors of base class would much rather willing to spend time in finding hot-spot public methods and mark