More Ramblings from a Los Angeles Programmer

November 5, 2008

Proud to be an American…

Filed under: daily life — Josh DeWald @ 5:42 pm

… but disappointed in my fellow Californians today.

Advertisements

October 25, 2008

Interesting bits about the JVM

Filed under: coding, technology — Tags: , , , , , — Josh DeWald @ 11:53 pm

Here are some random things about the JVM that you might (or least I didn’t) not know:

  • boolean is represented as a 4-byte integer internally and treated as such in all bytecode-level operations (method parameters can be specified as being booleans)
  • Often when a NullPointerException is thrown, the JVM actually has access to the method that was being called, but the NPE is generally thrown in the calling method, rather than the called method.
  • Reflection is really inherant to how the JVM is specified and operates; all methods are located by {class,method name,method parameters} dynamically
  • The JVM truly has no concept for the Java language; String and Object are for the most part the only classes treated specially
  • The JVM is stack-based rather than register-based

Some cool things about C# (.NET as a whole?):

  • C# has the notion of Properties, which let clients of your class access members “directly” while at the same time allowing for change to underlying implementation (as they are actually getter/setter methods)
  • C# allows for the notion of first-class methods, which it calls delegates. This lets you avoid defining a whole interface to get access to a single generic method.
  • C# has first-class support for firing events, which makes use of the delegates (not sure if it has to or not, I’m still learning this stuff)
  • C# requires you to use override prefix for a method if it is overriding a parent method, which makes it clear to readers of that class that this is in fact overriding something.

I learned these little tidbits while learning C# by writing a JVM in that language. I am fascinating by emulators and VMs because they are software that represents something that is well-defined (http://java.sun.com/docs/books/jvms/) . So in a sense the (naive) implementation is fairly straightforward, if tedious. (I also learned that you can actually write a non-trivial C# application by effectively writing Java and renaming it with .cs and doing a few basic replacements… or just about.)

This project would not have been at all possible without the GNU Classpath project, which has worked tirelessly to implement all of the standard Java classes as well as reference implementations the classes needed to tie to an actual Virtual Machine implementation. I have not gotten JNI to work yet, so for the time being I am implementing the native stuff directly in C# (which makes sense actually as that is my JVM implementation language and is sitting “below” the JVM).

Both Classpath and the official Sun jre implmentation (which is now open source as OpenJDK) provide real world implementations of that stuff you have not looked at since university (Hashtables, Linked Lists, etc) in a fairly readable format. And because they are real world, they offer glimpses into the optimizations and workarounds that have to be done to make these data structures work in the real world.

There is also a project called IKVM which is a very complete .NET-based implmentation of the JVM as well as the class libraries which allows for .NET applications to actually execute Java classes. I think it includes a combination of GNU Classpath and OpenJDK classes inluding managed .NET implementations of the native methods. If I continue this project (not terribly likely, I don’t call it “ToyVM” for nothing) I will probably migrate to using that so I can focus on the internals of the JVM itself. When I started I just wanted to get going and I had issues with the version of Visual Studio .NET that I had and then could not get GNU Classpath or OpenJDK to build or work in cygwin. I actually used MonoDevelop to do the C# development (so I wrote a JVM in C# using a Linux-based .NET implementation running on x86 VM on top of Windows XP).

A couple of nights ago, I finally got the “Hello, World!” application to work after about 2 months of development on and off, not sure what the actual man-hours was.

I used C#’s event handling/delegate set up to do gather some runtime statistics for the basic “Hello World!” application and apparently it loaded 142 classes before it finally did the output. Most of these were not used obviously, but are part of the environment that is statically loaded by key classes (like Charsets).

Next steps:

  • Make it look more like C# (Cxx languages tend to use GetBlah() rather than getBlah(), and C# supports Properties which I would like to make use of)
  • Implement Garbage Collection (pluggable perhaps). I am curious about the various methods that are used and which are better in various situations
  • Do some additional refactoring into additional namespaces
  • Optimize the most heavily used bytecodes if possible
  • See what breaks when I run things other than HelloWorld.class 🙂 I am very much a just-in-time developer so I only got the stuff working that were absolutely required to get Hello World to work. 84 byte codes have been implemented (out of the 107 that were encountered, but some load xload,xstore,if,if_icmp get reused with different initialization parameters)
  • As mentioned before, look into integrating with the IKVM libraries so I can worry less about the native aspects of it

I have put the code into a local git repository, which is another tool that I have been wanting to play around with. I am happy to push that out somewhere, with the normal caveat that this is your typical homebrew code that is not as well commented as it should be (but is hopefully well structured enough for it to make sense).

Happy Coding.

July 28, 2008

The new love of my life

Filed under: daily life — Tags: , — Josh DeWald @ 7:58 am

Disclaimer: This post has nothing to do whatsoever with technology or programming.

On July 24th at 8:27pm the newest member of my family, Eisley Maya, was born. Naturally, she’s perfect 🙂

It is still early on, but on the first night home my getting no sleep was my own doing (constantly checking to ensure she was still breathing) as she was calmly sleeping.

She’s beautiful and I can’t wait to see what adventures she’ll bring me.

Me holding my beautiful baby

Me holding my beautiful baby

Baby Eisley chilling

Baby Eisley chilling

For those who care, I have more pictures on my Facebook page. Also, my wife has a web album up which can be reached via http://eisley.40two.org

Cheers all.

Update: Ok, immediately after this blog entry Eisley decided that she would actively keep us up all night.

June 23, 2008

Don’t take my word for it (again)

Filed under: daily life, debunking — Tags: , — Josh DeWald @ 5:45 pm

Time for another installment of “don’t take my word for it” where I talk about random things I hear that I have subsquently looked up because I think they are complete nonesense. But as the title says, don’t take my word for it. For all you (or I) know, the sites I’m using as reference are also full of it.

Victim 1..

The numbers on the bottom of plastic containers tell you how safe they are for re-use.

Umm… no. They don’t. They are known as “resin ID“s and are really a notice for recyclers so they know what type of plastic is in use and what processing to perform to make it re-usable. In general you should not microwave plastic that is not explicitly marked as “microwave safe” but otherwise, re-use to your heart’s content. And seriously, use some common sense… is the FDA really going to allow for “single use, but then toxic” plastic containers for food?

Sucralose (packaged as Splenda) is made from chlorine and will kill you.

Again… no. I won’t be able to fully convince everyone, because there are a lot of sites out there that have done zero actual research and so will go on about how deadly this stuff is. Yes, it does have chlorine atoms in it (but hey, so does table salt). It is basically glucose where some of the hydrocarbons have been replaced by chlorine. The best information I found was on Wikipedia, as usual. From there you can link to whatever. The FDA has approved it, 2-year studies have been done (obviously that is not really long-term) and there truly is no evidence that the chlorine will break out and kill you (known as dechlorination). Your system simply does no break it down that way. Additionally, Splenda is actually 95% dextrose, with only a small amount of sucralose (as it is 600 times as sweet as sugar).

In the interest of those paranoid people out there, here are a couple of links featuring other opinions. Before you get all excited about that guy being an MD, check this and this out . Please ignore stuff that says “man-made chlorine”. Umm… chlorine is an atom not a compound.

That said… I have had amazing success getting rid of ants with it. So do what you will with that information. That also was a highly uncontrolled experiment and I am not convinced that the ants weren’t already on their way out of my house.

Just to reiterate, I try to use common sense and lots of Googling to prove that I am right. That does not mean that I am in fact correct, maybe there is an giant conspiracy to kill us with plastic and sweeteners. I’m pretty sure we are doing a perfectly good job with fast food and cigarettes.

April 23, 2008

Old Philosphers as Quacks?

Filed under: books, daily life, delirium, history — Tags: , — Josh DeWald @ 12:46 am

I was watching some show on the History channel about Alchemy and how there was (still is) a lot of very serious search for the “sorcerer’s stone” (yes, the one made famous by the Harry Potter book) that would turn “base metals” into gold and provide for long lasting life.

It got me to thinking… how do we know that all these books we find weren’t just the new age quacks of the day? Go into a bookstore right now and I can pretty much guarantee that you will find plenty of books that describe how you can… make amazing amounts of money by doing no real work and live “forever” through some vague medicines or diets. The average person would not take these things seriously, yet we assume that “back then” this was all completely mainstream. I’m just not so sure.

There’s certainly the argument that today it is significantly easier to get a book published, but having money doesn’t mean that you’re sane. If anything, it’s often the nutters who have managed to mass enough money to publish whatever pops into their whacky brains.

Same goes for a lot of historical stuff that we take as being just how people thought back then. Who knows, perhaps the majority of Greeks and Romans though it was pretty ridiculous to think (as we do now) that there were a bunch of gods living up in the mountains who would come down in the guise of humans (and animals). Perhaps it was just the totally zealous ones who put mosaics and floor coverings and wrote poems on it.

It’s only the people with strong opinions that generally feel the need to talk about it.

April 9, 2008

Strange keyboard issue

Filed under: daily life, technology — Tags: , , , — Josh DeWald @ 3:19 pm

I have been having this issue for over a year now, and have not been able to find a solution via Google nor through company IT (not for lack of trying on their part, it’s a whacky issue).

Very often (but it can also go for weeks) some of my keys will stop working on my Dell Latitude D610. It is generally the same keys, and will even occur in similar orders after reboot. The “favored” keys are: r,1,e,=,and ESC. Sometimes ‘o‘ and ‘y‘ won’t work. Even better, there are times when the ‘m’ key will actually output a ‘,’.

I need help!

It is very unlikely that it is either the keyboard or the actual laptop as we have tried:

  1. Using external keyboard (the exact same keys will not work)
  2. Replacing the laptop keyboard from another one
  3. Replacing the entire laptop itself (moving the hard drive to another)
  4. Running full system checks from IT department to check for viruses, corrupt files, etc (everything checks out)

So, to me, this would imply that it’s a driver problem in Windows. I have no attempted to replicate the issue in another Operating System. I don’t work in Linux enough (at all) on this machine to be able to sit around until it happens.

Most answers on the internet blame the keyboard, but based on the evidence I do not see that as being it at all.

I have recently downloaded a keyboard test application to see if anything is being detected when I hit the keys in question during one of these incidents.

Anyhow, hoping my few readers perhaps have an idea or have seen similar issues.

Update (4/22/2008): So a couple of days I had this issue again but I really wanted to be able to get logged in so I went through each of my keys to see what would happen. It definitely was like some bit was getting forced to be set or some wiring issue (and still I’m convinced that’s not it). For instance, the ‘m’ key was outputting a ‘c’ I think. I finally tracked down the ‘m’ key by hitting the RIGHT SHIFT key (not the left). I had downloaded a “keyboard test” program and when I ran that there weren’t any actual discrepancies (which is what I was hoping for):when I hit ‘m’, it output the same results for both the BIOS read and the Windows read.

March 25, 2008

Batboy

Filed under: delirium, humor — Tags: — Josh DeWald @ 3:20 pm

In my random stumbling around the internet I think I’ve found the source of the Weekly World News “batboy” image. In the process I also found out that WWN apparently folded a bit ago.

bat boy?Bat boy!

(source of the boy image: http://www.richmond.ie/puzzle.html)

(source of the bat boy image: http://gerry-doyle.blogspot.com/2007/08/bat-boy-eats-tabloid-staff.html)

 Yes, it has been a while since I’ve written and it’s sad that this is my return…

What do ya think?

January 30, 2008

Amazing

Filed under: delirium, mathematics, technology, uk life — Tags: , , , , , — Josh DeWald @ 11:13 pm

Lately I have been more and more amazed by two things:

  1. Gravity
  2. Magnetism

Sure, we have a bunch of equations for their effects (i.e. the force they impart), but do we really truly understand how they could actually come about?

Think about it, our Earth is completely locked into orbit around an object 93 million miles away. 93 million. Heck, Pluto is 3.6 billion (3.6 thousand million for the Brits out there) miles away and it ain’t even going to break away. That is pretty damn amazing and we totally take it for granted.

One of the more entertaining things to do for us simple-minded folks is to take two magnets and try to push their like-poles together. Those puppies will really fight you! You can use the effect and move another magnet around a table. Japan uses this for friction-less high speed trains. Kids play with magnets from the youngest age, and it’s always fascinating, but it is completely taken in stride.

It is very interesting that another instance of moving things without touching them, telekinesis, is complete hogwash (presumably…) despite there being electric currents running all through us.

Maybe this is why every guy has, at some point in his life, been convinced the he could use the Force.

Don’t even get me started with quantum entanglement (aka “spooky action at a distance”). The world around us is truly stunning, even when we can “explain” it.

Update:Had 36 thousand million instead of 3.6

January 27, 2008

Schools and that jazz

Filed under: coding, technology — Tags: , , , , , , — Josh DeWald @ 7:31 pm

There has been a lot of furor (at least from all the links popping up on proggit) around the “worth” of CS degrees and how bad the programs are.

My personal take is that people are expecting the wrong thing out of it. There is certainly a mechanical/trade aspect to programming. That’s the part that they can teach quite well: syntax, basic algorithms, etc. Strangely, this is the part they only teach in Software “Engineering” courses versus pure “Computer Science.” Most people go into these programs expecting to be able to walk into a typical business programming job and get to work. They really do no want to learn about Big O, Finite State Machines, or Data Structure Implementation. Who wants to know about all that damn math!?

The bit that they do not teach well is the part that actually makes you good at “programming”: critical thinking problem solving skills. Much of your time is spent figuring out how to go from problem to solution and, after doing that, why the apparent solution does not actually solve the problem correctly. You will spend a lot of time debugging software and fixing bugs. That’s just the way it is. Yes, each language makes some aspect of expression easier, but at the end of the day the actual algorithm is exactly the same. There are really only two ways a bit of program can be wrong:

  1. The algorithm is incorrect
  2. The expression of the algorithm is incorrect

I would argue that the analysis of either of these problems requires slightly different skills. One of them is the heart of “computer science” and it is the creation of algorithms that solve problems in faster and more innovative ways that are researched. The majority of us will never come up with a truly new algorithm; rather we will solve a problem that is just being defined in terms of different nouns. So a key skill of any programmer (during the design phase of construction, however short that may be) is recognizing how the problem can be re-phrased in another light and use a known algorithm. The site TopCoder is an excellent way to practice this.

Assuming that the proper algorithm has been chosen, the next step is to actually implement it. Theoretically this is the “easy” part, but it is also where the majority of effort is placed in the real world. An absolutely necessary skill of a software engineer is to be able to follow the logic of code (usually people speak of reading code but I really think you follow the logic of code instead. While I have seen some poetic code before, it really isn’t literary in nature) and trace what it is doing with a particular input. It is this skill (or the lack of) which is why, i believe, people complain about bad Computer Science education. You can whine and moan about Java or C++ being used (instead of “pure” languages like Haskell) but frankly that is a bunch of hogwash. If a person is getting the right education, or has the right innate talent, then they will be able to solve problems in any language given to them.

I have always said to people that one of the most useful classes I ever had in college was my Physics class. The professor was smart and did not allow calculators on the exams. You see, it is not the answer that matters, but how you get there. Your algorithm. The most important lessons in Computer Science (and medicine, and law, and….) is those that teach critical thinking and being methodical about solving a problem.

Ruby will not make you magically a better programmer. Java does not turn you into some brainless idiot. Perl will not turn you into a person incapable of writing clear code. Using RAD tools will not prevent you from learning how your code actually works. It is the person behind the code that matters.

Update: I found this response to the debate by Brian Hurt at Enfranchised Mind to be very good (and much better written than mine) in the sense of mentioning that, effectively, you want a “Developer that knows Java” rather than a “Java Developer”.  The reality, though, even if we don’t want to admit it, is that companies want Java developers. What do they care if the person will be useless 10 or 20 years from now, they’ll just get a developers that are trained up on New Fangled Language X.

January 9, 2008

Holidays and a New Year

Filed under: coding, daily life, technology, uk life — Tags: , , , , — Josh DeWald @ 5:52 pm

It’s been a while…

I’m ending a nice long 3-or-so week extended Christmas (just me, the wife, and pictures of gifts from family), New Year’s (very cool dinner on a ship permanently docked on the Thames. Those who know me won’t be surprised to know that I spilled red wine all over the table within about 2 minutes of sitting down. The 9 others at the table were quite nice about it) and 5-day Moroccan holiday in Marrakesh (مراكش). The last was quite cool (finally something different from Europe, you can only handle so many castles) but hectic and wearing at times (I can only handle so much haggling.. even though it’s satisfying to only pay 50% of the original price, I know I’m still paying way more than the price a local would pay). Again those who know me will not be surprised to know that I dropped (and shattered) the large tagine that we had purchased… was about 10 feet from our boarding gate at the airport.

And to really but an end to the holiday, my wife is now on a plane back to the States to get us going for our repatriation there. I will be following 3 weeks later, as my year-long stint here in the UK is ending. I have have had an awesome time here, both at work in out and about. Met some great people who I will definitely miss.

And now for something completely different..

To bring things back around to geeky stuff (I tend to skim over other people’s personal stuff, so I understand if you, Reader, have done the same) I have finally started working on my Super Nintendo (SNES) emulator. It is still using the same basic core as the C64 and NES emulators. Main difference is that the SNES using a 65816, a successor to the 6502 which can address 16MB of memory (24 bits) and implements all of the 256 op codes and adds some more addressing modes. When it initially starts up, it is actually in 6502 emulation mode (with bugs that the original 6502 had fixed, which I’m sure provided frustration to many developers who depended on undocumented instructions and bugs). I have gotten some basic graphics to work in the ‘test.smc’ demo included in Y0shi’s documentation, but it is nowhere near even able to get screenshots, but hopefully only a week or so (I’ve spent a feverish 3 or 4 days dedicated to SNES stuff, but probably spent another couple of weeks previously working toward getting an Apple IIGS emulator working, which uses the same processor) to get there.

I have started adding some JUnit tests of the actual instruction implementations, as even minor bugs can truly spiral out of control in the running of the system.

As usual, Zophar’s domain has proved invaluable for obtaining documentation, but I have also used Wikipedia for system overview (memory sizes and the like) and another site I stumbled on just called “Emu-Docs

I will make the code available via CVS or Subversion once it is in a usable state. Apparently my wife never really played the SNES, so we shall see if I can find anything to drive me like getting SMB3 working on the NES did.  I would love to get Super Mario Kart working.

I have been using ZSNES as my “reference” for what a working system should look like (I don’t know if it’s open source or not, but I am only using the executable in any case).

Shoutout goes to the many people who dedicated hours and hours dissecting and analyzing the SNES and writing emulators in C and Assembly which ran on old Pentiums. My Java emulator may one day run at a full speed on a 2 Gig machine 🙂

« Newer PostsOlder Posts »

Create a free website or blog at WordPress.com.