tag:blogger.com,1999:blog-63006971314248270022024-02-19T06:57:31.885-08:00Söderbjörn's Software RamblingsRoberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-6300697131424827002.post-69190479158478208852016-05-02T14:03:00.002-07:002020-11-24T01:27:22.547-08:00An Android fan tries iOS<h2>
Introduction</h2>
In general, I am a long-time fan of Google's services and devices. In addition to the <i>HTC Hero</i> and original <i>Samsung Galaxy</i> Tablet both running Android, I have owned every single Nexus phone and tablet except for the Nexus One and the most recent devices released in 2015. In other words, I owned the <i>Nexus S</i>, <i>Galaxy Nexus, Nexus 4, Nexus 5, Nexus 6</i> (2014 edition), <i>Nexus 7</i> (both the 2012 and 2013 editions), <i>Nexus 9</i> and <i>Nexus 10</i>. I have been quite pleased with the feature-set of these Google-branded Android devices which receive prompt updates, unlike the Android ecosystem at large.<br />
<br />
However, over the years I've become increasingly annoyed at the user interface performance and usability of Android devices. Usability was mostly cured with the Ice Cream Sandwich release and performance was significantly improved with Jelly Bean, but even today my <i>Nexus 6</i> and <i>Nexus 9</i> from 2014 have much slower and jerkier scrolling and swiping while browsing heavy sites in Chrome than even the original <i>iPad</i> running Safari, a device I imported from the UK before it was released in Sweden and still own (so I can compare side-by-side). That an ancient device like that, the first popular tablet if you will, is faster than a state-of-the-art Android device -- even in limited scenarios -- says something about the technology or culture of Android and its eco-system!<br />
<br />
Ever since getting my <i>MacBook Pro</i>, by far the best computer I have ever owned, I was tempted to see if the grass was greener on the Apple side of the fence. While Android seemed to still be more feature-complete than iOS, the gap had been shrinking over the years.<br />
<br />
This post will summarize the good and bad points of this experiment as I see them, having replaced my Nexus 6 and Nexus 9 with an iPhone 6S 64 GB and iPad Air 2 64 GB (wifi + cellular edition) for two months. The post will go through my experiences with iOS in terms of the following aspects:<br />
<br />
<ul>
<li>Build and Hardware</li>
<li>Apps</li>
<li>Web Browsing</li>
<li>Using Google Services</li>
<li>Navigation</li>
<li>Keyboard</li>
<li>Notifications</li>
<li>Multitasking</li>
<li>Mac and iPad Integration</li>
<li>Using an Android Wear Smartwatch</li>
<li>Conclusion</li>
</ul>
<h2>
</h2>
<h2>
</h2>
<h2>
Build and Hardware</h2>
<br />
While some Nexus devices had good pretty good build quality (e.g. <i>Nexus 5</i>), others were a disaster (<i>Nexus 9</i>) owing to the fact that Google partners with different manufacturers for every device. That might change in the future as rumour has it that Google might start building its own phones completely in-house, much like it has with its Pixel line of devices (including the great-looking but criticized Android tablet released last year).<br />
<br />
The <i>iPhone 6S</i> feels a little bit slippery in my hand, but overall it's the best-feeling phone I have owned in terms of build and appearance. It's a lot smaller than my <i>Nexus 6</i> and I'm torn on whether it's too small or not -- perhaps I should have gotten the Plus edition instead which is similar in size to the <i>Nexus 6</i> and can fit more stuff on the display.<br />
<br />
The display itself despite the "Retina" moniker has a lower pixel density than my <i>Nexus 6</i>, but it's still good enough not to notice (and that probably helps with the performance, too). It seems less prone to picking up fingerprints than my <i>Nexus 6</i>. It also has a pressure-sensitive screen which I felt was a big selling point (it is rumoured to come to some Android devices soon, as well). In practice, I over-estimated the value of this feature and barely make use of it in practice. While reliable most of the time, sometimes it mistakes my light press for a hard one. This feature still feels gimmicky since it's not well-integrated into the user interface of most apps yet (and perhaps more importantly, it's difficult to actually recognize what apps support it and where, since it's never apparent from the user interface graphics).<br />
<br />
The finger-print sensor is great. It's fast and accurate and rarely fails on the <i>iPhone</i> (for some reasons I have had to frequently re-train the <i>iPad</i>'s finger-print sensor, though, in order for it to keep recognizing me). Unlocking the phone by placing the finger on the home button for a second is very convenient. The finger-print sensor on the new <i>Nexus 5S</i> and <i>6P</i> devices is even faster, but is somewhat awkwardly placed on the back and that's simply not as convenient for me.<br />
<br />
The camera produces better photos than most Nexus devices that I've owned, but more importantly the shutter responds instantaneously -- more important in practice than the capability of the sensor. Even starting up the camera app on an Android device is often painfully slow and by the time it's ready the perfect shot is already gone.<br />
<br />
Coming from the <i>Nexus 6</i>, I feel like the battery lasts much longer -- especially overnight. I can't tell for sure whether this is due to the battery coming straight from the factory or whether it's an issue with iOS itself, but I suspect the latter is an important component. The <i>Lightning</i> cable is convenient and much more robust than the micro-USB connector of most Android devices, but I very much miss the wireless charging (QI) capability of most (though not last year's) Nexus devices.<br />
<br />
The iPhone seems to boot a lot faster than any Android device I've owned, which is nice.<br />
<br />
<h2>
Apps</h2>
<br />
I noticed quickly that some apps are more well-developed on the <i>iPhone</i> than the corresponding app for Android. For example, I subscribe to the fantastic weekly Swedish news magazine <a href="http://www.fokus.se/">Fokus</a> which has an official app for both platforms that appears to be based on <a href="https://www.qiozk.com/">Qiozk</a>. On Android, this app has wholly inadequate user interface performance, making it almost impossible to browse and swipe-zoom through the magazines. On <i>iPhone</i> it's a different story -- swiping and zooming is really fast and convenient. I now manage to read through most editions of the magazine completely whereas before I struggled every week (two small kids does that to leisure time!) and actually downloaded PDF editions from the website which I would read using the official Adobe Reader app instead. On the other hand, there are fantastic magazine apps for Android, too, so it's probably not an inherent defect in the Android platform itself.<br />
<br />
The opposite holds true in a few cases. For example, I have yet to discover a Reddit app that I like -- I find the official app Alien Blue to be rather wonky and no match to e.g. <a href="https://play.google.com/store/apps/details?id=free.reddit.news&hl=en">Relay for Reddit</a>.<br />
<br />
Some of the apps included on the <i>iPhone</i> are also rather aesthetically unsatisfying in comparison to similar Android apps. For example, the Apple mail app is very dull and almost monochrome in its use of colour. I also very much miss the huge beautiful contact images from Android that were displayed e.g. when receiving a phone call. While the contact images from your Google account are seamlessly synced over to the iPhone (which is great), they are rarely put to good use.<br />
<br />
<h2>
Web Browsing</h2>
<br />
The browsing experience on the <i>iPhone</i> is very good. As mentioned previously, navigating through demanding sites on Chrome on mobile devices has often been a rather frustrating experience for me (and it's not completely fluid on desktop, either) whereas Safari is always wonderfully fluid everywhere.<br />
<br />
When I made the switch to <i>iPhone</i>, I intended to keep using Chrome on my Mac and Windows PCs while using Safari exclusively on iOS. Unfortunately I did not discover a feasible way of keeping my bookmarks synced. I already sync my Chrome bookmarks with Google's cloud but there seems to be no good way of syncing those with Apple's cloud in turn (the one seemingly-robust solution I found was limited to Windows).<br />
<br />
I decided to sign up for <a href="https://pinboard.in/">Pinboard</a> instead, keeping most of my bookmarks there. That in some ways is less convenient because I then have to find my bookmarks on-line or using a <a href="https://itunes.apple.com/us/app/pinner-for-pinboard/id591613202?mt=8">Pinboard compatible bookmark managing app</a> and then launch that bookmark in Safari, but on the other hand I get tagging and other features to help me get organized (many years ago I was running <a href="http://delicio.us/">delicio.us</a> for the same reason).<br />
<br />
While surfing in Safari on mobile devices is generally a joyful experience, there are some annoyances as well. First and foremost, as soon as you touch an advertisement it's considered selected and the browser moves to the URI specified by the ad. On Chrome, that only happens if you touch and then release while not moving your finger. As a result, it is very easy to accidentally select an ad by merely swiping through a page. <i>(Update: This no longer happens consistently to me -- perhaps this problem was rectified by an iOS update.)</i><br />
<br />
Secondly, there are some inconsistencies between the <i>iPhone</i> and <i>iPad</i> version of Safari. For example, if you choose to open a link in a separate tab, the <i>iPhone</i> automatically makes that tab active while the <i>iPad</i> launches it in the background.<br />
<br />
Thirdly, there seems to be a limit to the number of tabs that you can have open in Safari at any one time, and it's set rather low (maybe 30 or something like that). I tend to open tabs generously as a kind of temporary reading list. On the other hand, this forces me to read content that I might have otherwise postponed indefinitely (my list of open tabs on Android tended to be impossibly long and cluttered).<br />
<br />
Many applications that want to display web content -- such as the excellent RSS reader <a href="https://feedly.com/">Feedly</a> and the lackluster Reddit client Alien Blue -- do so in a kind of miniature WebKit-based browser instead of launching Safari wholesale. The same mechanism is employed by the password manager <a href="https://agilebits.com/">1Password</a> when you ask it to load and log in to a web page. One benefit with this approach is that launching and loading the web page is nearly instantaneous. The drawback is that you have to execute an extra tedious step if you want to load it in Safari instead to gain access to the capabilities offered there, such as bookmark management. Another benefit is that you can easily go back to the dialog that loaded the web page. This is crucially important on iOS because unlike Android, it has no stack-like mechanism to keep track of the load order of apps and dialogs. Hence, there's no system-wide way of going back to the previous display even though individual apps may offer that functionality.<br />
<div>
<br /></div>
<h2>
Using Google Services</h2>
<br />
As I said initially, I'm a big fan of Google's services, having used them for many years for writing and sharing documents, spreadsheets, photos, videos and more. Hence, it's quite important that I can keep using them on iOS as I have no intention or moving to another services ecosystem anytime soon. I'm happy to report that this has not been a problem.<br />
<br />
Some Google apps are a little bit weaker on Android, but mostly they have relative feature parity. Often they are slower in getting updated, though, as Google prioritizes its own platform. For example, the Google Photos app on Android has had support for <i>Chromecast</i> for a long time, while the <i>iPhone</i> app only gained this functionality later. Similarly, Google Maps has full off-line support on Android, but not yet on <i>iPhone</i> (but it's been promised).<br />
<br />
On the topic of <i>Chromecast</i>, the <i>iPhone</i> and <i>iPad</i> tend to lose their connection after a while, forcing you to re-connect. That's a problem that Android does not have.<br />
<br />
<h2>
Navigation</h2>
<br />
At first glance, the home screen on Android and the <i>iPhone</i> look rather similar. There are no home screen widgets on the <i>iPhone</i> (widgets deployed with apps that display interactive graphics) but I never particularly cared for that functionality anyway (who wants to rely on the home screen to discover what is going on?).<br />
<br />
Unlike on Android, all installed apps are displayed on the home screen whether you want it or not, so if you don't want to be bothered by some of the default apps (that you can't get rid of), you have to put them in a folder -- essentially sweep the dust under the carpet. In addition, you can't freely lay out the icons -- you can move them in relation to each other, but not insert any vertical or horizontal spacing. I miss that as I found it made it easier to organize groups of apps.<br />
<br />
On Android, there are no physical buttons, but there's a virtual back button at the bottom of the display. The iPhone doesn't really have anything similar. Many apps allow for a way to get back to the previous screen, but it's implemented inconsistently. Some apps display a kind of back button on the bottom of the screen while others do it at the top where I can't conveniently reach it while using only one hand.<br />
<br />
Android has a consistent, system-wide way of connecting applications to each other. Each app can register the kind of content it can handle, making it easy to open your preferred web browser or e-mail client, for example, from an arbitrary app. It took a while before I realized that iOS doesn't have something similarly complete. If I open Apple's contacts app and select an e-mail address in order to write a new e-mail to that person, it will always launch in Apple's mail app instead of <a href="https://inbox.google.com/u/0/">Google Inbox</a> which I prefer. Similarly, Google Inbox seems to launch web links in Chrome instead of Safari. I suspect it's mainly Apple's way of tying you into their ecosystem, even though in some cases like the latter example it didn't work to their benefit (I would have preferred Apple's own Safari to always open web pages).<br />
<br />
There is a kind of "sharing" mechanism between apps, though, allowing you to often launch the content that you presently see on screen in another app. When you select the sharing button, an awkward horizontal list of apps pops up and frequently it doesn't even show the app of your choice initially. In that case you have to open up a separate dialog to "enable" that app in the sharing dialog.<br />
<div>
<br /></div>
<div>
iOS has a bunch of "quick toggles", like Android, that you can select if you want to quickly disable wifi, for example. You reach it by sliding upwards from the bottom of the display. Typically, you end up scrolling a bit on your current page before iOS realizes that you wanted to reach the notification center, which is annoying. I think it would have been better if it opened it immediately when initiating an upwards slide from, say, somewhere among the bottom 10 pixel lines of the display.<br />
<br />
The copy/cut and paste on iOS feels imperfect. I find it difficult to adjust a portion of selected text, and sometimes iOS changes to rectangular selection when all you wanted was to select a longer section of word-wrapped text. It is particularly problematic if you're trying to cut or copy an URI which has been word-wrapped.<br />
<br /></div>
<h2>
Keyboard</h2>
<br />
A lot of people praise the <i>iPhone</i> keyboard. Despite some persistence, I have had a hard time getting used to it.<br />
<br />
One big problem from my perspective is that it does not support "swiping" -- drawing virtual lines between keys to form words, something I have been using for several years in various forms, both using third-party keyboard and the official Android keyboard as well. This technique makes typing a whole lot faster.<br />
<br />
The keyboard constantly presents a box with an auto-correct suggestion based on what you write, but contrary to my expectation, selecting that box actually gets rid of the suggestion and leaves what you originally wrote. If you want the suggestion, you have to press the space key or another word delimiter. I found this somewhat unintuitive. I also couldn't find an easy way of changing language for the auto-correct suggestions -- I probably write a good third of my text in English and the rest in Swedish so making that step effortless is essential.<br />
<br />
It is very difficult to move the cursor around by tapping the place where you want it. More often than not it winds up somewhere else. I found cursor placement to work much better on Android, although I can't quite articulate why.<br />
<br />
This is probably a problem specific to Swedish and some other language locales, but you can't reach a comma or a dot from the standard keyboard layout without first pressing a modifier key. I find those keys to contribute to better language so I am not a big fan of the extra step.<br />
<br />
These days the <i>iPhone</i> has support for third-party keyboards. I downloaded one of my favourite Android keyboards, <a href="https://swiftkey.com/en">SwiftKey</a>, but discovered that it didn't work quite as well as it did on Android, partly because "swiping" didn't work quite as well -- and more importantly because there are cases where the official Apple keyboard keeps popping up no matter what you do, it seems. I even removed the official keyboard and all of its languages from the settings but it still didn't make SwiftKey pop up consistently. It made for a frustrating experience and eventually I decided to remove it and just stay with the official Apple keyboard despite its limitations.<br />
<br />
<h2>
Notifications</h2>
<br />
Like Android, iOS has a central notification center where apps can display information. You reach it by sliding downwards from the top of the screen. This mechanism has the same problem as the quick toggle display mentioned earlier, in that you typically end up scrolling quite a bit on your current page before the notification center is opened up.<br />
<br />
The ability for apps to receive updates, such as chat messages, doesn't seem to be as seamless and fluid as on Android. For example, I sometimes receive a notification from Slack showing part of a new chat message, but when I then switch to Slack to display the full content, it frequently hasn't been loaded yet and takes a good while to appear (sometimes minutes!). Presumably the mechanisms to populate the notification display and the app itself are separate. I can't be certain that this is a weakness in iOS itself rather than being an app-specific problem, but I somewhat suspect the former.<br />
<br />
Sometimes the phone will sound but I don't see anything new among the notifications. There's probably a reasonable explanation for this that I will eventually learn.<br />
<br />
<h2>
Multitasking</h2>
<br />
The multitasking experience on iOS is a mixed bag. Perhaps the most obvious difference in comparison to Android is how you switch the active app. On Android it's done with a software button at the bottom right. The iPhone and iPad do it by pressing the physical home button twice to bring up the menu. My personal preference is in favour of the former solution, as the physical button double-press makes switching app feel much more effortful.<br />
<br />
One really nice thing with iOS is that you can swipe an app away from the open app list and it will force-close. That's really useful if an app is acting up. For example, Spotify and even Google's own apps sometimes don't see specific Chromecast devices in our apartment unless you close and restart. To do that on Android, you have to dive deep into a settings menu hierarchy which takes forever (of course, there are third party solutions to this problem).<br />
<br />
Occasionally (but rarely), an app just vanishes inexplicably. I believe this happens when the app crashes. Apple probably thought that users wouldn't notice it as much as opening up a crash dialog like Android does. It makes iOS seem more stable to typical consumers.<br />
<br />
<br />
One great feature which is available only on iPad but not the iPhone is the ability to keep two apps open at the same time in a split-screen mode with a dividing line that you can move. You can also temporarily "slide in" another app without permanently placing it there. These are fantastic features that Android only recently gained -- and only in the latest beta release. I find the iOS way to be somewhat better implemented, as well.<br />
<br />
Both Android and iOS can ask an app to save its state and then invisibly shut down the app to save memory and battery. The idea is that the app will be restarted and state restored when the app is is switched to next time. This doesn't always seem to work that well on <i>iPhone</i>, or at least in Safari. For example, if you're tediously filling in a web form while switching to another app to read details to enter (perhaps looking for credit card or adress details in 1Password, say), the content that you already wrote is often completely lost when switching back to Safari. Needless to say, this is <u>extremely</u> annoying.<br />
<br />
<h2>
Mac and iPad Integration</h2>
<br />
On another topic, Apple has a feature enabling you to read and send SMS text messages from your <i>Mac</i> or <i>iPad</i>. It's supposed to be part of a greater effort at letting you switch platforms seamlessly while continuing your work as you left it.<br />
<br />
I found this rather frustrating. Initially I couldn't seem to get it working at all -- in your <i>iPhone</i>'s settings, you have to select the iCloud-connected device to grant reading and sending permissions to. When you do, a message with a code is supposed to come up on that device that you have to enter. That worked for my <i>Mac</i> but not for the <i>iPad</i> -- the message simply never came up.<br />
<br />
When I did eventually get it working, I was expecting it to be comparable to something like <a href="https://mightytext.net/">MightyText</a> or <a href="https://www.airdroid.com/">AirDroid</a>. Sadly, that's not at all the case. You can only read the messages initiated from the moment when the devices were connected. In my case, I also didn't get to see the names of the contacts in the message threads -- only their phone number -- but that may be because I might not have enabled contacts syncing on my other devices.<br />
<br />
If you receive (and even respond to) an SMS message on you phone, that same message might still pop up (along with a sound) on the <i>Mac</i> many hours later despite it clearly being read. Sometimes after I received a call, my connected <i>Mac</i> would keep ringing for quite some time after I responded to the call, making noise in the background while I was trying to talk.<br />
<br />
<h2>
Using an Android Wear Smartwatch</h2>
<br />
Having dabbled for many years with smartwatches, including Sony's first and second generation models as well as the Pebble, I got the Android-based <i>LG Watch R</i> about a year and a halfago. At this point I'm not ready to dive head-first into the Apple world and get an <i>Apple Watch</i> and so was thrilled when I realized that the iOS support rolled out by Google for Android Wear some time ago unofficially included my watch model as well. My watch required a full factory reset to work with the <i>iPhone</i>, as well as downloading the official Android Wear app by Google.<br />
<br />
The iOS support for Android Wear is very limited: no third-party Android apps can be installed onto the watch, but it can still tell time and display notifications from SMS text messages, Facebook and the like. Even incoming phonecalls are displayed, but without the contact picture. I think basic support works for any notification that the iPhone can display in its own notification centre, but the presentation and control over these notifications is more limited than on an Android phone. Still, if you dismiss a notification on the watch, it is seamlessly dismissed on the iPhone as well, which is one of the key benefits of having a smartwatch.<br />
<br />
It is also possible to select the desired watchface from a limited number included, but no third-party Android watchfaces can be downloaded. I was surprised, however, to see that music control from my watch while using Spotify on my iPhone worked quite well. I'm not quite sure how this was accomplished -- perhaps support for some specific iPhone apps was integrated into the Android Wear app on iOS.<br />
<br />
I really, really miss the smart lock functionality from Android. With that enabled, my phone would always be automatically unlocked as long as the watch was in Bluetooth range. The previously mentioned finger-print support compensates somewhat for this omission, but not completely (in part because the finger-print sensor obviously won't work with touch-friendly gloves on, mandatory in the cold Swedish winters).<br />
<br />
Occasionally but rarely, the phone loses touch with the watch. When that happens, the re-connect process isn't seamless like on Android -- you have to manually start the Android Wear app on <i>iPhone</i> and then tap the watch to re-connect. I also don't think the wifi support built into the watch as a secondary connection when outside of Bluetooth range works on <i>iPhone</i>, either.<br />
<br />
Despite these limitations, I can still use my smartwatch on my <i>iPhone</i> for the purpose of displaying and dismissing notifications. Essentially, my <i>iPhone</i> downgraded my Android smartwatch into something like a <i>Pebble</i> (I guess you could call it a "feature-watch" to use mobile industry lingo), but that's not too bad.<br />
<div>
<br /></div>
<h2>
Conclusion</h2>
<div>
<br /></div>
<div>
As I've been writing this post and thinking about differences between iOS and Android, I've realized that the comparison may not be completely fair, because in my mind I've continously compared iOS devices to Nexus devices -- Google's flagship Android devices with tight integration between hardware and software and frequent updates. Most other Android devices out there have custom-built Android versions which are often heavily modified -- mostly for the worse. They can be bloated, slow and have significant user interface changes. They also may not be guaranteed to get updates for very long, if at all, since the manufacturer has to port new Android releases over. Still, I would never consider getting a non-Nexus Android device, so for me personally, the fight is between iOS and Nexus devices exclusively.</div>
<div>
<br /></div>
<div>
I've been struggling to determine which is the overall best platform. I think some conclusions are inevitable, though:</div>
<div>
<br /></div>
<div>
<ul>
<li>The <i>iPhone</i> and <i>iPad</i> are fantastically well-built devices, surpassing most devices in Android land -- especially tablets -- in terms of build quality and general feeling. The difference between e.g. the <i>iPad Air 2</i> and <i>Nexus 9</i> is breath-taking.</li>
<li>The hardware is more or less equally capable when compared with flagship Nexus devices.</li>
<li>Despite efforts at catch-up by Apple, Android remains more advanced and flexible than iOS, especially regarding third-party integration.</li>
<li>Despite continuous advancements by Google, iOS still has a lead in terms of user interface performance. Using an iOS device feels snappier when you navigate, swipe and pinch-zoom, especially while web surfing in Safari. The heavier the website, the bigger the difference.</li>
<li>The apps for iOS tend to be more well-crafted.</li>
</ul>
</div>
<div>
<br /></div>
<div>
Despite iOS seeming less powerful than Android to me, I still like using it. I find that I'm not spending as much time customizing and fixing things (because there's less to customize) and generally trying to "go with the flow" the way Apple intended it. Due to better apps, I can finally read my favourite newspaper <i>Fokus</i> on a daily basis in a very effortless way on my <i>iPad</i>. I could never do that reasonably on Android because that version was neglected by the publisher. I also find that despite being somewhat annoyed at the inconsistency of the built-in browser employed by some apps to load content quickly, I still rather like the end result which is the ability to navigate around apps and the web with lightning speed.</div>
<div>
<br />
I'm still somewhat torn. The performance benefit with iOS is significant, but the limitations are also significant (though not as much as they used to be). It's possible that I have misunderstood some things and that over time, I will learn ways to overcome some of the problems that I have described with iOS.<br />
<br />
After two months of using an <i>iPhone</i> as my primary phone (from the end of November to the end of January), I had to end my experiment prematurely much like a medical study showing harm coming to patients from a new drug being tested. While I had initially intended to keep using the <i>iPhone</i> for a year or two to really get used to it, the differences were bogging me down. The seemingly small things -- worse custom keyboard support, less flexible ways to specify favorite apps, and no system-wide back button, for example -- made a lot of difference to me in practice.<br />
<br />
I went back to the Android ecosystem for my phone, but the <i>iPad</i> remains my favorite tablet by far.</div>
Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-39955680969708992742015-08-25T12:42:00.003-07:002015-08-25T12:42:42.266-07:00El Capitan might ruin your AppleID account<a href="https://www.apple.com/osx/elcapitan-preview/">El Capitan</a> is the nickname of Apple's next major version of OS X. It is open to anyone for testing provided you fill in some on-line forms. Naturally, I had to give it a shot on my MacBook Pro. As usual with a new OS X installation, I signed in with my Apple ID and most things seemed to work fine. Eventually I encountered an issue with the <a href="https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager">Intel Haxm</a> emulator for Android (which is not extraordinary as this is a pre-release of OS X after all) so I decided I would go back to Yosemite.<br />
<br />
My first hitch came when I tried to re-install OS X from the recovery partition. It detected that my existing installation was El Capitan, whereas the recovery partition contained Yosemite -- because of this mismatch, it refused to install. Thankfully, I discovered that some forward-thinking person(s) at Apple had built in a web-based recovery option as well. After a while, Yosemite had downloaded and installed successfully onto my Mac -- or so I thought.<br />
<br />
When I tried to log in to the App Store in Yosemite, my login details were refused with the less than helpful message "Error description not available". When I tried to log in using iCloud with the same account, I was told that two-factor authentication was enabled, and that I should look at my "other devices" for a code. I have no other OS X or iOS devices, and I had no memory of ever having enabled two-factor authentication, but I could select an SMS text message option as well. This worked fine -- I got a code on my mobile phone and, using that, could log in to iCloud.<br />
<br />
I contacted Apple support who walked me through checking some basic settings and so on and told to try logging in to the <a href="https://appleid.apple.com/">Apple ID administration site</a> online. The theory was that I would be able to disable two-factor authentication and it would all work fine again. When I went there, I was presented with a somewhat similar request for a code, except the text message option never resulted in any message being received on my phone. We tested this numerous time without success and I was also in touch with two other support technicians at Apple. With two-factor authentication enabled, Apple was not going to be able to help me gain access to my account, even though their server wasn't sending me any text messages when trying to log in to Apple ID (whereas logging in to iCloud was still working fine).<br />
<br />
I registered a new Apple ID and used that to gain access to the App Store, accepting that my previous Apple ID might simply be irreversibly lost. However, Apple eventually got in touch with me again, this time a senior support technician, and advised me that if I went this route, I probably would not be able to use services like "Find my Mac" as those would be registered to my original account. In order to fix that, I would have to bring my receipt of purchase and get my Mac serviced at a repair center -- at my cost. While Apple support was always polite and much better than most support experiences I've had before, this greatly annoyed me. I stressed that there's nothing wrong with my computer, but something at Apple's backend prevents me from logging in to either the App Store or the Apple ID administration site, presenting a weird error message in the first case and not sending any SMS code in the second case. The Apple representative was sympathetic, but was going away on holiday. I was told the matter would be escalated further, to an actual Apple engineer who would get in touch with me the following week.<br />
<br />
I was never contacted by the engineer, but I decided to try "Find my Mac" with my newly registered Apple account by logging in to the iCloud website. Thankfully, it worked just fine, so the theory that my computer was somehow irrevocably tied to my original account didn't quite seem to add up.<br />
I e-mailed the senior support technician again to understand the situation better and a phonecall was arranged. I was prepared to completely give up on my original iCloud account -- all I wanted to know was whether there was any downside to just using my new one instead (except losing App Store purchases and so on, of which I had few).<br />
<br />
The Apple technician confirmed to me that since I could successfully use "Find my Mac", it was clear that my new Apple ID was properly setup on my computer and I could simply ditch the old one. More interestingly, he also offered up a theory on what might have happened. He explained that El Capitan comes with a new two-factor authentication system for Apple IDs, different from the two-factor authentication presently available. He said he thought El Capitan either enabled two-factor authentication automatically upon installation, or made it very easy to accidentally enable it during the sign-in process without realizing it. Because I have no other Apple devices to receive codes on, this setting probably "wrecked" my account. It might be possible to re-gain the original account by re-installing El Capitan and using the two-factor authentication setting there to disable it. I was thrilled to finally get a plausible explanation of what had happened, but tired after investing a lot of time in trying to figure out this problem. I decided to simply let the matter be. I said that while I accept some blame for this problem for trying a pre-release operating system and was prepared to live with various problems while using the new version, I was very annoyed that the El Capitan also seemed to make important changes to my on-line Apple ID that under some circumstances could prevent me from logging in again -- maybe ever -- from other Apple devices or operating system versions. The support technician said he would relay this to the OS development team.<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_VNP4443VQRKz3D5N7TMy-FsmQfbKOtfzjnm_KPYM7F7OtmncOBGaA2-w7X9NNEjigeMMDsvtwwM1z_WXd5YCtpsh15dTZ0eoeODgv_3XF8NhzG8O0EGHmQF-y7QaMlSCsEaCJdksFmCN/s1600/Screen+Shot+2015-08-25+at+21.35.35.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_VNP4443VQRKz3D5N7TMy-FsmQfbKOtfzjnm_KPYM7F7OtmncOBGaA2-w7X9NNEjigeMMDsvtwwM1z_WXd5YCtpsh15dTZ0eoeODgv_3XF8NhzG8O0EGHmQF-y7QaMlSCsEaCJdksFmCN/s320/Screen+Shot+2015-08-25+at+21.35.35.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Apple's e-mail about two-factor authentication<br /></td></tr>
</tbody></table>
<br />
Afterwards, the senior Apple technician sent me a link to a page <a href="https://developer.apple.com/support/two-factor-authentication/">explaining the new two-factor authentication</a> in El Capitan and iOS 9. It seemed to me like El Capitan might have automatically enrolled me in this new feature, but failed to let me add a trusted phone number to receive SMS codes on.<br />
<br />
Lesson learned: trying new operating systems could affect more than your current computer, tampering with on-line backend systems in unpredictable ways. Be careful out there!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<br />
<br />
<br />
<br />Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-84265841601915970732015-06-02T10:57:00.004-07:002015-06-13T02:26:39.895-07:00Testing the Android "M" Developer Preview<h2>
Introduction</h2>
<div>
<br /></div>
Towards the end of the year, the Android release code-named "M" is expected. Like its predecessors, it will probably be named after some piece of candy but the final name has not yet been announced. At the Google I/O developer conference last week, an early developer preview of "M" was <a href="http://developer.android.com/preview/download.html">made available for select Nexus phones and tablets</a>. I took the opportunity this past weekend of giving it an early spin. This post will not highlight the major additions to this release, but will focus on my experience installing it.<br />
<br />
<h2>
Broken Flash Script</h2>
<div>
<br /></div>
I started with my <a href="http://www.google.com/nexus/6/">Nexus 6 phone</a>. To install, I used the familiar procedure using the <span style="font-family: Courier New, Courier, monospace;">adb</span> and<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span><span style="font-family: Courier New, Courier, monospace;">fastboot</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"> </span>command line tools shipped with the Android SDK. These tools are familiar to most Android developers and other technology enthusiasts who like to load different firmware images onto their devices. The first thing that I discovered was that the installation script (<span style="font-family: Courier New, Courier, monospace;">flash-all.sh</span>) for Mac did not work, outputting an error message. This situation is similar to what happened with the Android 5 Lollipop release and it is disappointing that the problem persists. However, a helpful blogger has <a href="https://wolfpaulus.com/jounal/android-journal/android-5-1-nexus-6/">described a simple workaround</a> here which involves flashing each image individually.<br />
<br />
<h2>
Stuck at Login Screen</h2>
<div>
<br /></div>
One of the first things that happened when booting up the new release was that I was asked for wifi credentials and then my Google account, as usual when booting an Android device. However, for some reason my Google account details were not accepted, an obscure and general error message being displayed instead along with a message that I should try again. There seemed to be no way of proceeding, though, the phone seemingly stuck at repeated failed attempts to validate my Google account. Eventually I rebooted the phone using the power button and from then on, the remainder of the setup went smoothly.<br />
<br />
<h2>
Initial Impressions</h2>
<div>
<br /></div>
Android "M" at first glance is quite similar to Lollipop. Among the few differences that I immediately noticed was a new application menu with apps alpabetically ordered by initial letter. This was a welcome change as it now appears to be much faster to find a specific app. Other minor things that I discovered was that apps could be un-installed straight from the launcher desktop and that the volume settings have once again been revamped, including making it easier to keep the phone completely quiet and vibration-free at night while still allowing any alarms to trigger.<br />
<br />
I've been using the "M" release on a daily basis now since the weekend and for the most part it has been working just fine. However, one major annoyance is that playing music on Google Play Music often crashes the Android Wear app, which manages communication with <a href="http://blog.soderbjorn.se/2014/11/first-impressions-of-lg-r-watch-and.html">my Android Wear smartwatch</a>. When that happens, the song won't play immediately and I have to fuss around with the music app, selecting different songs and switching between screens until suddenly (and arbitrarily) it starts working again for a while. In addition to this annoyance, the music control from the watch is completely broken. It is not completely certain that these problems are caused by Android "M", however. Other possible explanations could be recently introduced bugs in the Android Wear firmware running in the watch (which was also recently upgraded by an automatic over-the-air update) or bugs in the Android Wear app for the phone. However, as I have not previously seen these bugs in Lollipop, I tend to blame "M" for now.<br />
<br />
I tried to install Viber from the Google Play Store, but it wasn't visible -- perhaps it has been disabled for "M". I also discovered that I couldn't start the <a href="https://play.google.com/store/apps/details?id=com.ubercab&hl=en">Uber app</a> which I hadn't used before, but was meaning to give a spin - it forced-closed immediately on startup (it is possible, though unlikely, that the bug presents on Lollipop as well). I'm sure this problem will go away with an update to the app eventually.<br />
<br />
I am staying with Android "M" for now, looking forward to future rumoured over-the-air updates as the release matures, but if the Google Music problems in conjunction with Android Wear persist for much longer, I might go back to Lollipop.<br />
<br />
<h2>
Tablet Not Booting</h2>
<div>
<br /></div>
I followed the same procedure to install "M" on my <a href="http://www.google.com/nexus/9/">Nexus 9 tablet</a>. Unfortunately after installation, the tablet won't boot up any longer -- it is stuck indefinitely at the "Android" logo. I do not anticipate problems reverting back to Lollipop but haven't gotten around to it yet. Unfortunately (or perhaps not?), Android "M" is not yet available for the Nexus 7 2013, my favourite travel companion tablet.<br />
[Update: I got my tablet working with "M". I believe I had forgotten to flash the bootloader the first time around.]<br />
<br />
<br />
<br />Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-7641821534162578242014-11-25T14:22:00.001-08:002014-11-25T14:22:34.398-08:00First impressions of the LG R Watch and Android WearI've now had my <a href="http://www.lg.com/us/smart-watches/lg-W110-g-watch-r">LG R Watch</a> for about three weeks and have some impressions to share. This is not a complete review and I'm not going to go through the interface in detail as there are countless reviews and YouTube views that do just that. Rather, I'm focusing on peculiarities that caught my interest in some way, whether to impress or annoy me.<br />
<br />
<h2>
Introduction</h2>
This smartwatch uses Android Wear, Google's new operating system for embedded body-worn devices. It's a scaled down version of Android, the same operating system present in many of the world's smartphones and tablets. Unlike <a href="http://www.samsung.com/global/microsite/gears/gears_features.html">another recent smartwatch</a>, it is not a completely autonomous device -- rather, it is paired with a phone (which itself must run a recent version of Android) over Bluetooth and relies on that phone to provide internet connectivity and to carry out most of the work. Think of Android Wear as a companion touchscreen on your wrist. I believe that Android Wear may become more autonomous over time. For example, Google recently added the possibility of storing and playing back music on the device itself, as well as support for the built-in GPS present in <a href="http://www.sonymobile.com/se/products/smartwear/smartwatch-3-swr50/?utm_source=marketing-url&utm_medium=http://www.sonymobile.com/se/products/smartwear/smartwatch-3-swr50&utm_campaign=http://www.sonymobile.com/smartwatch-3-swr50">some smartwatches</a>. (The LG R does not have a GPS, and I did not test stand-alone music playback.)<br />
<br />
<h2>
General Operation</h2>
<h3>
Watchfaces</h3>
<div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4KYVUhG7WI98GXuYpMPzN4691vYmjQ3IrkTVi94s6NO2CbreRB38tuXHmxrkTyuea2eOrTAcksmBIWsnHHdhoB77Hf6SRo42Zrk0-OQVvURLRKGk4GYhblpWokf4c5grB_e7CTEeiyc_s/s1600/watchface.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4KYVUhG7WI98GXuYpMPzN4691vYmjQ3IrkTVi94s6NO2CbreRB38tuXHmxrkTyuea2eOrTAcksmBIWsnHHdhoB77Hf6SRo42Zrk0-OQVvURLRKGk4GYhblpWokf4c5grB_e7CTEeiyc_s/s320/watchface.png" width="320" /></a>In normal operation the watch displays a standard watchface with the current time. The watch comes with several of these and it is also possible to download additional watchfaces from various sources, including Google Play. Unfortunately there is not yet a dedicated category available there for watchfaces, though there is a category for apps that have varying degrees of support for Android Wear.<br />
<br />
Watchfaces come in very different forms. Some are analog, some are digital, and some display the weather, the watch battery, the phone battery, connection status, or other information.<br />
<br />
The image to the right illustrates <a href="https://play.google.com/store/apps/details?id=net.ddroid.aw.watchface.ra45&hl=en">my favorite watchface</a> right now (perhaps unlike most, I prefer digital watchfaces).<br />
<br /></div>
<div>
<br /></div>
<div>
<h3>
Idle Mode</h3>
When the watch is not in use the watchface will revert to a dimmed, simplified and often black-and-white version which consumes less battery. When you tap on the watchface or the watch detects arm movement, the normal watchface is restored. Sometimes merely moving your arm isn't sufficient to "wake it up" to normal mode. That is not a big problem on this watch in comparison to other recently introduced Android Wear watches that will actually turn off the entire display in idle mode in order to save battery. Some watchfaces allow the user to configure in great detail what the idle watchface will look like and how it will behave (for example, whether to display it in colour, or how long to wait before going to idle mode).<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMj1TA3xM_EnwdaBzFssMGd0XeE1Yfm9k4dr25_XQuZXW4zcmlxOTKVQjycZHVHjsotcipR_TsGTDftSkTVAYlCACGm70bOOklV51pEyhsxHWSi2Z8i_OU-62ANfIN1kPYxMjewo2b5Yw1/s1600/tiny.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMj1TA3xM_EnwdaBzFssMGd0XeE1Yfm9k4dr25_XQuZXW4zcmlxOTKVQjycZHVHjsotcipR_TsGTDftSkTVAYlCACGm70bOOklV51pEyhsxHWSi2Z8i_OU-62ANfIN1kPYxMjewo2b5Yw1/s1600/tiny.png" /></a>Apps appear to have the capability to request from the operating system to keep the display in the full-on mode which is great in the rare case that quick, constant access to controls is required. For example, the fantastic <a href="https://play.google.com/store/apps/details?id=com.alexvas.dvr.pro&hl=en">TinyCam Monitor</a> app uses this feature to permanently display camera motion. I use this occasionally as a baby monitor (see image to the right). Another example is the impressive though less useful <a href="https://play.google.com/store/apps/details?id=com.appfour.wearbrowser&hl=en">Wear Internet Browser</a> which allows you to browse the web on the watch (it automatically retrieves the bookmarks from your phone's Chrome installation).<br />
<br />
<h2>
Equipment</h2>
<h3>
Battery</h3>
Like other modern smartwatches, the LG R Watch in practice must be charged every night in its cradle, which is magnetically attached to the phone through metal pins (no wireless charging on this device). Depending on use, I usually have anywhere from 30 - 50 % of battery left when I go to bed. Some Android Wear watches reportedly won't even make it through the day, and that's with an Idle Mode that completely shuts the screen off. While I would like for the LG R Watch to last longer, in practice it is not a problem to charge the device on a nighly basis together with the phone itself. Nor, it could be argued, is it unreasonable for a modern, high-performant wearable computer to consume some amount of power.<br />
<br />
<h3>
Strap</h3>
The LG R Watch has a black leather strap that, after having getting used to it, I find very comfortable. It is supposed to be replacable with standard watch straps, as well.<br />
<br />
<h3>
Sound</h3>
The LG R Watch has a microphone to accept voice commands, but no speaker -- so you can't carry out a complete call on the watch alone. It will also vibrate when notifications come in, but the vibration is quite light and I do not always notice it.<br />
<br />
<h3>
Connection Management</h3>
As previously implied, the watch is not very useful without the phone connection given that notifications will not arrive. It does not keep time when shut off, but does retain time when temporarily disconnected from the watch. Occasionally it does not succeed in re-connecting to the phone automatically. When that happens I have to explicitly disconnect and then re-connect using the companion app on the phone. Luckily, disconnections are rare, as I keep the watch near my phone most of the time.<br />
<br />
<h3>
Pulse</h3>
The watch is able to measure pulse optically. This does not seem completely reliable -- it often fails to detect my pulse if I don't hold my arm completely still with the watch tightly secured to my wrist.<br />
<br />
<h2>
Interface</h2>
</div>
<div>
Unlike the full-blown Android for phones or tables, Android Wear does not allow for carriers or manufacturers to customize the experience in any significant way. While they look physically different, Android Wear devices all offer the same user experience.<br />
<br />
<h3>
Notification Cards</h3>
Any notification that appears on the smartphone (such as an incoming SMS) also shows up as a "card" in the lower portion of the watchface. Any card can display an enlarged version when selected. If any additional options are available for that card, those options can be reached by swiping to the left in successive steps. Sometimes the only available option is to open the notification on the phone. This is the case with any notification which has no built-in support for Android Wear. The Facebook app unfortunately is an example from this category. Other apps, such as Google Hangouts and the excellent new <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.messaging&hl=en">Google Messenger</a> display a richer notification which allows multiple actions to be taken for an incoming SMS, including browsing chat history.<br />
<br />
Notification cards like these can be swiped downwards away from the watchface in order to be reachable later, but then they stack up and make scrolling through notifications uncomfortable. If the card is swiped to the right, it is gone forever. For this reason it is difficult to browse through past SMS messages, for example -- you simply cannot recall the SMS history at will because there is no way to launch that card manually. In fact, there is no general notification history either.<br />
<br />
Some cards show up automatically when specific apps are open on the phone. For example, whenever music is playing on the watch, a card shows up which can be used to control playback, volume, and skip between tracks. Similarly, when the camera is active, a remote shutter card becomes available. Speaking of the camera, the excellent <a href="https://play.google.com/store/apps/details?id=com.pixtogram.wear.zicam&hl=en">PixtoCam</a> app shows a live preview camera image on the watch while also offering more advanced camera control than the stock remote shutter card. Another great use-case is the Google Navigation card that shows up to display directions whenever Google Maps on my phone is in navigation mode.<br />
<br />
<h3>
Other Apps</h3>
In addition to simple notification cards (with possible additional option cards), apps also have the option of showing a more customized interface. Such apps can be reached by tapping on the watchface once, which launches a long menu of items. At the very bottom you can very tediously scroll to the <i>Start</i> option, which will open a new list of installed apps (again, excluding those which show only cards, as opposed to a more sophisticated interface). This interface also can be swiped to the right, which will return to the watchface mode. To get back to the app again, you have to tap again, scroll down, select Start and then re-select the app. This is a significant downside of the interface as it makes it very difficult to switch between apps and selecting the right information at the right time. Fortunately, there is a <a href="https://play.google.com/store/apps/details?id=com.npi.wearminilauncher&hl=en">third party app</a> that partially solves this by adding a global menu of apps that can be swiped in from the standard watchface. This app is not without a downside however, as it sometimes mistakenly believes that it should open when all you tried to do was swipe away a normal card.<br />
<br />
<h3>
App Management</h3>
The watch has no dedicated built-in app installer or uninstaller. Whenever an app is installed on the phone with support for Android Wear, that capability is automatically and instantly synced to the watch.<br />
<br />
<br />
<h3>
Layout Considerations</h3>
Android Wear watches come in different shapes, sizes and resolutions. Unfortunately, not all watchfaces or apps fit perfectly everywhere. I sometimes see cards showing up with text that are partially obscured in the corner -- even with official Google apps. This problem may eventually resolve itself when the rumoured watchface SDK becomes available, which I understand will offer ways to query detailed device and screen information.<br />
<br />
<br />
<h2>
Input</h2>
<div>
When the watch is fully awake, you can initiate a voice command by saying "OK Google" followed by any of the recognized commands. These commands appear to be more or less hard-coded, but in the Android Wear companion app on your phone you can select which app to launch for a specific voice command. Voice commands can be used to set alarms or response to SMS messages, for example. I have not tried this very much as only English is supported, and most of my day-to-day communication is in Swedish. It is regrettable that while the Android speech recognition engine itself has supported Swedish for the past year or so (as illustrated by the impressive <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.translate&hl=en">Google Translate</a> app), it still apparently cannot be used to issue any useful voice commands.</div>
<div>
<br /></div>
<div>
In my opinion, by far the most important omission from Android Wear is keyboard support. Although there are some <a href="http://research.microsoft.com/en-us/um/redmond/projects/analogkeyboard/">interesting experiments</a>, there is no universal way to input text into any app using an on-screen watch keyboard. This would be particularly useful in countries such as my own that lack voice support for the native language.</div>
<div>
<br /></div>
<h2>
Stability</h2>
<div>
The LG R Watch is quite stable in my experience. Once or twice, an app has misbehaved, causing an alert to pop up directly on the watch offering to kill the process. However, my watch has twice frozen up completely while using a particular watchface, requiring a complete reboot and re-connect. It's sad that a watchface can make a modern operating system with a sophisticated (I would hope) sandbox to freeze up like that, although it has not happened to me with any other watchface thus far. In a third case, the watch actually entered into a temporary re-boot loop for some reason. When it came back up, I was able to reset it to factory defaults and it has not happened since. By far the majority of the time, my watch has run like a... clock!</div>
<div>
<br /></div>
<h2>
Conclusion</h2>
<div>
Before the LG R Watch, I had a Pebble, and before that, I had the first and then the second generation of the Sony Smartwatch. The Sony watches frequently dropped the connection to the phone, causing them to even lose the time. The Pebble, my contrast, was stable and had decent notification support, but little in the way of extra features (although the crystal clear e-ink display lasted a week before requiring recharging).</div>
<div>
<br /></div>
<div>
Given my past history with smartwatches, I realized that I found basic notification support very useful to avoid picking up my phone needlessly or when busy with other matters. For anyone who thinks they too would like this capability, and some extras to boot, I whole-heartedly recommend the LG R Watch. However, like any other early adopter, you should be prepared to take part in an experiment which we have yet to see the end of. Android Wear as a platform still requires a lot of work to become truly convenient and reach its full potential.</div>
<div>
<br /></div>
</div>
Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-30607856976585851882014-06-29T13:28:00.001-07:002014-06-29T14:50:05.371-07:00Utmaningen med Material DesignDet har hunnit gå några dagar sedan Googles utvecklarekonferens, <a href="https://www.google.com/events/io">Google I/O</a>, som jag dels sett blandade avsnitt från <a href="http://www.jforum.se/jf/archive.jsp#m123">på distans med 99 andra nördar</a> (tack, <a href="http://www.jforum.se/">Javaforum</a> och <a href="https://king.com/sv/">King</a>!) och dels på <a href="https://www.youtube.com/user/GoogleDevelopers/videos">Googles utvecklarkanal på YouTube</a> genom min <a href="https://play.google.com/store/devices/details?id=chromecast&hl=sv">Chromecast</a>. Nu går hjärnan på högvarv och funderar över de nyheter som presenterades.<br />
<br />
För mig känns det om om den mest intressanta och allomfattande förändringen är Googles nya standard för grafiska gränssnitt, <a href="http://www.google.com/design/">Material Design</a>. Samtidigt som jag tittat med stort intresse och viss fascination på några av de I/O-sessioner som behandlat ämnet slås jag av en känsla av hopplöshet. En gång i tiden kunde man som programmerare skapa ett snyggt gränssnitt bara genom att använda tydliga standardkomponenter och smart layouthantering, och det räckte att ha en viss stilistisk känsla och att vara konsekvent, noggrann och logisk för att resultatet skulle bli bra. I framtiden kommer varje applikation att vara lite av ett konstverk och då kommer man nog att behöva ha en designer vid sin sida om man som jag saknar äkta artistisk talang och känsla för färg och form.<br />
<br />
Det verkar som om Google tänkt sig att man ska använda Material Design inte bara i Android-applikationer utan även på webben och t o m i IOS-applikationer. Vill man utveckla för webben har Google <a href="http://www.polymer-project.org/docs/elements/material.html">släppt ett antal webbkomponenter</a> inspirerade av Material Design. Man kan undra hur det skulle se ut om även andra utvecklare av exempelvis mobila plattformar började förvänta sig att utvecklare tillämpar just deras riktlinjer även på konkurrerande plattformar i någon sorts högre syfte att nå ett konsekvent utseende överallt -- hur ädelt målet än må vara.<br />
<br />
Jag har ännu bara skrapat på ytan när det gäller min förståelse av Material Design. Jag tror mig dock ha hunnit skönja några grundläggande drag. Kortfattat bygger tankesättet på att allt som presenteras i en applikation skrivs i "bläck" -- som kan vara i valfri färg -- på "pappersark". Även pappersark kan vara i valfri färg, men man kan inte producera något innehåll om man inte har ett papper att rita på. Pappersark är primärt rektangulära, men i enskilda fall kan de även vara runda (för att exempelvis rita en färgad "action-knapp"). Vissa särskilda element som statusfältet på Android-enheter utgör ett undantag, och anses vara "målade" direkt på skärmens glasdisplay (och kommer således runt begränsningarna med "papper").<br />
<br />
Ett typiskt gränssnitt består av flera olika pappersark. Vissa kan användas för utplacering av navigeringselement, medan andra uteslutande presenterar innehåll. Komponenter och ark har förutom sina traditionella X- och Y-koordinater även en placering på Z-axeln, dvs i djupled. När pappersark förflyttas av användaren genom en svepgest (t ex för att scrolla i en lista) så kan andra pappersark på en annan djupnivå bli synliga. Pappersark kan följa varandra på relativt komplicerade sätt beroende på vad man vill uppnå som utvecklare.<br />
<br />
Man uppmuntras även att tänka på övergångar och animeringar när man utformar sitt gränssnitt enligt de nya riktlinjerna. En Power Point-liknande övergång från en skärm till en annan utan ett logiskt genomtänkt flöde kring hur komponenterna animeras är utesluten. I stället skall användaren i animeringen tydligt uppmärksammas på vilket grafiskt objekt som gav upphov till förändringen. Om en knapptryckning i en lista exempelvis avslöjar en bild så skall bilden animeras ut från knappen. Vidare skall element som skapas med röstkommandon som grund animeras ut från mikrofon-ikonen. Inte heller animeringarnas flöde lämnas till sitt öde -- man uppmuntras att skapa mjuka sinusformade övergångar i stället för animeringar med konstant flöde, vilka anses "onaturliga".<br />
<br />
Det finns väldigt mycket att säga om Material Design men jag behöver mera tid för att smälta intrycken. Idag finns det heller inte så många konkreta exempel att hämta inspiration och förståelse från. Jag har visserligen installerat <a href="http://developer.android.com/preview/index.html">förhandsutgåvan av nästa stora Android-version</a> med kodnamn "L" på min <a href="https://play.google.com/store/devices/details?id=nexus_5_black_16gb&hl=sv">Nexus 5-telefon</a>, men nästan ingen av Googles egna applikationer har ännu genomgått den stora omdaningen. Ett av få undantag är notifikationsfältet i Android, som numera består av överlappande pappersark på ett för mig förvirrande sätt. Dels finns snabbgenvägar för att t ex stänga av trådlöst nätverk i sitt eget pappersark -- inga konstigheter i sig -- men vissa av notifikationerna hamnar också förbluffande nog i ett eget pappersark skilt från arket med de övriga. Alla dessa ark rör sig ett flytande sätt och delvis oberoende av varandra när man sveper uppåt och nedåt. Om man klickar på en av många små symboler bland snabbgenvägarna öppnas den klassiska inställningsdialogen.<br />
<br />
Ett av syftena med den nya typen av design är att användaren intuitivt skall begripa hur applikationen fungerar och hur användargränssnittselementen hör ihop, men jag undrar om inte klassiska widgets av standardmodell är enklare att förstå. Då visste man åtminstonde var man kunde klicka för att något skulle hända...<br />
<br />Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com3tag:blogger.com,1999:blog-6300697131424827002.post-32236382676524250652007-10-15T04:03:00.000-07:002015-09-08T12:56:33.149-07:00LaTeX on Windows: The Simple Installation Guide<a href="http://www.latex-project.org/">LaTeX</a> is not only a <a href="http://en.wikipedia.org/wiki/Image:Black_Latex_Catsuit_777.jpg">material</a>, but also a technology for writing and typesetting documents. It is an excellent choice for academics, engineers, scientists, manual authors and others for whom structure is important, but not a great fit for those who wish to tweak every detail of their documents' appearance. It enables rapid creation of documents by taking care of layout, fonts, and the placing of images and tables, while always keeping references and links up to date.<br />
<br />
With that introduction taken care of, I recently wanted to build LaTeX documents. On my Linux PC, I had the tools already installed, but on Windows the path was less straight-forward. I initially found a software package called <a href="http://www.tug.org/protext/">proTeXt</a>, which aims to simplify the installation of a Windows-based LaTeX system. However, I ran into major problems with the finished system that prevented me from using it. As I searched the web, I found several other individuals who had problems. The community surrounding the package was very helpful but no-one had a good idea about the cause of the problem, and I wasn't inclined to spend much more time on it, so I abandoned it in favour of another approach. So here follows what is hopefully a close to fool-proof installation guide. The end result will be a setup that converts LaTeX source to a PDF document. I am not interested in producing <a href="http://en.wikipedia.org/wiki/PostScript">PostScript</a>, so this guide will not cover that.<br />
<br />
<span style="font-size: 20.8px; font-weight: bold;">Installing Adobe Acrobat Reader</span><br />
<ol>
<li>Download and install Reader from <a href="http://www.adobe.com/products/acrobat/">this page</a> or any other way that you prefer.</li>
</ol>
<br />
<span style="font-size: 20.8px; font-weight: bold;">Installing MiKTeX</span><br />
<ol>
<li>Begin by downloading <a href="http://miktex.org/">MiKTeX</a>. Get the "basic" version of the installer. At the time of this writing, the latest version can be found <a href="http://prdownloads.sourceforge.net/miktex/basic-miktex-2.7-beta-3.exe?download">here</a> (approx. 70 MB). Start it once downloaded.</li>
<li>Accept the copying conditions by clicking the checkbox and selecting "Next".</li>
<li>Choose whether to install it for any user, or just you, and select "Next".</li>
<li>Select the destination location and click "Next". The default will do fine.</li>
<li>You can now select your preferred paper size (A4 or Letter). Do that, and also answer "Yes" to the question "Install missing packages on-the-fly". Select "Next".</li>
<li>Then click "Start". This will take a while, even with a fast connection.</li>
<li>Eventually, the "Next" button will become enabled again. Select it and then "Close".</li>
</ol>
<span style="font-size: 20.8px; font-weight: bold;">Installing TeXnicCenter</span><br />
<ol>
<li>Download and run the <a href="http://www.toolscenter.org/">TeXnicCenter</a> installer from <a href="http://www.toolscenter.org/downloads.html">this page</a>. At the time of this writing, <a href="http://prdownloads.sourceforge.net/texniccenter/TXCSetup_1Beta7_01.exe?download">version 1 beta 7.01</a> is the latest. Note that the page includes information about some additional required components. If you run Windows XP SP2 or Windows Vista, none of those need to be downloaded but you may want to look them if you run into problems.</li>
<li>On the welcome page, click "Next".</li>
<li>Choose to accept the license agreement and click "Next".</li>
<li>Select the desired destination folder and click "Next".</li>
<li>Select "Typical" and click "Next".</li>
<li>Click "Next" again.</li>
<li>Deselect the checkbox unless you want items added to your "Send to" menu, and then click "Next".</li>
<li>Click "Install".</li>
<li>Click "Finish".</li>
</ol>
<span style="font-size: 20.8px; font-weight: bold;">Configuring TeXnicCenter</span><br />
<ol>
<li><span style="font-size: 16px;">Start </span><span style="font-size: 16px;">TeXnicCenter from the Start menu.</span></li>
<li><span style="font-size: 16px;">The "Tip of the day" may pop up. Select "Close".</span></li>
<li><span style="font-size: 20.8px;">The configuration wizard's welcome page should now display since this the application has not been configured. Click "Next".</span></li>
<li><span style="font-size: 20.8px;">You will now be asked to select the location of the executables of your TeX distribution. Select the <span style="font-weight: bold;">miktex/bin</span> <span style="font-style: italic;">subfolder</span> (important!) of your </span><span style="font-size: 20.8px;">MiKTeX installation directory. On an English language Windows XP or Vista, that will normally be <span style="font-weight: bold;">C:\Program\MiKTeX 2.7\miktex\bin</span>. The screenshot below shows the normal location on a Swedish Windows XP. Select "Next".</span><a aiotarget="false" aiotitle="" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihHfoMT1Sl-_LMY0DC7VmTIvXnxUD4A_C4nO0FGFd3GilAQPvZ6t827l4TtwPOv2rvgJCdHB220bc2XhFbeLHl5SkWAlxg8dMGs5v35w1NqhvuPwVbEU0fRiePD7CzLKXwBg7Y7mJCVSA/s1600-h/texniccenter_wizard_tex_location.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5121389300535265058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihHfoMT1Sl-_LMY0DC7VmTIvXnxUD4A_C4nO0FGFd3GilAQPvZ6t827l4TtwPOv2rvgJCdHB220bc2XhFbeLHl5SkWAlxg8dMGs5v35w1NqhvuPwVbEU0fRiePD7CzLKXwBg7Y7mJCVSA/s320/texniccenter_wizard_tex_location.PNG" style="cursor: pointer;" /></a><span style="font-size: 20.8px;"><br /></span></li>
<li><span style="font-size: 20.8px;">On the next page, you are asked to configure PostScript viewers. Skip this and just select "Next".</span></li>
<li><span style="font-size: 20.8px;">Now you will be asked to configure a PDF viewer. Select the location of your Acrobat Reader binary. On an English language Windows XP for version 8 of Reader, this is normally <span style="font-weight: bold;">C:\Program\Adobe\Reader 8.0\Reader\AcroRd32.exe</span>. Select "Next".</span></li>
<li><span style="font-size: 20.8px;">Now select "Finish" to generate default output profiles</span></li>
</ol>
<span style="font-size: 20.8px; font-weight: bold;">Usage</span><br />
<ol>
<li>To begin a new project, select <span style="font-weight: bold;">File</span> > <span style="font-weight: bold;">New Project</span>. From the <span style="font-weight: bold;">General </span>tab, select <span style="font-weight: bold;">Empty Project</span>.</li>
<li>Enter a project name and select "OK".<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJJycZH8jPVfHVisEmAJSSDZF4FK_RpO1nYM3qLv74Q3Bw3q-mUVA-YPw4f9Fsz5ieyRODLE4p6gmNX0T5njSDkOtlXEX2mDXlgXoohFbJDoTOWsdLQZf4uGzcVrt-PQtRRKps62fc85k/s1600-h/texniccenter_new_project.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5121393350689425202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJJycZH8jPVfHVisEmAJSSDZF4FK_RpO1nYM3qLv74Q3Bw3q-mUVA-YPw4f9Fsz5ieyRODLE4p6gmNX0T5njSDkOtlXEX2mDXlgXoohFbJDoTOWsdLQZf4uGzcVrt-PQtRRKps62fc85k/s320/texniccenter_new_project.PNG" style="cursor: pointer;" /></a></li>
<li>Enter your LaTeX source in the empty document that appears. This guide does not teach LaTex but there are many good tutorials out there, <a href="http://www.ctan.org/tex-archive/info/lshort/english/lshort.pdf">this one</a> for example. I liked this <a href="http://system.csc.kth.se/misc/tex/texintro.pdf">Swedish tutorial</a>. You can download this <a href="http://static.scribd.com/docs/g4y9uuvehv829.txt">sample document</a>, which is configured for both international characters and for PDF creation with clickable bookmarks.</li>
<li>Select the <span style="font-weight: bold;">LaTeX => PDF</span> output profile.<br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixioFSj9BfaM91HjmG7piqhfaTpjyQAGPYrW6Ohxz-k3CPmiiltHTtV8CdRgn-MqSQUXjwzf3bys2KtG8bngxKMIFV6BBOF_hkH8I5kNHj0KT7p3r5f_-oc8NNfv4M8vQQ5q_t40KDpVg/s1600-h/texniccenter_toolbar.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5121399964939061058" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixioFSj9BfaM91HjmG7piqhfaTpjyQAGPYrW6Ohxz-k3CPmiiltHTtV8CdRgn-MqSQUXjwzf3bys2KtG8bngxKMIFV6BBOF_hkH8I5kNHj0KT7p3r5f_-oc8NNfv4M8vQQ5q_t40KDpVg/s320/texniccenter_toolbar.PNG" style="cursor: pointer;" /></a></li>
<li>Select the <span style="font-weight: bold;">Build Output</span> icon (leftmost icon marked red in screenshot above). The file will be automatically saved.</li>
<li>If there were no errors in the Build window, you can now display the final PDF by selecting the <span style="font-weight: bold;">View Output</span> icon (rightmost icon in screenshot). The result should look something like <a href="http://www.scribd.com/word/download/397853?extension=pdf">this</a>. You may continue to edit the source code with Reader open in the background -- recent versions will refresh when the file has changed.</li>
</ol>
That's it!Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-1142758014400411842006-04-21T23:42:00.000-07:002015-09-08T12:59:03.443-07:003D Interface ExtravaganzaThis is supposed to be the year when modern, animated graphical user interfaces hit the mainstream. <a href="http://www.apple.com/">Apple</a> popularized this idea years ago with <a href="http://www.apple.com/macosx/">MacOS X</a> and <a href="http://www.microsoft.com/">Microsoft</a> has big ambitions in this regard for <a href="http://www.microsoft.com/Windowsvista/">Windows Vista</a>.<br />
A friend suggested that I try the <a href="http://www.gentoo.org/">Gentoo</a> <a href="http://en.wikipedia.org/wiki/Linux">Linux-based</a> <a href="http://kororaa.org/">Kororaa</a> live-CD which incorporates an experimental OpenGL-based X server called <a href="http://www.novell.com/linux/xglrelease/">XGL</a>, combined with a powerful compositing engine called <a href="http://en.opensuse.org/Compiz">Compiz</a>. Compiz has a modular architecture with a range of standard plugins that provide the following effects, and more:<br />
<ul>
<li>When switching between one of the four predefined workspaces, the transition is animated such that the current and new workspace both appear to be sides on a three-dimensional cube. It is also possible to manually rotate the cube in any direction using the mouse.</li>
<li>Windows, when dragged, get an appearance comparable to that of a flag waving in the wind. The effect is proportional to the speed by which the window is moved. The result is a highly spectacular effect — I spent a long time just moving windows around and still have not grown tired of it!</li>
<li>By holding a key while moving a window, the window can easily attach to one of the screen’s borders. This effect is remniscent of magnetism, and creates the impression that you almost have to “fight” the window when getting it to loosen its grip on the screen’s side(s).</li>
<li>Alt-Tab shows miniatures of all windows on the current workspace, making it easy to select exactly the desired target.</li>
<li>The F12 key temporarily shows miniature versions of all windows on the current workspace. When selected, a window immediately gets restored, focused and ready for input. This is essentially a more sophisticated version of Alt-Tab.</li>
<li>Any portion of a window can easily be zoomed in and out of using the mouse and a special key combination.</li>
<li>Using a key combination combined with the the scroll wheel on the mouse, the transparency of a window can be adjusted with great accuracy.</li>
</ul>
All of the effects are “live”, in the sense that applications continue to refresh their interfaces smoothly even as they are obscured behind partially transparent windows, or while the screen is rotated. Even movies continue to play uninterrupted!<br />
Excited by the prospects of enjoying a smooth, animated desktop after having experienced the XGL and Compiz combination in Kororaa, with by far the most impressive interface effects I have ever seen, I installed XGL and Compiz in a recent <a href="http://cdimage.ubuntulinux.org/daily/current/">Ubuntu Dapper daily</a> — a remarkably easy endeavour when assisted by <a href="http://www.tectonic.co.za/view.php?id=916">one</a> of the many excellent on-line guides.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ9Fy4SlNsdwksB7DQQhzdmC3Q_CXrWhJ3fXRiynxEZlYBZGTurYrN1j36XucA8SboiQktA-uhpoWbUBJ89rVzY1iUpgtUSBt16kCL_foioyGmZc6Dbr_liU9ylO-PTHNFEoLA6Pvbpm4/s1600-h/xgl.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107951992446382626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ9Fy4SlNsdwksB7DQQhzdmC3Q_CXrWhJ3fXRiynxEZlYBZGTurYrN1j36XucA8SboiQktA-uhpoWbUBJ89rVzY1iUpgtUSBt16kCL_foioyGmZc6Dbr_liU9ylO-PTHNFEoLA6Pvbpm4/s320/xgl.png" style="cursor: pointer;" /></a><br />
I’m hoping that some of the interesting features in <a href="http://www.sun.com/">Sun’s</a> <a href="http://www.sun.com/software/looking_glass/">Project Looking Glass</a> might eventually be incorporated in Compiz, such as the ability to turn windows around and scribble notes on the back.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-84987137691559518252006-04-20T23:44:00.000-07:002015-09-08T13:16:04.821-07:00Review: LiveHostI moved to the U.S.-based hosting service <a href="http://www.livehost.net/">LiveHost</a> in early October 2005 from my previous web hotel, one of the largest in Sweden. Today’s global economy and ease of international communications combined with a stunningly low price made it an easy decision, as LiveHost offers half a GB of disk space and 2 GB of transfer for as little as USD $6 per month. I have to admit that ecstatic comments on a popular review site made me more than a little skeptical, but I had nothing to loose.<br />
My previous host’s cheapest plan is SEK 83 (USD $100) which includes 100 MB of disk space and 5 GB of transfer. That’s more transfer but significantly less space, and it supports only annual or quarterly payments which I considered an inconvenience. In addition, the starter cost was an annoying SEK 369 (USD $40). It also included no free-of-charge statistics options other than a simple counter, while LiveHost by contrast includes several extensive options free of charge and ready for use at any time.<br />
LiveHost has a large range of scripts and packages for blogs and forums ready for automated and hassle-free installation through <a href="http://netenberg.com/fantastico.php">Fantastico</a>. This made it the ideal choice for this personal website of mine, as well as for a community website for the discussion room <a href="http://www.ircpolitical.org/">#political</a> on the <a href="http://www.undernet.org/">Undernet</a> <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> network.<br />
I have had no need to test LiveHost’s technical support, but they have always been very prompt and helpful when I have approached them with administrative issues and questions. The only potential drawback that I can think of with LiveHost is that I believe it lacks support for ASP.NET. Also, the international nature of the payments excludes the possibility to pay using ordinary invoices in my case. Instead, I rely on <a href="https://www.paypal.com/">Paypal</a> which frankly I neither like nor trust. However, all of the other advantages more than make up for this.<br />
Highly recommended!<br />
<span style="font-weight: bold;">Update, 6th of October 2007: This host has changed very significantly for the worse in the past year or two, following a key employee leaving. I can no longer endorse this recommendation.</span>Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com1tag:blogger.com,1999:blog-6300697131424827002.post-83752005106735084302005-10-11T23:40:00.000-07:002015-09-08T13:03:38.861-07:00Setting up SubversionThis is meant as a no-nonsense guide to setting up <a href="http://subversion.tigris.org/">Subversion</a>, the excellent open-source version control system. It is aimed at software developers who are familiar with version control in general, and want to quickly try Subversion without having to sift through all of the documentation pages. It is assumed that you will run the Subversion server on a Unix-like system, and that you will access the repository using <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, a very nice shell extension and user interface for Windows. For those with more time to spare, I recommend reading parts of the free on-line book <a href="http://svnbook.red-bean.com/">Version control with Subversion</a>. So let’s dig into this task and you should be up and running within minutes!<br />
<ul>
<li>First of all, make sure that Subversion is installed. In a prompt, type:<br /><code>svn</code><br />You sholid get something like this as a response:<br /><code>Type 'svn help' for usage.</code><br />If the command is not recognized, you’ll have to install the packages for your distribution. If you run a reasonably recent release of <a href="http://www.fedora.org/">Fedora Core</a>, you should be able to just type:<br /><code>yum install subversion</code></li>
<li>Next, you’ll have to make sure that Subversion is automatically launched on boot. How to accomplish this task depends on your operating system and distribution. If you run Fedora Core, a quick and dirty way is to locate the file <code>/etc/rc.d/rc.local</code> (create it if it does not exist) and add the following:<br /><code>svnserve -d</code><br />If you want to run the server as a user other than root, which you may consider for security reasons, please consult the documentation for your operating system. Server security is beyond the scope of this document.</li>
<li>Now you’ll have to decide which user should own the repository. If you want, you can create a dedicated user. Log in as that user and type the following (substitute <code>johndoe</code> for the user, <code>johnsfiles</code> for the name of the repository that you want to create, and <code>/home/johndoe</code> for the intended parent directory):<br /><code>cd /home/johndoe<br />svnadmin create johnsfiles<br />mkdir files<br />mkdir files/branches<br />mkdir files/tags<br />mkdir files/trunk<br />svn import files file:///home/johndoe/johnsfiles -m “Imported the root directories.”<br />mv johnsfiles/conf/svnserve.conf johnsfiles/conf/svnserve.conf.original</code></li>
<li>Create the file <code>johnsfiles/conf/svnserve.conf</code> and add the following:<br /><code>[general]:<br />password-db = users.conf<br />realm = John Doe’s File Repository<br />anon-access = none<br />auth-access = write</code></li>
<li>Then create the file <code>johnsfiles/conf/users.conf</code> and add (substitute <code>12345</code> for the desired password):<br /><code>[users]<br />johndoe = 12345</code></li>
<li>If you use a router and want people from outside of your local network to have access to the repository, you’ll have to configure the router to forward port 3690 (TCP and UDP) to the same port on your host.</li>
<li>Now we’ll switch to Windows. Make sure TortoiseSVN is installed. It requires a reboot following installation, after which additional menu items are visible when right-clicking on folders and files.</li>
<li>Create a new folder using Explorer, with the name of your choice.</li>
<li>Open the new folder, and then right-click inside it. Select <code>SVN Checkout...</code>.</li>
<li>In the dialog that now opens, enter the following address under <code>URL of repository:</code> (exchange <code>192.168.1.2</code> for the IP address or name of your Unix host):<br /><code>svn://192.168.1.2/home/johndoe/johnsfiles</code></li>
<li>Click <code>OK</code>. The three special folders branches, tags and trunk should now be created. For the purpose of each, refer to the Subversion documentation. The short version is that <code>trunk</code> is where you should normally be working.</li>
</ul>
That’s it! You can now create the files and folders of your choice in <code>trunk</code> and import them to the repository using the menu items provided by TortoiseSVN. Be sure to explore other menu items as well. If you are familiar with other version control systems, the purpose of many of them is probably fairly obvious to you.<br />
I hope this helpedRoberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com1tag:blogger.com,1999:blog-6300697131424827002.post-31900281954100670842005-08-03T23:37:00.000-07:002015-09-08T13:13:31.978-07:00Wireless Wrestling, Part IIIMy third venture in my quest for wireless happyness is the <a href="http://www.linksys.com/servlet/Satellite?childpagename=US%2FLayout&packedargs=c%3DL_Product_C2%26cid%3D1115416825841&pagename=Linksys%2FCommon%2FVisitorWrapper">Linksys WRT54GS router</a> and <a href="http://www.linksys.com/servlet/Satellite?childpagename=US%2FLayout&packedargs=c%3DL_Product_C2%26cid%3D1115416827622&pagename=Linksys%2FCommon%2FVisitorWrapper">WUSB54GP adapter</a>. The router’s appearance has a disturbing similarity to a toy, rather than a piece of professional networking equipment. A striking feature is the second antenna, which is probably not a bad idea. A CD accompanies the router, containing a setup wizard.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi07sUdxEQOC7krUSsRNDtdXkbdN9LexuhHkT2vlln8VGlGegwi6Xl96-bPA_4SBcxc1o5LE0xYuKjLwpisEEljdin23HsUMGIv5DbBxwZ6E8LsMI5M_UIu8dWBgnwasLracbsVxGjnRFI/s1600-h/setupwizard.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107951017488806402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi07sUdxEQOC7krUSsRNDtdXkbdN9LexuhHkT2vlln8VGlGegwi6Xl96-bPA_4SBcxc1o5LE0xYuKjLwpisEEljdin23HsUMGIv5DbBxwZ6E8LsMI5M_UIu8dWBgnwasLracbsVxGjnRFI/s320/setupwizard.png" style="cursor: pointer;" /></a><br />
<br />
Before I ran it, I made sure to change my computers’ subnet to match the default router address of 192.168.1.1. I noticed that I immediately had wired connectivity, and <a href="http://www.robertb.eu/img/linksys/setupwizard_alreadyconnected.png">so did the setup wizard</a> which urged me to continue configuration using the web interface. Just like previously reviewed routers, the Linksys has a built-in DNS server which is very comfortable. After punching in the router’s address in my <a href="http://www.mozilla.org/products/firefox/">browser</a>, I got a clean yet full-featured interface to control the router.<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt6VZGOx8_dZiiwcSOSar1n2u8UT9hTRVFyRiwKsiEje-diwtTqvUgWw-MrL_T2NNGGFUmKY3Z406GO-_cHBlYxE1rRHVpRwIztVyA7QE6LiYVQ_BUeuV0rNOT6B7_-OtfL6Y0zxIXMFQ/s1600-h/cfg_firstpage.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107951163517694482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt6VZGOx8_dZiiwcSOSar1n2u8UT9hTRVFyRiwKsiEje-diwtTqvUgWw-MrL_T2NNGGFUmKY3Z406GO-_cHBlYxE1rRHVpRwIztVyA7QE6LiYVQ_BUeuV0rNOT6B7_-OtfL6Y0zxIXMFQ/s320/cfg_firstpage.png" style="cursor: pointer;" /></a><br />
<br />
It <a href="http://www.robertb.eu/img/linksys/cfg_wireless1.png">seems</a> to have <a href="http://www.robertb.eu/img/linksys/cfg_wireless2.png">more</a> wireless settings than the other routers that I have tried. The firmware was about <a href="http://www.robertb.eu/img/linksys/cfg_status.png">seven months old</a> so I made sure to upgrade it immediately — easily done via the web interface. Unfortunately, <a href="http://www.robertb.eu/img/linksys/cfg_portforwarding.png">only ten ports</a> can be forwarded and I’ve already filled six of the slots. There was also an issue with WPA encryption that I could not resolve, so I reverted to WEP for the time being. There are <a href="http://openwrt.org/">alternative</a> open source firmware editions available for this router that supposedly offer more features. Like the official firmware, they are based on Linux. However, I have yet to try any of them.<br />
The next step was installing the adapter in my laptop. That, too, involved running a setup wizard. It was quick and painless, but for some reason it <a href="http://www.robertb.eu/img/linksys/adapter_interface.png">failed</a> to detect my internet connection after setup had been completed. I did have flawless internet connectivity nonetheless. This mysterious phenomenon, though not a problem, has been recurring occasionally.<br />
Performance, in terms of throughput, seems reasonable. <a href="http://tptest.sourceforge.net/">TPTEST</a> reports that I get <a href="http://www.robertb.eu/img/linksys/tptest.png">almost</a> the full 10 Mbps of my internet connection. The neglible difference is probably not due to the router. An FTP connection between my wired computers’ 100 Mbit network interface cards reaches 85 Mbps, and a wireless FTP transfer from my server to my laptop was spinning in 20.8 Mbps. That does not come close to the advertised 54 Mbps, but that seems to apply to wireless equipment from other manufacturers as well. It is certainly fast enough for most needs — including the streaming of movies or music.<br />
This router seems more stable than the ones by D-Link and Netgear that I previously tested. However, I do occasionally (rarely) lose internet connectivity for a brief moment, as witnessed by automated reconnect attempts to IRC servers by my server. Because the router provides rather poor logging facilities, it is hard to ascertain at this time whether this this is a result of router instability or the internet connection itself going down. I plan on carrying out some further investigation on this topic eventually. For the time being, having used the router for a few weeks now, I’m fairly pleased with my purchase. Third time’s the charm, eh?<br />
<div>
<br /></div>
Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-76832948618399705332005-07-25T23:35:00.000-07:002015-09-08T13:12:24.361-07:00Wireless Wrestling, Part II<a href="http://www.robertb.eu/?p=7">Disappointed</a> by the Netgear WGT624, I thought that I would try my luck with D-Link wireless products. So about a week and a half ago, I got a D-Link <a href="http://www.dlink.se/?go=jN7uAYLx/oIJaWVUDLYZU93ygJVYKOhST9vhLPG3yV3oUoB5haltbNlwaaRp7jwkFj2onGQTo48EBt/mzKfgKUYZteLQZoQ=">DI-624+</a> router and a <a href="http://www.dlink.se/?go=jN7uAYLx/oIJaWVUDLYZU93ygJVYKOhST9vhLPG3yV3oUoF6hKltbNlwaaRp7jwkFj2onGQTo48EBt/mzKHnL0gVseLZaYE=">DWL-G122</a> USB adapter.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVqg8a799supyP6srNpfUJm_Ows_BeFOBJ46P0UJnucWJrscbWIcF0IY5vX4MPZzonCH_HH8W7igiIc4zCKVwTJwJQI33LR1K1U5ZI3-o1Uq0gXH17Khvs4tIBcg10Esbwa3bGsjVB22Y/s1600-h/di-624plus.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107950304524235234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVqg8a799supyP6srNpfUJm_Ows_BeFOBJ46P0UJnucWJrscbWIcF0IY5vX4MPZzonCH_HH8W7igiIc4zCKVwTJwJQI33LR1K1U5ZI3-o1Uq0gXH17Khvs4tIBcg10Esbwa3bGsjVB22Y/s320/di-624plus.jpg" style="cursor: pointer;" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib7V-ma7cxKz91rtNgmSHgMZx6SYBDqoxvwh14XzxE_yAYaoOj7el9Ho4S1YosnXWsjGyA4YGFPsQpp_4W64xjZFav0zGi9q6_NA7EGAdKksDFluDqjGE_6G8JNaZfn7nq9fqinoRF8LM/s1600-h/dwlg122.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107950386128613874" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib7V-ma7cxKz91rtNgmSHgMZx6SYBDqoxvwh14XzxE_yAYaoOj7el9Ho4S1YosnXWsjGyA4YGFPsQpp_4W64xjZFav0zGi9q6_NA7EGAdKksDFluDqjGE_6G8JNaZfn7nq9fqinoRF8LM/s320/dwlg122.jpg" style="cursor: pointer;" /></a><br />
<br />
The installation procedure is very similar to that of the Netgear products I previously tried. The router is configured using a browser (the D-Link interface supports Firefox, like that of Netgear, I’m pleased to report) and the adapter uses custom software included on CD.<br />
This router operates in 54 Mbps rather than 104 Mbps. In practice I get 14.4 Mbps when performing a wireless FTP download to my laptop from the PC. Watching a streamed movie works without a hitch. My PC and server, both connected via cable, communicate with each other in 85.6 MBps out of a theoretical 100 MBps. That is more than sufficient for my needs.<br />
The web interface used for the configuration of this router feels somewhat cluttered and confusing. The placement of sub-categories within five main categories seems largely arbitrary. Nonetheless the basic features are all present. A dynamic DNS update for the <a href="http://www.dyndns.org/">www.dyndns.org</a> service is present, but I had to quickly disable it as it did not pay attention to whether the host already accurately resolved to the correct address — causing DynDNS to ban the host.<br />
Having been in the company of this router for some time now, I have found it to be less error-prone than the Netgear. However, this one, too, has the very annoying habit of rebooting randomly. Sometimes it happens several times per day. Sometimes the interval between reboots is many hours, other times just an hour. In some cases it forgets the system clock as well, adding to the annoyance factor.<br />
D-Link Support first suggested to upgrade to the latest firmware (which was already present on purchase), and then wanted to replace the unit. Fearing bugs or design flags given widespread reports about reboots by other owners of this model, I decided to evade the potentially lengthy warranty route and just return it to the store in favour of another brand.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com1tag:blogger.com,1999:blog-6300697131424827002.post-17070393090730141672005-07-15T23:29:00.000-07:002015-09-08T13:10:24.285-07:00Wireless WrestlingI wanted to free my <a href="http://support.packardbell.com/se/mypc/index.php?PibItemNr=PB21M00868">new laptop</a> from the constraints of cables, and invested in a Netgear <a href="http://www.netgear.com/products/details/WGT624.php">WGT624 router</a> and <a href="http://www.netgear.com/products/details/WG111T.php">WG111T</a> USB adapter combination.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRvnfR4hXzmpp_CQEEoNCWR2HPqilFMhmwaYpfOoBMFK4IfjPJda8hNvcOn6tjbFgp2Vra_cbMKs-mx0W1sarTWR8dvI7VWhZTdrJTR2s2lzFnQnEt6b89067UfEsgL-UTCMWajAN2o74/s1600-h/netgear_wgt624.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107949213602541986" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRvnfR4hXzmpp_CQEEoNCWR2HPqilFMhmwaYpfOoBMFK4IfjPJda8hNvcOn6tjbFgp2Vra_cbMKs-mx0W1sarTWR8dvI7VWhZTdrJTR2s2lzFnQnEt6b89067UfEsgL-UTCMWajAN2o74/s320/netgear_wgt624.jpg" style="cursor: pointer;" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeiahUDdE8iRepIu3av_Beco3PmfLyMjoIaYSLslR4hP4kN8sWu6JzQU8U1sFRcnkFbQ2dLUlBceUyo9J37riKFKqorYJioI7rKLj51MZ-UzavZqWhyphenhyphenxOzab0hDp1q_MjFfeY42SBw92w/s1600-h/wg111t.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107949299501887922" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeiahUDdE8iRepIu3av_Beco3PmfLyMjoIaYSLslR4hP4kN8sWu6JzQU8U1sFRcnkFbQ2dLUlBceUyo9J37riKFKqorYJioI7rKLj51MZ-UzavZqWhyphenhyphenxOzab0hDp1q_MjFfeY42SBw92w/s320/wg111t.jpg" style="cursor: pointer;" /></a><br />
<br />
The install was fairly quick and painless. I connected my Windows XP desktop PC and my Linux server using the Ethernet ports, and plugged the adapter into my laptop. The router interface is accessed using a standard web browser, and I was happy to note that Firefox worked well. The adapter requires custom software to be installed. The router is fairly full featured, supporting encryption standards WEP and WPA-PSK and all the usual features like port forwarding. The router did not appear to limit my external bandwidth, which is 10 Mbps / s. In 108 Mbps mode, I measured at most 20.8 Mbps / s during a large wireless FTP transfer.<br />
Having been running it for several days, I have discovered some problems however.<br />
<ul>
<li>Seemingly at random, it drops all of the connections on both wired and wireless ports. When this happens, the interface reveals an uptime on all ports consistent with the timing of the dropped connections. The obvious conclusion is that it reboots itself.</li>
<li>Sometimes wireless latency increases substantially. At worst it takes several seconds before a key press is registered on a telnet connection. Out of several sent ping packages, some or all are lost. When I disabled 108 Mbps mode and returned to the standards-compliant 54 Mbps mode, this problem appeared to disappear however.</li>
<li>Sometimes during moments of increased wireless network activity, such as when copying files between one of my cable-connected computers and my laptop, the wireless connection is suddenly lost. Netgear’s software still indicates excellent signal strengh, and the cable-connected computers remain flawlessly connected. In this mode, I found that I am able to restore wireless connectivity by selecting <em>Repair</em> on the connection in Windows. However, <a href="http://www.windowsitpro.com/Article/ArticleID/41060/41060.html">manually</a> executing the steps that are supposed to take place during the repair operation does not appear to solve the problem so it is difficult to pin down exactly what is going on.</li>
<li>When testing wireless bandwidth throughput using <a href="http://tptest.sourceforge.net/">TPTEST</a>, an open source tool released by the<br />Swedish <a href="http://www.konsumentverket.se/">Consumer Protection Agency</a>, the router usually locks up completely and requires a manual reboot (unplugging the power adapter and then plugging it back in).</li>
</ul>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYfFQM_bEQXY_wu36fSYXQyyrc49b8V6UFdso1FKG1PW31ExjR7GP5VYLKMoxPUvFTds2gTVGXwbxLd3YLrH9PCC5WG1neqGM3XzNeP6XiadGlTCJv0J1qh4s61OpdOe9Q7_CuCHgfZik/s1600-h/netgear_wgt624_uptime.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107949750473454018" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYfFQM_bEQXY_wu36fSYXQyyrc49b8V6UFdso1FKG1PW31ExjR7GP5VYLKMoxPUvFTds2gTVGXwbxLd3YLrH9PCC5WG1neqGM3XzNeP6XiadGlTCJv0J1qh4s61OpdOe9Q7_CuCHgfZik/s320/netgear_wgt624_uptime.jpg" style="cursor: pointer;" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieAg7zkY4eRHbolvtIR0nahoEwY5eYbmva0PJRKu97uPIFU9xvEk7Pk3yV8oXpPe54UWAWGanvfCC24y3Cw_HU1qvCNIb5lZkDWN33uKI1XshetT33gOBm9SASVm2A7OMLBIJE_ummcws/s1600-h/netgear_wgt624_ping.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107949819192930770" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieAg7zkY4eRHbolvtIR0nahoEwY5eYbmva0PJRKu97uPIFU9xvEk7Pk3yV8oXpPe54UWAWGanvfCC24y3Cw_HU1qvCNIb5lZkDWN33uKI1XshetT33gOBm9SASVm2A7OMLBIJE_ummcws/s320/netgear_wgt624_ping.jpg" style="cursor: pointer;" /></a><br />
<br />
After extensive searches in various on-line forums, I noted that lost connections and reboots appear to be common problems with this router model. Some believe that the problems can be explained in part by over-heating, and have devised clever though intrusive <a href="http://forum1.netgear.com/support/viewtopic.php?t=4435">solutions</a>. Some note that their power adapters deliver substantially more than the labelled 12 V, and switching to other adapters sometimes resolved the problems. Curious, I measured the voltage from my own adapter and got 16.5 V. I downloaded the latest beta firmware and believe that it may have alleviated some of the problems, but the router continued to lock up while running TPTEST — a disturbing sign that not all is well yet. In addition, it continues to reboot on random occasions.<br />
Netgear Support offered some standard advice but could not resolve the problem. I returned it to the <a href="http://www.pccity.se/Vara_Butiker/PCCityInfraCity.htm">store</a> which offered to take it back and refund me. I accepted.<br />
<div>
<br /></div>
Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-65671759148592912262005-02-20T23:28:00.000-08:002015-09-08T13:05:02.220-07:00Review: SUSE Linux 9.2I decided to try <a href="http://www.suse.com/">SUSE Linux</a>, which I had always heard a lot of good things about. Release 9.2 Professional is <a href="ftp://ftp.sunet.se/pub/Linux/distributions/suse/suse/i386/9.2/iso/">available </a>for free download.<br />
The first thing that surprised me was that the installation was entirely graphical, with an optional text mode for details about the progress. There is almost no need for interaction, as reasonable options are provided by default and most are presented clearly. I felt that the default partitioning settings were vague, however, and opted to customize them in more detail to ensure that my intended partitions were being used (they were not, the installation had — probably wisely — suggested to resize existing partitions to make place for the new ones). This customization is possible for most aspects of the installation, including package selection of course. I declided to install <a href="http://www.gnome.org/">GNOME</a> in addition to the default <a href="http://www.kde.org/">KDE desktop environment</a>. As the files are copied, some simple changing imagery is shown with explanatory text. This aspect is a lot like the Windows or even <a href="http://www.redhat.com/">Red Hat</a> and <a href="http://fedora.redhat.com/">Fedora Core</a> installations.<br />
During the installation, my hardware (sound card, graphics card, mouse, network interface card) was accurately detected — including to my great surprise the Hauppauge TV tuner card which had been collecting dust (he, he) for years. As is to be expected even in <a href="http://www.microsoft.com/">Microsoft Windows</a>, my monitor was an exception however (more on that later). I declined to specify addresses for my network card as I didn’t have the name servers written down. The installation finished by offering me to download updates, which I declined as I knew it wouldn’t work in the absence of name servers.<br />
Having finished the extremly pleasing and painless installation, I was greeted with a freshly installed version of KDE. During my brief (and sometimes not so brief) stints with Linux desktop usage, this has been a favourite of mine due to the vast opportunites for customization that it provides and perhaps as well because it looks stunning (if, perhaps, a little cluttered compared to the increasingly clean feel of GNOME). Unlike some people, I prefer using the official desktop distributions more or less intact and was pleased that to see that not too much customization had been going in. The only obvious change I noticed was that the KDE logo had been replaced with a SUSE logo.<br />
SUSE provides a tool called <a href="http://www.novell.com/products/linuxprofessional/features/yast.html">YAST</a> to configure those aspects of the system that are not managed by the desktop environment. It integrates into the KDE Control Panel under its own heading, and I could easily use it to finish my network configuration as well as specify an appropriate horizontal and vertical frequency range for my monitor in order to bump up my refresh rate. There is unfortunately some overlap between the configuration options offered by YAST and those offered by the KDE control panel itself and not always obvious where to turn. I am not sure what kind of hooks the KDE control panel provides for third parties, but I think this is an area that could use some improvement. Ideally, hardware options should be completely integrated into the existing KDE control applets.<br />
I wanted to see if my network was up and running so I opened a terminal and tried to ping my Fedora Linux powered firewall, which worked flawlessly. KDE includes a <a href="http://www.konqueror.org/">terrific web browser</a> which doubles as a file manager, whose rendering code <a href="http://www.apple.com/">Apple’s</a> <a href="http://www.apple.com/safari/">Sarafi</a> browser is based on. I decided, however, to open the more versatile Firefox browser, installed by default. Unfortunately I found that I could not view any pages. I made sure that my name servers were entered correctly but still it would not work. I then SSH’ed into my firewall box to manually retrieve the IP addresses of a few websites and entered them into Firefox. Yet it still would not work! After a few confused minutes I realized I had forgotten to enter the gateway for my network. Having settled that the network worked fine, after YAST had automatically restarted it following my configuration changes. I made sure to download the available updates for my system, which was as easy as using Windows Update. The updates appeared to include a Macromedia Flash player, as well as an updated NVidia driver not provided by default due to licensing restrictions. I also installed my favourite Firefox <a href="https://update.mozilla.org/extensions">extension</a>, <a href="https://update.mozilla.org/extensions/moreinfo.php?application=firefox&version=1.0&os=Windows&category=Navigation&numpg=10&id=12">All-In-One gestures</a>, to make navigation more comfortable. Its behaviour was flawless, and identical to when installed under Windows.<br />
I launched OpenOffice, also included by default, and noticed how well it integrated with KDE unlike a few years ago. Everything looked native to KDE and very visually pleasing. I have since come to understand that <a href="http://www.openoffice.org/">OpenOffice</a> rendering hooks are available for <a href="http://www.trolltech.com/">QT</a>/KDE these days, which probably explains this behaviour. I also noticed quickly that the fonts displayed were anti-aliased, another item I had been experiencing some problems with in the past.<br />
I was surprised and somewhat annoyed that clicking in an inactive textbox would not select all of its contents. This is a behaviour probably introduced by MacOS, and then carried on by Windows, and one that I had really grown used to. I thought at first that this problem might be specific to Firefox but it appeared to work the same across the board. Another annoyance that I had was that the icons, graphics and text were all quite large and consumed a lot of my valuable 1280×1024 screen real estate. I had become used to having a fair amount of space for my applications. I decided to try and bump up the resolution to 1600×1400, which was easily done with no need for meddling in configuration files. Unfortunately, everything still displayed just as large. I believe that this was due to my DPI setting not changing, but I could find no way to make this change using the graphical configuration tools so I let it go for the time being. I tried to enable dual-head options so that my second monitor would also kick in, but YAST claimed it was not available (despite working well under Windows). I am not certain what caused this and did not try further. I also did not try any software for my TV tuner card despite it having been accurately detected during the installation procedure.<br />
I decided to have a quick peek at GNOME. The first thing that came to my mind was that it had detected and mounted my NTFS partitions, holding — among other things — all of my music in MP3 format. For some reason, these partitions did not appear to have been available under KDE (they probably were mounted, but it was not obvious to me at the time). I tried the default GNOME media player and my music played well, although there was no support for changing the volume using the additional keys on my Microsoft Natural Keyboard Pro. I also challenged destiny by opening an XVid file, but got an expected error message. I imagine some codecs needed to be downloaded. Another observation I made while using GNOME is that every folder opens in a new window. This is something that I had vague collections about behing hyped on some sites using fancy terms such as “spatial nagivation” or something to that effect. This had always been the Amiga and Mac way of doing things, and I recall discomfort when switching to Windows 98 which normally opens folder contents in the existing window. To my surprise this old way of doing things re-introduced in GNOME really annoyed me, I can’t be bothered to go around and close windows all the time to avoid the inevitable clutter. Fortunately I quickly found a way to disable this in the settings.<br />
During the course of experimenting with SUSE, I rebooted my machine several times for certain changes to take effect (it is likely that this was not strictly necessary). I noticed that sometimes this would not immediately appear to work; I sometimes had to select “Restart” multiple times before anything happened.<br />
In summarizing my brief experience with SUSE thus far, I think it’s safe to say that it’s the most clean and polished Linux distribution that I’ve tried.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-73115937008585358912004-11-19T23:25:00.000-08:002015-09-08T13:00:50.700-07:00A Prompt You Can StandFor the past four years, Windows has been a very sophisticated operating system. It has provided stability, efficient pre-emptive multitasking, solid memory protection, POSIX compatibility, an acceptable (though unimpressive) file system, good multi-user support and increasingly good development tools (<a href="http://msdn.microsoft.com/vstudio/">Visual Studio</a> is truly fantastic nowadays).<br />
However, one aspect where Windows comes short of its <a href="http://www.linux.org/">free competition</a> is its command shell. Windows always had some level of support for batch files, but not the wealth of command line tools to fully exploit automation. In addition, the shell interface is <a href="http://msdn.microsoft.com/vbasic/">horrible</a>. The configuration settings are limited, and the window width can not be dynamically changed. Having briefly played with the betas of Microsoft’s next generation shell, codenamed Monad or MSH, it looks like the user interface will continue to be poor for the next few years even though scripting capabilities will be fantastic.<br />
However, there is a better alternative available. <a href="http://www.cygwin.com/">Cygwin</a>, a popular port of Unix scripts, APIs and tools, provides Windows users with the power and convenience of traditional Unix tools like <a href="http://www.gnu.org/software/grep/grep.html">grep</a>, and an alternative command terminal that can host <a href="http://www.gnu.org/software/bash/bash.html">bash</a>.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWagdf83tX2_o1MrMlo8olhOf0gwQRyiLhQjPzqv3frdLcacGBtMEY5dzJ1bPQZmEEGOJKuW7pk3t0q_rSQhVMls8elcLQ2_dBfGdX1-4ItCsQ4-_Mo-Vqk_HEUlcm0MtIjIvxl6qbfI/s1600-h/cygwin_bash.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107947822033138050" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAWagdf83tX2_o1MrMlo8olhOf0gwQRyiLhQjPzqv3frdLcacGBtMEY5dzJ1bPQZmEEGOJKuW7pk3t0q_rSQhVMls8elcLQ2_dBfGdX1-4ItCsQ4-_Mo-Vqk_HEUlcm0MtIjIvxl6qbfI/s320/cygwin_bash.jpg" style="cursor: pointer;" /></a><br />
<br />
Personally I have found this to provide a good alternative to the standard Windows command prompt. You get a highly responsive terminal, with tab completion and history, and the ability to change the window size whenever you want to. All of the Unix tools that you expect are here (or can be <a href="http://cygwin.com/setup.exe">automatically downloaded</a>). Some of the downsides that I have found include a really ugly non-standard scrollbar, and an inability to drag files onto the shell from Explorer to automatically obtain their path. Some people <a href="http://www.khngai.com/emacs/">even run GNU/Emacs</a> in this environment. I tried the same, but noticed that the bottom-most line would disappear. Very annoying.<br />
All in all, I have been happy to trade my dusty old MS-DOS prompt for a shiny new bash prompt.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-18187682595840652302004-11-08T23:27:00.000-08:002015-09-08T13:02:14.895-07:00Review: Design PatternsFor the past three years or so, I’ve been hearing increasingly more about <i>software patterns</i>. Some regard them as the best thing since sliced bread. If you dig through the hype, you will find a clever way of describing common software constructs in a de-facto standard vocabulary with which an increasing number of software developers are familiar.<br />
If you have any experience with software development, you probably at some point devised a mechanism by which interested object instances could register to receive events emitted by other objects. If you’re anything like me, you probably did not know at the time that you were actually implementing a variant of the <a href="http://www.dofactory.com/Patterns/PatternObserver.aspx">Observer</a> pattern. Similary, you may have created a class returning new instances of appropriate subclasses of abstract objects without knowing you were using the <a href="http://www.dofactory.com/Patterns/PatternAbstract.aspx">Abstract Factory</a> pattern. And you may not have known that the iterators of the <a href="http://www.msoe.edu/eecs/cese/resources/stl/">C++ Standard Template Library</a> were designed around a pattern later to be known as the <a href="http://www.dofactory.com/Patterns/PatternIterator.aspx">Iterator</a> pattern.<br />
As with most new software development methodologies, patterns were — in my view — excessively hyped for a period. Now that things have calmed down, it is possible to evaluate patterns on their own merits — and those merits do not necessarily constitute providing revolutionary new design principles. Rather, they provide a way to express common programming constructs in a language-independant way, which must be a Good Thing<sup>TM</sup>.<br />
If you have somehow missed the patterns hysteria and would like to get into it, I really recommend the <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201633612/qid=1094667201/sr=8-1/ref=pd_ka_1/102-6276030-6832950?v=glance&s=books&n=507846">excellent book</a> by Gamma (as well as Helm, Johnson, and Vlissides), one of the authors who pioneered the concept (and who later created the very useful <a href="http://www.junit.org/index.htm">JUnit</a> unit testing framework).<br />
The book provides a useful summary of all established patterns on the first few pages, and then goes on in subsequent chapters to explore each pattern in great detail, providing examples and plenty of motivation for the design decisions made. This book is <i>the</i> reference to software patterns and you should probably consider getting one for your bookshelf.<br />
If you prefer a more concise summary, there are some <a href="http://www.dofactory.com/Patterns/Patterns.aspxhtm">excellent pages</a> available on-line that provide just that — in Microsoft’s excellent <a href="http://msdn.microsoft.com/vcsharp/">C# language</a>, no less.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7iB2ni4FXXAmH-jBB-oOkjNsXfFS54HBdsXnNv4NFyN7mRiTKX_a7MDDjLE6iiuqZRo3a7KPfxz9hXvYn9Pth-EE53PurLQKAF30Z12ajViaW2IlgjRlLD8_oeVOQbiBzXPCFJJUUzDM/s1600-h/design_patterns_photo.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107948161335554450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7iB2ni4FXXAmH-jBB-oOkjNsXfFS54HBdsXnNv4NFyN7mRiTKX_a7MDDjLE6iiuqZRo3a7KPfxz9hXvYn9Pth-EE53PurLQKAF30Z12ajViaW2IlgjRlLD8_oeVOQbiBzXPCFJJUUzDM/s320/design_patterns_photo.jpg" style="cursor: pointer;" /></a><br />
<div>
<br /></div>
Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-20668255759649499682004-10-31T23:22:00.000-08:002015-09-08T13:06:27.513-07:00Review: Code CompleteFollowing countless good recommendations on-line, I couldn’t resist the temptation to purchase Steve McConnell’s <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0735619670/qid=1099257714/sr=8-1/ref=pd_csp_1/002-0284274-2580047?v=glance&s=books&n=507846">Code Complete</a>. This thick bible of almost a thousand pages sets an ambitious goal: it wants to be “a practical handbook of software construction”.<img align="right" border="0" /><br />
It should be emphasized right from the start that this book does not teach how to create software. It does, however, attempt to teach how to create software <i>well</i>. Assuming the reader is a fairly experienced programmer with at least a few programming languages under his or her belt, the book covers a staggering area that includes good requirements and design specification, how to weigh competing goals, software testing, and how to use all of the different programming language features in a way that promotes readability and maintainability. There is even a chapter on personal character!<br />
More than anything, the book drives home the message that the over-reaching goal of software design is <i>managing complexity</i>. The goal is always to create abstractions and modules that allow developers to focus on as small segments of the code as possible at any given time. A number of interesting design metrics are introduced and the book covers virtually all ways that code can be structured, and comments on different approaches from a variety of perspectives.<br />
The book relies heavily on scientific studies of real-world software development projects to determine what practices work best, exposing highly interesting statistics about the efficiency of different development and testing approaches. Usually pragmatic in his advice, McConnell emphasizes readability over “clever code”, and explains his preference for making simple designs and document them well, over complicating a design to maximize run-time performance or future flexibility. The importance of doing things right from the start, as opposed to leaving bugs and design quirks for discovery further down the chain when they are an order of magnitude more expensive and difficult to fix, is emphasized repeatedly.<br />
While reading through the book, I found the majority of advice to be self-evident, much of the rest to be highly interesting and thought-challenging, and a small portion to question whether it was I or McConnell that had gone completely crazy. Some of advice in the latter category is cleverly left in a somewhat religious, isolated chapter about coding layout and style which the authors recommends avoiding if you have high blood pressure. The code samples in the book are in C++, Java, C#, and Visual Basic, largely evenly distributed among the languages except for samples in C# which is a recent addition to the book with this second edition.<br />
I had high expectations for this book and found them largely satisfied. I did not really expect the book to provide revolutionary new insight, and it doesn’t — what it does offer are many bits and pieces that are valuable when combined. Most of the issues touched on are things that I had previously thought about at one point or another, but I found it highly satisfying that so many of them were listed in this book together with in-depth investigations and argumentation.<br />
I would like to have seen a little more in-depth treatment of some topics, like software testing in general and unit testing in particular — however what’s there is still plenty, and the book ends with a comprehensive bibliography for further reading. All in all, I consider this money well spent.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com1tag:blogger.com,1999:blog-6300697131424827002.post-27493523218645048992004-09-19T23:04:00.000-07:002015-09-08T13:08:11.591-07:00Java Still the Ugly DucklingI had <a href="http://blogs.sun.com/roller/page/jeffdillon/20040610">heard</a> that the Windows look and feel had been improved in the more recent releases of <a href="http://www.java.com/">Java</a>, so I decided to <a href="http://java.sun.com/j2se/1.5.0/download.jsp">download</a> the developer’s kit for the Java 1.5 Release Candidate and have a look myself. In the true JDK tradition, a number of impressive samples accompanied the kit. The 2D sample demonstrates smooth animation, clipping, composition and a number of other effects.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidhMmjoaSn732DcRQkazo-TxE6ZjPRdir2gNz13Dr7Hyjede4ZayoqDtjVActizR1bJoPDvDni_-sxpY6t6UADJw9lorkLhKStB4XgBVk6teW1QBkwGWsgCDTyjPdcSZ6JsN4G3ql1hLw/s1600-h/java15rc_2d.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107946035326742866" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidhMmjoaSn732DcRQkazo-TxE6ZjPRdir2gNz13Dr7Hyjede4ZayoqDtjVActizR1bJoPDvDni_-sxpY6t6UADJw9lorkLhKStB4XgBVk6teW1QBkwGWsgCDTyjPdcSZ6JsN4G3ql1hLw/s320/java15rc_2d.JPG" style="cursor: pointer;" /></a><br />
<br />
The old Swing set demo was also present. Curious about graphical and behavioural changes, I quickly selected the Windows look and feel to see what, if anything, had changed.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp44tQOSciIdtoybsOOhXKUGli1n-qHZqVjclNgyi9xIriaPXd4xIf_b5JnybbiSKrQGY705mHDBCLAhSoJ31WWFoYb7VmszA3to8yFDUosyJhDnYq7OBle4YuzSq6-V6DdRjXCVDzOcA/s1600-h/java15rc_swingset.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107946202830467426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp44tQOSciIdtoybsOOhXKUGli1n-qHZqVjclNgyi9xIriaPXd4xIf_b5JnybbiSKrQGY705mHDBCLAhSoJ31WWFoYb7VmszA3to8yFDUosyJhDnYq7OBle4YuzSq6-V6DdRjXCVDzOcA/s320/java15rc_swingset.JPG" style="cursor: pointer;" /></a><br />
<br />
At first glance, the interface looked a lot like other Windows XP applications. However, menus did not render with the user-selected effect (in my case smooth fading), and MDI child windows felt slow to move around. This suggests that Swing retains its custom drawing routines and still does not map to the standard Windows controls. I think this is unfortunate, because nothing annoys me as much in user interfaces as applications that just don’t quite “feel right”.<br />
I know a lot of people feel that the Swing library was <a href="http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html">over-engineered</a>. I was never particularly bothered by the class design in Swing — on the contrary, the flexibility and elegance appealed to me. I think if Sun would have aimed for an ambitious mapping to the Win32 API right from the start (I do not count AWT as “ambitious”), they would have had a winner on their hands. As it is, I feel like they missed the boat. I’m not going to weep anymore about what could have been, and should have been. Instead I’ll just continue happily using <a href="http://www.microsoft.com/net/">the .NET Framework</a> whenever and wherever I get the chance.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com1tag:blogger.com,1999:blog-6300697131424827002.post-36688938250934419952004-09-09T23:12:00.000-07:002015-09-08T13:14:34.504-07:00Good Bye, FreeBSDA few weeks ago I replaced FreeBSD on my old server box (Pentium II 350 MHz) with the first test release of Fedora Core 3. FreeBSD had been serving me very well for years, happily protecting my Windows machine with its native firewalling and NAT capabilities, as well as providing limited server functionality with virtually no downtime (the occasional power outages provided the rare exceptions).<br />
<br />
Meanwhile, the open-source alternative to Microsoft’s .NET framework, Mono, had been making steady progress. It had finally reached a stage where I felt it deserved serious testing (read: playing with). Unfortunately Mono is not well supported under FreeBSD due to some architectural issues that I’m not familiar with in detail. Thus, it seemed my only option was to explore a Linux based distribution.<br />
<br />
Having used Debian briefly in the past, I felt tempted to select that operating system again. However, Debian in my experience required quite a lot of time to set up in a satisfactory way, in part due to the ever-present package dependancy nightmares that most Linux distributions suffer from in varying degrees when complex software packages like desktop environments enter the picture. I decided, instead, to give the latest Fedora Core release a test run.<br />
<br />
I downloaded the DVD and burned it — the installation went flawlessly, and I was greeted by a nice graphical login screen. Although I’m a bit of a KDE fan, I decided this time to install only GNOME to conserve disk space. GNOME is, I believe, better supported under Mono at the present time than KDE is.<br />
<br />
As you may be aware, Fedora Core is a popular community developed operating system based on Red Hat. Back in the days of the last Red Hat releases, a decision was made to improve consistancy across desktop environments by providing default settings and themes in both KDE and GNOME to deliver a uniform user experience. This is something I took issue with and I am still not entirely happy with this decision, even though in general I applaud efforts to improve usability and consistancy in Linux. Nonetheless, as this was to be my server box — sitting alone in a cupboard — the user interface was of minor importance.<br />
<br />
Fedora Core provides a number of useful applications for configuring common services, such as Samba and FTP. This went fairly well. I had no time or desire to learn how Linux managed firewalling (having invested significant time doing the same for FreeBSD once), and chose to use the excellent graphical configuration tool known as Firestarter. It provides nice wizards and dialogs to configure IP masquerading (NAT) as well as packet filtering. As Firestarter launched, it output a message in the console from which it was launched to the effect of having detected NETFILTER. I was somewhat concerned that this was a non-standard firewall tool, but as was pointed out to me, iptables is actually used for the filtering. Within a matter of minutes, the firewall was configured the way I wanted to (with appropriate port forwarding) and Firestarter had automatically modified the rc.d init scripts in order to auto-launch during each boot-up. After minor hurdles, I also had Samba up and running for easy file sharing between my Windows XP machine and my FreeBSD machine.<br />
<br />
I was now anxious to install the software I was interested in — Mono, in particular. I initially tried the traditional route; using rpm. I had downloaded all of the Mono packages and tried to install them one by one. Unfortunately, my worst fears came true — a number of packages were missing and the installation could not continue. I then discovered another option for package management which had surfaced on this platform in recent years — YUM. YUM is an automatic package dependancy resolver and downloader. With minimal effort, I was able to download Mono from their YUM repository. The next step was downloading MonoDevelop to provide a somewhat nicer interface to Mono and its documentation. Unfortunately a dependancy problem surfaced again, but after a quick Google session I was able to find a solution (which involved re-installing the Mono packages — again, using YUM). I finally had Mono up and running and could not resist compiling an Hello World application and try to run it in Windows. It worked flawlessly! I then tried the opposite — compiling another Hello World in Windows to run it in Linux using the Mono run-time. That, too, worked great.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7JQyy4-X6k_e0ZYuxg3j6ov1l9gNUBikEIc8nU3I7P7B74SDD0tKMVrCsCK6cuE5XQKE2715SKSzNiMfy_W74SUX2Rg68qFrpuhccutVPoOQXp-TEKW54WpN233R-NLzDkked-ZjVnzI/s1600-h/mono_cross_compile.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5107944587922764098" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7JQyy4-X6k_e0ZYuxg3j6ov1l9gNUBikEIc8nU3I7P7B74SDD0tKMVrCsCK6cuE5XQKE2715SKSzNiMfy_W74SUX2Rg68qFrpuhccutVPoOQXp-TEKW54WpN233R-NLzDkked-ZjVnzI/s320/mono_cross_compile.gif" style="cursor: pointer;" /></a>Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0tag:blogger.com,1999:blog-6300697131424827002.post-64874793331182042752004-09-08T23:15:00.000-07:002015-09-08T13:09:10.081-07:00Layout HurdlesI first read about <a href="https://www.blogger.com/null" xhref="http://www.myxaml.com/">MyXaml</a> months ago on <a href="https://www.blogger.com/null" xhref="http://www.osnews.com/">OSNews</a> (the successor to the great <a href="https://www.blogger.com/null" xhref="http://www.bebits.com/app/2680">BeOS</a> related news site). It’s an open source effort to provide an <a href="https://www.blogger.com/null" xhref="http://www.w3.org/XML/">XML</a> based object instantiator similar to Microsoft’s upcoming <a href="https://www.blogger.com/null" xhref="http://www.xaml.net/">XAML</a> (to deput in the next Windows release <a href="https://www.blogger.com/null" xhref="http://msdn.microsoft.com/longhorn/">Longhorn</a>). Although MyXaml is not tailored to work with any particular types of objects (as long as they follow <a href="https://www.blogger.com/null" xhref="http://www.myxaml.com/support/faq.aspx#controls">some rules</a>), it was primarily devised — as was its inspiration XAML — for use with user interface specifications.<br />
<br />
I have not yet played with MyXaml but I am delighted that we do not have to wait for Longhorn to use XML in .NET applications. However, it’s quite tedious to have to keep track of the absolute position and size of controls. Something that really stunned me was the fact that Microsoft chose not to include tools for dynamic layout management, similar to those provided by countless frameworks before such as AWT/Swing in Java, <a href="https://www.blogger.com/null" xhref="http://www.sasg.com/mui/">MUI</a> and <a href="https://www.blogger.com/null" xhref="http://amiupdate.8m.com/bgui.html">BGUI</a> in <a href="https://www.blogger.com/null" xhref="http://www.gregdonner.org/workbench/">AmigaOS</a> and <a href="https://www.blogger.com/null" xhref="http://www.mozilla.org/projects/xul/">XUL</a> in <a href="https://www.blogger.com/null" xhref="http://www.mozilla.org/">Mozilla</a>. Those frameworks allow developers to specify the relative position and size of controls in a cunning way — by grouping controls into nested hierarchies where special layout managers manage child controls. Java’s <a href="https://www.blogger.com/null" xhref="http://www.iam.ubc.ca/guides/javatut99/uiswing/layout/border.html">BorderLayout</a> is a particularly powerful example — by nesting objects managed by this layout manager, it is possible to specify a user interface of almost any complexity.<br />
<br />
In early 2001, as part of an engineering <a href="https://www.blogger.com/null" xhref="http://www.robertb.eu/img/exjobb/exjobbsrapportfinal.pdf">thesis</a>, I set out together with <a href="https://www.blogger.com/null" xhref="http://www.vitberget.net/">a friend</a> to create the under-pinnings of a simple platform-independant widget library with dynamic layout facilities (with proof-of-concept implementations provided for Windows and <a href="https://www.blogger.com/null" xhref="http://www.apple.com/">MacOS</a>). We decided at the time to call the library <em>BORG</em>, for <strong>B</strong>asic <strong>O</strong>bject-oriented <strong>R</strong>esponsive <strong>G</strong>raphics (the name was <a href="https://www.blogger.com/null" xhref="http://en.wikipedia.org/wiki/Borg">not at all</a> inspired by <a href="https://www.blogger.com/null" xhref="http://www.startrek.com/">Star Trek</a>, we promise!).<br />
<br />
I feel tempted to dig up the old <a href="https://www.blogger.com/null" xhref="http://www.robertb.eu/img/exjobb/src.zip">source code</a> and provide similar layout managers for <a href="https://www.blogger.com/null" xhref="http://www.microsoft.com/net">.NET</a>. I have a feeling that something like that, together with MyXaml, could be a killer combination. Thankfully <a href="https://www.blogger.com/null" xhref="http://www.microsoft.com/">Microsoft</a> has had the foresight to <a href="https://www.blogger.com/null" xhref="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolclasslayouttopic.asp">provide hooks</a> for layout management in the .NET framework.Roberthttp://www.blogger.com/profile/04316534641320681704noreply@blogger.com0