Sunday, October 29, 2006

Pictures from Florida

I'm not sure why that is so but I like it here at my uncle's family's house outside Tampa, Florida. It could be the weather, almost 30 degrees Celsius while it's almost freezing(!), though that is extreme, back home in Sweden and the fall-storms raging there. Or it could be the nice company, especially the little attention stealer that my lovely half year old cousin is. Or it could be the totally relaxed atmosphere after a busy week at a conference. Having a drink handed to you by your nice uncle coupled with wireless Internet at your fingertips in the pool. The hottub/jacuzzi next to the pool is sort of nice too, especially if you consider that we sat in the hottub having a great time and looking up at the star filled sky last night. The incredible sunsets perhaps?

I'm not sure where to stop, nice food, nice company, lovely weather and no work. The view is rather OK too, including the skylines of two cities across Tampa Bay. One is St Petersburg a bit to the west (a little to the left as seen from the house) and the other is Tampa a little further east (to the right, not clearly seen in these pictures).

Above: Me at the pool.

Above: Sunset as seen from the house/pool with the city of St Petersburg's skyline.

After the sunset

From Portland to Tampa

The flight out from Salt Lake City was of course delayed so it didn't leave until about 1.30am instead of 11.45pm. As I had a 4h wait coming up in Atlanta it didn't matter much, other than that people, including me, were really tired. When everyone finally gotten on the plane the captain informed us of a sensor error on the door. An engineer finally signed off on the door working correctly despite the sensor reading telling the pilots that the door was not closed. He checked from the inside too and went out another door. Well he wasn't going to be on the plane anyway so it was safe for him to do so I guess...

The Salt Lake City airport was not as generous as Portland and did not provide free wifi access. On the other hand their checks to enforce this left some possibilities. I could eventually get ping, ICQ, SSH(!), Skype and google talk (Jabber) to function perfectly. I could also read web email and do other limited web surfing. Seems they only block certain ports like port 80. Port 443 worked fine for example, making everything https working and quite a few web sites have an https option, like google personalized (www.google.com/ig), and gmail. Having SSH functioning basically meant that anything could be done, but I didn't bother.


Ah well, I'm at last at my destination, but dead tired, got maybe 30min of sleep this night.

Friday, October 27, 2006

So it had gone too well so far...

Of course, all my luggage got here, flights worked, tutorials went fine, haven't lost anything, laptop still working, etc. Arriving at the airport today though I was told that my flight was cancelled due to mechanical problems. My new flight schedule involves Portland, Salt Lake City, Atlanta, and then finally Tampa. So an additional flight and most importantly I'll fly during the night, arriving the following day instead of the planned arrival time this Friday evening.

Considering I slept for just 5h this night I'll probably have no problem sleeping though (got to see it the positive way). But after hours on an airplane in the middle of the night followed by a 4h wait in Atlanta will be... interesting. Anders's flight is not leaving until just before 5pm and mine a little bit after 6pm so at least I got some unexpected company here at the airport. It is a nice airport here in Portland but after 8hours here it will almost feel like home I guess. The good thing is that they have free wifi all over the place :) .

These things happen so it is no big deal. The annoying thing this time is the combination with my phone problems made it harder to update people on the flight changes. That was solved by IM-chatting with my brother who happened to be online back in Sweden and he could get hold of my father in Florida to update him on the flight changes so they can fetch me at the airport tomorrow morning instead of this evening. Such nice service. Vacation has begun!

Final day at OOPSLA

Thursday started a little later than usual for some reason. *cough* Directly followed by a power outage that made things interesting both at the hotel and conference center.

Agile tutorial
Alistair Cockburn is really good. Good presentation skills, extensive knowledge with very interesting ideas and concepts of ways of handling them. What else can one ask for? I'll buy some of his books, I haven't read any of them but sure will now. Cockburn's description of general agile development makes me go "aha, I recognise that problem/situation, and that and that way of thinking really strikes a chord within me" all the time. More so than "just" reading directly about XP (SCRUM I sadly don't know much about). His description (of agile development) is more of a way of thinking with some nice guidelines and nice helping ideas and key techniques for things to try out. Doing it better than XP it seems to me. XP is one type of agile development of course though. What Cockburn describes though is an ever changing, very pragmatic and efficiency based agile development. Almost like a meta-methodology. What works for us NOW? What does not? What shall we try next? Constantly adapting over and over and handling the situation from where we are NOW. No company, group, project, technology used or customer is the same. Adapt to what works for you in your project taking inspiration from a wide array of agile methods and tricks.
The icing on the cake for me was the Musashi (1685, on sword fighting) reference and how his ideas relate programming/projects. They were actually quite good, not a bad or very constructed analogy at all. Add in the fact that i train such martial art techniques in bujinkan and I got this warm feeling inside...

Too bad they had planned the tutorial at the only time he was unable to be there the full time, his flight was leaving the same time the tutorial would end. Anyway it was a really great tutorial, probably the best of them all that I had.

Evening/night
Final night out! No one cared about their flights the next day. But still home at a decent time, around 2 in the morning after having had a nice american dinner at Rock Bottom followed by a visit to the Irish pub Paddy's.

...and Wednesday at OOPSLA

Keynotes
Fortress presentation by Guy Steele. Many interesting details and concepts such as for a new programming language. Notation (ASCII with special notation but also Unicode is taken advantage of)It is built for growth, what does that mean then? If it can be done by a library let it be done in a library instead for example.Most interesting was the parallelism possibilities that was automatically provided and possibly never seen by programmers just library authors. Furthermore and more importantly, automatically and easily exploited when you set up your data types for example.

Onward! stuff
Intentional software, basically Domain specific languages deluxe, very interesting. Switching notations and using different representation models on the fly and they are perfectly transformable back and forth. Also started off with a interesting motivation example for domain specific languages. From a project description and discussion. Consider a 400pages long specification of a specific application in certain domain resulting in a million lines of code (about 20,000pages). What have we done? Taken 400 pages and scrambled them into 20,000 pages? More importantly what do we do today when something changes in those 400pages? We try to find where this effects our 20,000pages and change it in there. DSL is of course about trying to have this all described in a domain specific language and generate the actual code. Meaning we change what we need in those 400pages and then generate the result. Simplified way of putting it but very nice concept!

A nice insight for real world application of DSL: there are usually multiple domains involved. The specific customer's problem domain and perhaps a GUI domain. GUI domains and some examples of their representations in the cool tools shown here would have been very nice to have in our recent projects at work. Showing all the screens and the flow between them easily in one presentation model and then showing them in code and then in another outline model etc etc.

Then we had Pegasus, naturalistic language programming. From English text, understand it and generate the code. Example given: "If the first element of the second row in the matrix is less than 3, then print I understand you". Then showed how it is broken down into parts and understood and then generated java source code step by step. Very easy example of course, but showed the concept nicely. Interesting side note he had: If you can translate natural text to code you can reverse it as well... to another language! Multi-language documentation.

German and English for now and Java as the programming language it is translated into. Russian, Chinese, Turkish, .. are the next steps. As for programming languages Python and Haskell is next in line. Of course, at least that particular example, is even easier and shorter described in Ruby as Jon on my left and Anders on my right pointed out at the same time, both with example code on their laptops shown to me. Jon makes a good point when he says that a domain specific language would probably be much better suited for the task. I totally agree. If nothing else you would have to start off defining things first anyway, practically defining a domain specific language and terminology. But maybe we just don't know or have experience enough. It's not hard to remember to be humble about your knowledge and experience here at OOPSLA...

Tutorial
Effective Concurrent Programming in Java 5. This tutorial was held by Brian Goetz (my favourite java article writer) and David Holmes. Extremely knowledgeable guys. Now this is an area were I consider myself fairly knowledgeable about, and indeed the tutorial was for the most part about things already familiar to me. Code examples were great though and the second half of it provided me with some totally new things and hints such as the concept of "parking threads" (no not suspending but very lightweight co-operative suspension compared to the heavyweight wait/notify) and room synchronization combined with the implementation of your own locks using AbstractQueuedSynchronizer. I loved (but expected) the fact that they brought up things such compareAndSet and lock-free stuff. To end developers I think that there has been way too little talk about it, ever since I encountered it doing a project investigating lock-free data structures for super computers back at the university in -98/99. I'm definitely buying their new book.

Talking with Brian and David in the break and afterwards was very rewarding as well. Java 6 (Mustang) doesn't include much new things at all when it comes to the concurrent packages simply for the reason that they didn't get much feedback about it. Now this is probably due to not very many having even moved to Java 5 yet and even so, not that many taking advantage of the more advanced things in these packages. Combine this with the fact that this is all very well done in Java 5, who took great advantage of Doug Lea's expertise and libraries. JDK 7, not much planned there when it comes to the concurrent stuff, no JSRs, go ahead and make suggestions! Just some minor things.

Evening
In the evening all the conference participants had dinner at the Oregon Museum of Science & Industry. I also got to speak quite a bit more with Brian Goetz, very nice fellow, covering such thing as his new job at Sun with the current temporary job title "trouble maker". ;-)


After that some of us went out and downtown looking for different bars. Went sleep at about 3.30 in the morning...

Another day at OOPSLA -tuesday

Keynotes
What to say about these keynotes? Hard to describe without having been there. Let's just say that they were as far away from code examples as you can get. One about very large scale systems and their structure, ability to change and adapt the other one about the pleasure in computing combining animism with computing.

This was followed by The Geography of Programming by Elisa Baniassad. Westerners think more of objects and easterners think more about relationships between objects. Quite interesting talk with some very good pictures and video to go a long with it. My own reflections. Obviously (or is it?) more suitable way of thinking for our modern systems, who it is getting increasingly hard to find all the dependencies between objects/modules.Relational languages instead of object oriented perhaps? Perhaps the move from relational databases object oriented ones should (also) be the other way around? Move the language to be relational instead of moving the database to be an object oriented one? How will it affect us, how should it effect us? In the near term maybe just think more about the relationships or roles between objects/components, or should we stop thinking/focusing about objects almost entirely?

Lunch
A rather long lunch. Other than the usual suspects (Jon, Niclas, but no Jimmy) and some new found friends over here (Anders and Marcus), Laurence (UK) and Andrew (US, Arizona) also went to lunch with us today. Well actually Andrew had visited this nice place just "three blocks away" the night before or something like that. As it turns out his spatial judgement skills had been somewhat hindered by the amount of alcohol ingested that night. It was about 8-10 blocks away. Oh well we had a nice lunch anyway.



Jon with his laptop out, Marcus, Laurence, Anders and Andrew.

Research papers
Design fragments among others seemed like novel concept to me at first, but isn't that a lot of work for the framework provider? On top of writing good examples I mean. Well of course it is, but enough for the gain? Maybe I just know too little about it or the examples were too simple.

JTL seemed good in the simple cases and not so easy (which was the goal) in the more complicated cases. Other research paper presentations I listened to were about aspect oriented implementation details improvements (times two) and how to provide uniform dynamic proxies for java (not just for interfaces).

Evening
In the evening there was the tribute to John Vlissides, the renowned co-author of "Design patterns". A dessert reception sponsored by IBM. It was followed by a panel discussion involving the other members of the Gang of Four.

Wednesday, October 25, 2006

Phone problems continued

Phone problems
Today I again spoke (twice) with the customer service for my mobile phone service provider, Tele2, back in Sweden. The short story is that it is still a mystery to them and they figure it is my SIM-card that is broken. That in a way that only makes the roaming with mobile phone service providers in the US not work. Sounds strange to me. To top it off, not having a working mobile phone service, they told me that of course this means all calls are forwarded to my voice mail and as I successfully roamed in in Germany on my way here that I will pay that call forwarding cost... Great news, so I'm not only without my paid for service I will have increased costs due to it too.

Technical details of phone problems:
  • My phone, Motorola V3 Razr is unable to make use of any of the GSM networks here ("emergency calls only")
  • It can list networks fine but nothing happens if I manually try to register with them
  • The two networks it can find, T-Mobile and Cingular, both have roaming agreements with my phone service provider Tele2.
  • The Motorola V3 Razr is a quad band phone able to use both the 1900 and 850 GSM bands over here in the States.
  • Using my colleague's SIM card in my phone works perfectly (also Tele2).
  • Putting my SIM card in my colleague's phone produces the same result as on my phone (emergency calls only)
  • I've successfully roamed in to various operator networks with this particular phone and SIM-card, most recently in Germany at the airport there on my way over here.
  • I've never been in the US with this phone and SIM-card before.
Note to self: If they ask you if you have a tri-band phone (for the 5th time) able to use the US networks, just say yes, don't say that you actually have a quad-band phone. That's apparently confusing and causes them to look up the phone details, every time.

Monday

Temperature control
What is it with the building standards over here? In our hotels rooms they have one-glass windows. Come on, it's not like Portland is close to a desert or something. It's up north! It is October and it gets freezing in our rooms in the morning. Imagine how it would be here in the middle of the winter. To be fair though, this is easily compensated by the fact that it gets way too warm in our rooms in the evening. Well sometimes at least. In Sweden, which seems to be quite similar climate wise, we have 3-glass windows. Even England now a days have standardized on 2-glass windows. On the other hand Portland has about a million small, sometimes restaurant local, beer breweries...

Aaah, a cup of free watery hot coffee later at the conference and I'm almost feeling warm again. I'm no coffee addict but it is a good thing they have so many Starbucks around here, so you can actually get a decent cup of coffee. Of course this being the US, the smallest one is called "tall" and is more coffee than I usually drink in an entire day. Don't get me wrong though, I like it over here!

The OOPSLA conference update
Monday was a busy day here. I'm still having problems with the time difference, and I woke up at 5 in the morning today too, unable to go back to sleep. Oh well that's OK and expected. Most of the day was spent in a tutorial named "Patterns for concurrent and networked objects" from 8.30-17.00 (5pm). More on that later. That was directly followed by the OOPSLA Welcome Reception (17-19.30) and then followed by other things such Eclipse event sponsored by IBM.

During the morning Jon and Niclas held their "Generate the Repetitive, Boring Code: How to Write Code Generators" tutorial, which seemed to have been very popular. Jimmy actually tried to get in there in the middle of it but was not allowed in due to the amount of people already there (people standing up in the back). I met up with them after their tutorial for lunch and the people coming out of there didn't look too unhappy.

Surprise photo of Jon and Niclas at their tutorial.

Evening
After the welcome reception, the eclipse event after that, etc, Jon, Anders and me ended up in the hotel sky lounge bar but we didn't last long there. Soon we passed out in our beds.

Tutorial
I'm not too sure what to say about this tutorial, "Patterns for concurrent and networked objects". Interesting subject for sure. Too long? Definitely Schmidt a good speaker? Sure is, and obviously very knowledgeable too. Design patterns for distributed and concurrent systems are quite interesting, but it felt like we only did that for the last couple of hours or so. At 11.00 (after 2.5h!) the introduction was over. It covered very basic topics and I'm not sure who would have understood especially the last 2h if they didn't know all those things rather well already. Sure it is nice to have a good introduction but that seemed a little too much, I'm sure most people there knew that we use OSes and middleware underneath a domain specific layer or two day!

The last part involving aasynchronous I/O in patterns was very interesting though. But the actual pattern was nothing new. Just look up any Java asynchronous I/O server example and that is the way it is done. Well I guess that's the point of a pattern and I'm probably just a little bit disappointed that most of the things were already fairly well known to me. Again though, Schmidt is a good speaker and it did give me some new insights here and there along with a slightly different view on some things. The notes/slides were terrible during the actual presentation but good to have afterwards (way too wordy!).

One of the things I liked was the real world examples he used. Very good ones I must say and the stories, patterns etc applied very well to the ideas presented. Furthermore they were both very suitable and especially the first one "sexy" (for a tech geek). The first one involved the computer software for Boeing fighter jets such as the F-18 E/F and F-15 E. When I was young(er) I loved reading all about fighter jets so of course this appealed to me on that level(plane?) too. First they had introduced a basic publisher-subscriber pattern there for all those different software modules (GPS, mission computer, weapons lock, weapons release systems etc). It was a success but after success comes the request for even more features and soon they had more things than they could handle on a single cpu board. Then when you add a second board you all the sudden have a distributed system, and you need to adapt your design patterns and/or add new ones. Very nice real world based introduction to the problem domain I must say. The second example was a more complex x-ray imaging acquisition and distribution system that provided the opportunity to explain a lot more distributed/concurrent patterns.

Sunday, October 22, 2006

The first tutorial

Warning! This is a pure technical/work blog entry except for the last paragraphs.

My first thing here at the actual conference was a tutorial about "SOA: From Concepts to Reality" by Nicolai Josuttis from Germany. That is what I did this Sunday morning. It was quite interesting actually and exceeded my expectations. I liked the fact that he included som real world examples and issues and it really felt like such. No faked "real world examples". Even so they were easy to follow and understand and you could relate to similar project/system design issues and how trying to solve them could make things worse and sometimes it is just a choice of the least bad way of doing things. In practice I mean. For a theoretical approach ("concepts") to SOA it also contained a lot of that good(/bad?) stuff called "reality". It was a no bullshit description of and introduction to SOA without getting into any implementation specific stuff. Anyway, for some reason it felt very direct and certainly not "too theoretical", or maybe it is just me taking a (mind)step away from cumbersome practical details...

The short version
SOA is not an architecture, it is a paradigm. That is quite an important distinction. It is not a recipe of how to do it. In fact it does introduce new challenges and a wide range of complex problems to solve. SOA is not something you wish for in all your systems, but a rather good suggestion of thinking if you are forced to have a distributed system. Of course as Nicolai pointed out, you should never trust just one source or any single person's point of view, especially with SOA. He also mentioned that he often got hired to get a second opinion on what SOA is and could do for them. I especially liked his points on data types, performance and versioning (yes that boring part that we want to forget) was actually quite interesting. SOA is over hyped, and as usual it is no silver bullet, but that doesn't mean it is a bad thing!

An important topic that really got me thinking was about data types, why there shouldn't be common data types that everyone agrees on in a distributed systems! We should actually be forced to use cumbersome exchange data objects between systems. Wow, I never thought I would say that. The reason why? Simple, try and first get both the CRM, billing, delivery etc department/systems agreeing on what a customer data type should look like. Then if something changes later on... Just map them to your own at exchange time. Sure it costs you performance but at least it will work in practice. Other important things with data types were the actual typing combined with versioning. That is actually of course valid for any API not just with Service Oriented Architectures. Recommendations here were to keep the data types simple, stick to the primitives, strings etc instead of using a complex Customer type that might cause binary incompatibilities in the future when it needs to change or Customer_2 types which in turn leads to a wide range of API/service issues and the start of the versioning issues.

More types
Type information in the data type was another detail. This is something I need to talk to Niclas about. Dynamic/generic typing. It was mentioned here, but just very basic. If the Customer class only had a method of getting generic values. Such as:

String firstName = customer.getValue("firstname");

Then you don't need to change the data types, recompile and/or worry about binary compatibility when adding a new field to the customer data type. Of course you don't have any static type checking, but as you need some solid tests and testing anyway, especially in distributed systems such as a SOA based one, that is not a problem.

Recognize that thinking? It's the same argument we have for dynamic languages when typing is brought up. Conclusion? Another argument to step up the test efforts! I'm really glad Jon has put the effort in to start "the readable executable integration tests" stuff at work. This so it goes beyond unit testing and then giving a poor tester the responsibility to assure that it is all functioning correctly. Maybe more on that stuff another time, but meanwhile, imagine a non-programming tester, perhaps together with a customer, writing perfectly readable but even so, executable, integration tests... Too good to be true?

What could a dynamic typing system/language do for SOA I wonder? I've still have problems accepting dynamic languages like Ruby for large scale systems. I love them for certain things though! I should have attended Niclas tutorial this morning I guess...

So what is SOA anyway?
Loosely coupled services, drawbacks? Performance, security, and hard to find out dependencies. Yes dependencies! In a loosely coupled system. Of course on a totally different level, but still. As everyone can communicate with every other system you not only have problems of tracking down dependencies that you have in practice but also quite a few security issues. That was something we never got around to discussing actually, it was just mentioned.

Oh well, I'll hold a presentation back home at work on all these tutorials and things I have and will experience over here that will hopefully be a little more comprehensive than this short description.

At the same time...
Meanwhile Niclas had his first presentation/tutorial, "Dynamic languages for statically-typed minds" (cool title!) and initial rumors says it was well received and caused a lot of discussion. Following this, after lunch, Niclas is holding his second tutorial together with Jimmy, "Test driven development -Hands-on!" and it is now currently in progress.

To the right above you can see Jimmy and Niclas just before their presentation starts.

Jon was supposed to attend "Programmers are from Mars, Customers are from Venus: A Practical Guide to Working with Customers on XP Projects", but from a IM chat with him a few moments ago I learnt that he had changed his mind and is currently in a tutorial named "Modular AOP Using Design Rules and XPIs ". So far it seemed very good he said and he mentioned some things we should do at work with concepts from there.

My time here today
I have the afternoon off today as it seems, no tutorials and not much else going on there on this Sunday. It all really first starts on Tuesday actually.

I wonder if Jon, Niclas and Jimmy will have time for a proper dinner out tonight, they didn't yesterday. I instead followed some new acquaintances out downtown yesterday and we had a good time even though we got, literally, sidetracked ending up on a tram going up river, instead of back to our hotels. It was a nice evening for a walk anyway... Yes they have trams here in Portland, it's just like Göteborg in many ways. The weather and the temperature is the same too, but so far we only had some lovely sunny autumn days.
And no my quad-band mobile phone is still not working. It did work fine in other countries in Europe though and when I tried out Jon's SIM card in my phone it worked fine. No news from the customer service either and it is a bit hard for me to contact them with a 9h time difference.

It's not all work...

Now that I'm over here (the American side of the pond called the Atlantic) attending the conference I'll take advantage of this and have one week of vacation here. "While I'm over there I can as well" visit my uncle, his wife and my newborn (April -06) cousin! They live in Florida though so not exactly close to Portland, Oregon, quite the opposite actually. About as far from each other as it can get but still be part of the mainland US (south east and north west corner respectively).

That will be great, and I'm really looking forward to it. As it happens, by pure coincidence (they had planned this long before this conference was planned for me) my father and mother will be in Florida as well, arriving the day before and leaving just a few days after me. Apart from having a great time with my relatives in a very relaxed environment with no work, I and my parents will go visit the Kennedy Space center. A childhood dream of mine :-) Another good thing with them coming over is that they can bring my camera which I forgot to pack...

Speaking of camera, I can still use the basic camera in my mobile phone to take some pictures, but I'm unable to use it for making phone calls... I sort of thought that was the primary purpose. Others here with the same phone provider (Tele2 Comviq) have no problems and the customer service back in Sweden didn't know what the problem could be, everything seemed fine to them, but would check tomorrow when the tech guys were back. Then what? Will they call me...?

We are still awake (it's soon 5 in the afternoon local time Saturday, but 2 in the morning Sunday in Sweden). I think we managed to stay up long enough (around 8 in the evening) yesterday to have compensated for most of the jet lag! We are to meet up with some other people at 6 for dinner and tomorrow, Sunday, the actual conference starts!

Oh almost forgot, as it happens it seems Portland is having a fashion week here at the same time. Maybe that will compensate for all geeks here for the software conference :)

Saturday, October 21, 2006

Preparations...

As some of you know I arrived yesterday in Portland, Oregon in the US. The flights here were smooth even though a delay with the flight to Frankfurt caused us a somewhat short transit time, but it was of course quickly and efficiently handled by the excellent German Lufthansa staff at the gate, where we could get our boarding passes. Yes for some reason Jon and I didn't get our boarding passes for the 2nd flight in Göteborg. Go figure. Not even the security checks caused us any extra trouble due to missing boarding passes. I guess that sometimes the universe actually cooperates with you...

My reason for traveling to Portland is this big software/programming conference called OOPSLA. It's my first time attending it but with me are both my colleague Jon from Consat and Niclas Nilsson who have not only attended the annual conference before but are actually both holding tutorials here. Quite impressive. Today Jimmy (and his father) also joined us. Jon and Niclas are holding one tutorial together, Niclas two more by himself and then a fourth(!) one together with Jimmy. Each one is for 3.5h and attending those are people from all over the world paying good money to do so as well. Of course today (Saturday) they are doing some last minute preparations for tomorrows (yes Sunday!) start of the conference.

Soon we will find us something to eat and keep trying to win the fight against jet lag...

Just 4 blocks from here is the state's biggest shopping mall which at least I will check out later and maybe the others if they are not panicking too much about their tutorials. :-)

To the right you can see (from left to right) Jon-Erling, Niclas and Jimmy discussing their presentations.

So here we go...

So I've finally created a blog, "everyone" should have one it seems. Well there should be a reason to start one first I guess and finally I sort of have one. I'm traveling and here I can post some updates if I feel like it. It will not be comprehensive, just something now and then for fun and when I feel like it. After that we'll see what happens. A shared thought now and then perhaps?

Something interesting I just learned, the spell checker here doesn't recognize the word "blog"...