Quote:
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
Singaporeans are not annoyed by their arrival, but the overwhelming numbers and sometimes having to play second fiddle to them.
AN ELECTRONICS firm that advertised last week for a "preferably non-Singaporean" engineer has added fuel to a worsening controversy in this migrant city.
It particularly stipulated that "permanent residents are welcome" to apply for this "mid-career job (salary negotiable)".
A copy of the advertisement found its way onto the web.
Applicants should have a diploma or a relevant trade certificate, with 3-5 years' work experience, and "preferably non-Singaporean (PR welcome)," it added.
This provoked strong reactions from Singaporeans who are already upset at the large number of foreigners allowed to work here.
One asked if such discrimination is legal. "This sort of ad would have landed this company in heavy trouble in most developed states," he added.
Another writer said: "Now we know where we stand. The policy has downgraded Singaporeans to below foreigners."
Archilles said: "I feel left out by my own government, which is desperately trying to attract foreign talent (and) overlooking our own 'local talent'. It's sad, very sad!"
A similar storm broke some years ago when another company told a fresh Singaporean graduate during a job interview that his chances were slim if he had to report for annual reservist duty.
"We prefer a foreigner who has no such obligations," the executive had added. Besides, they are much less costly to hire.
The reservist withdrew his application in disgust.
This is not just another act of public whining. The fact is many Singaporeans are no longer sure about their own role or entitlement in society.
In recent years, the rate of entry has increased sharply as the economy flourished. Every year some 100,000 foreigners have been arriving, putting pressure on what was already one of the most competitive and over-crowded cities in Asia.
The controversy couldn't have come at a worse time when the country is emerging from a severe downturn and the people's uppermost concern is getting — or retaining — their jobs.
Last month Seagate (worldwide: 10,000 workers) moved out its manufacturing capacity, retrenching some 2,000 workers. "It is difficult to imagine the impact of Seagate's loss on our economy," said commentator Harrison Goh.
Its departure, he added, may have marked the end point of Singapore's involvement in the global manufacturing market.
"It spells a deepening crisis that most Singaporeans may not yet fathom, thinking that the PAP government has a ready solution."
It is within this context that the unpopularity of the open door policy becomes apparent.
Political leaders are now working hard to reassure embittered Singaporeans that their interests would always come first.
Prime Minister Lee Hsien Loong announced last week that his government would reduce the inflow of foreign workers to maintain the "tone" of society. He gave no numbers.
At the same time, his Community, Youth and Sports Minister assured polytechnic students: "You have a birthright. Everything we do is for your long-term benefit. Foreigners are here to help make Singapore more viable and competitive."
The other side of the coin is equally stark.
With 1.28 babies per couple, Singapore's birth-rate is one of the lowest in the world and threatens its long-term survival.
Singaporeans are also ageing rapidly, which may require young people to pay higher taxes to look after them.
Both defects are already being felt in a manpower-short economy, which requires immigrants to correct, according to officials.
"Companies have been coming to us to ask 'where are the workers, we can't get them'," a government official said.
Singaporeans, being descendants of immigrants themselves, have never been antagonistic to the presence of foreigners here — until now.
What they resent is not their coming, but the overwhelming numbers, which they feel are threatening their jobs and education opportunities.
They are also angry with uneven policies that benefit foreigners more than locals, especially national service (compulsory two years) and the subsequent annual reservist call-ups, a burden not borne by foreigners.
Permanent residents are exempted, but their children are not.
Not having to meet reservist call-ups and cheaper wages are powerful attractions for employers to hire foreigners, particularly in a weak economy.
Complaints have increasingly come from older or mid-career Singaporeans who have been replaced by lower-cost younger workers from China or India.
The foreigners, hungrier and without family responsibility here, generally work longer hours for less pay — something that married Singaporeans with a home mortgage to pay cannot possibly match.
A small industry has risen to recruit them in large numbers — as indicated by a recruitment agency, with this advertisement: "Do you find it difficult and expensive to hire local staff? Why not consider hiring foreign talents?"
Claiming it was licensed by the Manpower Ministry, the agency said that it had recruited thousands of workers from China, India, Vietnam and Malaysia for Singapore firms in the past five years.
Every time such an ad appears, it cuts into the popularity of the government, which won 66.6% of the popular votes in the 2006 election.
Several months ago, the government ordered its election machinery to prepare for a snap election in case one is called.
With the improvement of the economy, it is widely expected that it will take place next year, instead of 2011 as scheduled. The public discontent against massive immigration promises to be one of the hottest campaign issues if it happens.
This intensity of public feeling has been too sensitive to be reflected in the traditional media, which has toned down the coverage.
On the Internet, however, where Singaporeans can air their grievances, the mood is more sombre. It probably requires more than mere government assurances to placate.
Population Trends 2009 report just released by the Department of Statistics: 3.2 million Singaporeans, 0.53 million PRs, 1.25 million non-residents.
I posted this in a forum:
Whether you have good experience or not with upgrading Windows depends a lot whether you have the HW drivers, I think.
When I upgraded from Windows 3.11 to Windows 95, I didn't have drivers for my graphics and HD. So, no accelerated graphics. I needed a driver for my HD because my BIOS did not support partitions over 504MB natively. (I can't remember the details.)
So it wasn't a pleasant experience. However, Windows 95 looked way cooler than Windows 3.11 and was clearly the way to go. We are still using the same interface today, 14 years later.
I upgraded to Windows 98 without a problem. By then, I had gotten new hardware that had Windows 95 drivers. (Windows 95/98 are in the same family.)
A few years later, I watched a colleague struggle with Windows 2000 on his P-II (233MHz?) with 64MB RAM. It swapped to the HD constantly. I had a better experience — on a P4 2.4GHz 512MB. I remembered it as a slimmed-down XP. (W2k was considered bloated when it came out. Now it's slim. Same for XP.)
IMO, Windows 2000 came out at the wrong time. It was too resource intensive and required new drivers. Anything that requires new drivers will usually spoil your day.
When Windows XP came out, most HW already had Windows 2000 drivers — even though W2k itself wasn't popular for home use — so it was much less problematic . For example, I got a notebook a few months before XP came out. It was running Windows ME, which I found okay. I was able to upgrade to XP by using the W2k drivers. (I'm still using the notebook today. :-O)
Then we were in an unusual period of stability for 5 years. (Actually less, because XP SP2 was a substantial change too.)
Vista, everyone knew the story. It's not just that it isn't ready. It has a new architecture, which means new drivers. Guess what happens when you try to upgrade an existing PC?
Two years down the road with W7, everything is fine again. I'm able to upgrade my notebook from Vista to W7 using the Vista drivers.
Just a note. It used to be very simple to upgrade a PC part-by-part. Now, the technology obsoletes so fast that you can never get parts for your old PC.
Is it worth upgrading from a HD-remastered DVD to BluRay for an anime show?
A HD-remastered DVD, as its name implies, is remastered from film (or the best source) at HD resolution, cleaned up and only downsized to DVD's resolution at the last step. It also generally maxed out the DVD's video bitrate (~9.3Mbps).
In the past, I was skeptical when HD-remastered DVDs came out. A DVD is a DVD: it is still constrained by MPEG-2 at 9.3Mbps. Then I watched a few such DVDs and was impressed — the DVD format can be pretty impressive, just that it is not generally used to its full capabilities.
Personally, I'm skeptical that BluRay has any advantage over a well-done HD-remastered DVD for a simple reason: the animators stopped drawing at a certain size. Even on DVD, it is already obvious some fine details are not drawn.
How about the bitrate? DVD is limited to MPEG-2 at 9.3Mbps (actually 9.8Mbps, but good audio needs a little more space). BluRay allows H.264 at a whopping 40Mbps.
It is well-known that MPEG-2 does poorly at low bitrates. And when it runs out of bits, it shows blocks all over the place. This is easily seen in a paused fast-moving scene. However, 9.3Mbps is not low bitrate. It is hard to believe blocking can be seen in normal viewing — for a clean source. (I also suspect there are many poor MPEG-2 encoders out there, so never say never.)
Also, it cannot be claimed outright that 40Mbps is better than 9.3Mbps. DVD is a mere 720x480. BluRay is 1920x1080 — it has 6x data to encode (1.98MB vs 337.5kB). That means it really only has 6.67Mbps at DVD resolution! Luckily, the H.264 is a very efficient codec. Also, when it run out of bits, it blurs the image. It is much less obvious than blocking.
Having said this, I've seen poorly done DVDs compared to their BluRay counterparts for the same show: EE (edge enhancement) and window-boxing. It is like they expect you to watch the DVD on a CRT TV.
Now, I'll say that the BluRay release will look more crisp. The DVD, having to resize by over 2x, will look soft. However, it will have all the details.
Recently, I had to add right-to-left language support for a website. I
added the dir='rtl'
attribute to <html>
and... (almost) nothing changed.
I was surprised to find that floats, borders, margins, paddings and text-alignments are not reversed, which means we got to override it ourselves:
.left { float: left; } body.rtl .left { float: right; } .pad-left { padding-left: 1em; } body.rtl .pad-left { padding-left: 0; padding-right: 1em; }
This is tedious, error-prone (easy to miss out) and a maintenance nightmare (got to update two styles).
(We generally want all horizontal styles to reverse, save for a few that we
use another style, say .fixed-left
.)
After applying the changes by hand, it struck me a few guidelines go a long way in minimizing the number of overrides:
I call out float
specially because we need to float our
DIV
s a lot. An example:
.cls { float: left; ... } <div class='cls'>...</div>
Change it to:
.cls { ... } <div class='cls left'>...</div>
It will simplify right-to-left support, but it may complicate other handling — we are used to using just one class per element.
Sidenote: if IE 6/7 support inline-block
properly, we could
have reduced float usage by 90%.
First, it should automatically flip the horizontal styles. It should also support fixed variants:
.cls { text-align: left; } .cls2 { text-align: left !fixed; }
Or, it should allow an easy way to flip:
.cls { text-align: left !rtl; }
Lastly, it should allow flipping without respecifying the values:
.rtl .cls { margin: flip-rtl; }
We can actually go through the stylesheets and reverse all the styles,
except those prefixed with body.rtl
.
This can be done on the server or by using Javascript. The Javascript approach will increase the initial page load time and the page will look wrong initially — that is why I'm not keen on it, despite it being a very clean solution.
A colleague of mine was looking for a probe so that he could do some debugging. He was not amused when I suggested he do without one.
While a debugger is useful, people come to rely on it so much that they forgot other debugging techniques.
The simplest is to put some log messages. It may be something as simple
as printf()
.
I prefer to use log messages for a few reasons:
The next step is then to design the log messages properly so that we get all the necessary information with the least messages. (There may be timing or space constraints.)
A debugger is useful during code development, when your code is full of logic errors. It can show you the expected data types and values quickly. It can increase productivity if you have a short compile-and-run cycle — such as in an interpreter environment.
However, I find it inferior to plain old logging when trying to track down a defect, especially one that is not always reproducible.
My CB400F battery has failed me — for the last time. It was on its deathbed, and now it is dead for sure. The rest voltage was 12V. Thinking it was a simple case of disuse (I didn't ride the bike in a fortnight), I charged it and rode the bike to work. However, the battery was flat again in the evening. (Which meant I had to catch a bus home.)
When I got the bike two years ago, the battery was already only showing 12.2V. There is only so much life you can wring out of an old battery.
So, I got a new battery. It is simple to DIY. Just got to be careful with the sulphuric acid. :-D
It measured 12.7V out-of-box. After charging, it measured 12.9V. This was done on a biker's advice. He said this would maximize the battery's life.
The story is not finished yet. After plugging in the new battery, I did a sanity check to see if the bike is charging the battery correctly. To my surprise, it showed 17.5V! The rectifier was clearly spoilt.
So, another trip to the parts shop to get the rectifier.
The old and the new rectifier
The old rectifier is SH633-12, the correct one is SH693-12. They are for various Honda bikes. I don't know what's the difference.
The new rectifier clips the charging voltage at 14.1V. Perfect!
(Interestingly, it charges at 14.3V at 2.5k RPM and 14.1V at 4k RPM. Higher RPM does not mean higher charging voltage.)
My guess is that the rectifier died around May. The battery remained usable for a while until it died in June. It was not able to hold its charge since then — because it was not being charged. The rectifier had to be working before that because the battery remained at 12.2V for two years.
The low charging voltage got me thinking. The charging voltage on my YBR is 15.5V. Perhaps the rectifier is spoilt as well — even though I've changed it once before. Maybe that's why the batteries are always spoilt.
This time, I'm going to DIY for sure.
Update (29/9): I remembered wrongly. It is my CB400F rectifier that used to clip at 15.5V. The new YBR rectifier clips at 14.2V.
The haze is back!
Nice sunset, but terrible air quality
It so happened that this is also a time of much burning:
Some people feel we should have the common sense not to make the air worse. I think that it is not so easy to stop a traditional practice.
I used to think the EMAS displays at the expressway entrance are a waste of money, but now I find them quite useful — when they are working.
For example, I was on Adam road, at the PIE entrance towards the east, when I saw the estimated time to Eunos was 45 minutes — the usual time is just 13 minutes!
The EMAS display will also show heavy traffic or massive jam, but I find it more useful to have a quantitative measure.
In addition to the time, the EMAS display should show these status:
This will help drivers who are not familiar with the route.
The AA came out with a new product, the AA Traffic GEM, that can show the traffic condition.
I tried the device at Comex. It is so slow that it is unusable. I'm not talking about updating info from the server. I'm talking about scrolling. Move your finger to scroll the map (like almost every input device today, it is a touchscreen), and the map starts to move five seconds later.
The selling point of this device over a generic GPS is that it can show real-time traffic conditions. But the design is flawed. First, it does not show you the severity of the jam. Second, you need to zoom in very deeply to see which direction the jam is in.
And a member in a car forum puts it best: all roads are jammed during the morning and evening peak hours. There's no need to check. :lol:
I recently bought the R1 remastered DVD version of The Irresponsible Captain Tylor.
How many times have I bought it? Let's see:
You can probably tell I like the show very much. :lol:
I'm not going to buy the OVA this time, because it is not good at all. I may buy the BluRay version in the future, but I'm not convinced the show will look better in BluRay — TV anime just don't have fine details.
Captain Tylor is a very niche show. It's a shame because it has a very good plot and drives one single message across 26 episodes — and does it well. It has a very retro and low-budget look (but it is still nicely animated), so many people don't like it.
Also, the first two episodes are quite boring, so most people made up their mind by then and stopped watching. I always advise people to watch the third and fourth episodes first (they form a 2-episode story) to get a real feel of the show.
The original R1 release is from a composite master. It has very strong EE (edge enhancement) and is very clean looking (meaning it is filtered). It would have looked pretty good if not for the EE.
I believe the R2 release is about as good as it gets. It is remastered from film and is grainy as hell. It looks perfect after a little filtering, though. It, like all other R2 releases, is unbelievably pricey.
The "ultra" release has the exact same video quality as the original R1 release, except it has bonus clips and OST. IIRC, it was supposed to have the remastered video, but things fell apart. It was really a waste of money to get this edition, but I couldn't resist.
The R1 remastered release is based on the R2 release. It looks exactly the same, with grain and splice marks. However, it is encoded for NTSC (with the 3:2 pulldown) instead of progressive (24 fps)! I wonder why.
Captain Tylor is released by TRSI in the US. TRSI is an online anime store. It seems strange until you found out the CEO is a fan of the show — that's why he picked up the show. I don't think the original license was expensive (being a niche show), but TRSI needed to secure 750 pre-orders before they licensed the show. The 750 people were acknowledged in a credits section in the DVD.
The only way to do cross-domain AJAX (XDR) today is to use the
script
tag. The result must be in a Javascript form. No text or
HTML. And you must trust the server — the script has access to
your DOM.
(Stylesheets and IFRAMEs can be cross-domain too, but you can't read their contents from Javascript.)
Right now, there is a XDR proposal. It requires the server to opt-in. I think it is silly from a programming POV. IMO, GET requests should be allowed.
Today, we can actually do XDR using IE. Add localhost to the Trusted Zone and enable cross-site scripting for this zone. FireFox 3 has no such option — leading me to think a future virius/worm attack could be to "patch" the browsers to allow XDR which will then enable malicious scripts.
We can use XDR to massage data the way we want it. Don't like how eBay or Amazon displays or searches? Do a XDR and extract the data!
Let's try it on a forum's member list:
Joined | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 |
---|---|---|---|---|---|---|---|
Active | 1,549 | 899 | 548 | 603 | 1,025 | 3,418 | 1,393 |
2003 | -212 | ||||||
2004 | -187 | -362 | |||||
2005 | -87 | -115 | -228 | ||||
2006 | -61 | -33 | -58 | -240 | |||
2007 | -73 | -51 | -35 | -70 | -391 | ||
2008 | -165 | -68 | -51 | -63 | -197 | -2,207 | |
2009 | 681 | 249 | 159 | 196 | 398 | 1,071 | 1,352 |
Most forums show only the total number of members. I'll rather know the number of active members. Here, we can see the breakdown of members who joined and dropped out over the years. Although there are 9,435 members, only half are still active today.
Also, notice the spike in 2008? They are likely to be bots as the number of inactive members is also very high.
Age/ #Posts | <6M | <1Y | <2Y | <3Y | >3Y | ? |
---|---|---|---|---|---|---|
<1 | 3,717 | 379 | 399 | 78 | 126 | 292 |
<5 | 934 | 202 | 214 | 86 | 206 | 13 |
<10 | 195 | 88 | 110 | 43 | 111 | 5 |
<50 | 168 | 137 | 245 | 86 | 368 | 17 |
<500 | 37 | 57 | 146 | 89 | 531 | 26 |
<2,000 | 0 | 5 | 19 | 11 | 202 | 15 |
else | 0 | 1 | 2 | 5 | 63 | 7 |
(Note: the age here is the difference between the last visit and joined date. It is not today minus joined date.)
So many inactive members! Zero-post members are likely to be bots (but not always; we need to check whether they are active or not). Even after filtering it, we see many "lurking" members. We can also see that only a small fraction of members post a lot.
(Quantity doesn't mean anything. I'm member 100+ and I made just 200+ posts over the years.)
This is just an example what we can do with XDR: the ability to process the original HTML in new ways.
It is actually possible to do XDR today with a server-side XDR proxy. If I need to do XDR more often, I may use this solution. It is the most transparent solution now and always.
Google has its own webpage analyzer: Page Speed (released in June; still in beta). It does essentially the same thing as YSlow, but is more comprehensive. The best is to use both as they interpret the Best Practices differently.
Category | Score |
---|---|
Leverage proxy caching | 100% |
Minify JavaScript | 99.4% |
Combine external CSS | 89% |
Remove unused CSS | 79.7% |
Combine external JavaScript | 78% |
Specify image dimensions | 70% |
Use efficient CSS selectors | 69% |
Leverage browser caching | 50% |
Optimize images | 7% |
Leverage proxy caching: set "Cache-Control: public" so that the files (usually images) can be shared by all users once they are cached by a proxy server. This makes sense, actually. Will consider this.
Minify JavaScript: Page Speed goes one step further and analyzes inline scripts as well. My main page has a little page-specific code that can be minified. Not going to care.
Combine external CSS: under consideration.
Remove unused CSS: 33% unused CSS! Well, that's because I use the same CSS file for almost the whole site.
Combine external JavaScript: under consideration.
Specify image dimensions: not going to do it.
Use efficient CSS selectors: Page Speed is very harsh towards overqualified and descendant selectors. I think it is wrong: we should use such selectors.
Example of a overqualified selector: div.class
. Should we use
just .class
? That means we need to search the whole DOM. Is that
more efficient? (I prefer not to overqualify too, but that's due to
specificity — qualified selectors are difficult to override.)
Example of a descendant selector: ul.class li img
. (Two levels
is considered inefficent. One level is considered good-to-fix.) Page Speed suggests adding a class to the IMG element directly. That
makes the HTML very verbose and we are not making full use of CSS.
(I suspect Google's Chome optimizes for a single-level class selector.)
Leverage browser caching: Page Speed requires the static files to expire one month away to avoid this warning. Google expects you to change the URI when the file changes. Personally, I think this is abusing the caching system.
Optimize images: 52.2kB images can be shrunk by 62.7% to 19.5kB! This is because I requested larger thumbnails than I displayed them. Maybe I should request for exact-sized thumbnails.
YSlow is Yahoo's webpage efficiency analyzer. It is their Best Practices for Speeding Up Your Web Site in a code form. Out of curiosity, I ran it on my main webpage:
Category | Before | After |
---|---|---|
Use a Content Delivery Network (CDN) | F | - |
Make fewer HTTP requests | B | - |
Add Expires headers | F | F |
Compress components with gzip | F | A |
Put JavaScript at bottom | C | - |
Minify JavaScript and CSS | F | A |
Configure entity tags (ETags) | F | A |
Use a Content Delivery Network (CDN): ignored.
Make fewer HTTP requests: will be done in the future. I have several JS and CSS that should be combined. However, it will be difficult to achieve just one file per type.
Add Expires headers: I hesitate to add it because the browser will not send the request at all — I'm afraid of stale files. However, I found that a reload (F5/Ctrl-R) will force the browser to conditional-get, so it is still not too bad.
I set images to expire in 3 days and JS/CSS to 3 hours, but I still get the same grade. (YSlow needs around 2 days and 10 seconds to avoid this warning.) However, I don't want to set JS/CSS any longer than that, although I'll see if it is possible to set longer expiration on selected JS files. jquery.js is almost never changed, for example.
Compress components with gzip: I thought I enabled gzip! Somehow, my Web Host Provider has removed the older mod_gzip module. Now I configured it properly for mod_deflate.
Put JavaScript at bottom: all my JS files are loaded on top. Not going to change this.
Minify JavaScript and CSS: I finally added auto-JS minification (with caching). I'm not convinced it is necessary to minify CSS files — there is not much deadweight to remove. Gzip should be sufficient.
Configure entity tags (ETags): YSlow gives this warning if it finds what it thinks is the inode value (based on the server's ETag format). This warning can be safely ignored, but I disabled the inode value anyway. Size plus timestamp is a strong-enough validation.
The danger of using a grading tool is that we may blindly optimize for it to get grade A. No, a tool is a tool. Use its recommendations only when it make sense.
With the move to the new ez-link card, there will be a $0.25 charge per top-up. The maximum top-up amount is $50, so a daily user will probably top-up twice or thrice a month. It still isn't much, but a precedence is set: paying for convenience. (When it should be the other way round, since they are saving manpower costs.)
Judging from the online reaction, most people will choose to cancel this service. That's what they claim. Whether they'll actually do it or not is another matter.
Even when this service was free, I never found the need to use it. Topping up once or twice a month is almost effortless.
Who would have thought that this simple piece of code contains four problems?
var value; function update(v) { value = v; ... setTimeout("update(value + 1000)", 1000); }
setTimeout()
takes in a function. Most people don't realize we
can wrap complicated code inside an anonymous function:
setTimeout(function() { update(value + 1000); }, 1000);
What is the difference? One word: google.
We use both the variable as-is and a local copy of it. This is dangerous because we may not know we are referring to the same variable!
It does not matter for simple functions, but we are likely to follow the same style for bigger functions and that's where mistakes happen.
Avoid this pitfall in all cases.
setTimeout()
is non-deterministic. We request to delay 1s,
but that does not mean we will actually delay 1s. However, we always
increment by 1,000. As time passes, we will lose sync.
This function calls itself endlessly and it does not provide a way to stop. This may or may not be necessary, depending on the usage.
In this particular case, this function is not designed right. Whenever this page is fetched (via AJAX) and run, a new instance is started — but the old one is still running!
(The code should either stop the old timer or reuse it.)
Sometimes, I'm amazed just how difficult it is to write code that is correct.
Cheats abuse cheap HDB rental flats by subletting units for cash
HOW'S this for a money-making scheme?
Rent an HDB flat, and instead of living there, sublet it for nearly 40 times as much as you pay for it.
That's what one enterprising couple did.
They rented a one-room flat from HDB at Bendemeer Road for just $26 a month.
These flats are intended for the poor and needy.
But instead of living there, they moved in with the wife's parents.
They then sublet the rental flat to two Nepalese students for $1,000 a month.
HDB said it managed to recover the flat in February this year.
The couple have since been barred from renting an HDB flat for five years.
They are among a growing number of rental flat cheats who have been abusing and profiting from the HDB Public Rental Scheme, which is aimed at helping the poor.
The number of rental flats taken back surged from 28 in 2007 to a high of 221 last year, said HDB.
Fewer than 20 flats were seized in 2005 and 2006 each.
In the first half of this year, some 91 flats were recovered. All of them had been sublet by the tenants, said HDB.
It carries out annual inspections on rental flats to weed out abuse or misuse of these flats.
The punishment for these rental cheats?
They will lose the rental flat and will be barred from renting from HDB for five years.
But are these measures enough to deter such abusers?
After all, if these rental cheats are able to sublet the flat, it means they do have alternative housing options.
And one flat taken by an undeserving profiteer means one needy family is deprived of a home.
There are 4,000 applicants on the waiting list for rental flats and many of them have to wait up to 11/2 years to get one.
The number of one-room and two-room HDB flats will go up from 43,000 to about 50,000 by 2012.
Ngee Ann Polytechnic real estate lecturer Nicholas Mak feels that a ban alone is insufficient to deter such cheats.
He said there must be a financial penalty because these rental cheats are making money out of these subsidised flats.
Said Mr Mak: 'They are depriving someone else who needs the flat. These are subsidised flats which are indirectly funded by taxpayers. They are indirectly taking money from the taxpayers.
'HDB should make them pay back the profit they have earned, plus more. If they make $10,000, they should be fined at least twice that amount. This will deter people from doing this.'
HSR Property Group executive director Eric Cheng agreed that more needs to be done to penalise these cheats but added that fines should only be imposed on a case-by-case basis.
He said: 'It's usually the older folks who rent these flats from HDB. And some of them may become jobless and in their need for cash, they rent out their flats.
'It may be illegal but these folks have little choice.'
Only those with an average monthly household income not exceeding $1,500 are eligible for a rental flat.
He cited the example of a 60-year-old who was paying $55 for a two-room rental flat but rented it out for about $600 because he was having trouble making ends meet.
Said Mr Cheng: 'This man works part-time and stays at the coffee shops or workshops that he works at. He's really down on his luck. In this case, it would be harsh to fine him.'
HDB said that it is in the process of reviewing the penalties for illegal subletting.
ILLEGAL subletting of rental flats is an abuse of government subsidies meant to help poor households, said HDB.
These rental flats are heavily subsidised and are meant for truly needy families without other housing options.
Said an HDB spokesman: 'Only a very small number abuse the Public Rental Scheme by illegally subletting their flats.'
HDB said it takes a very serious view of this matter and it has stepped up enforcement since 2007.
'One rental flat that is illegally sublet means one less unit to house a needy family,' said the spokesman.
'Where there is clear evidence of abuse, we will not hesitate to recover the rental flat and re-allocate the unit to a family in genuine need.'
HDB advised prospective tenants who wish to rent a flat in the open market to check with an HDB branch office whether it is an HDB rental flat or a sold flat.
Rental flats cannot be sublet to other sub-tenants.
If it is a sold flat, the owner can sublet the whole flat after obtaining written approval from HDB.
In such cases, prospective tenants may request the flat owner to show them a copy of HDB's in-principle approval or approval letter.
They can also request the flat owner show documentary proof such as agreement for lease or service and conservancy charge or loan statements to verify ownership.
A two-room flat was let by HDB to a man, his wife and three children for $44 a month. During a check, HDB found it had been sublet to a Singaporean and three Thai nationals for $1,200 a month.
The tenant and his family had moved in with his parents. The flat was recovered last November.
A two-room flat was let to a couple for $44 a month. An HDB inspection last September showed it had been sublet to a foreigner for $400 a month.
The tenant and his wife were living with their daughter on Teban Gardens Road. The flat was recovered in November.
A one-room flat was let to a man and his brother for $26 a month. An HDB inspection last November found that it had been sublet to three students from China for $700 a month.
The brothers were living with a cousin. The flat was recovered in December.
A flat was let to a woman and her family for $138 a month. During an inspection in July last year, HDB found it had been sublet to a Singaporean and his wife for $500 a month. The tenant and her family were living with her mother at Woodlands.
The flat was recovered in August last year.
As these poor folks will attest to, rental is a good source of income in Singapore. Many foreigners, at least the first few years they come to Singapore, rent. There is definitely demand.
For the middle-class, there can be three common scenario:
The difference between the first and the second is whether it helps you or your parents.
The third is illegal, but HDB doesn't care. IMO, this is a pretty good move (cavets apply). Keep the HDB flat when you upgrade. Think twice if you need to sell to upgrade.
How common is the third scenario? Just think. If the HDB flat is wholely rented out, where do you think the owner is living? (You can only "own" one HDB flat at a time.) And whole-unit rentals are very common.
Cabbies take legal action against cab company because 'bonus' is not 'real bonus'
FIRST, he had a problem when he wanted to upsize the compressed natural gas tank of his taxi.
Then, he had a run-in with the cab company over the National Day celebratory stickers he put on his vehicle.
Now, Mr Henry Ho, 53, is embroiled in yet another scrape with the Prime Car Rental and Taxi Services.
Along with 14 other cabbies, he has sought legal help over a dispute with Prime Taxi over 'bonuses' they believed the two-year-old taxi company had promised them if they stayed with it for five years.
The cabbies claimed they were persuaded to sign on with Prime Taxi because of a '$11,000 bonus' they would supposedly receive at the end of their full contract period.
This was indicated in the company's flyers.
'We understood this amount to be a sum of money given to us as a reward, in addition to regular payments,' said Mr Ho.
But the cabbies said they later realised that this amount would come from the 'daily recurring security deposit' of $6.03 they had to pay.
This would amount to $11,004.75 over five years - the length of their contract.
Effectively, this meant the cabbies would simply be given back what they had been paying for five years.
'There is no real bonus at all,' said one of the taxi drivers in the group, Mr Adrian Chew, 52.
Frustrated by what they thought was a false promise, the 15 cabbies sought legal help in June.
They gathered at Emily Hill yesterday to air their grievances, accompanied by their lawyers from the Samuel Seow Law Corporation.
The cabbies stated what they wanted: Either a full refund of whatever amount they have paid so far, or a bonus that was not from their own pockets.
Lawyers Kelvin Lee and Samuel Seow said they had not been able to reach an agreement with Prime Taxi yet.
Mr Ho added: 'The company keeps telling us that since we have signed the contract, we should honour it.'
Prime Taxi's general manager, Mr Tan Soon Chye, told The New Paper that the daily recurring security deposit of $6.03 was clearly stated in the contract, and all other terms and conditions were 'carefully explained' to potential cabbies.
'These cabbies knew very well what they were getting themselves into before they signed the contract,' he claimed.
'Anyway, by collecting the $6.03 daily, we are actually helping the cabbies to save,' he added.
The cabbies, however, disagreed with Mr Tan's explanation.
'We were rushed into signing, and we did not even receive a copy of the contract upon signing it,' claimed Mr Chew.
Said Mr Seow: 'Most taxi-drivers are not very well-educated. Many of them cannot understand the contract's specific terms and conditions.'
But Mr Tan insisted that the cabbies have not been unfairly treated.
'We are not pocketing the money, because we will eventually return the money to them,' he said.
Asked why the company used the word 'bonus' if the money was a deposit being returned, he said: 'This is the way we have chosen to call it. This is how we market our products.'
Two other local taxi companies The New Paper spoke to do not have clauses like Prime Taxi's daily recurring security deposit, and they also used the term 'bonus' according to its more commonly understood definition.
TransCab Services' general manager Jasmine Tan said 'bonuses' in the form of monthly and yearly incentives are given to cabbies who perform well, and who pay their rental on time.
'We also give them cash rebates and free rentals,' she said.
A ComfortDelGro spokesman said the company's idea of a 'bonus' comes in the form of an enhanced benefits package, which includes no claim bonus, loyalty incentive, rental free days and performance incentive.
These benefits all come in the form of monetary rewards, and those who are constantly among the top performers for five consecutive years will earn for themselves a complimentary overseas trip.
I can imagine the taxi drivers' faces when they realized they had been tricked.
There is no free lunch in the world. You have to ask where the money comes from. Sadly, it often comes from the client. I find it amusing that the company actually admitted there is no actual bonus at all.
Quote Of The Year: "We are actually helping the cabbies to save." :lol:
Christopher Tan discusses the frayed nerves surrounding a recent news leak.
NEWS of the enhanced off-peak car (OPC) scheme is probably talk of the motoring town now.
But an unfortunate incident leading up to the announcement of the new and improved scheme — designed to persuade car owners to convert their rides to red-plates — proved to be far more exciting to the newsroom last Friday night.
It all began at a closed-door briefing for journalists held by the Land Transport Authority on Friday afternoon. It was to allow beat reporters to understand the upcoming changes to the scheme and to ask questions.
The announcement itself was to have been made public by none other than Transport Minister Raymond Lim at a ministerial visit two days later on Sunday.
But that was not to be - no thanks to a mysterious and virulent news leak, which happened despite all precautions.
Before the LTA briefing started, reporters were instructed clearly that the news was strictly embargoed until after Minister Lim had spoken. No one was supposed to call motor industry players for comments, in case they inadvertently informed them of the changes.
We were also told that we could not bring any recording devices into the briefing room. That meant no cameras either.
The briefing went reasonably well and reporters returned to give a rundown to their respective newsrooms and supervisors.
But by around 8.30pm or so that same day, the entire news release detailing all the changes appeared online.
The Straits Times was alerted to the leak by someone who spotted it on an online car forum, which had a direct link to an LTA site.
Within the hour, the entire motor trade — as well as a large part of the car forum community — had learnt of the changes. One senior motor trader even called up reporters to ask if they had heard of the new scheme.
The Straits Times newsroom was shocked, and everyone scrambled to find out what had happened and whether the news should then be run the next day (Saturday) as the leak had already spread far and wide.
The LTA was equally shocked. It could not explain how the news appeared on their website. Up until Tuesday, the authority says it was still investigating.
The authority's panic was palpable. After all, the leak had stolen the thunder from a Minister's Sunday speech.
When asked if The Straits Times could run the story on Saturday, LTA initially said no - only to lift the embargo eventually, together with the Ministry of Transport.
That meant that the media could release the news on Sunday. It also meant that Minister Lim did not have a biggish announcement to make during his Sunday ministerial visit to Bukit Panjang.
Mr Lim was gracious enough to agree to the embargo lift. Fortunately, he had another announcement up his sleeve: An update about the Circle Line.
Many of us (at least those of us in the newsroom) laugh about the fiasco now, but it caused real tension on Friday with just hours to go before deadline. The episode also underscores the impact of online information — once again.
In the past, news leaks were relatively mild — one could only rely on phones and the coffeeshop. But with the Internet, a leak takes on a life of its own. Within minutes, it is literally all over town.
Unless the LTA finds out how this one happened, it quite possible runs the risk of an encore down the road.
This is big. Will the Government slap the leakers with the OSA? Don't play play.
There were already rumours a week earlier. Then, speculations trickled in over the week — some turned out to be dead accurate, I must say.
Even on Friday, the news appeared on LTA's website only to disappear shortly later. Too late, someone saw it and the news spread like wildfire.
TBD.
In a local car forum, one car driver said he was fined on five occasions — $70 each time — when he parked in front of the Queenstown library. He was fined on the 4th, 5th, 14th, 15th and 17th, but the letters were delivered in one batch on the 21st.
I passed by the library once in a while (Margaret drive is a nice "longcut" between Alexandra road and Farrer road) and there is always a line of cars parked in front of the library.
Is there a lack of parking? No. There is an open-air carpark just opposite and a MSCP within a stone's throw (literally; you can really throw a stone and hit it).
Rather, I think people rather risk the $70 fine because it is so much rarer than the $6-$30 carpark fine — the parking wardens make their rounds almost daily.
Someone must have been sick of all the cars and complained. Otherwise I don't see why the TP will come to such a rustic place to book the cars.
Anyway, could this be a new tactic by the TP — delay the notification to catch repeat offenders? This gives them the flexibility to ignore isolated offences, if they wish to do so.
I'll know that it works when I don't see any more cars outside the library.
Fresh from LTA! The key changes:
Motorists now have the option of buying the e-Day Licence after using the OPC during restricted hours, as long as they do so before 2359 hours the next day.
2359 hours the next day? The driver has one day grace period? That's mighty generous of LTA. But then, it also means that they will be less forgiving.
With the extended usage, the annual road tax discount will be correspondingly reduced from $800 to $500. The minimum annual road tax will be $70, instead of $50 under the existing OPC scheme.
$300 in exchange for 52 (to 57) half-day coupons ($10 each). It's worth it.
I love the e-Day licence idea! Now you can't display a fake, tampered or almost-fully torn coupon and try your luck. You can be "caught" and not know it. And you have no more excuses because you are given two days to pay up.
And my advice to cheaters: don't drive through any ERP gantries. They are active even when "Not In Operation". If you are paranoid, avoid all ERP/cashcard carparks as well. HDB carparks are confirmed unsafe. GLC-linked malls may be too...
(I suspect the reason LTA gives two days grace period is because it takes them so long to retrieve the data from all their sources!)
Even roads with bus lane may not be safe — the traffic wardens may be required to look out for OPC cars too.
In one word: game over for OPC cheats.
As for the full-Saturday usage, it'll cause more traffic (OPC is 7.7% of the cars' population). More jams and more ERP, I'm sure of it.
Every few years, a new fad will emerge and everyone and his uncle could not get over themselves fast enough to get on the bandwagon. Ten years ago, it was the Internet. Then it was Web 2.0. Today, it is Cloud computing.
Just what is a "Cloud"? I looked it up, and surprisingly, it means the Internet! Because the Internet craze is over, they got to invent a new name to catch people's attention again.
Anyway, fads are good. They bring in the money and projects. They are not necessarily good for end-users (which can be companies) — especially if they have a perfectly working system already. Unfortunately, most people want to keep up with the Joneses, or to be state-of-the-art. Fine, whatever floats their boat.
There is one thing I dislike about Cloud computing already. It is that you lose control over your data. Which inspires me to improvise this Dune "proverb":
He who controls your data controls you!
Originally I wanted to roll out my own blog comments functionality. The first thing to do is to design the database schema. We need a table to store the comments, that's obvious. We also need to remember the commenters, so we need two tables at the minimum.
Field | Type | Size | Description |
---|---|---|---|
Id | Int | 10 | An id that uniquely identifies this comment. |
Post Id | Int | 10 | The id of the blog entry. |
User Id | Int | 10 | The id of the commenter. |
Time | Int | 10 | The time the comment was posted, in seconds. |
Flags | Int | 10 | General-purpose flags for various purposes. |
Comments | String | 65,000 | The comments. |
Field | Type | Size | Description |
---|---|---|---|
Id | Int | 10 | The user id. |
Name | String | 30 | The user's name. |
String | 50 | The user's email address. | |
Password | String | 20 | The user's password. |
Flags | Int | 10 | General-purpose flags for various purposes. |
Key | String | 16 | The user's logged-in key. |
Many other fields can be added, but these are the essential fields.
Getting the comments for a particular blog entry is a matter of issuing this call:
SELECT * FROM comments_tbl WHERE post_id = $post_id;
We can add filters to limit the search when the blog gets too big, but this suffices for now.
What if you want the commenter's name as well? It can be done using a nested query:
SELECT *, (SELECT name FROM user_tbl WHERE user_tbl.id = comments_tbl.user_id) FROM comments_tbl WHERE post_id = $post_id;
I never really understand the SQL syntax. I usually need to experiment until I get it right. For example, I'm wondering if this works or not:
SELECT comments_tbl.*, user_tbl.name FROM comments_tbl, user_tbl WHERE post_id = $post_id AND comments_tbl.user_id = user_tbl.id;
Does the user already exist?
SELECT COUNT(*) FROM user_tbl WHERE name = $name OR email = $email;
Add a new user:
INSERT INTO user_tbl (name, email, pw) VALUES($name, $email, $pw);
SELECT * FROM user_tbl WHERE name = $name AND pw = $pw;
If we have a match, we get the user id and generate an authentication code:
UPDATE user_tbl SET auth = $auth WHERE id = $user_id;
We need to authenticate the user for every logged-in operation. User id better be indexed.
SELECT COUNT(*) FROM user_tbl WHERE id = $user_id AND auth = $auth;
INSERT INTO comments_tbl (post_id, user_id, time, comments) VALUES($post_id, $user_id, $time, $comments);
It's not that difficult, is it?
THE Land Transport Authority on Tuesday halved the $10,000 deposit bidders need to fork out for each car and truck COE bid.
The authority said the move is temporary, and will be effective for the October 2009 to September 2010 tender period. It came after years of clamouring from the motor industry.
'It is a huge cost savings for companies as well as individuals,' said Automotive Importers and Exporters Association president Neo Nam Heng. 'I think it will certainly encourage more individuals to do their own COE bidding.'
The $10,000 deposit has been seen as a big stumbling block for individual vehicle buyers who want to submit their own bids. Hence, the majority leave the task to motor dealers, sometimes resulting in disputes.
But for motor traders, the move represents substantial savings. Mr Neo said for every $1 million a company is required to set aside for COE bidding, it will incur about $8,000 in interest charges per month.
'Some dealers need to hold on to their COEs for three to six months, so can you imagine the cost?' he said.
With the deposit halved to $5,000, he said the interest will likewise be halved to $4,000 per month.
The LTA said it has received feedback from motor traders that companies are still facing some cashflow problems.
A spokesman said: 'This reduction in the COE bid deposit is a temporary relief measure to help businesses, particularly motor traders and prospective vehicle owners reduce their financing needs and free up funds currently used as deposits.'
But Mr Neo said he hopes it can be permanent. 'If this proves to be workable and there are no hiccups, I hope it can be extended,' he said.
The Straits Times understands the LTA will also announce another 'pro-business' initiative: doubling the time that deregistered vehicles can be kept in export-processing zones to 24 months.
Industry players said this will also help motor traders source for buyers in the current slowdown.
Many people think this will cause COE to go up even more. I doubt so. Even though this will encourage more bidders, they are speculators who are hoping for a cheap COE — say between $5k to $10k. Prices won't go up, but they won't crash either. In other words, LTA is hoping to put a floor on the COE prices. We are not likely to see $2 COE again.
I definitely hope more people will bid on their own. If they have to come up with the money upfront (the deposit at least), they'll definitely be more prudent. Right now, what's $20k if you can pay it over 10 years?
This LTA action shows what's really happening in the car market — it's not doing well.
Yesterday while on the road, I saw a Toyota Crown SMRT taxi trying to squeeze his way into a wall of right-turning car queue. No one let him in, of course.
I thought about Dr Taxi's experience in his blog. Could it be him? :-D
Anyway, he's doing it wrong: by turning on the right blinker and trying to join the stationary queue by appealing to the drivers' courtesy. It'll never work in Singapore. In fact, he tried a few places. No luck.
The only reliable way is to take advantage of any opening when the queue starts to move and cut in. Some people say you should not turn on your blinker, or the car behind will speed up. However, I find that the success rate is still acceptable.
Yesterday was a bad day to get to work. I left home half-an-hour later than usual and the roads were very jammed. I usually take 25 minutes to reach office, but yesterday it took me over an hour!
After allowing readers to comment on blog entries, the next logical step is to allow viewers to comment on every page. I want to add the link by modifying the common JS code. I don't want to touch the pages at all.
There are 4 parts to it:
Unlike the blog entries, I want the body text to be pre-filled with the link back to the page, hence the need to modify phpBB. This is simple as it is just an extension of modification done to support the subject. (The hard work was done then.)
It is a bit more involved to add the JS footer code. You see, I have three concurrent JS architecture — I never migrated the old pages. (Not unnecessarily, at least. My philosophy is to let sleeping dogs lie.)
The pages can be classified into four generations:
As an aside, it is unlikely to have v4 as v3 is designed to scale because all the functionality are namespaced properly.
I have no problem modifying the v3 code. It is very easy to get the page's title:
var title = $("h1:eq(0)").html();
I assume the first <h1> is the page title. Ah, how jQuery spoils me.
But it is not enough to just allow comments for v3 pages. I estimate only 25% (or fewer) pages are v3! No choice, have to modify the older pages too.
v2 pages can be modified easily as they call a common function to setup the footer. However, there is no jQuery, so I have to use DOM functions. Can I still remember how to do it?
Let's try:
var elems = document.getElementsByTagName("h1"); if(elems.length == 0) return ""; var title = elems[0].innerHTML;
Wooh, it's not so difficult after all!
v1 pages represent a bit of a problem. The footer code is built into the
page, but it calls a JS function to get the email address. The output is
"rendered" to the HTML page using document.write()
. That should
tell you how old these pages are.
The original code looks like this:
document.write("<a href='mailto:" + gEmail() + "'>" + gEmail() + "</a>");
The only way to add in the link is to hack it. When gEmail()
is called the second time, we emit this:
email@server.com</a> <a href='url'>Comment</a> <a>
The last open <a> tag closes the </a> in the page.
This is not recommended at all because gEmail()
is not
intended to be used this way. However, it is safe to make the change because
the code is frozen (only legacy pages use it) and this is the only usage of
gEmail()
, even though it was meant to be a general-purpose
function.
There are some v1 pages, typically the sub-pages, that include the common JS file, but do not issue any JS calls. For these pages, I set a timer and on timeout, append the link at the bottom of the page.
var divObj = document.createElement("div"); document.getElementsByTagName("body")[0].appendChild(divObj); divObj.innerHTML = url;
If jQuery is available:
$("body").append("<div>" + url + "</div>");
It is not possible to add a link using JS unless I modify the pages. These pages are very old (2003 and before) and often have no JS code at all.
Technically, I can use a PHP script to inject the JS script on-the-fly. (I'm serious when I say I don't want to touch these pages.) However, there are only a handful of such pages, so I don't think it is worth the trouble.
With this in, viewers will be able to leave comments on any (well, almost any) page of my website! (If there are viewers... if there's a center to the web, my website must be furthest from it.)
For some reason, I thought it was more worthwhile to order just a Big Mac with the large fries. I ended up paying S$6.85 — I was expecting around $6.30.
The large fries cost $2.55. That means the Big Mac costs $4.30! (For such a small burger? It's more worth it to buy 2 McChicken/DoubleCheese instead.)
Nowadays, McDonalds simplifed their menu to show only the set meals. Thus, I wasn't able to compare the prices beforehand. I'm all for simplification — the current design trend is to be focused and leave lots of breathing spaces — but not to the extent that information is lost. There should still be a full pricelist somewhere. (It's actually available upon request at the counter, but it's troublesome.)
The Big Mac meal with standard fries is S$6.80. For 50 cents more, I can get a medium-sized drink and large fries. Not that I think it's worth it. For $7.30, I'll rather go Burger King instead.
Update (27/8): updated to the correct prices.
A colleague forwarded me this:
The first day, I didn't say anything, neither on the second nor third. One morning I asked, "Do you have a fixed parking space? I've noticed we park far from the entrance even when there are no other cars in the lot."
To which he replied, "Since we're here early we'll have time to walk, and whoever gets in late will be late and need a place closer to the door. Don't you think?" Imagine my face.
How gracious of him. :thumbsup:
I'm so ashamed of myself. :blush: Last time, when I still had the decal to park at the coveted red lots, I parked very close to the entrance. Well, it was one of the few parallel lots, which means people won't bang the side of the car — an inevitably in Singapore. (Non-drivers usually swing the car doors wide-open in Singapore. Drivers are usually more careful.)
Speaking of parking, because my company has more drivers than parking spaces alloted by the landlord, we hold a draw every six months. Fair enough, until you realize employees past a certain rank are excluded...
Recently, the landlord increased the parking charges. Because of that, I decided to rejoin the season parking draw. I'm sorry, fellow colleagues and countrymen: it's every man for himself.
But I promise, if I ever work in Sweden, I'll park far away from the entrance. :lol:
Good news: Yahoo, Google and Baidu bots have visited my forum!
MSNBot shouldn't be far behind, given that it just visited my website yesterday. I know the bots visit my website periodically. Yahoo seems to be doing it every minute.
To all forum members: keep up with the postings!
Right now, if you type smallapple (one word) into Google, Yahoo or Bing, my website comes up as the first match. ^_^
Not that it helps with my PageRank — I have a PageRank of 0. I believe it is because I don't have any inbound links. Anyway, I believe PageRank doesn't really work after the web became interactive: people seldom create standalone webpages anymore. Instead, we have blogs and forums that allow viewers to post comments.
We can quickly increase viewers by posting our link as a comment. We need to come up with some original (relevant) content, of course, but once it is done, we get a multipler effect.
This is nothing new. It is usual to find that the comments or trackbacks are full of spam links in a poorly maintained blog.
I just want to mention this because my bandwidth usage shot through the roof after I posted two links in two medium-volume forums.
Something I've always wanted to use, but kept putting it off: smilies!
They are taken from a few places, so there is a mix of styles.
I share these images with the forum for ease of maintenance. phpBB3 comes with oval smilies. I don't like that — smilies should be round! :lol:
If you don't have Javascript enabled, you'll just see the textual representation. Sometimes, I wonder if I'm offloading too much processing to Javascript...
So my forum is devoid of users. I don't care. I created it to allow readers to comment on my blog — which nobody reads anyway. :-D
I don't really want a high-volume forum. After all, I'm on a budget and I have only so much disk space and bandwidth. (But I don't have to worry about that for now! :lol:)
Anyway, after thinking about it, I decided to allow guests to post in the Blog and Feedback forums — posts are more important than members. It makes sense to allow guests to post now because they have no incentive to sign up as members.
I enabled moderation, of course. I don't want delete spam after they are posted. I don't want them to be posted in the first place.
Right now, I'm still flushing bugs out of the forum. It's not easy to configure right. For example, a colleague accused me of talking to myself in the forum. Well, I did not. Nevertheless, I decided to mark the system users explicitly.
I have five system users:
The others are genuine users, or bots... :ninja:
The Panasonic Lumix DMC-LX3 is a pretty good camera for $700:
It doesn't look like it has anti-shake. Also, it is just a tad too big — it is not suitable for a carry-everywhere camera.
Other than that, it looks like a very capable walkabout camera. A 24mm f/2 lens is even faster than most wide-angle SLR lenses. And the Leica name assures that you can actually use it wide open.
This camera got my attention because of its f/2 lens. If it is also f/2 at 28mm and the camera allows preset zoom (so that it zooms to 28mm on powerup) and the quality is good wide-open, I can buy this and throw away my Minolta AF 28/2 lens.
Now, for $400 more, you can buy the D-Lux 4, which is the Leica branded version. Some people have posted comparsion photos online. Unfortunately, these are useless — because the photos are resized.
I believe that the D-Lux 4 is better, just not $400 better. I won't recommend a P&S photographer buy it — it would be a waste of money.
Or maybe not.
Here's the money quote from a friend: "If I buy the LX3, I will think about the Leica. However, if I buy the Leica, I won't think about the $400."
I am very pleased with the Windows 7 desktop slideshow. It is the icing on the cake and makes me feel I'm using a new OS — even though it is just a new skin on top of Vista's architecture. (Vista is Windows version 6.0. Windows 7, despite its name, is version 6.1. The version number does not lie.)
It's not perfect, though. The images are supposed to fade gracefully, but they don't always do that. Perhaps it is due to my virtual desktop manager.
I got a more serious problem on my PC. The slideshow doesn't work. After a long day of troubleshooting, I found that it works exactly once after I restart the PC. Google didn't turn up anything, until I saw a defect logged against the UI that the slideshow cannot be easily paused.
After reading the article, I realized I had accidentially set the slideshow to pause mode in the power settings! It worked after I re-enabled it.
This is so frustrating. The submitted defect is right. The personalization tab should show whether the slideshow is paused or not.
It has been six months since the Government said it would tweak the off-peak car (OPC) scheme to make it more attractive for people to own cars with restricted hours of usage.
The motor industry, OPC owners and would-be owners are not exactly on the edge of their seats.
How can the system be made more attractive when the $17,000 tax break accorded to an OPC is tied to an assumed monetary worth of unused hours in a typical car's lifespan?
Currently, OPCs can be used from 7pm to 7am on weekdays, and after 3pm on Saturdays, and for the full day on Sundays and public holidays.
OPC owners have been clamouring for the hours to be extended, especially on Saturdays.
Transport Minister Raymond Lim hinted earlier this year that free use for the whole of Saturday could be possible, but there would be commensurate adjustments to the tax rebate.
In other words, no free lunch.
Perhaps rightly so, since giving more away would be at some expense to those who pay full taxes for ordinary cars.
The Land Transport Authority said it had been conducting "several focus group discussions in recent months with OPC owners" to see how the scheme could be improved.
One suggestion that seems viable is to allow the $20 day licence - which OPC users need to buy if they want to drive outside the prescribed hours - to be split into half-day portions.
This way, it would be less punitive for those who want to use their OPCs for just a couple of hours more.
This would be an enforcement nightmare, though. There are about 45,000 OPCs on the roads today, and close to 1,000 owners a year are booked for violating the restricted usage rules.
It would not be unfair to assume that a sizeable number of rule violators are not caught.
The physical day licence has to be replaced by a smart high-tech system if OPCs are to proliferate.
And it will have to be a completely foolproof system - unlike speed limiters on heavy vehicles.
The decade-old speed limiter scheme has proven to be largely ineffective as the devices can easily be tampered with.
With a smart system to control the usage of OPCs, perhaps the red number plates that identify such cars will not be needed any more.
That will remove the perceived stigma of owning an OPC and make these cars more attractive as an option to those who view a set of wheels as a status symbol.
Otherwise, OPCs are unlikely to catch on, at least not in a way big enough to make a meaningful difference to road congestion during peak hours.
They currently make up merely 6 per cent of the vehicle population (excluding two-wheelers).
With Certificate of Entitlement (COE) prices heading north, buying an OPC will become even less attractive as the $17,000 tax break becomes a smaller percentage of the total car price.
As one veteran motor trader points out, using a COE to buy an OPC is a waste - especially when the supply of certificates is shrinking drastically.
Which is why the authorities must make it more viable for people with ordinary cars to convert their rides to OPCs.
Currently, those who convert their normal cars to OPCs can realise their savings only when the time comes for them to scrap their vehicles.
Giving cash upfront to converts would make the switch far more palatable.
This is under consideration in the OPC review.
Then, there is the question of whether the $17,000 tax break accorded to OPCs is meaningful enough in the first place.
Bear in mind that an OPC will have less residual value than an ordinary car when it is finally scrapped.
This is because the $17,000 rebate is offset against the car's COE and Additional Registration Fee (the main car tax).
And a car's scrap rebate is based on these two components.
So, owners may not always get to realise the full $17,000 savings.
Perhaps the scheme can be made more attractive if the monetary incentive is tangible in other ways, such as zero road tax, free parking in URA/HDB lots, or vouchers to offset insurance premiums or mandatory vehicle inspections.
Or perhaps even reduced Electronic Road Pricing (ERP) charges.
The argument for the last suggestion is this: If more people switch or convert to OPCs, peak-hour congestion will be alleviated.
Consequently, traffic will be smoother flowing, thus putting a cap on ERP charges and the need for more gantries.
This will benefit motorists at large. Hence, no one should begrudge OPC owners for contributing less to taxes than the ordinary car owner.
The question is, can OPCs appeal to the moneyed masses and not largely to marginal car buyers?
Yes, and probably in more ways than one.
Doing away with the red number plate would be a start.
I can feel changes coming to the OPC scheme. Some of the ideas are really not feasible — be careful about the "law of unintended consequences".
Half-day license? It will lead to more cars, not less, during peak hours.
And a more attractive OPC scheme will lead to higher COE, not less. First, it will increase demand slightly. Second, whatever savings will be dumped on the COE so that the total cost remains the same.
Many Singaporeans are all too happy to join a queue, be it for food, flats or freebies.
One queue they unanimously hate, though, is the ubiquitous one waiting to enter or exit the carpark of popular malls.
The latest shopping centre to suffer from traffic problems is Ion Orchard, which opened two weeks ago.
The first couple of days, motorists griped about the nightmare of getting in and out of its multi-storey carpark.
Some motorists had to wait up to 30 minutes to enter.
The situation compounds the gridlock along Orchard Turn, which serves Ion Orchard, Wisma Atria as well as Ngee Ann City.
It does not help that taxis exiting Ion Orchard into Orchard Turn have to contend with incoming traffic from the side of Wisma Atria on the left as well as motorists entering from Orchard Boulevard on the right, creating a bottleneck.
The situation is made worse by motorists exiting Ion Orchard's carpark into Orchard Turn.
Ion Orchard is not the only new mall to experience motoring woes.
When suburban shopping centre Tampines 1 opened in April, shoppers complained about having to wait 45 minutes before they could park their cars because there were not enough carpark lots - the mall has only 203 lots.
Frustrated shopper Leanne Wee, 26, who drives, says: "It appears that malls don't give much thought to parking and traffic problems."
Indeed, when it comes to designing a shopping mall, it appears as if carparks and their accessibility are an afterthought.
Architect John Ting, a former president of the Singapore Institute of Architects, says that retail space and the flow of the internal space in the mall is usually a primary concern.
"Carparks are usually the last thing to consider and only because mall developers are required by the authorities to include them," he says.
But mall developers and their architects say this is not so.
Mr Simon Chua, divisional director at Benoy, the architectural firm that designed Ion Orchard, says: "Traffic and circulation are key factors in retail planning."
Benoy's director, Mr David Buffonge, the architect who led the design team for Ion Orchard, says that when planning a carpark "it is important to always think of the customer".
He adds that ensuring that the carpark is easy to find, has simple colour coding, clear sight lines and good visibility to the lift and escalator lobbies were some of the things that the firm considered in its design for Ion Orchard's carpark.
Mr Chua points out that the Ion Orchard site was a challenge as Orchard MRT station is underneath it and "only Orchard Boulevard was best for carparking access and the Orchard Road side was for pedestrians".
Such long carpark queues are found not only at new malls.
Even older ones such as Ngee Ann City, VivoCity and Plaza Singapura are plagued by them.
Freelance public relations consultant May Gwee, 38, who goes to Ngee Ann City at least once a month, has been caught in many a jam there.
Suburban malls are not spared the problem, either.
Housewife Lynn Lee, 38, was once stuck in the carpark of IMM in Jurong East for 30 minutes.
When the cars on the way out had filled up the exit ramp all the way down and out of the building, others like hers that were just entering the carpark ended up joining the exit queue.
"There were just too many cars, beyond the capacity of the carpark," she says. IMM has 1,313 lots.
VivoCity's general manager, Mr Chang Yeng Cheong, says one of the key considerations when planning the mall was the carpark design and servicing points.
"It was definitely not an afterthought as we view the carpark as an integral part of the overall mall experience when shopping at VivoCity," he says.
He adds that because there is only one main road, Telok Blangah Road, serving the area, the mall had initially planned for three entrances and exits into and out of the mall, at Telok Blangah Road, HarbourFront Walk and Sentosa Gateway.
The Sentosa Gateway carpark entrance has since been closed as the area was acquired by the Land Transport Authority (LTA) to facilitate the road expansion works along Sentosa Gateway and Gateway Avenue.
Mr Chang says that the mall also had to consider other external restrictions such as the bus bay, maintaining safe distances from traffic junctions and traffic contributed by the Cruise Centre nearby.
"To achieve better traffic flow, we separated the carpark entry and exit points from those of the taxi and servicing," he says.
It has been like that since a few years ago. There are just not enough parking lots — anywhere in Singapore — to handle the local demand. I hate to drive for this reason.
And the reason is very simple: parking is simply too cheap ($1/hour outside CBD and $2-3 per hour inside CBD). Per-entry charges makes parking even more affordable.
(I'm speaking from an economist point-of-view. As a driver, I feel the pain when I pay for parking.)
I budgeted $50+ to buy a graphics card for my office PC. The next day, I lost my company badge, which costs $50 to replace.
My budget is gone. Is it a coincidence, or fate?
So I reinstalled Windows... and I forgot to save my bookmarks again. I backed up the Favourites folder, but that saved the IE bookmarks only (which is next to useless, because I seldom use IE). Opera doesn't use this folder, so I lost most of my bookmarks.
Why does every browser use its own bookmark folder? They should all use the same one.
It is faster than Vista by a mile. It starts up pretty fast and hibernates in acceptable time. Everything feels slick, polished and snappier. Well done! It has been said, "this time, Microsoft gets it right".
Some other impressions:
I expect most apps to run as-is, since it shares the same underlying architecture as Vista. However, system utilities may not work. I tried two:
Glass2k works even better than on Vista: it only makes the background transparent, the foreground remains crisp. This is transparency done right! Unfortunately, admin command prompts (and other high-security windows, such as RegEdit) still cannot be made transparent. But I'm happy with it. In fact, Glass2k works even without Aero. This is wonderful!
My favourite utility JS Pager (a virtual desktop manager) does not work right. More on this in another entry.
Online buzz over former researcher's blog on his exit from A*Star unit
COULD this be Singapore's most well qualified taxi driver?
Dr Cai Ming Jie became an SMRT cabby last November after spending 16 years as a researcher at the Institute of Molecular and Cell Biology (IMCB) of the Agency for Science, Technology and Research (A*Star).
His career switch has become a talking point online after he started a blog earlier this year. Alongside his experiences as a cabby, he takes issue with the circumstances of his departure from IMCB last May.
An SMRT spokesman confirmed that the former researcher is a driver with SMRT Taxis, but Dr Cai declined to add more beyond this: "All that needs to be said is on the blog online... It should be IMCB that needs to be asked questions, if any."
The China-born Dr Cai, who became a Singapore citizen, obtained a PhD in molecular biology from Stanford University in 1990.
The Straits Times learnt that he did a two-year postdoctoral fellowship after leaving Stanford at the University of Washington, under famed genetist Professor Lee Hartwell, who won a 2001 Nobel Prize in physiology.
He joined IMCB two years later and worked as a principal investigator in the field of cell genetics up till his departure.
A spokesman for A*Star, meanwhile, said renewal of all its researchers' contracts is based on a number of factors, including the time taken to train PhD students, their performance and their contributions to the research institutes and the agency in general.
Dr Cai's work, like that of all A*Star researchers, was assessed by an external Scientific Advisory Board (SAB), which recommended his contract be terminated.
The spokesman said IMCB had taken the additional step of having Dr Cai's work assessed by three independent experts, "all of whom supported the SAB's decision not to renew his contract".
He said the former researcher was given one year's notice as well as advice and assistance to source for other prospects.
Still, in spite of the submission of countless curriculum vitaes and applications to universities, government agencies and companies since he was told he would be let go in 2007, Dr Cai failed to get a successful response.
Former colleagues feel his departure was unfortunate and a consequence of many factors. Having known him over the years, they say he is a reserved but bright scientist.
Dr Cai was also an adjunct associate professor at the National University of Singapore's (NUS') biochemistry department, where he supervised students doing research in cell and molecular biology. This appointment ended last year, an NUS spokesman said.
The former researcher now drives a four-year-old Toyota Crown. "At a time like this, the taxi business is probably the only business in Singapore that still actively recruits people," he said.
In his latest entry, dated Monday, he revealed that he will focus on writing when his six-month contract at SMRT Taxis expires at the end of the month.
"After that, I plan to change to a new taxi operator... and continue driving and writing stories that come along with it."
Most qualified or not, Dr Cai is definitely now the most famous taxi driver in Singapore.
I read his blog and I think he made two fundamental errors:
A colleague told me that one particular page didn't display properly in IE 6. No problem, just dissect the problem area, isolate the bugs, and apply the fixes individually. I expected this one to be slightly harder to fix because it looked like a nested bug.
After trying the usual suspects and then just plain throwing everything I knew at it, I still couldn't get it to work.
I couldn't find anything because I googled "ie6 float margin bug" and got the usual double-margin bug for floated elements.
Finally, I thought about the nature of the bug and googled "ie6 float inherit margin bug". Bingo! I found it and was able to fix it within a minute.
This shows that when it comes to IE 6 CSS bugs, there's no need to think about them. Smarter people have solved them, you just need to know how to google. :-) My mistake was that I did not translate my observations into search words properly.
This also marks the first CSS bug in our code that requires special JS handling. It cannot be "hacked" using CSS at all.
I installed Windows 7 RC on a 2004-era PC (Xeon 2.8GHz HT, 2.5GB RAM, 67GB SCSI HD).
It installs pretty fast — in about half-an-hour. And it only takes up 10 GB, including the swap space and hibernation file. (It is still a lot compared to XP, but it is a lot better compared to Vista.)
It looks and feels a lot like Vista. No wonder people are saying this is Vista Service Pack 3.
I'm stuck at 1024x768 due to my unsupported video card. I'm able to install the XP driver to get 1600x1200, but I also get the BSOD (Blue Screen of Death) from time to time.
What's next:
Buying a graphics card for such an old PC is not easy — I need to get an AGP card. Most graphics cards are now in the PCI Express form factor. I don't think the PC supports it.
Also, since Windows 7 is out (for corporate users at least), I may install it on my notebook instead of updating to Vista SP2.
Update: I found that I can set the graphics resolution to 1600x1200 using the standard VGA driver, but only in 16-bit color.
My PCs at work:
CPU | RAM | HD | OS | Primary use |
---|---|---|---|---|
P4 2.4 GHz | 512 MB | 33.8 GB | XP | Office apps |
Xeon 2.8 GHz HT | 2.5 GB | 67.7 GB | XP | Test machine |
Core2Duo 1.2 GHz | 2 GB | 74.5 GB | Vista | Used in meetings |
Xeon QuadCore 3.0 GHz (x2) | 4 GB | 447 GB | Linux | File Server |
I want to install Windows 7 RC, but I don't want to install it on my notebook, so the only other choice is the Xeon PC. But first, I need to offload its files elsewhere.
I am running low on HD space on all my PCs, except for the Linux PC. After thinking about it, I decided to have just one master repo on the Linux PC. This will free up a lot of space on the other PCs.
The Linux PC is used for compilation, but I seldom need to do that. I use it as a staging server for the device's website instead. It runs Apache, PHP and even MySQL.
I have used the P4 PC for 7 years. It is pretty reliable, although the HD may fail any time — it has already well exceeded its MTBF. The only thing I can't run on it is FireFox with FireBug (which bloats to 700+ MB RAM after running for a while).
After installing Windows 7 RC on the Xeon PC, I will resume using it as my test machine. I need to run all the browsers on it simultaneously, that is why it has to be a pretty powerful machine (not really, it just need lots of RAM).
At last, I've linked up the blog and the forum. There is a comment link at the end of every blog entry that will bring the reader to its thread if it exists, or he'll be prompted to start one otherwise. (Or be prompted to log in to do so.)
For a long time, I don't have a way for readers to comment. I never thought of using a forum either, until I encountered one website doing so. The owner had both a blog and a forum. He didn't want to check both, so he disabled the blog comments and used the forum for comments (one thread per entry). I like this method, so I copied him.
There are a few reasons to put comments in one place. Blog comment systems are usually less secure — thus easier to spam. And readers need to register and log in twice (due to lack of integration between the blog and forum).
A few compromises:
I modified part of phpBB to achieve this.
search.php now takes in a new command that handles this special behaviour.
posting.php allows the subject to be specified in the query string.
Some comments after using Apple's mighty mouse for a few weeks:
I almost got the Logitech V470 mouse (S$72), but then I goggled and found that Logitech has just released a new mouse, the M555b! It's pretty slick looking and has a very interesting hyper-fast scrolling feature: you spin the wheel and it'll keep going. I'm likely to buy it.
phpBB allows four levels of visual confirmation settings:
I was using L4, but a user complained it was impossible to read, so I lowered it to L3.
An estimate of their complexities: I needed an average of 3 tries to get past L4, but only 1.5 tries for L3.
It is an arms race between the bots and websites. L2 is already offering no protection. L3 will be cracked sooner or later.
Surprisingly, an effective anti-spam technique today is to add custom questions so that a generic attack will not work for your forum. Unless you have a high profile forum, hackers will not target you specifically, hence you will be safe.
I like that idea, so I did that and lowered the visual confirmation settings to L2. Let's see how it goes.
The second season of Spice and Wolf continues with its economic theme.
Lawrence sold an assortment of nails to his old friend, Mark Cole, in the town of Kumerson. Mark's initial offer was 10.5 Lumione (exchange rate at 1 Lumione to 34 Trenni). It was lower than Lawrence's purchase price! Lawrence wanted 16 Lumione. After some haggling, they finally settled at 14.67 Lumione.
Suppose Lawrence bought the nails for 12 Lumione, his profit is 22.3%!
Lawrence had scaled down his business somewhat. The last we saw him, he had 63 Lumione with him. Okay, maybe he dared not risk all again.
The nails consist of 120 three-patte, 200 four-patte and 200 five-patte nails. On average, each nail costs almost one Trenni (0.959 to be exact). These are very expensive nails!
Amati issued a challenge to Lawrence that he would come up with 1,000 Trenni to "redeem" Horo in two days time. Lawrence did not believe Amati could do it, so he accepted the challenge.
If Lawrence had dismissed the challenge, we could have skipped 75% of this arc.
After some legwork, Lawrence determined Amati paid 200 Iredo in tax, which means he had around 800 Trenni.
10 Iredo is about 0.25 Trenni, so Amati paid 5 Trenni in taxes. That's a tax rate of just 0.625%. That's very low. (Even if the tax starts from 500 Trenni, that's just 1.67%.)
Amati's scheme to earn 200 Trenni was through the auctioning of pyrites. Lawrence said the market value should be 10 Iredo, but by the time Mark told Lawrence about it the next day, the price was 270 Iredo — and it was still rising. Lawrence then bought 4 pyrites worth 30 Trenni from Mark (300 Iredo per pyrite).
Lawrence was confident he could make the price of pyrite come down. He made a deal with Amati: that he would sell Amati 500 Trenni worth of pyrites, payable now, but collectable the next evening (after the challenge).
Amati paid him 200 Trenni immediately and 14 Lima gold coins worth 280 Trenni the next morning. (Lawrence said the exchange rate was 1 Lima to 20 Trenni.) I found it strange that Lawrence, rather than Amati, absorbed the exchange loss.
That night, Lawrence tried to buy 400 Trenni worth of pyrites from Deanna, but she had to check if the earlier customer would cancel his order first.
Suppose the market value was 500 Iredo per pyrite (it was not stated), 400 Trenni worth works out to be 32 pyrites.
Lawrence then bought 370 Trenni worth of pyrites using Mark's connections. Lawrence now has 34 pyrites.
The next day, Lawrence sold off all in one shot in the open market after securing another 250 Trenni worth through Mark. The selling price was not stated, but it had come down slightly from its high average selling price of 800 Iredo per pyrite.
Suppose the selling price was 700 Iredo per pyrite, Lawrence sold 34 pyrites worth 595 Trenni and bought 14 pyrites.
Later, acting on a hunch, Lawrence sold off his pyrites. He was joined by Horo, who had bought Deanna's pyrites. Together, Lawrence had sold 80 pyrites (worth 1,000 Trenni). That caused the market to crash. The final price wasn't revealed, but it should be around its original market value.
How did Lawrence fare? It was not stated.
Qty | Unit Cost | Cost | |
---|---|---|---|
4 | 300 Iredo | -30 Trenni | |
30 | 500 Iredo | -370 Trenni | |
-34 | 700 Iredo | 595 Trenni | |
14 | 700 Iredo | -250 Trenni | |
-14 | 550 Iredo | 193 Trenni | |
Final | 0 | -138 Trenni |
The final selling price of 550 Iredo per pyrite is a pure guess. Lawrence was starting to force the price down.
Lawrence still made a gain because he short-sold 500 Trenni worth of pyrites to Amati.
Horo bought her pyrites on credit from Deanna. She should have suffered a loss.
Qty | Unit Cost | Cost | |
---|---|---|---|
32 | 500 Iredo | -400 Trenni | |
-32 | 250 Iredo | 200 Trenni | |
Final | 0 | -200 Trenni |
The final selling price of 250 Iredo per pyrite is a pure guess. The price was free-falling at this point.
Amati should have suffered a huge loss. The novel said he did not make a loss. That's impossible.
Amati paid Lawrence 500 Trenni upfront. He got his pyrites in settlement, now worth say 5 Trenni. That's a loss of 495 Trenni. Plus he still had some 200 Trenni worth of pyrites on his hand. His realized profits could not have been more than 200 Trenni, so his net loss was 500 Trenni.
Since 3 years ago, Chinese Nationals started to "colonize" the food courts. However, they were absent from fast food joints for a long time, due to the English barrier.
Not any more. I'm now starting to see more and more of them — the younger generation who knows English. Their English is only marginally passable, but it'll do.
Working part-time at a fast food joint is an avenue for poor young Singaporeans to earn pocket money. Now they'll have some competition.
When costs increase, people start to buy cheaper substitutes. This happens to people too. When wages go up, bosses start to hire cheaper people. This is especially doable for manual labour and technical fields.
When wages are stagnant, it keeps a cap on housing prices. But this does not mean that housing prices cannot increase. It can — if the mortgage period is increased.
A creationist will tell you that the Earth is only 6,000 years old — recorded history on the bible is only that old. (Young Earth) Creationism is also known as Intelligent Design.
I, on the other hand, subscribe to our current theory that Earth is old — incredibly old.
Some milestones:
4.5B years ago | Our solar system was created |
4.4B YA | An asteriod crashed into Earth and broke it into two |
3.8B YA | Late Heavy Bombardment stops |
3.8B YA | First lifeform; oldest rocks on Earth |
2B YA | Earth gains oxygen in its atmosphere |
540M YA | The Cambrian explosion |
475M YA | Land plants |
360M YA | Amphibians |
300M YA | Reptiles |
200M YA | Mammals |
150M YA | Birds |
65M YA | Very famous event |
2.5M YA | Genus Homo |
800k YA | Use of fire |
200k YA | Homo sapiens |
12k YA | Agriculture |
5.5k YA | First recorded human history |
Most of us are vaguely familiar with the Adam and Eve story from Old Testament:
God is good, the Devil is bad. In the Christian mythology, unlike many other mythologies, the Devil is not the opposite of God. He is merely a fallen angel. Fallen in the sense that he uses his powers for evil.
Now, what if the Devil is good? In the Middle ages, saying such things will get you burnt as a heretic. Thankfully, we live in much more relaxed times — at least for Christianity.
Recently, I came across a show that ran with this premise:
I like such alternative takes on traditional pure Good-and-Evil tales. (Of course, after a while they get old too.)
I bought one piece of fried fritters for my breakfast today. It is extremely profitable — $0.70 for two slices of fried dough. (Most single breakfast items cost $0.70.)
The person in front of me bought two items. The store lady asked if she wanted to order another. You see, it costs $0.70 per item, but it is only $2 for three items. She declined to do so.
I almost wanted to jump in and join her, but then I thought how should we split the 10 cents savings? And will I still be welcomed at the store?
The store opens only in the morning (6 am to 12 pm). This is quite common. Hawkers can make enough money to survive by serving just the morning/lunch or dinner crowd. There is no need to open the store the entire day — unlike retail.
The store sells four or five kinds of food, all variation on fried doughnuts. (I don't know their names in English.)
The store employs three people, one to sell and two to prepare the food.
What is the store's daily profit?
My WAG (wild-ass guess) of their costs:
In other words, the store needs to sell around 400 units per day to break even. Can they do it?
The store has good business, so I believe they sell around 150 to 200 units per day from retail alone. They also supply to other stores, which is easily 1/2 to 2/3 of their volume.
Update: changed the analysis due to a calculation mistake.
A WORKSHOP suspected of being involved in fraudulent motor insurance claims is being investigated by the police.
In a recent case, the workshop is believed to have even helped in arranging for a false witness to make a claim.
Police have confirmed that they had hauled up three parties involved in a case of fraudulent motor claims for questioning.
One was a car driver who had made a claim against another motorist after their vehicles collided; another was a man who had purportedly witnessed the accident.
The Straits Times understands the third man is someone from a motor workshop.
The police probe arose from a complaint by a motorist who found himself in the middle of an insurance scam.
Ship broker Henry Phua, 60, was involved in a relatively minor accident in 2007 and was shocked when the other party filed a five-figure claim. vIt included $8,000 for "whiplash".
Despite learning from his insurer AIG that the other party had a witness, Mr Phua contested the claim.
He was adamant that the other driver - who swerved his Subaru WRX into his lane at high speed before braking hard - was making an exaggerated claim.
The conflict finally came to a Primary Dispute Resolution Meeting at the Subordinate Court on Feb 17 this year.
It was chaired by District Judge Laura Lau.
The other driver was present, as well as his lawyers and lawyers for AIG.
But the purported "witness" did not show up.
According to a report by law firm Characterist, which represented AIG at the hearing, the WRX driver stuck to his story at first.
But midway through questioning, he had difficulty elaborating on how exactly the accident took place.
Then suddenly, he changed his tune and admitted Mr Phua's version of the accident was correct.
He also said there was no witness, and that the so-called witness had been arranged by "a friend's friend".
The motor workshop continues to operate.
The case is among several inflated claims motor insurers have been citing as the main reason for underwriting losses and, consequently, higher motor premiums.
General Insurance Association president Derek Teo noted that most cases are settled out of court as insurers as well as the insured do not find it worth the time and money to contest them.
But not Mr Phua, who was pleased that the police are investigating the case.
"I hope this is a warning to those who think they can always get away with making false claims," he said.
The Straits Times understands that the police have been getting more complaints about fraudulent insurance claims and staged accidents.
Motor insurance claims and premiums have been climbing almost continuously during the last decade.
The average premium in 1998 was $672, while claims amounted to $375 million.
Last year, premiums averaged $1,013, while claims hit $741 million.
Premiums will continue to rise. I won't be surprised if it hits $1.5k in another ten years time.
I find it interesting that the all-powerful administrator cannot create arbitrary users in phpBB. (Without mods, that is.)
Also, he cannot violate the email and password requirements. If a unique email is required, he cannot modify two accounts to use the same email address.
I find this quite surprising.
The canteen at my office sells plain bee hoon (and other noodles) at $1. I always order that because I like plain mee for breakfast. $1 is expensive; the going rate at a hawker centre is $0.70.
After a long time, I found that it costs just $1.40 for the mee and one item. Let's see. I'm paying $0.70 for the egg for lunch. If I get the egg during breakfast (and leave it until lunch), I'll save $0.30!
I attended a Flash course provided by my company. It is targeted at designers. I suspect they wanted to use Flash to prototype their designs after seeing it in action. (We recently had a replica of the UI done in Flash.)
The course was opened to all, so I signed up for it. I don't really need to use Flash, but it has its uses (see later). If someone wants to teach me, why not?
The course is made up of two separate courses: the first course teaches you how to create animation and the second course teaches you how to achieve interactivity. Programming is required to achieve interactivity. Programming... I bet the designers did not expect it.
I'm struck by the similarity between ActionScript (Flash's programming language) and Javascript. It is not surprising that the syntax is similar, as both are C-based. However, the event handling reminds me of the HTML DOM. So, I googled and found that AS is actually based on Javascript! (The design, that is.)
I'm pro-HTML/JS, so I have no intention of using Flash — but never say never. While it is possible to achieve 90% of Flash's capability in HTML/JS today, it is the remaining 10% that Flash is potentially useful.
For example, the web is mostly silent so far. Some people say it is a blessing, but sometimes you want simple sound effects. It has been possible to do that since 2004 — by using Flash. There is no need to wait for HTML 5, which is still WIP and will take some years to become widespread.
Flash also allows you to access the local storage, up to 100 kB (more if the user allows). Some Javascript frameworks use it. This is preferable to Java applet and Google Gears because (i) Flash is almost always pre-installed, (ii) no permission is needed from the user.
And lastly, if I'm not wrong, Flash also has decent socket programming. It should allow persistent connections, so the server can send data back as and when needed and the client will know it immediately. For Javascript, even with AJAX, it is a hack to keep the connection open. And even then, the client must still poll periodically.
I don't like how phpBB shows explicit PHP filenames, so I tried to remove them.
http://website/forum/index.php
becomes
http://website/forum/
When was the last time you saw index.php
?
http://website/forum/viewforum.php?f=x
becomes
http://website/forum/x
Originally, I wanted to use /forum/f/x
, but phpBB
requires the folder to be at the same level.
http://website/forum/viewtopic.php?f=x&t=y
becomes
http://website/forum/x,y
This works as well (the forum id is not needed):
http://website/forum/-y
http://website/forum/memberlist.php?mode=viewprofile&u=x
becomes
http://website/forum/member=x
I don't intend to shorten it any further.
http://website/forum/download/file.php?id=x
becomes
http://website/forum/download/x
http://website/forum/download/file.php?avatar=x
becomes
http://website/forum/avt=x
The paths are replicated in several places, so it is not a trivial change. I modified only the main pages, so the original paths are still used in some places. I don't want to modify all of them as I want to minimize the changes.
This is an example of a bad coding practice — it violates the DRY (Don't Repeat Yourself) rule. The paths should be defined in just one place.
So my CB400F road tax is due soon. I have to pay the insurance and get the bike inspected first.
But when I rode to the inspection centre, I was told no inspection was needed! I got the timing wrong — it was due in 6 months time.
I'm getting very forgetful these days. Well, at least I remembered to pay the road tax — I forgot about it the last time!
After a long time, I finally decided to set up a forum for visitors to comment on my blog. (It is currently under beta-testing.)
My web host provider has phpBB and SMF. Both are written in PHP and requires around 55 MB. I believe I can use other forum software, just that I need to upload it myself.
I chose phpBB because I'm more familiar with it — it is very popular. phpBB 2.x used to be quite vulnerable and can be root'ed easily. Version 3.x seems to be fine so far.
After I installed and setup phpBB, I googled and found that SMF appears to be more secure. Oh well.
You can never be too paranoid about security on the Internet.
Other suggestions are welcome.
Very typical first impressions of Singapore:
Singapore is safe, but never let your guard down. The police's message to the public a few years ago was, "low crime doesn't mean no crime". That was before the huge influx of foreigners.
Singapore is clean — only because of the cleaners. For a true picture how Singapore would be like without them, just take a look at the venues after an event is over.
Being a tiny city-island state, Singapore cannot escape the fact that it has very few (obvious) attractions to offer.
If you don't mind getting hot and sweaty, there are actually many places to go — many of them free to boot.
Unfortunately, many Singaporeans are pampered, so they won't consider places without air-con. It's no wonder it seems all you hear is food and shopping.
And a favourite Singapore past-time? The annual overseas trip — because there are no places to go in Singapore.
Singapore is expensive. It is worse if you visit tourist areas. But believe it or not, you still can get by with $2.20 per meal; no drinks. (Most likely it'll cost you $3, though.)
It is very difficult to correct a person's perception, especially when he relies on public transport. For now, I use Neil Humphreys' Final Notes from a Great Island as a guide to the less well-known attractions of Singapore.
I need to add these functionalities to my website:
I need to tell visitors that there are new contents on the homepage. I would like to do it automatically, of course. However, a script to go through the entire website will pick up edits as well — not to mention an overkill because I add new contents so rarely.
I think I'll maintain a list manually, but with automatic expiration. That is, the items will disappear automatically after, say, 2 months.
When I tried to add my page as a link in FaceBook, I found that I could not use an image as a thumbnail, because I blocked image linking. I'm not allowed to specify an image from another location (that is allowed to link).
I need to allow one representative image per page.
(This affects pages that do not have embedded thumbnails; thumbnails are allowed to be linked.)
I can define a rule in .htaccess to allow all .*-link\.(jpg|png), for example. However, this means I need to rename the image file.
Another way is to embed a hidden thumbnail into the webpage.
In the end, I found that only the preview fails to work. After adding the link, the thumbnail shows up fine.
Visitors have requested this feature for a long time. To keep things simple, I may create a forum and direct all comments there.
It is not very difficult to create a simple database to store users and their postings, but why reinvent the wheel?
Episode 7 is a DVD-only episode. I believe it is not in the light novel as well. Some things we learn from this episode:
Lawrence claimed that the shop sold him both sets of clothes at a loss.
Lawrence's strategy: first, he bought a set of cheap clothes to make the merchant to think that he could be a regular customer. He also dropped Milone's name left and right. This caused the merchant to throw in some extra stuff.
Then, Lawrence bought the expensive clothes for Horo. He said the merchant wanted to leave a good impression on Horo, whom people mistook to be wealthy due to her high-grade clothes.
Will it actually work? I don't think so.
One Trenni silver coin is of quite high value. From the light novel, we know that 1/3 Trenni can cover a person's daily living expenses. Here, it is 1/7 Trenni per day if you live frugally.
Does it include lodging? Perhaps only a simple shelter — sleeping in the common area in the church, for example.
Converted to present day terms, 1/3 Trenni would be around S$13, enough for 2 to 3 meals and public transport. One Trenni is thus S$40. (One Luminoe is then $1,400. Horo is wearing a set of clothes worth almost $3,000!)
Category | Jan | Feb | Mar | Apr | May | Jun |
---|---|---|---|---|---|---|
Basic | 1,061.55 | 985.02 | 2,574.12 | 685.04 | 987.35 | 869.82 |
Cash | 213.60 | 241.50 | 172.10 | 151.00 | 160.00 | 144.90 |
Vehicle | 258.35 | 307.97 | 577.60 | 1,886.78 | 146.74 | 836.51 |
Others | 116.30 | 875.00 | 308.15 | 391.94 | 66.00 | 28.99 |
Total | 1,649.80 | 2,409.49 | 3,631.97 | 3,114.76 | 1,360.09 | 1,880.22 |
Category | Jul |
---|---|
Basic | 2,927.51 |
Cash | 200.00 |
Vehicle | 1,732.34 |
Others | 110.84 |
Total | 4,970.69 |
July is typically a high-expenditure month due to several annual expenses. Basic expenses is high due to tax. Vehicle expenses is high due to my car's and bike's insurance ($1,356.28 and $155.28).
My tax this year exceeded my monthly savings. This was a surprise to me. I don't recall earning so much.
Insurance goes up every year without fail. The insurers have no incentive to keep their cost down.
In the future, I may pay my tax and insurance by installments, since there is no interest charge to do so.
(From toywizard.net.)
Originally, I wanted to write this entry after I got the Houquet figure, but Beagle has just cancelled their Mospeada releases.
There are four main Mospeada riders in the show Mospeada:
In the past 2 years, three toy companies have come out with Mospeada toys:
All three exhibit solid engineering, but the Beagle is the best — at S$350 a figure. At this price, I can only afford to buy one, hence Houquet. I was crossing my fingers the whole time that the series won't be cancelled. Unfortunately, this was as far as Houquet got:
(From MacrossWorld; taken at the Tokyo International Anime Fair in March 2009.)
For niche market items like this, usually only the principal character gets produced. It was speculated that sales were poor; the initial run of 3,000 Stick figures were not sold out — and he was expected to be the best selling figure, being the principal character.
IMO, Beagle should have come out with Houquet right after Stick. Houquet, being a girl, should be very popular as well. Beagle went with Rand because it shared 99% of the parts with Stick (effectively, only the head is different).
In any case, S$350 is a crazy price for a toy. IIRC, this would have been my most expensive toy. I guess that there are not enough crazy Mospeada fans in the world.
I wanted to get a bluetooth mouse for my notebook — so that I can get rid of the chunky USB receiver!
Just nice, a friend of mine was not using his mouse, so he lent it to me.
Some things that may not be immediately obvious:
I thought the AMM is a one-button mouse — the seamless clam-shell design means that it has only one mechanical sensor. However, it uses capacitive sensors to differentiate between left and right click. That's high tech.
But it doesn't work perfectly. The mouse gives precedence to left click, so to right click properly, you got to lift your finger from the left-click position.
Also, if you drag-and-drop and now want to cancel it... you can't right click to do it. You got to use the escape key.
The "squeeze" function is not very useful in Vista. It does nothing most of the time. However, it acts as the back button in Opera.
My old mouse can work on one battery too. I didn't realize that until today.
I can't help but think about the design philosophy behind the mouse.
First is the looks. Apple's mice traditionally use the same seamless clam-shell design, but they were also one-button mice. Right-click is more and more prevalent (context-sensitive menu), so even Apple has to bow towards the inevitable. Now the technology exists to support two buttons and still look traditional.
Second, Apple ships the mouse with Lithum AA batteries because they are lighter. Wow, Apple actually places user experience over cost. That's something we can learn from. (Of course, you also pay a premium for Apple products.)
Spice and Wolf is a rare anime that uses economics as a central theme — our protagonist Lawrence Craft is a merchant. However, it doesn't quite pull it off.
The show is slow, very slow. The show is 12 episodes (with one extra filler episode) and is made up of two arcs comprising of 6 episodes each. That covers two of the light novels the show is based on. Personally, I feel each arc can be done in 3 to 4 episodes. That would help with the slow pacing.
Note that this is merely Lawrence's first shown deal in the show. He has been a travelling merchant for seven years.
Lawrence sold his merchandise of 70 furs to the Milone Company in the town of Pattio. He was offered 132 Trenni silver coins initially, but he managed to up it to 140 coins. (We are not told his cost price.) Then, his partner Horo — she called herself the Wise Wolf of Yoitsu — took over and finally concluded the deal at 210 coins!
Now, Milone Company got ripped off. The trader Lawrence liased with was willing to pay a premium because of something Horo did to the furs. However, the effect was only temporary. The trader later realized it and wasn't very happy about it, but he said the company would still do business with him. Go figure.
I don't think ripping off your business partner makes good business sense.
Note the explicit mention of Trenni silver coins. There are many currencies around. Some of the currencies that are mentioned:
Is this realistic? Perhaps, but it sure is confusing. Luckily, this region uses Trenni as its major currency, so unnamed coins are implied to be Trenni silver coins.
Zeren told Lawrence he knew of a currency that was going to increase its silver purity. Of course, he would tell him the currency only with a deal of 10 coins upfront and 10% of the profits. And he would return the ten coins if Lawrence made a loss.
This is the first instance of the economic mumbo-jumbo, but the jist of it is that you hoard the coins before the increase, because the currency will be worth more after the increase and it applies to all the coins.
(Why should it? The ones with lower purity is going to be worth less, that's for sure.)
I feel this is a bad deal for Lawrence, due to the high upfront cost. Lawrence only has around 200 coins to play around. It is unlikely he can commit everything to this currency speculation. Suppose he commits 100 coins, he gains only 10 coins even if the currency appreciates by 10%.
The currency turned out to be Trenni. The strange thing is, Lawrence and Horo found that — thanks to Horo's extremely sharp ears — the new coins had lower purity!
Lawrence couldn't profit from this knowledge, but he knew someone who could — the Milone Company.
Lawrence sold this knowledge to the Milone Company.
We are told how the scheme works:
How exactly does one profit from a devalued currency? It will be revealed later. For now, we just know that you need lots of it and only a big company, such as the Milone Company, can pull it off.
Lawrence expected the Milone Company to gather 300,000 coins. Assuming a 10% margin, Lawrence expected to get 2,000 coins as his share — enough to open his dream shop. His share of the profit is thus 6.7%.
(I don't see why the merchants will make a big loss. The market value may be low, but the king should be willing to buy back the coins at a higher price to remint them.)
Things didn't go well, of course. Lawrence and Horo were pursued by the mastermind, the Medio Company, almost immediately. Horo acted as decoy so that Lawrence could reach the Milone Company and ask for help.
Unfortunately for Lawrence, the branch chief Marlheit told him that they had all the information they needed from him, so they couldn't help him — to avoid jeopardizing their operation. However, he found it strange that the Medio Company went after Lawrence because they would have known Lawrence was of no value anymore.
The reason is then revealed: the Medio Company was after Horo! They threatened to turn Horo to the Church unless the Milone Company kept still until the deal was over.
Marlheit and Lawrence then discussed a few possibilities:
Lawrence then said the biggest profit from the devalued currency was that the holder could extract special rights from the king. He told Marlheit to negotiate quickly with the king and then sell the rights to the Medio Company.
At the end of it all, the Milone Company managed to get the rights from the king and sell them to the Medio Company. Also, they collected 307,322 coins and got 350,000 coins (of lower purity, I presume) in return.
(It looks like the Milone Company took just 3 to 4 days to collect the coins. Impressive.)
Lawrence's share is then revealed to be 5% of the profits, which works out to be just 120 coins. The reason? Transport fee, tariff and contract handling fee — especially the last one.
The Milone Company only made a profit of 2,400 coins. That is very little, considering that they got an extra 42,678 coins.
Marlheit then rewarded Lawrence with 1,000 coins from the profit of the special rights, which he didn't do anything at all. Is 1,000 coins a lot? That depends on the special rights. Is it worth 10,000? 50,000? Or even 100,000?
We were not told, but my guess is at least 50,000, because the king tried to minimize his loss by clawing back around 35,000 coins through the contract handling fee. That means Lawrence got a cut of 2% for free!
Lawrence requested his payment in pepper, which he then transported to the town of Poloson for sale.
The pepper was weighted at 45 weights, one weight being worth one Lumione gold coin, which was in turn worth 32.83 Trenni silver coins. He would have gained 1,477 Trenni. Assuming he bought 900 Trenni worth of pepper (1,000 + 120 - 140 - some loose change), he would have made a profit of 64%!
(Horo spent 140 Trenni at the Milone Company. That's a lot of money to spend in one go!)
Horo detected that the weighing scale was rigged. Lawrence then forced the merchant at the the Latopeiron Company to sell him goods not just on credit, but with 1x margin as well.
I don't see why Lawrence would not know the true weight of the pepper. After all, he bought and sold it in one transaction.
Of all goods, Lawrence chose high quality armour to sell at his next stop, the Church City of Rubinhaigen.
Lawrence bought 20 armours at 100 Lumione — which was already half-priced. We were also told he owed 47.75 Lumione, which means that the pepper was worth 52.25 Lumione instead of the 45 that the merchant offered. That's almost 15% difference.
(One set of armour costs 10 Lumione. We are not told how much Lawrence expects to sell one for, but he said the profit margin is very slim.)
On the way there, Lawrence took a detour and bumped into Nora Arent, a shepherd. Nora asked to be hired as an escort. Her skills, together with her dog, Enek, impressed Lawrence enough to strike a deal for two days' escort to Rubinhaigen for 40 Torie, extra if attacked by wolves. Lawrence eventually paid her an equivalent of 45 Torie.
(We are not told the Torie-Trenni exchange rate.)
At the city, Lawrence had to pay 10% in tax, either in cash or goods. The tax seems pretty high. Lawrence chose to pay using the armour. The counter person said "A wise decision". (I don't see why it matters; see later.)
Unfortunately for Lawrence, when he went to the Remerio Company, he was told that that the armour market had crashed and armours were now worthless. Basically, Lawrence got ripped off big-time by the Latopeiron Company when he tried to take advantage of them.
(If only he chose anything but armour... the anime didn't explain it, but the armour market crashed because there was no military expedition this year.)
Also, the Latopeiron Company transferred Lawrence's debt to the Remerio Company. I feel this is more for convenience of the plot than anything.
I don't see why it makes a difference whether Lawrence paid the tax in cash or goods. The armours were worthless anyway, so the tax couldn't be very high even if Lawrence paid in cash.
Lawrence only managed to raise 3.29 Lumione, shortfall of 43.71 Lumione. This is a terrible showcase of his business connections.
At his wits end, Lawrence made a deal with Master Remerio, the chief of the Remerio Company, to smuggle gold into Rubinhaigen.
You see, cities under the influence of the Church have a heavy tax on gold. It is very profitable to smuggle gold in. However, the punishment is also very severe, so no one dares to try it.
Lawrence's proposal: the Remerio Company to raise the money, then buy the gold from the heretic town of Rumtola, and finally, sell it through their connections. Lawrence would then get a cut of the profit.
(Heretic because Rumtola is not under the influence of the Church.)
The Remerio Company raised money to buy 600 Lumione worth of gold, which could then be sold at 6,000 Lumione. (I don't see how they can sell at 10x. Lawrence earlier said the price is only doubled in the Church cities.)
Lawrence's share is 150 Lumione. (In the light novel; it is not stated in the show.)
Lawrence then sought out Nora and offered her 20 Lumione for her role. Nora was a shepherd for the Church's sheeps, so she was not searched. Nora was a very quiet and gentle girl, but she had no love for the Church. The real reason why she was working for the Church was that they were placing her under observation — they suspected she was a witch. The Church asked her to go to dangerous places to tend her sheeps. When she didn't lose any, they thought she used heretical magic. In reality, she was just a very good shepherd.
20 Lumione is a lot for Nora, but she should get more as she is the principal means to bypass the inspection.
Needless to say, Lawrence got double-crossed again. The Remerio Company, in dire straits itself, could only raise money to buy 100 Lumione worth of gold. 1,000 Lumione was just enough to pay off their debts and start afresh. They had to get rid of Lawrence and Nora.
Lawrence managed to turn the situation around with Horo's help. He forced Master Remerio to buy the gold from him at 500 Lumione — payable over ten years.
Lawrence then brought the deed to his guild, the Lowen Trading Guild. The person-in-charge bought the deed from him for 30 Lumione, plus another 100 if the gold was successfully smuggled (which it was, obviously).
In other words, Lawrence sold a 500 Lumione 10-year "junk" bond for 130 immediate cash. He ended up with 63 Lumione after paying Nora and his debt — 10 Lumione more than before his misadventure. Not bad.
(Lawrence's guild could have bailed him out. But then, we would have no story, so they invented a reason why the guild didn't do so — Lawrence got into this plight due to his greed.)
I feel Lawrence made his profits too easily. The price differential should not be so much, especially when the towns seem like they are neighbouring towns.
We are only exposed to two main currencies: Trenni and Lumione.
A Trenni silver coin can buy around 40 apples (at least), or pay for a night's lodging and meals. It is mentioned in the light novel that 1 Lumione gold coin can cover a person's living expenses for 3 months. Given that the exchange rate of 1 Lumione to 33 Trenni, that means a person can live on just 1/3 Trenni per day. To spend one Trenni in one go is a treat.
A third currency, the Torie, is used just once. Lawrence paid Nora 45 Torie for her escort service. How much is one Torie? My guess is that 40 Torie is just slightly more than 2/3 Trenni — no one will be willing work for less than 1/3 Trenni per day, because they won't be able to feed themselves. (At that time, Lawrence didn't know about Nora's circumstances.)
If the exchange rate is 0.75 Trenni to 40 Torie, then the exchange rate is 1 Trenni to 53.3 Torie.
I made so many bug fixes that I decided to modify the title screen too.
Trucker is a very simple game, but gives quite a realistic trucking experience, I'll say.
You can choose any cargo and route. Oranges will typically net you $1,200, freight forwarding $800 and US mail $600.
You can make it to New York in time on all three routes — some just barely, though.
Load just 39,350 pounds to avoid problems with weighing stations.
Don't buy tires for the northern and middle routes. You have a spare and flat tires are a rare occurence. Wait for one to blow first. It is worth buying a retread tire for the southern route.
Don't run out of fuel. That's an extra $145 (assuming $1/gallon is a fair price).
Don't be overweight. That's at least a $200 fine.
Always have one spare tire. Calling a tow truck is $400.
Always travel at 55 MPH. It consumes the least fuel.
Top-up to full when fuel is cheap (< 95 cents). When it is expensive, skip or just top up a little.
If you are shipping oranges, don't top up after resting. That takes an extra hour.
Rest one or three hours in the day time. Resting in the day time is only half as effective, but these two times give you one and two hours rest.
Rest 5 to 6 hours at night to recuperate.
Rest opportunistically when tired. Rest when fatigued. You must rest when you are exhausted! (In the later half, it is difficult to be better than tired if you want to make it in time.)
If you travel at 55 MPH, it is usual to reach New York at night. You need to wait until the next day. That'll cost you an extra $85, and 10% penalty if you are transporting freight forwarding. You need to plan your rest stops well.
My father went to McDonalds to have his breakfast. He told the counter crew he just want a burger, so he was recommended the Sausage McMuffin burger — at $2.95.
That's a combination of ignorance and bad advice there.
For $2.50, you can have the same burger and a cup of "premium" coffee.
Your speed can range from 20 MPH to 1.5x the speed limit. The usual speed limit is 55 MPH, sometimes 35 MPH due to road works.
Speed affects three things: time, fuel efficiency and speeding tickets.
Time is not really a concern. You can make it to New York under 4 days at 55 MPH if you time your rests well. You can earn over $500 easily if you avoid the most costly mistakes.
Also, you get the best fuel consumption (FC) at 55 MPH: 12.22 gallons/hour. At 65 MPH, you consume 26 gallons/hour! At 45 MPH, 18 gallons/hour. So, drive at 55 MPH.
(The formula is SP/(4.5-MIN(ABS(55-SP),12.5)/5)
.)
You are given a speed allowance using the formula SL-RH+10
.
If you exceed the speed allowance, you'll be checked against this formula:
RND <= (SP-SL+2*RH-5)^2/900!
, which is equivalent to
RND <= ABS(SP-SL+2*RH-5)/30!
.
(SP = Speed, SL = Speed Limit, RH = Road Condition.)
Route | RT | RH | SP | Speed ticket formula | Min %age |
---|---|---|---|---|---|
Northern | 1 | 4 | 61 | RND <= ABS(SP-52)/30! | 33.3% |
Middle | 0 | 2 | 63 | RND <= ABS(SP-56)/30! | 26.7% |
Southern | 2 | 1 | 64 | RND <= ABS(SP-58)/30! | 23.3% |
The chance of being caught is pretty high.
You are fined RT*5+NT*RND*20
dollars and NT*RND*5
dollars for every mile over the speed limit.
You are also delayed NT hours for your NTth offence.
It's game over on your 4th offence.
There are truck stops every fourth stop. If you give it a miss, you'll see a truck stop on every third stop.
You can refuel, buy tires and rest at a truck stop. A stop is always an hour, whether you do anything or not. (And it is not counted towards your rest time.)
Fuel costs 85 cents + a randomized 35 cents/gallon (min $0.85, max $1.20).
Keep in mind that your truck can only hold 200 gallons. Any extra is spilled! The display deliberately fudges a random -4 to +5 gallons.
If you don't have any spare tires, you will be prompted to buy one. A new one costs $200 + randomized $50, retread $100 + randomized $70.
If you rest in the day time (6 am to 5 pm), you only rest an equivalent of half the time + 0.6 hours due to day-time noise.
If you rest four or more hours, your tiredness factor (HL) is reset, otherwise it is halved.
Note that oranges still consume 7 gallons of fuel per hour when you are idling. Because of that, the game will prompt you to buy fuel again. (Answering yes here will cost you an hour. I don't know if it is by design or by accident.)
There are 5 possible road conditions (CR): 1 (clear), 3 (wet), 5 (rain/light snow), 10 (fog), 50 (blizzard).
Road condition is based on this formula: (3000+MF)*RND
.
Each route has its own mapping table, but generally, lower is better.
There are 6 driver conditions (CD): 1 (rested), 2 (fine), 4 (bored), 8 (tired), 25 (fatigued), 100 (exhausted).
Rules:
You start the game with 7 hours of rest and HL = 3.
Accidents are determined by the formula RND <
SP^2*CD*CR/1E+07
.
(SP = Speed. CD = Driver's Condition. CR = Road Condition. 1E+07 = 10 million.)
Some common combinations:
SP | CD | CR | AF | |
---|---|---|---|---|
55 | 1 | 1 | 0.031% | Best case at 55 MPH |
55 | 8 | 3 | 0.73% | When tired |
55 | 25 | 10 | 7.56% | Bad conditions |
55 | 100 | 50 | 151.3% | Worst case at 55 MPH |
45 | 25 | 5 | 2.53% |
Drive slowly when you are tired or when the visibility is low.
An accident is a one-time occurrence. The game shows different accidents based on CD, CR and SP, but they are all the same: your trip has come to an end.
If you run out of fuel, you'll be charged $200 for 55 gallons ($3.64/gallon). You'll waste up to 5 hours too.
Needless to say, don't run out of fuel.
The road condition determines how likely you are to get a flat tire. The
formula is RND < SQR(MF+100)*TC/(RH*25000!)
.
(MF = Miles Finished. TC = Tire Condition. RH = Road Condition.)
With the default tire condition:
Route | RH | 500 | 1000 | 2000 | 2500 | 3000 |
---|---|---|---|---|---|---|
Northern | 4 | 0.24% | 0.33% | 0.46% | 0.51% | — |
Middle | 2 | 0.49% | 0.66% | 0.92% | 1.02% | — |
Southern | 1 | 0.98% | 1.33% | 1.83% | 2.04% | 2.23% |
S (with one retread) | 1 | 0.69% | 0.93% | 1.28% | 1.43% | 1.56% |
If you blow a tire, your TC is lowered by 2*TS
and you are
penalized one hour plus a randomized 2 hours.
If you don't have a spare tire, you'll spend $400 for the tow-truck and lose 4 hours.
(Minor bug: oranges do not consume fuel here.)
Trucker sure packs a lot of stuff for a 394 line game!
McDonalds calls their standard-sized meal a value-meal. A burger, a pack of fries and a drink at $6.75? That's not much value for me. In comparison, you can get a fish-n-chip meal (no drinks) at Botak Jones for $7. Now, that's value.
I had a craving for fries today, but I didn't want to get a value-meal, especially when it is not filling enough for a dinner. So, I got two $2 burgers and a large fries instead. The total is $6.55, 20 cents cheaper than the meal — and is more filling too.
What about the drink? I bought a 1.5L bottle of Coke-light a few days ago for $1.70. That just gets you a medium-sized drink at McDonalds.
(Interestingly, Coke-zero is 10 cents more expensive than Coke-light, but they taste exactly the same.)
I remember there was a time McDonalds offered the Big Mac burger for $2. That was during the time of the Mad-Cow diesase, iirc. I often bought the burger and the fries for $4, skipping the drink.
A value-meal is what the consumer makes it so, not what McDonalds says what it is.
GET a degree from the Royal Melbourne Institute of Technology (RMIT) in just one year, for as little as $12,000.
Better yet, spare yourself the trip to Australia. Just head to Beach Road for evening classes once or twice a week, and hand up minimal assignments. No examinations required.
Sounds too good to be true?
Well, not to a few hundred Singaporeans who were persuaded by Brookes Business School in Beach Road to sign up for a one-year course leading to a fake RMIT Bachelor of Business degree.
A dozen of these 'RMIT graduates' told The Straits Times they enrolled between 2005 and late last year, and paid between $12,000 and $18,000 for the course, believing the programme was bona fide. At least one of them is still doing the course.
They were drawn by the fact that the school offered degree courses from an established brand-name institution. Also, it was a school registered with the Education Ministry and had a quality mark from the Consumers Association of Singapore (Case).
They attended evening classes in marketing or management once or twice a week and handed in eight to 10 assignments, which they were told would count towards their final grade. They were taught mostly by part-time lecturers whom they say kept changing. The school currently lists seven lecturers, including two expatriates, on its website.
But their suspicions were aroused late last year when rumours started circulating that one of their fellow 'graduates' received a stern warning from a bank after she applied for a job with her fake RMIT degree.
Of the dozen interviewed, two 'graduates' confirmed that they had used the degrees to land their current jobs - one as a senior administrative executive in a public institution and another as a sales manager in a multinational company. The others said they had not used their degrees, worried by the swirling rumours.
At least three managed to get full refunds of the fees they paid, after signing a form agreeing not to take any further action against the school. This was after the school's owner, Mr Benny Yap, initially denied that the degree was fake.
A polytechnic diploma holder said that at first, Mr Yap offered to exchange her RMIT degree for one from another university, but she refused to accept it.
Said the service industry executive in her 30s: 'Why would I want to replace one fake with another?'
Another 'RMIT graduate' working in an education-related business said she had been having sleepless nights worrying that her bosses would discover her certificate was fake.
'I thought it was the real thing and worked hard at all my assignments,' said the polytechnic graduate, also in her 30s.
Her assignments were never graded and returned, she said, but in the end she received a glowing transcript with more than a dozen distinctions.
A sales executive in his 30s, who only wanted to be known as Mr Chan, said he is still attending classes for his 'RMIT' business degree course. He showed The Straits Times his class schedule, notes and a receipt for the $5,000 deposit he paid.
He took up the course to improve his career prospects. 'Now I feel cheated,' he said.
Besides selling fake RMIT degrees, the school also peddled bachelor of business degrees from Brookes University, which students said they were told was based in Truro city in Cornwall, in the United Kingdom.
Four students said they had paid between $8,000 and $12,000 for this unaccredited programme and attended the same classes as the 'RMIT' candidates.
The Brookes University website describes it as a virtual university, without a campus. It claims to be accredited by the 'Global Accreditation Commission' in Wales, but adds that it is a 'non-traditional university' and therefore not accredited.
When The Straits Times called Brookes Business School to find out what other degrees it offered, a staff member proffered a one-year course from the University of Wales or the University of Ballarat in Australia, both costing $18,000.
The Straits Times contacted both universities. Ballarat University, an hour's drive from Melbourne, said it has no such agreement with Brookes.
The director of the University of Wales' validation unit, Mr Huw Hughes, whose name and signature appear on Brookes University degree transcripts, said he wrote to Brookes in April about his forged signature.
Brookes' Mr Yap replied, claiming that Mr Hughes' signature had been misused by a former staff member.
However, the University of Wales confirmed that it does offer a distance learning programme through the Institute of Administrative Management (IAM) in the UK and that Brookes is a tuition centre for IAM programmes.
It is not known exactly how many people have bought counterfeit RMIT and unaccredited Brookes University degrees. But going by the class sizes of 30 to 50 cited by the students, the total is likely to run into the hundreds.
RMIT, ranked No. 10 in Australia by the Times Higher Education-QS World University Rankings, is popular with international students, especially for its business and IT degree courses.
Dr Madeleine Reeve, Pro Vice-Chancellor (International and Development) told The Straits Times that the university became aware as far back as April 2007 that the Brookes Business School website advertised RMIT degrees.
Through its lawyers, RMIT demanded and obtained a written undertaking from Brookes' Mr Yap to remove all references to RMIT on its website and documentation. Mr Yap also promised to notify all students that Brookes had no association whatsoever with RMIT.
But earlier this year, a number of Brookes students e-mailed RMIT to check whether they were registered as students. They were not.
Dr Reeve said RMIT has since filed a police report here.
She said that RMIT courses have been offered here for years through a few private schools, the biggest being the Singapore Institute of Management (SIM), which currently has about 6,000 foreign and local students enrolled in RMIT programmes.
SIM charges about $30,000 for a three-year course. Doing the same degree at the Melbourne campus costs at least $100,000 in fees and living expenses over three years.
On average, polytechnic diploma holders are given a year's exemption and have to devote two years to full-time study to obtain a degree.
SIM chief executive officer Lee Kwok Cheong said the fake degrees were a serious matter. 'It clearly shows the need for new laws to regulate private schools,' he said.
Under a new Private Education Bill to be introduced in Parliament later this year, private school operators who misrepresent themselves and leave students in the lurch will face tougher penalties, including hefty fines and imprisonment. Mr Lee advised students to do thorough checks on their courses and schools and not to go for short-cuts.
Meanwhile, one 'RMIT graduate' said she recently resigned from a well-paying sales job after learning that her degree was fake.
Said the 28-year-old: 'I have come across many schools here that offer degrees from unheard-of universities in strange places. But when Brookes offered an RMIT degree, I thought there was no way it could be a fake, because no one would dare use the name of a well-established university like RMIT.
'I was wrong. I have wasted all my time and money.'
The real deal from SIM: $30,000 for a three-year course.
The same degree at the Melbourne campus costs at least $100,000 in fees and living expenses over three years.
Polytechnic diploma holders are usually given a year's exemption, but still have to devote two years to full-time study to obtain a degree.
Education is like selling hope. Parents are willing to spend for their children's education until they graduate. People who did not do well in their studies often do part-time studies to improve themselves after they started working. This is all very good, except the hopeful is easy prey for conmen.
Toxic products were given AAA rating, says Calpers
Calpers, the California state employees' pension fund and one of the most powerful fund managers in the US, is suing the three main credit rating agencies, saying they were negligent when they gave gold-plated ratings to mortgage derivatives that have since turned toxic.
The lawsuit adds to the growing pressure on the agencies – Standard & Poor's, Moody's and Fitch – over their role in inflating the credit bubble that turned spectacularly to bust.
Calpers claims that it lost around $1bn on securities that the agencies had said were as safe as government bonds.
The computer models used by the rating agencies to judge the creditworthiness of mortgage derivatives were "seriously flawed in conception and incompetently applied", the Calpers lawsuit alleges.
The pension fund invested $1.3bn in bonds issued by three structured investment vehicles (SIVs), specially-created investment companies whose assets included mortgage derivatives and other repackaged loans. All the bonds were given the gold-plated AAA credit rating, yet all three SIVs collapsed amid the market turmoil of 2007 and 2008.
The agencies "gave the SIVs purchased by Calpers their highest credit ratings, and by doing so made negligent misrepresentation," the fund's lawsuit says. "The credit ratings on the three SIVs ultimately proved to be wildly inaccurate and unreasonably high."
The SIVs in question include the finance industry's oldest and largest such vehicle, Sigma Finance, which was set up by London-based hedge fund Gordian Knot. The founders of Gordian Knot, Stephen Partridge-Hicks and Nick Sossidis, had been pioneers of structured finance while at Citibank in the UK in the Eighties.
The other two named in the lawsuit are Stanfield Victoria Funding, run by a New York hedge fund, and Cheyne Finance, run by London-based Cheyne Capital Management.
Calpers is not alleging wrongdoing by the SIVs themselves, rather that the rating agencies were riddled with conflicts of interest because of their close involvement in the way the SIVs were structured. SIV managers designed their vehicles precisely so that the top tranche of bonds issued would get a AAA rating.
"SIVs were opaque, and the rating agencies were the only entities other than those running the SIV with knowledge of what assets a SIV actually purchased," Calpers said. "The rating agencies were indispensable players in the structuring and issuance of SIV debt, which they subsequently rated for huge fees paid by the issuers – 'rating their own work', according to a recent Securities and Exchange Commission report."
Calpers, which manages $178bn of investments on behalf of 1.6 million public employees and their families, is the latest in a long line of investors to have launched lawsuits against the three main agencies. Standard & Poor's said yesterday that the suit was without merit and it would defend it vigorously.
The credit rating agencies – in common with many market participants – fatally misunderstood the effect of a housing market downturn on the many of trillions of dollars of derivatives whose value derived from the underlying mortgages. Many of these were "sub-prime" loans to borrowers with poor or incomplete credit histories, which began defaulting in unexpectedly high numbers in 2007.
Policymakers are examining ways to reduce conflicts of interest in the credit rating industry, and to help investors to be less reliant on ratings when they choose which bonds to buy.
About time!
So that we can find other bugs!
A colleague of mine finally fixed some long standing bugs in his code. So the code works now? Nope, it immediately revealed two more bugs, one in my code and one in his.
Programmers will know this is not a rare situation: a trivial bug can mask other more serious bugs.
This brings up a more serious issue. When doing web development, some people just target the two big browsers: IE and FireFox. In the bad old days, many developers just use IE, that's why there are so many sloppy sites. Thankfully, those days are over, to be replaced by an almost-as-bad practice: they use just FireFox! Luckily, it is possible to follow the standards and "hack" IE separately — most of the time.
While FireFox is much closer to the standards, it is not perfect. It is still necessary to check in other browsers: Chrome, Opera and Safari.
The Web App that I'm working on has a long standing bug that causes it not to load at all in Opera and works only partially in Chrome and Safari. To say it is a long standing bug is an understatement — it has never worked since day one.
Is it time to fix it? There could be other bugs hiding behind it.
You are a truck driver prying the Los Angeles to New York route. Your objective is to maximize your profit, of course. You may choose between transporting US mail, freight forwarding and oranges.
The problem with the game is that it doesn't come with any instructions. You certainly don't need any to play, but you won't be able to play optimally if you don't know the rules of the game.
This post will expose the game rules.
US mail: the most straightforward. You are paid 4.75 cents/pound; no time pressure. Unfortunately, that means you can only earn $2,375 before expenses. ($1,900 if you stick to legal weight.)
Frieght forwarding: you are paid 5 cents/pound, but you must deliver the cargo within 95 hours, or you will slapped with a 10% penalty. You can earn at most $2,500 ($2,000 with legal weight).
Oranges: you are paid 6.5 cents/pound (the code uses 6.500001), so you can earn $3,250 ($2,600 with legal weight). The catch?
Oranges require refrigeration. You'll consume fuel (at 7 gallons/hour) even when you are stopped.
This implies that if you run out of fuel, your oranges will suffer damage. Indeed, they do suffer a random 10% damage (at 5% granularity).
Even worse, your refrigeration unit may fail along the route. When that happens, your oranges suffer a random 0 to 20% damage (at 5% granularity).
If you take more than 4 days to deliver the oranges, they will suffer a random 10% damage (at 5% granularity) multiplied by the additional days.
Finally, the final damage must be 30% or less, or the whole batch has to be discarded and you have to pay $50 to dump them!
If you made it to New York from 6 pm to 5 am, you have to wait until 8 am for the warehouse to open.
You have a fixed cost of $85 + $85/day. For example, your cost is $340 if you complete the journey in less than 4 days.
You are expected to make a profit of at least $200/trip and an average of at least $250 over time. As a consolation, the game says you do a good job if you earn over $100. (I think it is wrong, it should be $1,000.)
You have three routes to choose from:
What's the difference? Road condition and speed allowance Personally, I'll just pick the shortest route. There is no real advantage in picking a longer route.
When you enter a new zone, you are subjected to one of the following actions:
0 | NOP | |
1 | Time zone changes, add 1 hour | |
2.x | Toll; 100*RND*x dollars | |
3.x | RND>=x | Road works; speed limit 35 MPH for an hour |
4.x | RND>=x | Speed radar; Speed+/-2; speed allowance +2 MPH |
5.0 | RND>=.5 | Detour 200 miles; speed limit 45 MPH until the next zone |
5.x | RND>=x | Weighing station; $200 + 2-5cents/excess pound |
6.x | RND>=x | Rock slide; randomized 6 hours delay |
7.x | RND>=x | Refrigeration failed (orange only); $100 + 2 hours |
The actions are hardcoded.
You can haul between 25,000 to 50,000 pounds; 40,000 being the legal limit. How much should you haul?
There is only one reason to haul less: weighing stations along the route restricts your total weight to 60,000 pounds. More cargo does not consume more fuel.
Your truck weighs 19,000 pounds, fuel is 7 * gallons and a random 250 pounds (granularity of 10 pounds) is added, so you can carry 40,000 pounds if you are willing to drive with fuel at 25% capacity. If not, then just haul 39,350 pounds — you will always be under the limit.
The fine is $200 + randomized 2-5 cents/excess pound. If you are carrying 50,000 pounds of goods, you will be fined at least $380. Ouch, there goes your profit!
Your initial tire condition (TC) is 10. If you get new tires ($200 each),
your TC is lowered by 4*T
. If you get retreads ($100 each), your
TC is lowered by 3*T
. (T = number of tires.)
You can buy up to three tires (of the same type). The third one is treated as a better spare tire (TS = 2) — you start the game with one spare tire (TS = 1).
There is no need to buy any at the start. Wait until you use your spare tire before you buy one — you rarely get flat tires.
Now you can start your journey!
It now cost $0.02/min to park in my office carpark. That's $1.20/hour, a huge increase from the previous $1.02/hour. Now 10 hours of parking will cost me $12 instead of $10.20.
And now it seems there is no more grace period at the 5 pm transition point. I was charged $13.08 when I exited at 5:08 pm instead of the expected $11.
The real reason why users don't need to upgrade: because Web developers always cater to them! The users don't see what's wrong, so they don't upgrade.
It is time to put in small and minor inconveniences, and they need to upgrade to get the "full functionality". An example could be the Date Picker. In IE 6, they have to enter the dates manually. In other browsers, they can choose the date from a calendar.
In truth, IE 6 is actually pretty feature complete even today — especially when augmented with Javascript.
Fireworks, fireworks, fireworks! Novel the first time, now it is just burning cash. Still a cheap way to entertain the masses, I suppose.
I hunted down the only GW-BASIC game that I could remember:
The actual title screen is in B&W, but the one I played was in magenta, so I "restored" it.
I also took some time to go through the source code. It was beyond my level last time. Now, it looks so simple — it is just 394 lines (about 6 pages). It is reasonably well-written, with well-defined variables and subroutines. Spaghetti code, this is not.
Quite surprisingly, the game has a number of bugs.
1440 IF AF>RH*25000*RND THEN GOSUB 2600
should be
1440 IF AF>RH*25000!*RND THEN GOSUB 2600
This is a run-time error detected by QBasic. The reason for the overflow error is because the game declares variables C to S to be integers, and the range of integers is +/-32k.
'!' makes the number into a float, so the expression will be promoted automatically. Other parts of the code do this, so obviously the original author must have missed this.
Your next truck stop will be four stops away. If you choose to skip it, you will be prompted at every stop due to a bug:
1720 IF IKEY$="n" OR IKEY$="N" THEN S=1:HL=HL+1:RETURN
You should be prompted every three stops:
1720 IF IKEY$="n" OR IKEY$="N" THEN NS=1:HL=HL+1:RETURN
At a truck stop, if you don't have a spare tire, the game will ask you if you want to buy one. If you answered yes, the game will execute this:
1850 STOP
This is rare because you start the game with one spare tire. I changed it to,
1850 PRINT:INPUT " Which type do you want";Z$:Z$=LEFT$(Z$,1) 1860 IF Z$="r" OR Z$="R" THEN XC=XC+T1:TS=1:GOTO 1900 1870 IF Z$="n" OR Z$="N" THEN XC=XC+T:TS=2:GOTO 1900 1880 PRINT"I did not understand your answers.":PRINT"Let's try again!":GOTO 1850
You are penalized for resting in the day. The code checks for before 1200 and after 2100:
1970 IF DH>21 OR DH<12 THEN T=INT(T/2+.6):PRINT"Thanks to the daytime noise, you got only"T"hours real sleep."
The wall clock is 8 hours ahead, so the code is checking for before 2000 or after 2900 (0500). So it is correct.
Note that the check is done after you stopped for an hour, so the day-time window is effectively 0400 to 1900.
If you run out of fuel, you are charged $200 extra for the top-up... except that you are not:
2550 WF=55:T1=INT(RND*5):HR=HR+T1:ZC=ZC+200:HL=HL+T1
It should read,
2550 WF=55:T1=INT(RND*5):HR=HR+T1:XC=XC+200:HL=HL+T1
You still waste up to 4 hours, though.
Every time you blew a tire, you get exhausted immediately.
2660 PRINT " It took"; T; "hours to change the "; T$; " tire.": HR=HR+T:HL=HR+T+1
HL is not updated correctly.
2660 PRINT " It took"; T; "hours to change the "; T$; " tire.": HR=HR+T:HL=HL+T
This line has two errors: using TIMEPUT
instead of
TIMEOUT
, and lack of whitespace.
2740 TIMEPUT=2:GOSUB59950:RETURN
should be
2740 TIMEOUT=2:GOSUB 59950:RETURN
This is a problem with interpreters. Javascript has the same problem.
The code uses COS()
to determine the driver's condition.
COS()
never returns a value greater than one, so it is very
easy to be fully rested.
3020 IF HL<4 AND COS(HR/HS)<2.3 THEN CD=1:CD$="rested & rearing to go.":RETURN 3030 IF HL<8 AND COS(HR/HS)<2.5 THEN CD=2:CD$="fine":RETURN
(HL = tiredness factor in hours, HR = total hours, HS = hours rested)
It should not be so easy. After correction:
3020 IF HL<4 AND HR/HS<2.3 THEN CD=1:CD$="rested & rearing to go.":RETURN 3030 IF HL<8 AND HR/HS<2.5 THEN CD=2:CD$="fine":RETURN
Now you must maintain a good total-to-rest-hours ratio too.
When the program ends, it tries to run another program:
4160 IF IKEY$="n" OR IKEY$="N" THEN RUN "b:???0??"
This will fail, of course. No one has a B: for years. I changed all
the RUN
to STOP
:
4160 IF IKEY$="n" OR IKEY$="N" THEN STOP
If you reach New York at night, you have to wait until next morning. However, the condition is never met because the code checks for the number of days:
5110 T=HR-INT(HR/24):IF T<10 OR T>21 THEN 5140
The formula should be T=HR-INT(HR/24)*24
.
We can use MOD
to extract the hours instead:
5110 T=HR MOD 24:IF T<10 OR T>21 THEN 5140
Note that the code takes before 1000 or after 2100 to be day-time. The "real" time (after conversion) is before 1800 and after 0500. It is correct.
You are supposed to be penalized when you deliver the freight forwarding cargo late.
5340 CX=2:PRINT" You're late!! Subtract ten percent penalty.":GOTO 5400
CX
is assigned a value, but the code doesn't actually
subtract it from XT
(profit). Hence, there is no penalty at all!
We fix this by adding this line:
5335 XT=XT*.9
Under some circumstances, the game will execute the subroutines when it should have stopped instead. I added this line to end the program:
5540 END
The game will hang from time to time. I believe it is due to the timer delay code. It multiplies the hour by just 120. It should be 3600!.
59950 TIMEOUT$=TIME$:TIME2=VAL(LEFT$(TIMEOUT$,2))*120+VAL(MID$(TIMEOUT$,4,2))*60+VAL(RIGHT$(TIMEOUT$,2)) 59960 TIMEOUT$=TIME$:TIME3=VAL(LEFT$(TIMEOUT$,2))*120+VAL(MID$(TIMEOUT$,4,2))*60+VAL(RIGHT$(TIMEOUT$,2)) 59970 IF TIMEOUT > TIME3 - TIME2 THEN 59960 ELSE RETURN
We can use TIMER
instead:
59950 TIME2=TIMER 59960 TIME3=TIMER:IF TIME3 < TIME2 THEN TIME3=TIME3+86400! 59970 IF TIMEOUT > TIME3 - TIME2 THEN 59960 ELSE RETURN
We gain sub-second delay as well.
I will cover this in another post.
In my search for JS/CSS minification techniques, I stumbled on the blog Moserware. His first entry has some background information on himself. We have a pretty similar start: GW-BASIC, QB4.5 and Delphi!
He also thought that he had learnt everything there is to programming after programming for a short time.
I think that's a pretty common experience. I also had my "I-know-programming" moment, way back when I was using GW-BASIC. I read the Reference Manual cover-to-cover, absorbing every single function. GW-BASIC has lots of functions. They cover everything I could think of, so naturally I thought I could program anything (except TSR), just that it would be slower and has 64 kB memory limitation. Ha!
Non-programmers count from 1. Thus, it is usual to see for
loops that count from 1 to N, rather than 0 to N - 1. I was taught this way
for GW-BASIC too.
Declaring an array:
10 DIM MYLIST(10)
Writing a for
loop:
100 FOR I = 1 TO 10 110 MYLIST(I) = 0 120 NEXT
This is wrong because, surprisingly for a beginner's language, array indices start from zero!
Those of us who knew wrote it this way:
5 OPTION BASE 1 10 DIM MYLIST(10) 100 FOR I = 1 TO 10 110 MYLIST(I) = 0 120 NEXT
Or this way (to be more like C!):
10 DIM MYLIST(9) 100 FOR I = 0 TO 9 110 MYLIST(I) = 0 120 NEXT
We were penalized by the teacher because we were not taught it!
5 OPTION BASE 1 10 DIM MYLIST(10) 100 FOR I% = 1 TO 10 110 MYLIST(I%) = 0 120 NEXT I%
First, GW-BASIC automatically assumes arrays have 10 elements, but it is still good to give them a size.
Second, we are using floating point numbers! Use '%' to force an integer. (In retrospect, using float as the default numeric type is correct — it is less likely to trip beginners.)
Third, it is recommended to put the loop counter in the NEXT
statement even though it is optional.
I wanted to test the above code to make sure I got everything right. GW-BASIC doesn't run in the Vista shell, but no worries, DOSBox comes to the rescue:
It took me a while to remember how to quit: by using the
SYSTEM
keyword.
It is possible to achieve dynamic minification with some server-side processing. This gives the best of both worlds: we can keep the logical source code structure and still deploy optimally.
Minification is usually done together with combining the files. I need that more than minification: I have 98 kB of JS code in 7 files (33 kB zipped) and 19 kB of CSS in 6 files (5.5 kB zipped). I should just need one JS file and one CSS file.
A quick search shows up a one-stop solution: Minify!.
Minification is not as straightforward as I thought. Even the simple process of removing whitespaces and comments can break things.
JS files can be minified and combined without special concerns. Sure, the lack of ';' can trip you up, but that's due to bad code.
Surprisingly, CSS files are not safe, due to IE hacks that require whitespace and comments to be present! Minify! will preserve the known hacks. Personally, I will not use such hacks because we can do conditional include for IE — which is guaranteed to work.
Also, some CSS files may not be combined properly, if they use the
import
keyword. The reason is that import
must come
before other rules! That's a strange restriction.
I am even more surprised that HTML cannot be minified directly. I forgot
that <pre>
and <textarea>
preserve
whitespaces. And IE conditional comments must not be stripped out!
As I don't need the full-fledged solution, I'll probably just build a simple wrapper around jsmin to minify and combine the JS files.
For me, it is more essential to strip out comments from JS files and combine JS/CSS files to a bare minimum. I don't really need to minify CSS and HTML files as I don't write much comments in them. Whitespaces are already compressed very well with gzip.
Update: my JS and CSS files are such a tangled mess that I can't combine them easily. I'll postpone it until I'm able to do a proper design.
I got a call from my mobile phone service provider that they would rebate $4 from my bill if I were to recontract with them for 2 years. $4 is very significant considering that my bill is just around $17.
So I'm watching a Korean drama. The guy treated the girl to a high-class restaurant for their first dinner date. The bill ended up at 426,000 Won, including 126,000 Won for a bottle of red wine. 426k Won is S$489, according to Yahoo Finance. Is this realistic for a dinner?
You know a place is expensive when there are no prices in the menu...
Vista finally shows a little more info when copying files. This gives the same info as XP, just looks nicer:
Well, Vista gives one more info: the speed.
What you know what I want? The ability to pause and resume a lengthy file operation; the ability to see the files being copied and change them on the fly; the ability to set the transfer rate — sometimes you want to leave some bandwidth for other apps.
I don't expect to have all these functionality out-of-box, but I should be able to add what I want — through the ability to script.
Of course, they call it registered warrants. Now, it can be very dangerous to accept one in lieu of real cash. You see, if you cash them in a bank and California reneges on them in October (the IOU's due date), you are still liable for it — as if it bounced; it is a recourse IOU.
As a sign of confidence, some banks have already indicated they will not accept these IOUs. Also, payday loan companies are willing to accept them at a discount of 40% from the face value.
People have already found a good use for the IOU: pay your taxes. California has a budget deficit due to tax collapse, and now you pay your taxes in these funny dollars? Hmm... talk about unintended consequences.
I wanted to use a file as a template, so I opened it and started editing. I then saved it. That was when I thought, have I made a copy of the file?
I haven't! And no backup or other copies!
When all appeared lost, I decided to give undo a try. It worked! I was able to undo everything!
Undo: never leave home without it.
I have very high expectations after I read that the Google Chrome OS "will allow users to access the Web in a few seconds". That sounds like ultra-fast startup time. That's a good start!
An OS should allow almost instant on and off — without losing data. In other words, we will always resume where we left off. (Shutting down is such a quaint concept; I haven't shutdown under normal circumstances in years.)
I wrote almost because it is currently attainable. Instant is not — yet. Almost-instant is 2 seconds at most.
When you think from the end-user's POV, the technical specs are not really important. CPU, RAM, HD size? All irrelevant, as long as the computer can run the apps snappily.
Google Inc is planning a direct attack on Microsoft Corp's core business by taking on the software giant's globally dominant Windows operating system for personal computers.
Google, which already offers a suite of e-mail, Web and other software products that compete with Microsoft, said on Tuesday it would launch a new operating system that will initially be targeted at netbooks.
Called the Google Chrome Operating System, the new software will be in netbooks for consumers in the second half of 2010, Google said in a blog post, adding that it was working with multiple manufacturers.
Netbooks are low-cost notebook PCs optimized for Internet surfing and other Web-based applications.
"It's been part of their culture to go after and remove Microsoft as a major holder of technology, and this is part of their strategy to do it," said Rob Enderle, principal analyst at Enderle Group. "This could be very disruptive. If they can execute, Microsoft is vulnerable to an attack like this, and they know it," he said.
Google and Microsoft have often locked horns over the years in a variety of markets, from Internet search to mobile software. It remains to be seen if Google can take market share away from Microsoft on its home turf, with Windows currently installed in more than 90 percent of the world's PCs.
The news comes as executives from the world's biggest technology and media companies, including Google and Microsoft, gather in Sun Valley, Idaho for an annual conference organized by boutique investment bank Allen & Co.
A spokesman for Microsoft had no immediate comment.
Key to success will be whether Google can lock in partnerships with PC makers, such as Hewlett-Packard Co and Dell Inc, which currently offer Windows on most of their product lines.
HP, the world's largest PC brand, declined to confirm if it would sell PCs running on the new operating system.
"We are looking into it," said HP spokeswoman Marlene Somsak, referring to the operating system. "We want to understand all the different operating systems available to customers, and will assess the impact of Chrome on the computer and communications industry."
Google's Chrome Internet browser, launched in late 2008, remains a distant fourth in the Web browser market, with a 1.2 percent share in February, according to market research firm Net Applications. Microsoft's Internet Explorer continues to dominate with nearly 70 percent.
The new Chrome OS is expected to work well with many of the company's popular software applications, such as Gmail, Google Calendar and Google Maps.
It will be fast and lightweight, enabling users to access the Web in a few seconds, Google said. The new OS is based on open-source Linux code, which allows third-party developers to design compatible applications.
"The operating systems that browsers run on were designed in an era where there was no web," Sundar Pichai, vice president of product management at Google, said in the blog post. The Chrome OS is "our attempt to re-think what operating systems should be."
Google said Chrome OS was a new project, separate from its Android mobile operating software found in some smartphones. Acer Inc, the world's No.3 PC brand, has already agreed to sell netbooks that run on Android to be released this quarter.
The new OS is designed to work with ARM and x86 chips, the main chip architectures in use in the market. Microsoft has previously said it would not support PCs running on ARM chips, allowing Google an opportunity to infiltrate that segment.
Charlene Li, partner at consulting company Altimeter Group, said Google's new OS could initially appeal to consumers looking for a netbook-like device for Web surfing, rather than people who use desktop PCs for gaming or high-powered applications.
But eventually, the Google OS has the potential to scale up to larger, more powerful PCs, especially if it proves to run faster than Windows, she said.
Google did not say how much it would charge for the operating system (OS), but Enderle expects Google to charge at most a nominal fee or make it free, saying the company's business model has been to earn revenue from connecting applications or advertising.
Microsoft declines to say how much it charges PC brands for Windows, but most analysts estimate about $20 for the older XP system and at least $150 for the current Vista system.
Li added: "A benefit to the consumer is that the cost saving is passed on, not having to pay for an OS."
"It's clearly positioned as a shot across the bow of Microsoft," she said.
You can see this coming when Google came out with its browser. First, web apps, then office apps, then a browser and now an OS.
In this aspect, I say Google is smarter than the other search engines. They stuck to the web, and got left behind when better contenders showed up. Google knew they would suffer the same fate in time, that's why they have to control the browser and the OS too. For example, browsers now have an integrated search. No one goes to www.google.com directly anymore. Will the default remains Google in the future?
The browser is the interface to the web. He who controls the browser controls the web. But browsers don't exist alone magically. They exist in an OS. Just look at Microsoft. Why is IE the dominant browser, despite being at least 3 years out-of-date?
Windows has grown too big and bulky over the years. Vista requires 15 GB to install. This is a result of Windows organic growth. New stuff is put in, but old stuff is almost never removed — the new stuff is built on top of the old stuff.
Yet, Windows has a very small core. People have produced "lite" versions of Windows since Windows 3.1. A super-lite version could fit into 2 to 3 1.44 MB floppy disks, iirc.
If you know how to use the Win32 GDI API, you can write snappy self-contained applications ranging from 20 kB to 100 kB — sizes not seen since DOS days. The problem is that no one knows how to (or bothers to) do it anymore, except for virus writers. We are too dependent on frameworks. The .NET 3.5 Run-Time is almost 200 MB, not counting the Service Packs. (But I read this is just the full installer. Installed size is around 50 MB.)
Windows is getting more and more irrelevant these days. I tinkered with it a lot in the past, but now I spend most of my time in just four areas: browsing, office apps (Outlook, Excel and PowerPoint), Explorer and watching videos. (Yes, Explorer made it into the list.)
I don't use Word, I prefer to use HTML. PowerPoint is also in danger of being replaced by pure HTML, at least for on-screen presentations.
As long as a computer can do these four things, I'm ready to switch.
I was intrigued when I read about sort()
's inefficiency in IE
at Web Reflection. I decided to investigate it myself.
Find out here.
Update (Sep 2009): updated link.
Compilation is slow. Yet, I think it is made much slower by our flawed compilation process.
Think about it, why should the compiler go through the whole file? Why not just the changed function? Why do we need to link? Why isn't it linked dynamically?
I've used a few fast compilers in the past: Turbo Pascal, QuickBASIC and Delphi.
To say Turbo Pascal is fast is an understatement. It is instantaneous. For a long time, I was biased against it because Pascal is, well, a "student" programming language. Real programmers use C and x86 asm. The Run-Time is also small and fast — Pascal code runs circle around my "faster" C code.
16-bit C compilers are a joke, due to x86's 16-bit data path, lack of general-purpose registers and "complex" memory addressing that the compilers don't know how to make good use of. In those days, it was effortless to get 50% speed boast by simply writing it in assembly. On Pentium-4? Even Michael Abrash, a good — if not the best — x86 assembly programmer doesn't try it.
Delphi is the successor to Pascal, so there is no need to doubt its speed. By this time, I've come around to like Pascal (it is a very elegant language) and scoff at C. I wrote my final year project in Delphi, but I also recognized it would probably be the last time I use it. The real world is C-based: C, C++, Java, Javascript and Perl.
QuickBASIC is not a real compiler, but it converts the whole program to pseudo-code before running it, so you can say it compiles the program. Unlike Turbo Pascal, it is merely a fast compiler. However, most of the time, it is able to run the program immediately after you press F5 (run) — zero compilation time.
How does it do it? It parses the source code as you load it and shows you only one function at a time. Thus, it just has to compile one function at most. But it does it one better: it compiles a line right after you leave it.
QuickBASIC is actually a pretty decent language. It still lives on as Visual Basic and VBA.
BTW, I ran Turbo Pascal and QuickBASIC on a 8 MHz 8088 with 640 kB — and they felt fast.
First, define a language that can be parsed easily, so that it is almost as fast as reading the file. IIRC, Pascal has a LL(1) grammar. Such languages can be parsed very quickly with very simple parsers.
Turbo Pascal goes through each file only once, even if it may be included by many files. (In Turbo Pascal, a file contains both its interface and implementation.) Visual C++ does it with precompiled headers, but it is still slow.
Second, break up the file into finer granularity. A function is a natural unit. It should be possible to compile only functions that change. This may require integration with the editor — the editor knows which lines have changed; by inference, which functions. It can compile as soon as you leave the function.
My blog does some JS processing when it loads. I decided to tweak it a little to be more efficient:
Browser | Before | After |
---|---|---|
Chrome 2.0 | 41 ms | 55 ms |
FireFox 3.5 | 86 ms | 112 ms |
IE 7 | 559 ms | 578 ms |
Opera 9.6 | 133 ms | 180 ms |
(Average of 10 runs.)
It's... slower? What have I done?
Previously, I get the list of articles 3 times. I now get it just once, so it should be faster, right? I would think so too.
The code used to look like this:
function process() { var list = $(ARTICLES); for(var i = 0; i < list.length; ++i) { ... } }
It now looks like this:
function process($list) { $list.each(function() { ... }); }
for
loop is faster.
I will keep the new changes, despite being slower. Using
each()
is more jQuery-y. And ultimately, speed doesn't
really matter in this case.
There are two well-known rules of optimization:
(Quoted from Michael A. Jackson.)
Okay, that's a joke (if only). The real rules:
I made a simple change to the Auto Thumbnail Generator: I will only compute the etag if the last-modified (date/time) does not match.
This will shave off perhaps 10 ms per image — more than what you would expect — because we can skip reading the file entirely if last-modified matches.
(Still, I didn't make this change to save time. I did it to reduce coupling and to be able to turn off one or the other in the future.)
Previously:
Now:
Note that this still isn't optimal. We shouldn't need to compute etag at all, if we have a persistent hashtable to store it.
If I wrote the code from scratch, I might have skipped etag altogether. Last-modified and etag both do the same thing. It's just that last-modified has a specific format and has only seconds granularity. Etag is usually a hash value, but it can be anything. In fact, some people put the Unix time there, because it can be used directly (in a program).
This is a good time mention an etag gotcha. Etags can be modified by the webserver or its extensions, usually by appending some text to it. Thus, you still need to parse it.
Since that's the case, you might as well use last-modified. No one ever touches it. Don't let the fact that it looks like a date deter you. All you need is a string comparison — there is no need to convert it to a numeric time first. It is either equal or not equal to the file's current timestamp. And I've mentioned why it is safe to do so: no one ever touches it.
I used to use the WiFi device's own utility to connect to my wireless network. You can control all sorts of options there, including the connection speed and even the device's power usage. But, the utility refused to run in non-admin mode. No choice but to use Windows XP's built-in wireless manager.
I was shown only two screens. First, I was asked to choose from a list of networks, including ad-hoc ones. Then, I was prompted for the security key. That's it? Will it work?
To my surprise, it worked flawlessly. I was converted. Since then, I have always used Windows's built-in wireless manager. As a user, I shouldn't need to know the details: type (a/b/g/n), security (none, WEP, WPA, WPA2), encryption (none, TKIP, AES) and the security key format (text/hex, 64/128/256 bits). The utility should auto-detect, or try starting from the strongest to the weakest.
So, if someone asks me if it is difficult to set up a wireless connection, I look at him strangely. It's just selecting the right network and entering the password. What's so difficult about that?
I want to cut down on my homepage's initial download size, but the solution must fulfill these conditions:
I was stuck because I couldn't find a pure JS solution that works when JS is absent. Such a solution means,
Fetching on-demand is not a problem with AJAX, but I couldn't find a reliable way to stop loading the HTML file.
The obvious thing to do is to split the tabs into physically separate pages, but this will duplicate the headers and footers. In the end, I decided to use PHP to dynamically insert the contents. It turned out that this simplified a lot of things. I was able to remove the Javscript tabs and special browser history handling!
The results:
Size | Files | |
---|---|---|
Initial | 725 kB | 44 |
Gzip JS/CSS | 644 kB | 44 |
One tab only | 222 kB | 26 |
Delay slideshow | 89 kB | 17 |
At the same time, I also delay loading the slideshow images. Previously I just put all the images in the HTML (they are stacked on top of one another). Now I define only the first as an image, the rest as strings. The slideshow will convert them into images as needed.
The eventual total size is 223 kB, 1 kB more than if I load everything in one go. It is the tradeoff for being much snappier.
The new user experience is not 100% identical to the old one, but it is close enough.
Currently, there is no way to indicate dependencies for Javascript files. The client must include all the necessary files in the correct order. Even if the loading is done by a loader, it must hardcode the dependencies within it.
No, the dependencies should be specified in the Javascript file itself,
just like #include
in C and import
in Java.
The problem is, the script executes as soon as it is loaded. Bad things happen if its dependent files have not been loaded.
What should we do? Simple. Load it as a text file, parse it to find its
dependencies and load them (recursively), then we process the file.
Initially, I thought it was necessary to fetch the file again as a script, but
it turned out I could just use the all-powerful eval()
.
As I drove past several bus stops at 6:25 am one morning, it struck me that many people were already on their way to work.
Due to the heavy reliance of public transport, it is usual to spend a lot of time waiting for the buses or MRT to arrive.
No wonder the stress level is so high and that many people aspire to own a car, despite the cost. A car do cut down on the travelling time, provided you avoid the peak hours and downtown area.
TWO in five private companies said that they would need to cut wages this year if business conditions worsened, when the Singapore economy contracted sharply by 4.2 per cent in the December quarter.
These firms employ about 44 per cent of the private workforce, according to the Report on Wages in Singapore 2008 and Singapore Yearbook of Manpower Statistics, 2009 released by the Ministry of Manpower on Tuesday.
The top two common measures of wage cut were cutting the annual variable component (74 per cent of firms) and basic wage (47 per cent), , followed by monthly variable component (15 per cent).
The majority of firms with MVC said they intended to cut annual variable bonus and/or MVC when reducing wages.
Establishments with a (MVC) were more confident of gaining their employees' acceptance of a wage cut, if they had to do it, said the 320-page report, which provides information on wages of over 400 jobs, as well as the wage changes and bonuses paid in various industries.
The report revealed that only a small minority (1.7 per cent) of private companies with MVC in their wage structure cut the component last year, given that the economic conditions deteriorted sharply only from the last quarter.
With the economic downturn and higher business costs in 2008, the report also found that employers were more restrained in giving pay increases.
Total wages, comprising basic wages and bonuses, rose by 4.2 per cent in the private sector last year, compared to 5.9 per cent in 2007.
It attributed the wage moderation to the drop in bonus payout from 2.36 months in 2007 to 2.31 months last year. This is a drop of 2.1 per cent, from an increase of 8.3 per cent in 2007.
The basic wage rise of 4.4 per cent was broadly unchanged from 2007.
The report also showed a 7.8 per cent slide in labour productivity from the drop of 0.8 per cent in 2007.
While real wages also declined during the year, it was less than the contraction in productivity. But from 2001 to 2008, growth in productivity had kept pace with gains in wages.
Occupations requiring higher skills and knowledge continued to command higher wages.
In June 2008, the median monthly gross wages was the highest for managers ($6,400), followed by professionals ($4,405) and associate professionals and technicians ($3,000). Clerical ($1,960) and sales and service workers ($1,849) were paid close to $2,000. Among blue-collar occupations, the production craftsmen ($2,137) and plant and machine operators ($2,009) were paid much more than cleaners, labourers and related workers ($975).
Wages also tended to rise with age as workers gain experience and skills and become more productive over the years.
The pace of wage increase with age is more pronounced among managers and professionals as their work is generally more knowledge intensive, the report showed. This was especially true among professionals where wages rose with advancing age groups, peaking for those aged 60 to 64 in 2008. In lower-skilled and blue-collar occupations, wages generally rose more gradually and peaked earlier for those in the late thirties or early forties.
The two reports can be downloaded from http://www.mom.gov.sg/mrsd/publication.
Consider this the official notice. Don't be surprised six months later...
THE recession is taking its toll on marriages as worries about finances and job security spiral into disagreements and fights.
Counsellors my paper spoke to say that they have seen an increase of up to three times the typical number of couples with such marital woes.
Clinical psychologist Marina Yap at the Centre for Effective Living in Camden Medical Centre said she is seeing 40 per cent more of such cases this year, compared to last year.
Ms Yap usually sees about two couples in a year. Since the beginning of this year, however, she has seen eight couples so far.
These cases usually 'centre on the grief of job loss, disagreement in finance management and lack of quality time together due to working overtime', she said.
Dr Adrian Wang, a consultant psychiatrist at Dr Adrian Wang Psychiatric and Counselling Care, said he saw a similar increase in such cases 'triggered by job and financial worries', compared to a year ago.
'Many men feel that their jobs define them. To lose it results not only in financial loss, but also a loss of face and purpose in their lives. They get cranky and upset,' said Dr Wang.
Besides the stress of being laid off, some men are also reluctant to face their wife's changing expectations, such as helping out with household chores, and this could lead to tension in the marriage, said counsellors.
There are also times when the wife is unsupportive of the retrenched husband and this may cause depression for the men.
'Their wives don't seem to understand the gravity of the situation and continue to demand that they live the lifestyle they're accustomed to,' said Dr Wang.
It is not surprising at all. It takes a while to accept the situation and even longer to adapt to a new lifestyle.
I reached office at around 6:45 am. I left at 5:12 pm (time at the exit gantry). I was charged $15.10! ($2.04 before 7 am, $1.02/hr before 5 pm, $2.04 after 5 pm.) Yes, the figures don't tally. I'm going to find out why tomorrow.
I should have waited until 7 am before I enter the carpark, and leave before 5:10 pm. That 17 minutes cost me $4!
(Why 5:10 pm and not 5 pm? I observed that the carpark allows a grace period of 10 minutes after 5 pm before it charges you $2 flat rate. It's as if you exit and enter the carpark again.)
Letter from Raymund Koh
I see motorcyclists, mostly despatch riders, riding their two-wheelers on pavements in the Beach Road and Raffles Place areas. A double charge of riding and parking on pavements would surely send a strong signal that the authorities do not condone this. Can the Traffic Police put a stop to this menace?
Why is it a menace? Parking should be allowed on pavements. The solution is wide pavement, double the current width.
Category | Jan | Feb | Mar | Apr | May | Jun |
---|---|---|---|---|---|---|
Basic | 1,061.55 | 985.02 | 2,574.12 | 685.04 | 987.35 | 869.82 |
Cash | 213.60 | 241.50 | 172.10 | 151.00 | 160.00 | 144.90 |
Vehicle | 258.35 | 307.97 | 577.60 | 1,886.78 | 146.74 | 836.51 |
Others | 116.30 | 875.00 | 308.15 | 391.94 | 66.00 | 28.99 |
Total | 1,649.80 | 2,409.49 | 3,631.97 | 3,114.76 | 1,360.09 | 1,880.22 |
Vehicle expenses are high due to road tax ($557).