Pluggable Compiler

While reading this post about C# 3.0 on MSDN Blogs I thought about an idea to make pluggable compilers. Let me explain:

In every programming language the language designers have to decide which features go into the language and which features stay out. These decisions are crucial to the development of a language and the rate of adoption of it. Once a decision to include a language feature is made, it cannot be undone.

So the idea is to make the compiler pluggable, in the sense that you could include lingual features you’re interested in and exclude others. This could be used to streamline the development style in a team of programmers, for example. In the companies that I have worked for so far, using advanced programming techniques, which were great to use but you had to go through a learning curve to understand, was frowned upon. In production code there’s not always room for creativity at the price of code readability.

A pluggable compiler won’t be easy to make. It will have include a parser, which will know to which compiler plugin it should address when it finds a certain syntax, and different feature syntaxes may interfere with one another. Now I’m wondering if it is even possible to make a plugin-based compiler. Maybe just having the possibility of turning off some language features could be nice. But it’s just an idea.

MLRS – My Little Relay Station

Previously, I wrote about experimenting with TAPI3. TAPI3 is Microsoft’s implementation of a Telephony API for Windows. One of the new things in TAPI3 (except for being implemented using COM) is that in TAPI3 the abstraction of the API goes beyond phone devices, and also includes H323 (which is a Voice over IP protocol) telephony.

Seeing that I thought to myself that a nice project would be to create a way to use your home computer to make local phone calls over the Internet. For example, let’s say you travel outside your country to a place where there is an Internet connection. The idea was that you would connect to your computer at home, instruct it to dial (using a modem) and talk to a person in your local area.

For a while I thought this idea could even be extended to a peer-to-peer network of people allowing calls to be made using their computers while they are out of their homes. Think about it – a person goes to work and leaves her phone line unused for all that time of the day when she is at work. This line can be used, by people who live far away, to make free calls (assuming local calls are free).

However, today phone rates are dropping as more and more VoIP infrastructures are being established. The relay station idea is no longer such a big motivator for people to use. Maybe the peer-to-peer thing can be implemented with a different technology, which is available today, in an easier way.

I wrote some code to get the MLRS to work. Unfortunately, I had a problem with my computer’s crappy hardware (or at least I think that was the problem), so I stopped developing this one.

Oh, and one more thing… I know that MLRS also stands for Multiple Launch Rocket System. The pun is definitely intended.

The Daily WTF

The Daily WTF is a forum style website, but is actually a blog where you can see, every day, examples of the funniest “design patterns” and code you have ever seen. Code samples that will truly make you go “WTF??!!” to the point of disbelief that anyone actually wrote them.

Miranda IM

Miranda Instant Messenger is the IM software I use. I like it for quite a few reasons:

  1. It connects to almost any protocol there is.
  2. It has a small footprint, both on your computer’s hard drive and in its memory.
  3. It is extensible, in the sense that its architecture is plugin-based, which lets you extend the program in many ways, and even replace “built-in” functionality with your own.

People have done wonderful and unexpected things with this program, as you can see by browsing Miranda IM’s plugin database.

I started using Miranda IM when I started working for Motorola. At the time, the firewall only allowed the official Yahoo! Messenger client to go through (as it falls back to HTTP when direct connection cannot be established with Yahoo!’s servers). So I decided to write the Relay Plugin for Miranda, which uses Miranda’s multi-protocol capabilities to act as a relay between protocols. Something like this:

Me at work, connected to Yahoo! < ———–> Miranda IM at home with the Relay plugin, connected to Yahoo! and MSN < ———–> My friends on MSN

The Relay plugin also motivated other people to create relay-like plugins, like mBot Relay agent plugin, forward plugin and yaRelay plugin. This actually makes me kind of proud.

I think this plugin is great, but it is now outdated since the intoduction of the Miranda scripting plugin, which spawned the creation of Web Miranda (also a plugin) and now you basically can have Miranda working from anywhere in the world using nothing but a web browser.

I continued to develop for Miranda, though. After experimenting with TAPI3, I put Caller ID into a plugin and created the Caller ID plugin. The cool thing about this plugin is that it uses my own Relay plugin to tell me when someone calls in. So when I’m at work and someone calls my apartment, my computer at home IMs me about it with the number. A neat trick to show your geek friends, that’s for sure.

Problems with Hebrew

I was going to post some stuff today in Hebrew, but unfortunately I have problems with the blog at home, which is supposed to be an exact copy of this blog.

The problem is that I can’t add posts in Hebrew. They come out all with question marks. It’s very strange, because the same blog exactly works on this server.

Nevermind. I’ve tried to mess with it for too long. I’ll post in English until I figure it out.

Raymond Chen’s blog

Raymond Chen is a evil empire Microsoft employee. His blog is very popular among developers, or at least that’s the impression I get. However, it is not only a development blog. Raymond, being a Microsoft veteran, has many interesting and amusing stories about Microsoft’s early days, Interesting observations and, of course, a lot (and I mean a lot!) of useful developer lessons which he passes on in a concise way. He occasionally whines about stuff, but that’s ok too (about that last link – I think that Google introduced a great UI for their map service. So if I’m looking for a place that Google already has data for in “Google Maps” then that’s where I’ll go).

The story on how I found John Stone’s website

I told you a little about John Stone in my first post and now I would like to tell you the story on how I got to his website.

You know those stupid emails you get at work? Usually there are images or movie clips in them, but sometimes there are links. Before I started working out I got one of those links. The message subject was “Look… this guy doesn’t change his underwear every day”. I knew it was stupid the moment I read the subject line, but I had to check out the link and see how they can tell. I only looked at it for a second, closed the browser’s window and deleted the email message.

However, the picture of the guy who has made the change got stuck in my mind, and when I started working out I also started to look for sources of motivation and inspiration. So naturally, I went to Google and looked for the guy who doesn’t change his shorts every day. And indeed I found John Stone’s FAQ, which is hilarious because it contains answers to all the questions from people who think John is fake. Unfortunately, since John is not updating pictures daily anymore, the answer to the boxer changing isn’t there either.

So that’s it. I’m thinking of emailing John with this story (and a huge thank you), but I’m not sure I’ll do that. Oh, and one more thing… the answer to “Why do you wear the same shorts two days in a row” was “Because sometimes I shower before I take my picture and sometimes after.” That simple, but I’m sure some people still don’t believe it.

Current Workout Schedule

Here’s my current weekly workout schedule:

Sunday: HIIT #1 on an elliptical; Pilates.
Monday: HIIT #1 on an elliptical + 20 minute run at 85% MHR; Yoga.
Tuesday: Muscles: chest, legs, triceps; Pilates.
Wednesday: HIIT #2 on an elliptical; Muscles: shoulders, biceps, upper-back.
Thursday: HIIT #2 on an elliptical + 20 minutes run at 85% MHR; Muscles: chest, legs, triceps.
Friday: Muscles: shoulders, biceps, upper-back; Yoga.
Saturday: Rest!

HIIT #1 is:
3 minutes warmup
1 minute at 60% effort
1 minute at 70% effort
1 minute at 80% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 70% effort
1 minute at 80% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 70% effort
1 minute at 80% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 70% effort
1 minute at 80% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 70% effort
1 minute at 80% effort
1 minute at 100% effort
2 minutes cooldown
(total of 25 minutes)

HIIT #2 is:
3 minutes warmup
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 90% effort
1 minute at 60% effort
1 minute at 100% effort
2 minutes cooldown
(total of 25 minutes)