Archive for the ‘Personal’ Category

XNA on the PS3 with Linux+Mono?

Sunday, December 3rd, 2006

I have to praise Microsoft for the move of making XNA free to develop with. For those that don’t know, XNA is a forked version of .NET 2.0’s runtime, where the class library is slightly stripped down with Managed DirectX deeply rooted as part of the distrobution. XNA makes it possible to develop applications that work on both the XBox 360 and Windows.

What is interesting is that this makes development for the XBox 360 consoles so much easier and much more of a licensed activity as comparied to homebrew mods and hacks to current 5th and 6th generation consoles to be able to run “unsigned” code. In the past, the only legal/licensed way to develop for these platforms was only with the use of some very expensive development kits. In order to get the development kits in the first place, it requires lots of paperwork, a few NDAs, and an agreement to only distribute under the vendors terms. It looks like the market is changing though. However, Microsoft isn’t abonding the idea of licensed SDK completely though and still requires you buy a license and SDK to write any unmanaged code for the platform (required if you want to reuse the same codebase to distribute a game on multiple platforms very effectively).

Microsoft isn’t the only one though, because Sony went an interesting route with the PS3 by allowing it run Linux out of the box. Sony still requires you to use their PS3 SDK to make offical PS3 games, but allowing Linux opens the door to some amazing possibilities.

Infact, I just got my hands on a PS3 yesterday, and I’ve already got it booted up on Linux. I love the fact the PS3 almost wants to run Linux (it just about begs you to), and I got Mono compiled and running on it in less then an hour. Before yesterday, I wasn’t aware that the new cell processor comes up as PowerPC processor. Now this gives a great new reason to help out with Tao’s Mono.Xna and get those XNA games running on the PS3. :-)

It’s my birthday!

Sunday, August 27th, 2006

I turned the big 22 today! I think I’m having a quater-life crisis.

Anyways, getting plans together to go out to Boston for the big mono meeting in October. Can’t wait!

Texas Instruments

Friday, July 28th, 2006

I’m so excited. I just accepted a position at Texas Instruments, in the Educational & Productivity Solutions division. They are responsible for development of all the of graphing calculators including the TI-83, TI-84, TI-93, TI-72, and Voyager 200 lines of calculators (if don’t know what they are because you have been hiding under a rock for about 15 years, ask your kids, and most likely they use one everyday in school in their algebra, geometry, calculus, and physics classes). I went on a tour of the facility yesterday, and I have to say I was very impressed. My jaw dropped open when I got to play with the new products (none of which will be do out here in the US anytime soon). Essentially this facility is the R&D lab for those types of products that TI develops.

It brought back a lot of memories. One of my old hobbies in high school was writing games for these TI calculators. It’s how you could look busy in class but really be playing. Just load up your favorite clone of Pac Man or Space Invaders and to the teacher you were graphing out your problems. I even used to sell a pack of assorted games I wrote or downloaded off the web, to all the other kids at lunch for $2-5 each. Just transfer them from my calculator to their calculator over the data cable and take the money. I was one of the only people with a calculator to calculator cable so I had a little monopoly.

I can’t talk about anything specifically I seen there at TI (had to sign a NDA even before the interview), but it’s very exciting because I’m going to be working on some very cutting edge hardware here. Of course I’m not allowed to say if this job will involve mono or not, but I can say my mono experience was a major reason why they chose me. I’m coming on as a software engineer on the desktop integration side of things (specially making sure everything is cross platform). This is almost a dream job for me because I get to use each of my best talents here. It’s also an amazingly short commute (about 3 miles or about 2 stops on the DART rail), and not only that but it just happens to be a Fortune 500 company as well.

I can’t wait!

Enterprise What?

Sunday, July 16th, 2006

What really makes something “enterprise” in context of software development?
“Enterprise” is a term that I hear so much it gets under my skin now days. “Enterprise Quality”, “Enterprise Software”, or “Enterprise Capable” are all terms I hear a lot. If you think of J2EE or enterprise services in the .NET realm, enterprise means component re-usability and persistence, transactions and fault tolerance, and scalability. Thing’s that enterprises (as in large companies) have to worry about when handling thousands of simultaneous processes. It means using ideas like the preallocation of data, persisting and storing state of objects, pooling and caching resources across all running sessions, and working with models, frameworks, and design patterns that scale almost effortlessly.

However I think the term sometimes gets confused with another word, “quality”. “Enterprise” does not mean “higher quality”, although many “enterprise” capable applications require a bit of planning so the code is more likely to be a bit higher quality but that’s mostly just a by-product of the extra planning. I know a good number of “enterprise” level applications that are written horribly and pretty much nothing more then just amazing beasts (one I know makes me giggle thinking about it), but would still be considered “enterprise” in every respect because they all still manage to hit that factor of being able to handle thousands of simultaneous processes.

Nearly any language in almost any platform can be “enterprise” capable if it can support those basic concepts or has anough flexablilty to build them yourself. That includes C/C++ (of course), Mono/.NET, Java, Python, Ruby, and even ColdFusion and PHP to some extent if the applications are designed correctly. It’s nice when something in the platform supports those “enterprise” concepts out of the box, but normally, if your language can support threading and OOP type concepts, you can roll your own “enterprise” level scaffolding for your project to get the job done in many cases. Even J2EE is written in Java.

Recently though, I heard some F.U.D. from a very notable person that claimed that Mono wasn’t an “enterprise level platform”. That really bothered me, more because this was coming from an architect, and architect of a very well known and respected piece of software. However after listening to him I doubt he has ever really worked with Mono. He was focusing on the original goal of Mono as said by Miguel when creating the project, that Mono was to help in the rapid development of desktop applications (to help the desktop Linux world keep up, stay maintainable, and grow as fast as windows). The idea behind what he was saying was that many of the “enterprise” level features you see most often are not really necessary in single user environments. He used the fact that our “System.EnterpriseServices” namespace as not being complete as his fuel to help prove his point. He was also making a lot comparisons to VB6 when writing GUI applications (which is not to be confused with VB6 in combination with COM+ which gives VB6 the ability to be some what “enterprise” capable).

It all got under my skin though I thought his comparison of VB6 to Mono was really very funny. The biggest reason being that VB6 doesn’t support threading and only really faked the concepts of OOP development. For that reason you couldn’t roll your own enterprise capable framework written in VB6 itself very effectively because of language and platform limitations. You couldn’t do like how I said before how many J2EE implimentations are written in Java and write COM+ inside VB6. Also, it is true that we don’t support System.EnterpriseServices, but that’s more because EnterpriseServices is simply just a wrapper on COM+ services provided by Windows, so its something that isn’t cross platform capable, and for that matter is even hardly used even in pure .NET in running on Windows only type setups. It’s so easy to roll your own enterprise level concepts in .NET without the need to use EnterpriseServices, so many just don’t use it (that and you don’t get that bad taste in your mouth from using anything COM related).

Also Mono, since just shortly after its conception, has been moving to be so much more then just being a platform built for desktop applications that it started out to be. Mono itself is modeled directly around the standards published by Microsoft that define .NET as well as all the standard class libraries. The design of the class libraries and languages built on top of it are really built to be a best fit for almost any scenario (just in the same way as Java and Python). It’s not intended just for the web like PHP and ColdFusion are, nor is meant for just desktop applications like the way VB6 and VBA are designed. It might be a different story if Miguel chose to start from scratch on designing a new platform altogether.

We might not have an nice prepackaged application server solution to host your components and maybe give nice you a pretty admin interface or xml config file to setup all those nice features like component pooling and caching that you see in many off the shelf application servers in Java or with Component Services with COM+ (unless you consider XSP for web services), which means you have to write your own service daemons in many cases to do that sort of thing. We also might not have (as some would consider) the legacy EnterpriseServices so it means doing anything you want from that namespace yourself, which I know many of us would rather do anyways for the control and simplicity of doing it the .NET way. Mono supports object serialization, remoting, and web services which makes pooling, persistence, and handling state very easy to do on your own. You can still write a true “enterprise level” middle tier and even host them in their own application server, and do all of that with just a little extra planning.

One really great of example of Mono working as enterprise level product is imeem. Over at imeem, they run Linux and Mono on their applications servers and they deal with the massive amount of concurrent connections from all the client applications accessing the service at any given time. They are great example of how Mono is completely capable of being enterprise worthy. Some other great examples can be found in SecondLife’s use of Mono to power its scripting language and also with Novell’s iFolder solution.

About the time we release 2.0, I think we should rename Mono in the Mono 2.0 release to “Mono 2.0 Enterprise Edition” (or M2EE), just for fun. :-)

Life experiences

Tuesday, July 11th, 2006

It blows my mind. I’ve skipped so many steps in life.

I’m only one month shy of 22. Out of everything, the one thing that sucks the most about being a 22 year old software engineer is being 22. Many of my colleague are around twice my age or at least in their 30s. Anyone below 25 in my field is rare professionally speaking. Many of the people I work with have kids, houses, cars, etc. I’m just a kid really. It’s so much harder when I can’t rent a car and get carded everywhere I go. Can’t get a loan because I just haven’t been around long enough to build up any credit.

I’ve been in the job market programing since I was 14 years old even while going to high school at the same time (working summers and with work study programs for half my school days). That gives me 7 1/2 years of work experience and about 10 years general programming experience (was writing BASIC applications in Quick-Basic when I was 12) which is pretty much makes me a senior level developer in many companies. I’m not in to for the money so much as I like programing in general. That is to say the money isn’t to bad.

I’m always been a little overwhelmed with everything and because of that I’ve had to grow up extremely fast but always gotten by pretty well. I’ve have never once worked in any type of job that wasn’t tech related. Never once worked at a fast food place or bagging groceries or anything like that like almost everyone of my friends my age where doing. I didn’t even start driving (legally :-) ) until I was 20. Never needed to drive anywhere. I always managed without it. I even got by with my out of state expired drivers permit instead of real driver’s license. Never had to ware a tie more then past the interview most places ethier. Just never had to do it and I’ve worked at some pretty big places.

Working on and learning new engineering practices and methodologies and how they fit into software development, figuring out the complexities of how SOX compliance plays into IT these days, constantly figuring out how things work and why they are designed the way they are, and learning how to be mature and professional on a job site. That’s my teenage years in a nut shell. A young nerd trying to make it as software engineer.

However, more recently, I took some risks and now it looks like I might have made some bad choices. Funds are running dry waiting on paychecks. So long to the end of those contracts and getting paid. Way after I really need it. These long waiting periods that wouldn’t bother most of those 25 to 40 year old colleague of mine. Waiting for checks to clear, shiping and handling, mail delays, and holidays making things move slower and slower. I don’t have the luxury of credit cards and loans here so I have few options. Makes me feel like a kid. When I’m broke, I’m totally broke. Really I’m a victim of horrible timing and not enough planning for this scenario I guess so I’m having a really tough period personally. I’m trying to pull a few rabbits out of my hat to get by this month and hoping I get lucky and I hoping I get through this bad patch. This is one of the worst though. I’m hopping it will all work out ok.

I wish signing bonuses where more common place in software engineering jobs or there were venture capitalists that invested in individuals. :-) Oh well. Live and learn. Life experiences are fun :-)

Back to work

Saturday, June 24th, 2006

Got a job. Yeppie. More to come…

DallasCodeCamp 2006

Thursday, June 15th, 2006

Joseph Hill and I both registered to speak at DallasCodeCamp on Mono on the 24th. Come out and see us.

Location and hours of the event:

Code Camp will take place at the Microsoft Building LC1 in Las Colinas, located at:

7000 State Highway 161
Irving, Tx. 75039

Doors will open at 8:30 AM. Don’t forget to visit the site and RSVP and get your parking pass. Its free and there will be food.

HR-XML, FlyVideo3000 Support, Mono turns 5 years old!

Monday, June 12th, 2006

HR-XML
Was working on resume this morning when I ran across something cool called the Human Resource XML Consortium. This is one of the best uses of web services and XML standardization outside use specifically in the tech realm.

You see, my resume is really written in XML. I did that about 4 years ago so that I could write a few XSLT sheets to export the real resume. My experience crosses so many areas, so its really hard to show specifically to the human resource officer who is going to get my resume I know exactly what they need, simply because many of them don’t understand the technology as well as the developers I would be working for in most cases. With this method I can filter and sort specific areas and use different versions of the text so I can match to each specific case as best as possible. All I have to do is tweak a few sorts and xpath queries in the xslt and out comes a specific resume for someone. The other main goal was to be able to export my resume to different formats like XHTML, Text, and an XML schema for converting to PDF (and even someday Word XML and OpenDoc).

What is of interest to me is that the HR-XML guys have come up with a standardized XML scheme for resumes (which happens to be fairly similar to my resume). Though, once its in that format, it conforms to everything published by the HR-XML and when everyone starts using all the HR interchange formats (which from the sponsors might already be true), then I’ll be slightly over the curve. That is if it the general public picks up on it, which I can’t see why not :-)

I’ll release the code that makes this possible later. I think that HR-XML has really got something here.

Update:
greencrab” (with a nasa.gov ip even :-P) else emailed me about http://xmlresume.sourceforge.net/. It’s got Debian packages on apt-get even. Pretty neat stuff.

FlyVideo3000 Support
I wrote a patch for the Linux kernel to support the $18 FlyVideo3000 NTSC video capture card for video4linux. Nothing big but its my first kernel patch I got to send in so I’m excited. Really there isn’t any code, just adding a definition but still, got to start somewhere. See it here: http://marc.theaimsgroup.com/?l=linux-kernel&m=115011638432595&w=2

Mono turns 5 years old!
It’s simply amazing how far Mono has evolved over the years. From its early days in 2001 when the annoucments of what the guys over at Ximian became public knowledge, its simply amazing to see how many people have joined in. This project is massive now. Well over 3 millions lines of code.

Here are some interesting links in Mono history:

Will engineer software for food

Friday, June 9th, 2006

libmozebmed coming along
libmozembed is working! I’m in the middle of attacking a nasty memory leak (which isn’t easy since valgrind and mozilla mixed in Mono makes things just a wee-bit interesting). If it’s not in my ported code of the profile service for mozilla, then its safe to say that I will have something in the svn tonight :-)

I need a job!
Just about that time. It’s been about two months since I left Match.com. I worked there for a little bit less then a year and a half before I left. It was an awesome and very challenging job, however I never took any vacation time and I also worked many weekends. It took a bunch out of me and burned me out a bit, so I’ve been on a bit of a sabbatical since then catching up on some things. Mostly spending my time lately working on Mono, re-sharpening my skills and specialities that I didn’t get to use at Match, doing a few little contracts, and relaxing by the pool. Its been nice not having to worry about deadlines and getting to work on I want and at my own pace.

However, its time to get back to work again…

If anyone is looking for a Mono/.NET, C/C++, or Java software engineer with over 7 years experience in the north Dallas/Plano area, can get in with contact me here:

zac@zacbowling.com or
P:(972)437-6272

I love Google

Wednesday, June 7th, 2006

Google is in court sticking up for our rights where others wouldn’t. I’ve been keeping tabs on what is going on I think its awesome that they don’t give in on their principles.

But then after today’s court battle, Google’s CEO spoke with reporters recently, and publicly conceded and said that he believes that Google might of sacrificed its values by working with the Chinese government in its decision to filter there. It’s getting some press play this morning.

He came out and said specifically:

“We felt that perhaps we could compromise our principles but provide ultimately more information for the Chinese and be a more effective service and perhaps make more of a difference. … Perhaps now the principled approach makes more sense.”

Simply just saying that, openly talking about its values as a company, and having the guts concede something like that, wow! Google aims to loose a large chunk of money if they choose to pull out of china or perhaps pressure the Chinese government to lessen up some its filters or even just talking about it in the first place. However coming out saying that their values might be more important, wow. Google has my total respect for that one. Google just upped its value in my portfolio :)

In other news, my gecko webcontrol (the MWF version) should be ready for testing soon. Mozilla’s profile service gave me some unexpected hickups that I’m just finishing up on overcomming. Stay tuned… :-)

Flash for Linux, libmozembed progress

Wednesday, May 31st, 2006

It would be nice to have flash.
Don’t expect a release worthy edition of a new Flash for Linux until 2007 from Adobe/Macromedia. A developer with Adobe/Macormedia blogged that they are working on it. I’m not very impressed. They said a new alpha would be released very soon but they started saying that over 1 year ago. (Yes I understand that Flash 8 introduced a homemade GC so it made it hard to port and why its been hard to move to x86_64, but yeeesh).

libmozembed progress
libmozembed is getting closer and closer. I’m finishing up on a bunch of tedious parts right now. It’s working, and I should have some rough screenshots soon when I remove a bunch of inline stuff and make it re-sizable and able to move from location to location. Right now it freezes right after the first page load because of some workarounds I was using to be able to see what I was doing before while building up the underlying scaffolding that makes everything work. Now its just the tedious task of removing everything like that and remove all those annoying printfs (poor mans debug, since most of the dump stacks I get via pinvoke on the unamanged side sort of stink). Should be commit ready very soon to start alpha testing the Mozilla control for System.Windows.Forms/Managed.Windows.Forms control (not the IE API compatible version yet). I’m guestamating next week before its ready for that.

Picasa for Linux

Tuesday, May 30th, 2006

Google released Picasa for Linux. At first glance, I would say “thats awesome google”, however…

Instead of porting to Linux, they simply made the win32 version more friendly with WINE by contracting codeweavers to help. You can see the quite hefty list of patches here: http://code.google.com/wine.html. Wine adds an extra 13mb on to the download. Mozilla adds and extra ~20MB (since they have to package a Win32 version of Gecko that runs under wine). Before its over you wasted around 50MB in just emulating Windows to make the thing work. Yeesh.

Thanks Google for thinkng of the Linux crowd. Its just that Wine is best served for running Windows applications on Linux when you have too rather and not the best choice when then targeting targetting Linux. I think there are easier and cleaner ways of doing this then using Wine. Picasa is cute, but its not that special of an application. It doesn’t have that many moving parts really. How about instead of trying to use Wine and hack together a release that direction, try expanding Mozilla’s XUL to be the new UI for Picasa maybe. I’m sure that if you of spent an equal ammount of time working on a more conventional method using a better esstablished cross platform UI toolkit and released what you had and even if wasn’t as powerful, the Linux crowd would latch on to it more.

OpenNIC

Monday, May 29th, 2006

Now this is cool and dearly missing from the internet. A democratic alternative to the root DNS offered by ICANN.

http://www.opennic.unrated.net/

I’m getting sick and tried of these new root namespaces being dulled out by ICANN. I mean seriously? .jobs??? Thats the biggest joke I ever seen. ICANN doesn’t function correctly anymore. The power of the root DNS need to be switched over to a better working body. ARIN is getting on my nevers too with the IP allocations as well. RIPE seems to be more friendly then ARIN now days.

I love how OpenNIC’s website referes to anything ICANN as legacy, and OpenNIC is open to partnerships to run your own top level root. Might submit a proposal for a .mono root later and host it…. Maybe not… Cute thought though

reverse p/invoke and libmozembed

Monday, May 29th, 2006

I’ve been hacking on libmozembed all week. Complete with the tons of headaches and victories that go along with it.

I came up with a pretty cool model for doing reverse pinvoke in a massive fashion. Instead of creating a delegate around each method and then pass each one to the unmanaged layer one by one, I decided to go the route of creating a struct strictly full of delegates to hold all my callbacks. I marshal that struct on the unmanaged side to a struct full of function pointers. Because its a little tedious writing a new delegate around each function, I went one step further and wrote an interface that declares all the functions required for each off the callbacks and wrote a nice little static little function wrap any instance of that interface in each of the required delegates. It’s nice and clean if I don’t say so myself. :-)

I’m currently wrapping up a bunch of the interfaces in mozilla to give us full control in the managed layer over things instead of the wrapper automatically assuming the most generic implementation like I was doing before. I decided that this was the best route when I hit a few places in the code like the profile and window creator and some of the other services I have to create anyways. I’m even opening up some the basics so that when the xpcom stuff is ready, we should be able to integrate XPCOM layer with everything. (Mostly just opening up my XPCOM wrappers and providing a few functions to get my running instance of the core XPCOM services that I’ve already created for use by the XPCOM wrappers)

I’m really moving to the route of integrating XPCOM to supplement everything past the basics. I think it’s going to be the best solution in the end. I think I evolved through the entire thought process that the Mozilla and Java integrators went through over the past 6 years in just a little less then a month and came to a very similar conclusion in the very end. The greatest part is that we can do it better then Java could ever do because of limitations with JNI and in what Java can support itself. Mono has Reflection.Emit and compared to JNI, pinvoke rocks. Where Java has always had to generate a JNI stub for (up until the latest breaking code and very unstable code), we do not need to thanks to the magic of Reflection.Emit.

I’m completely avoiding any requirement on any bit of the XPCOM wrapping stuff to get the use the basics with the browser embedding. It’s just when you want to access things like the DOM, the printing interfaces, the spell checker, and the thousands and thousands of other goodies, will you need to use the XPCOM interfaces. When its done, everything should play well and while still manually handling the gecko embedding parts. It will also make things more stable and faster in the end when it comes to straight up gecko embedding. Maybe some day in the future (maybe next year or something) we can even just go right to XPCOM for doing everything.

Also in a high level respect, I noticed that I’m going through the exact same struggles that the Mozilla ActiveX control guys went through. They wrap Microsoft’s IE api as well. However where they have COM and only work on Win32, I’m wrapping it at the layer that tlb2asm eats it up. It’s a bit interesting to say the least.

Oh well. Back to work.

Mono can make your day.

Tuesday, May 23rd, 2006

This is a topic that many of us mono developers know really well. but many of you might be new to mono or maybe even just merely fans of mono. Maybe you syndicate mono’s monologue feed but never really have had a chance to use it, but because its .NET related, its interesting. These tips might interest you.

Even though you might not plan on using Mono in its entirety, parts of Mono can help you with your .NET development. From a evangelist respect, I would love everyone to use Mono, but being a developer I know that isn’t always possible. Fear not, you might still be able to use Mono to speed your time to market, solve some of the issues you might be having, and more conventionally help you understand where you might have portability issues in the future.

Use Mono’s source as reference guide
First off, its good to know where you can see the mono class library source. The best way to view the source online without downloading is using the SVN viewer. Bookmark this url: http://svn.myrealbox.com/viewcvs/trunk/mcs/class/.

Even though our class libraries don’t work 100% exactly the same as in .NET, we modeled them to match .NET as close as we possibly could. If you know C#, they are easy to understand in most cases, and sometimes its more useful looking at the source code to see what a function returns, then to poking around in the MSDN docs when something isn’t specific enough and just testing things over and over takes to much time.

One example where I found this useful today is when I had an error in some 3rd party code that ran peek on a stream reader to see if there was any data to be read. Simply reading the source I noticed that really it just checks the Stream.CanRead property and since peak would return a char and the stream defaulted to UTF8 and since the byte value it was reading didn’t exist in the UTF8 encoding, it would crash.

Mono’s Secuirty and LDAP libraries
If you need more then what System.Secuirty and System.DirectoryServices offer you, you can use our Mono.Secuirty and Novell’s LDAP assemblies in your app. They are written in C# and copy nicely being CLI compliant and all, so they run on .NET without issue.

Use Mono class libraries to supplement missing APIs in Windows CE .NET
While I haven’t done this, if you really need something that isn’t offered in the CE edition of .NET, then mono’s implementation might be exactly what you need. Our class libraries are writen in C#, we try to minamize as many calls to native functions as possible (doesn’t help when we want to keep things portable). All you need to do is strip out what you need and refactor it in to your source.

Oh did I mention that Mono’s class libraries are released under the MIT/X11 licence? MIT/X11 is one of the most liberal licences out there. That means you can almost do anything you want with the source without risk of any licence clause stopping you.

Monodis
This is a small one. It’s our version of ildasm. I found that it can break down assemblies to IL a bit clearer then ildasm. One of the great uses is when you run into some library in-lined with some hack to prevent ildasm from working, monodis sometimes still works.

Broken/Missing feature in your favorite ASP.NET control?
This happened to me a few times. You want that DataGrid or DataList or Calendar object to do something it just doesn’t have the power to do. What do you do? You take the version in Mono’s System.Web namespace, change it, and compile and enjoy.

For example, lets say you want a 14 day calendar or a calendar that shows 14 days in a row? Simply snatch the code (http://svn.myrealbox.com/viewcvs/trunk/mcs/class/System.Web/System.Web.UI.WebControls/Calendar.cs?view=markup), make the few changes you need, and enjoy! You just saved yourself a ton of time hacking something yourself.

Managed.Windows.Forms
Our System.Windows.Forms stack is completely written using System.Drawing/GDI+ (makes it very portable). One of the advantages is that the controls we wrote can be modified and refactored with little effort into MS.NET. Let’s stay you want a text box that does all sorts of colors, or you want a rich text box that supports some crazy feature (like shadowed text or something). Just like the asp.net control example above, you can strip out what you want and make it happen, in a fraction of the time.

Mono Tools for Visual Studio
My good friend Paco Martinez is the Win32 king. He has put together a number of projects that integrate with Visual Studio to help you check your code against mono as you develop. You can see most of his packages on Novell Forge here and here. His tools are a must have.

XSP
Simply, because its better then Cassini for a standalone ASP.NET server. Also the licence allows for distribution, so you can package your ASP.NET up for people to run on machines without IIS and not have to worry about restrictions or limitations compiled in. XSP is also the back end to our mod_mono module for apache, so you are not using a diluted version.

Mono’s Debugger
Ok.. It’s not visual studio. But many people who are used to gdb or any other command line debugger, may find its familiar and useful.

Complete Control
This really isn’t a tip but an example. I’m personally aware of one company that has taken and extended Mono’s web-service stack into their own code to improve compatibility with Java and write in support to expose and consume methods with XML-RPC in the same layer.

Mono can be an invaluable tool. I know it has been for me over the last couple of years in my own development.

ASP.NET Appliance

Monday, May 22nd, 2006

Soekris + XSP + Mono (compiled on uclibc) = $200 ASP.NET appliance

I’m still trying to find a good practical use for this but I got my Soekris net4801 running Mono (which I compiled against uclibc) with XSP.



I think I might regret this later, but you can see it hosting a little aspx page here that runs a few apps and pipes them to the response stream. (Might go down later.. not really built for high traffic :-P)

(Ignore the 40GB mini hd in the stats and the pic. That is for squid for my caching. Everything is running off the 1gb CF card. Also the RAM is wrong that comes from hwinfo. I only have 64mb but it thinks the CF card is ram.)

Neat stuff :-)

JaCIL, 24, Online Food Ordering

Sunday, May 21st, 2006

JaCIL

This looks interesting. JaCIL (pronounced “jackal”) is a project that aims to be able to provide the capability of running CLI code on the JVM and visa-versa. Underneath, it leverages Mono’s Cecil to help tackel some of the hurdles.

You can read the anoucment from the author here: http://lists.ximian.com/pipermail/mono-devel-list/2006-May/018573.html

24

I don’t watch 24 but there is a lot of press because it’s the finial episode or something. The most interesting story is the dude that noticed that the clock on the show isn’t a real clock.

Online Food Ordering

Ordering online right now and I just had to talk about this.

This drives me nuts. Pizza Hut uses this company that provides this software called QuickOrder on their site for online ordering. It breaks so many rules of good design. The most anoying “feature”, is that the back button will corupt the entire order (their little javascripts to detect the back button don’t really work). Oh and anyone like DHTML layered popups? The new version is now “AJAX” powered, just for the sake of being AJAX powered and not because it solves any problems. This site is completely useless if you don’t support Javascript. Konqueror just about melted when I used it tested it out just for kicks.

QuickOrder is used on some other sites such as Dominos and a bunch of smaller resturants. I don’t know how. Do people even demo their stuff before buying in?

In contrast Papa John’s online ordering system is awesome. They used to use Food.com (years ago in the pre .COM boom era when Food.com had an online ordering system), but decided to write one on their own. Nothing special. It’s a traditional web app. Its clean, it provides everything it should (user registration, profiles, password recovery etc), and it works even under the worst conditions. Praise the Papa for good design.

Another really good one I found is Jason’s Deli ordering system. This one is written in ASP.net and it’s very new on the block. I’m sure it doesn’t see the traffic as the other two, but yet it works quite well and has a cute little charm to it.

Oh well. Slow day of code.

done!

Friday, May 19th, 2006

I’ve done a bunch today… Just after posting my last blog post on libmozembed, I spent a few hours and knocked out milestone 2.5 and 3.0 in nearly 1/5 the time I though it would take. No more Mozilla SDK required now that I’m dynamically invoking xpcom’s glue.

:-) YEPPIE! :-)

Now time to clean up the binding, add a few helper functions, and get to work on the rest of everything on the managed side.

libmozembed

Friday, May 19th, 2006

I’ve been going non stop of this Mozilla embedding code. I’m getting so far.

I’ve laid out some milestones for myself when I started. Here is where I’m at:

  • Milestone 1

    • Fork gtkembedmoz into a new component. Remove references and dependencies to GTK+ bring in parts from other embedding implementations. Get it to compile. (Exact way the Java Web client was created so I though it was the best route to go). Design and write basic invoking wrapper to be used by p/invoke later.
    • Difficulty: Easy, just lots of work
    • Status: Completed on 05/07
  • Milestone 1.5

    • Separate code base to the project build outside of Mozilla’s code tree and without having to build it in-line during a normal build of Mozilla
    • Notes: Built project skeleton up, wrote macros for autoconf to find Mozilla sources and libs (pkg-config doesn’t exactly work for what I’m doing).
    • Difficulty: Hard
    • Status: Completed on 05/12
  • Milestone 2

    • Drop all references to all internal and private classes in Mozilla. Switch to embedded string classes. Bind ONLY to Mozilla’s xpcomglue and embed_base_s libs.
    • Notes: Now compiles against latest Mozilla SDK or SDK directory in your dist folder of your Mozilla and using the standard development headers. No need to build Mozilla to get it to work. Begin work on C# wrapper and wrote a very minimal implementation to start testing.
    • Difficulty: Hard
    • Status: Completed on 05/18
  • Milestone 2.5

    • Drop emed_base_s lib dependency by handling Mozilla XPCOM startup and shutdown ourselves
    • Difficulty: Fairly easy
    • Status: 100%
  • Milestone 3

    • Drop dependency on xpcomglue lib and bind directly to xpcom. This will make it possible to build the binding without having to download a binary SDK or build Mozilla to extract the SDK from the build to link against.
      This step still remains to be seen if its completely feasible. The best why to find out is to try and do it.
    • Notes: this may require dropping nsSupportWeakReference which I’m not sure what the effect will be yet.
    • Difficulty: Hard
    • Status: 100%

You can see some of the specifics on the Mono wiki.

Google Analytics

Wednesday, May 17th, 2006

I signed up to get an invite about 3 months ago, and I’m still waiting.

Might get one from ebay for $100-200. http://search.ebay.com/google-analytics_W0QQfkrZ1QQfromZR8

Maybe not…