Recent Posts

Archives

Topics

Meta

75 cents – Would it be enough today?

By Jeremy | February 24, 2010

In The Cuckoo’s Egg, a novice computer administrator enters into a ten month battle with a foreign hacker because of a 75 cent accounting error.  The administrator had to verify that the 75 cent discrepancy wasn’t from a software error, but was caused because of the activities of the hacker.  The state of software during this ten month battle was very simple in comparison with the state of software today.  The simple nature of the software made tracking down the real source of the error easy.  Because of the simplicity of the software and the ease of confirming the error, the administrator was positive that there was an outside problem and that the missing 75 cents was not a result of his buggy software.

Proving that the small discrepancy was not an internal problem would be much more difficult today because software has become too complicated.  The software of today is, at a minimum, several orders of magnitude more complicated than the software that was used in The Cuckoo’s Egg. Windows now has over 100 million lines of code and Linux has over 12 million lines of code.  On top of the operating system’s millions of lines of code, today we add all the web servers, dns servers, firewalls, virus scanners and every other program that is run on a computer of today.  When you have so many different programs that are each much more complicated than all of software combined in The Cuckoo’s Egg, assuring yourself that a 75 cent error was not because of some other program on your computer becomes impossible.  How can we ever know that somone has been inside our computers if we can’t even track down a 75 cent error?

Topics: cs404, school | No Comments »

New Random Number Generator! – Who cares?

By Jeremy | February 23, 2010

An exciting new development has taken place in the computer world: a new random number generator was created.  Most people will never notice or even realize that a new kind of random number generator was conceived of and implemented, yet this random number generator could have a great impact on their lives.  If this new random number generator proves to be more random than the current random number generators, every single person who uses the Internet will be affected.  Take, for example, buying something on Amazon.com.  A random number generator actually plays a key role in keeping your credit card number secure.  Without good random numbers, a malicious individual can easily access your credit card number and all of the personal information you send when you buy something online.  That is why a new random number generator should actually matter to everyone who uses the Internet.

Topics: cs404, school | No Comments »

Collaboration vs Confidentiality

By Jeremy | February 3, 2010

In the new age of social networking, we, the users, must closely watch the balance we strike between collaboration and confidentiality. Genealogy has progressed wildly since people have started to place their pedigrees on their personal websites. Collaboration has made the increase in genealogical research possible. Yet, many people fail to realize that being able to find your mother’s maiden name on your personal family history website is a problem. This doesn’t seem like a big problem until we think about the last time we registered for a site like Facebook. The seemingly innocuous question about your mother’s maiden name now becomes much more important; that name can be used to reset your password and gain control of your Facebook account. We need to always be on guard and check our desires for collaboration with our need for confidentiality.

Topics: cs404, school | No Comments »

Apple: The One Man Company

By Jeremy | January 28, 2010

Taken from http://live.gizmodo.com/page/14/

Today, Steve Jobs and Apple announced Apple’s newest piece of hardware: the iPad.  But this announcement confirmed yet again that Apple is a one man company.  This is clearly illustrated through the history of Apple Computer.  When Mr. Jobs was ousted from the company, Apple began to stagnate.  In fact, from the time that Jobs left the company until his return in 1998, Apple Computer was not a profitable company.  They had many new inventions and cool toys, none of which were received well by the public.  The company again become profitable — after Jobs returned. However, since Jobs’ return to Apple, he has micromanaged each new product release Apple has completed.  Apple’s pattern of success and failure is completely correlated with the presence of the mastermind: Steve Jobs.  When Steve Jobs leaves Apple for the second, and probably final, time, will Apple Computer again stagnate or is there someone who can fill the shoes of Steve Jobs: The One Man Company?

Topics: cs404, school | No Comments »

Equality(=) Does Not Imply Equality

By Jeremy | January 26, 2010

A common argument has arisen with respect to equality today: if there are equal numbers of men and women doing a job, then the societal problem of discrimination based on sex has been solved.  In light of this argument, the government has put into place many measures which try to ensure numerical equality.  Numerical equality is an incorrect way to measure the existence of discrimination based on sex.  For example, many lawmakers are worried that there are not equal numbers of men and women in the hard sciences.  While this numerical inequality is an interesting data point, there is a plethora of other reasons that could explain the inequality.  Perhaps women’s brains are biologically different enough from men’s that they find the hard sciences stupid, boring, or drab.  No matter what the reason, one can not assume that if numerical equality exists, sexism is finished.  All numerical equality can demonstrate is that there are the same number of men and women doing the same thing.

Topics: cs404, school | 1 Comment »

Education Might Help

By Jeremy | January 21, 2010

With the government constantly spending on everything from health care for everyone to bridges, they should spend some of that money on education for government workers.  Take this recent slashdot story, which tells a woeful tale of a “junior staff member” who used peer-to-peer software on his home computer and unknowingly lost a confidential House Ethics Committee report.  This accidental loss of the report seems like a simple mistake made by a junior staff member, except for the fact that making a file available over a peer-to-peer network is completely preventable if the user knows how to correctly use peer-to-peer programs.  The government would be well served by educating their workers in technological matters.  The loss of the confidential government document, along with a host of other problems, could have been completely avoided.

Topics: cs404, school | No Comments »

Knowledge Is Useless

By Jeremy | January 13, 2010

There are many men who work their whole lives to gain knowledge and become an expert in a field and then waste it away because they never apply their knowledge. For example, consider a man who spent his whole life in the world’s best cooking schools: every day he pored over books, inhaled lectures and devoured all the culinary knowledge that was put before him; he learned everything there is to know about food.  Yet, despite being the World’s Czar of Culinary Knowledge, if he never applied his knowledge and actually cooked a meal, then all this gastronomic knowledge would be useless to that man.  Just as with cooking, the same thing happens in computer science: learning software patterns and standard practices for software enginineering is great!  However, if we never try to put that knowledge into practice and actually use some of the great strategies we have learned, then all of our knowledge is useless.

Topics: cs404, school | No Comments »

Sandberg’s Slant on Software Engineering

By Jeremy | August 8, 2009

In the next few weeks and possibly months, I am going to do a series of posts about a topic I am very interested in: Software Engineering.  These posts will specifically be about design patterns: what they are, and how they can be used to make software better.  Please check back often so we can take our journey into Design Pattern land together!

Topics: design patterns, series announcement, software engineering | No Comments »

Vertical Scenario-based Development

By Jeremy | July 26, 2009

Over the past few days I have had some very interesting conversations with my workmates at Microsoft.  I have really appreciated their input this summer and have learned and grown tremendously under their tutelage. This brings me to the point of the article.  This week my co-workers taught me two separate principles that work very well together.  They are vertical development and scenario-based development.  In the end they really amount to basically the same thing but let me explain what my current understanding of these two principles is.

Vertical Development

Vertical development consists of developing a project with a top-down perspective.  Specifically, the first goal is to get a complete vertical section of the program working.  For instance, if I was building a text-box for a new GUI toolkit I was creating, the first thing I would try to get working is a text-box into which you could enter characters.  Notice I didn’t say anything about deleting, or moving around with the arrow keys, or selecting text, or even that it displayed correctly.

Despite this great idea of vertical development, the natural way I have always been developing was in a layer-based method.  If I was building a web crawler, the first layer a web crawler needs is page retrieval from the web.  Page retrieval is where I would begin my development and I would continue working on the page retrieval class(es) until they were feature complete, i.e. they did everything they would need to do for the whole project.

While I think there are merits to layer-based development, I think that vertical development has quite a few strong advantages over layer-based.  Continuing with the example above, having that small vertical slice of a text-box working without being feature complete will show you problems that you will encounter later on and allow you time and flexibility, because you don’t have lots of already finished code baggage, to solve the problems in a more elegant fashion.

Scenario-based Development

Scenario-based development follows very closely with vertical development.  In scenario-based development, you need to have a scenario of how a user will use your software.  Then using this scenario you simply develop the software strictly to that scenario, not worrying about other scenarios or requirements the software might have.

Using scenarios is very close to vertical development because, in either case, you end up with a vertical segment of your program done.  The real difference comes that with vertical development, you might end up with a vertical segment that really isn’t that useful and is not sufficiently implemented to actually serve as a prototype or a demo.  In other words, with vertical development you might have the slice done but it might not actually do anything useful.

On the other hand, with scenario-based development you always end up with something that adds value to what you are trying to accomplish.  And if you really sit back and think about it, there is no point in doing anything unless you are adding something of value.

By [These] Powers Combined

I think where real value can come into software development is by using these two different methodologies together.  If each time we develop software we have scenarios in mind that we are developing towards then we will consistently add value to our software products.  Then if at the same time, the scenarios drive us towards vertical development, we have the best of both worlds.  We are always adding value through scenarios and we are better prepared to deal with those unforeseen problems.

Topics: Uncategorized | No Comments »

Javascript Date Picker

By Jeremy | July 26, 2009

Well, I started trying to do a tutorial for one of these so long ago that I might as well just release the finished code. I am releasing it under the MIT license. The code can be found at http://jrsandberg.com/Calendar.txt

The calendar works as an iframe. Include the calendar with something like this:

<iframe src="Calendar.html" frameborder="0" width="100"
height="100" name="calendar" id="calendar"/>

Once the iframe is included, you will also need to add a global variable called “cal”.  Just to make the calendar behave nicely you might want to add a “cal.hideCal();” to the <body onclick> event.  The calendar will automatically attach itself to the parent window and provide you with the functions you need through the “cal” variable.

In order to use the date picker, simply create an input that has the type of text and add the appropriate functions to it:

<input type="text" name="startDate" id="startDate"
size="10" onclick="cal.popCal(this);"
onkeypress="cal.keyPress(this,event);"/>

That should be it.  The calendar should align itself with the text box and format the date and things according to the us standard.  The calendar isn’t an end all or a be all but I think it covers the general functionality really well.

Admittedly, I would rather have the calendar work through a div and not an iframe.  I also don’t like the fact that it uses a “hack” to attach itself to the parent window.  One other word of caution, I don’t know how well it works in IE.  I have only really used it on Ubuntu firefox 2.5+.

Anyway, if you add any features, find any bugs or use this calendar, I would appreciate any and all feedback you have, good or bad.

Topics: javascript, tutorials | No Comments »


« Previous Entries Next Entries »