Review: ASUS F3Sg Laptop

Around the end of the last financial year, I decided it would be a good idea to buy myself a laptop. So I did. I originally wanted a cheap Compaq one, simply because of it’s cheapness. But my local computer shop didn’t have any in stock. So I got an ASUS F3Sg instead. It costs about AUD $1300, and it’s pretty decent. Here’s why.

ASUS F3Sg Laptop

I’m not exactly a fan of the styling of recent ASUS laptops, and this one is no different. It’s very grey… and has holes and shapes that are perfectly designed for nothing, except getting biscuit crumbs in them. Out of the box it also comes covered in useless Intel, Nvidia and Microsoft stickers (some of which I still haven’t been able to remove). As far as bad points go though, that’s pretty much it.

To start off the list of good points, I’ll start with the screen. It’s a 15.4″ widescreen, with a resolution of 1440×900. That’s as good as the 19″ monitor sitting on my desk, and with the decreased viewing distance, it’s just as usable. I certainly wouldn’t like it any larger, as it would then be quite difficult to get into my laptop bag (and to carry around generally).

The internals also match up to my (still pretty new) desktop. 2 GiB of DDR2 memory, a Core 2 Duo processor running at 2.4GHz, and a 250GB hard drive are all very respectable. The NVidia 9300M graphics chip plays Counter Strike: Source well enough to be comparable to the 8800GT in my desktop. That said, CSS isn’t one of the latest games anymore. I fear that Call of Duty 4 would stress it a bit too much.

Multimedia is okay. The onboard speakers are utter rubbish, but then those that come with laptops generally are. The audio chip is decent, as sound quality improves immensely when a pair of Sennheiser headphones are plugged in. The laptop has an onboard microphone, but I haven’t used it. Any attempt to use it for Skype would likely result in the glorious sound of feedback.

The F3Sg also has a webcam built into the screen. Quality is fine, though when I used the driver that Windows Update found for me after a fresh install, the picture was upside down. The other nice feature this laptop has is a built-in digital TV Tuner. Apart from the fact that Sesame Street has gone downhill, I don’t have much to report on that… it’s fairly ordinary, and suffers from the same problems (bad reception, worse content) that all other TV tuners suffer from.

Battery life is around 2.5 hours on the most conservative setting. Compared to the 5 hours an old G4 iBook of mine used to do, this is pitiful. But the iBook had nowhere near as many goodies. The F3Sg also burns a hole in your pants if you actually use it as a laptop, so it’s best to use it on a table. At 2.95kg, it’s just in the region of being carryable without breaking your shoulder. The large screen (and large battery to compensate) would be the cause of this.

As with all out-of-the-box computers, the included software on all ASUS laptops is sub optimal. Offerings include Nero, Norton Internet Security, and other such horrors. One thing I can say is, though, the drivers are rock solid. In two months I’ve never had any bluescreens or crashes, which is a miracle for a Windows-based machine.

To sum up: As far as Windows-based laptops go, this one is really good. I certainly wouldn’t have it over a MacBook Pro, but then, no sane person would. It has enough power to do all the things I want, and still remains light and small enough to carry to and from work. The only real downside as far as usability is concerned is the battery life. 4 Stars.

My Operating System Design.

I’ve been getting back into developing my operating system lately, spurred on by the tutorials I’ve been failing to write (if anybody does want them, email or leave a comment, and I’ll try and get around to them faster). I’ve got to the stage (or at least, I think I have) where I need to make a few of the important design decisions. So in this post, I’m going to discuss them.

The operating system release I made back in January doesn’t really represent the current state of what I’ve done. Firstly, I’ve set up Bochs on my PC (and Qemu on my iBook at school), so that I can test my system without having to have extra hardware on hand. I’m currently in the middle of writing drivers for video and keyboard, so that you’ll be able to use the system without a serial cable and an extra PC. But that isn’t really the design of my operating system, more just what I’ve previously done.

Over the time I’ve been writing this OS, I’ve been led in two different major directions to take my operating system in. The first, and more standard, direction is to create a modular microkernel, stick a whole heap of drivers on top of it, add a GUI, and call it Windows (or not). The second direction, and the one I think I am finally leaning towards, is to create a distributed operating system. There have been a few of these in the past, the most famous being Plan9 (and yet 99.9% of computer nerds have still never heard of it).

A distributed operating system is basically one in which each computer acts as part of a larger system and shares resources with the other computers. Resources could be processing time (one computer’s threads might run on another computer), hard disk space, network time servers, or anything, really.

What’s great about this is, assuming the user’s home computer is connected to the network, a user can sit down at any computer on the network, log in, and have exactly the same interface and files as if they were at home. They could even start a process running, log off, let the other computers on the network process it, and log back in again to get the results. Of course, there becomes an issue if nobody leaves their computer idling to run other people’s tasks.

Not all computers are created equal. Some might be 32bit, some might be 64bit. Some might be a Celeron 366 running in my bedroom, some might be multiprocessor servers in a data centre. And assuming they can all run the same software is probably not a great idea. For that reason, I’m going to implement a scripting language, and all the processes are going to be interpreted by all the peers in the system. No native code, except for the kernel, will be running.

This scripting language is going to be something along the lines of Lisp. This is one of the reasons I’ve been trying (and failing) to write a Lisp interpreter. I’m choosing Lisp because if I can implement both code and data using the same object model, it will make it simpler to transfer code and data between peers, I’ll only have to code one transfer mechanism. I also happen to like the idea of Lisp a lot, despite not having created anything major in it.

I’m not going to be implementing support for a lot of old hardware. I’m not going to bother writing floppy drivers, serial port drivers, or other things like this. The console, the hard drive, and the network are the most important peripheral devices, and the ones I will be concentrating on most.

There are quite a few problems that will need to be ironed out. What happens to secure data? Where does the data go when a node goes offline? How can we check the security of a node? I think by implementing a few checks into the client software, it’s possible to solve most of these problems.

While I realise my dream is a long way off, I hope I can make a move towards such a system being a reality. While I’m away at Kakadu I hope to have a bit of time to think more closely about some of the protocols involved. Now, back to work for me!

The federal budget.

In the last few days in Australia, the federal government and the opposition have been waring over the budget. Seeing as I’m almost 18 (voting age) now, I thought I’d better take some kind of interest in the whole thing.

I’m sort of glad that there is a lot of spending on tertiary education, both by the real government budget and the mock opposition budget. Peter Costello has promised to create an investment fund, the interest gained from which will help fund education. While a hell of a lot of things could go wrong with this, I’m grateful for it, since I’ll probably be heading into said tertiary institutions next year (or at least the year after).

Unfortunately, the budget wasn’t so good on any of the other big priorities. Health didn’t get much additional spending. It needs heaps. Here in my state (Tasmania), the health system is basically in crisis due to lack of staff, which relies on having good funding.

Also, the environment got hardly any spending. If we install solar panels on our roof, they’ll now give us $8000 instead of $4000. Big deal. Really, it’s a nice token gesture, but it’s not going to do anything, because comparatively few people will take them up on the offer. And I bet they know this. None of the big things like Carbon trading schemes, money to build new renewable energy power plants, or anything like that. I only hope they will get introduced in the election campaign. But if they do that, we have no real guarantee that they will actually do it. *sigh*

Other things to get lots of money were the roads (which I’d like to point out are actually perfectly safe if you drive at the right speed), and childcare. Worthy causes to be sure. But that money spent on roads could be spent on health or the environment, and make a lot more difference. Not trying to be hurtful here, but people are always going to find ways to kill themselves on roads, no matter how much you spend on making sure they can’t.

But there we go. More pork barrelling. w00!

My thoughts on Internet forums.

Recently, while I was on IRC talking to a few people, TheSkorm mentioned that he doesn’t join Internet forums. I, on the other hand, spend a lot of time reading different forums, and replying to them. Why do I do this? Let’s find out.

A long time ago, in a galaxy far, far away, I started lurking at the old blitzcoder.com forums . They were dedicated to the BlitzBasic language. While the forums aren’t around any more, a lot of people still get a warm fuzzy feeling when they talk about the place. This must have been when I was about 12 years old.

After a few months, I joined. Since that time, I’ve followed the community as it progressed through a series of two or three different forums, all run by respected members of the last community. Blitzcoder closed, and Codersworkshop opened. Codersworkshop closed, and Devcrunch opened. etc, etc.

In addition to the Blitz community, I’ve also joined a few other communities. I’m a member of several private forums, as well as the osdev.org forums and indiegamer.com forums. So that’s the history of my forum usage. But the question still remains. Why do I visit these forums?

In my opinion, probably the most obvious reason for visiting and joining a forum is the sense of community it brings to you (me). The internet is a scarily large and largely scary place, and any human contact we can find helps us to understand and feel more at home in the place. Which brings me to my counter-argument. It is not only forums that give us this sense of belonging and understanding. I, for instance (as mentioned at the top of this post), spend a lot of time on IRC, and IM networks in general. And most people I know who are members on forums also use instant messaging. So this can’t be the only reason.

The other really good reason I can think of is that helping other people out feels good. When you’re on a forum (a technical one at least) a lot of the topics are various newbies asking for help with something. Assuming the post doesn’t ask for help with deciding between Emacs and Vi, they generally get a helpful response. So the good feeling in the heart is what it is all about?

Perhaps not. I visit a fair few technical forums. Most of them (with the exception of osdev.org), don’t really give that much help to newbies. I’m sure there are very helpful technical fora out there somewhere… In any case, you can usually ask for and get help on IRC as well. Freenode‘s technical channels are second to none in terms of help. The only benefit with getting help on a forum is that generally the posts are kept there forever, whereas IRC is fairly impermanent.

So why I do visit forums? I don’t know. What I do know is, if I spent as much time on all my forums as I used to on the old blitzcoder.com forums (when I had all the time in the world, almost literally), I wouldn’t have very much time left anymore. I’ve had to abandon reading a few forums in order to have enough time to read the others.

And the strangest thing? I don’t even use BlitzBasic any more. But that’s where I spend most of my forum-reading time.

Lisp Interpreter

I’ve begun work (say… about 8pm last night) on a piece of software that even after one day, I’m very proud of. It’s a Lisp interpreter.

Lisp, as some of you might know, has an incredibly simple syntax that makes it great for writing interpreters for. So that’s what I’ve been doing. At the moment, my software can take an S-expression from either stdin or a file, and create a syntax tree. It can also print out said syntax tree into the original S-expression.

I’m now fleshing out the details on how I want the core of the interpreter, the Eval() routine, to work. I’ve decided I want to use a Forth-like system of primitive and non-primitive words. So identifiers in my symbol table will point to either a syntax tree, which can then be Eval()ed further, or to a machine-code routine.

The hard part about doing things like this is getting machine code loaded into the interpreter system. I’ve come up with a few methods to do this:

  1. A dynamically linked library (.so / .dll) with symbol table entries pointing to their addresses within this library. If I do it this way, I can create a new library of routines without having to create a new interpreter binary. The only problem is, I don’t know how to create dynamic libraries.
  2. Vaguely the same idea as a dynamically linked library, but not using the proper method. That is, compile down to machine code and store the routine in a file with a format of my devising. I think I could do this, but I can’t remember from my operating system knowledge whether it will let me execute code in a data section (which is where the loaded file would be stored).
  3. Compiling the library right into the interpreter. I don’t really want to do this, but I will if I can’t get the other two to work. It is however, the easiest.

I’m looking for people’s input on how they think I should do this. I really have no idea. I can see a lot of flaws in all three methods. So maybe I am missing something.

I’ve learned a lot already. Namely:

  1. If you’re writing function that returns a linked list and it isn’t working, make sure return(List); is written in the function somewhere.
  2. Segmentation faults are never fun. Neither are syntax errors.
  3. English Breakfast tea along with Breakaway chocolate is great. But not in the same cup at once.

Hopefully I can decide what I want to do. If I can, expect a primitive release sometime in the next week or so.