Sunday, December 30, 2018

Windows 10 on a 15-Year Old Laptop?

Got my hands on a Dell Latitude D410 laptop, which was released back in 2005, and was wondering what OS to put on this. I hear you saying, just install Linux and she'll be right. I know, but where's the challenge in that?

So the laptop comes with an Intel Pentium M 750 processor, 2GB of RAM, and a 30GB hard drive. I know for a fact that 2GB RAM is enough for Windows 10, but that hard disk might need an upgrade. Took out my screwdriver, and guess what? It's still using the old PATA interface. All my spare 2.5" HDDs are SATA, so no upgrade. Next step is to check the processor compatibility with Windows 10 using this page. But, but the Dothan processor is not even listed there! No harm in trying, right?

Power on the laptop. Press F12 when you see the Dell logo to get into the one-time boot sequence selection. I can see the option for USB external storage, but the directional keys on the keyboard don't seem to work. Booted up again, and pressed F2 to get to the BIOS setup. Again, keys don't work. Fortunately, I've got an extra USB keyboard lying around, so issue fixed.

 Laptop starts reading from the USB stick and the Windows 10 logo comes up on the screen. Five seconds later, I get a blue screen with a sad face emoticon and some error message. I guess it's just too much to hope for, so I didn't even try to investigate or fix the error.

Moving on to Windows 7. The installation took longer than normal, but eventually the thing booted up just fine. Only issue is the drivers are the default ones. That means low screen resolution, no audio, no WiFi, no hotkeys, no sleep/hibernate, etc. And when I got to the Dell drivers and downloads page, there are only drivers for Windows XP and Windows 2000.

Why not just install CloudReady and be done with it? D410 is not on the Certified Models List, but I still pushed through. USB installer starts up then quits. Looks like I'm stuck with Windows XP. No issues installing Windows XP SP3. And after installing the drivers from Dell support page, everything is running properly.

My only concern is the software support, given the age of the OS, specifically the browser and the antivirus software. Most modern browsers don't support XP anymore, and Microsoft Security Essentials stopped support for XP long time ago. After a bit of research, I settled on Firefox ESR 52.9 (Basilisk is another option) and Malwarebytes 3.5, the last/final MB version that is compatible with XP/Vista. Hopefully this should be enough.

Laptop boots up nice and quick. CPU goes to 90% when watching videos on VLC, but can't really complain, given this is almost 15 years old!

Friday, September 21, 2018

Movie 2018.09.21 - Bad Genius

Bad Genius is a movie about a smart but poor scholar named Lynn, who gets involved in a cash-for-answers scheme to help out with her family's finances. She gets caught supplying answers to her classmates, and loses her scholarship. Not deterred, she hatches an even bigger, bolder scheme with a bigger target - the STIC exam.Together with an accomplice, they take the exam in Sydney, which has a 4-hour headstart to the rest of the world due to the timezone difference. During the breaks, they would go to the loo and send out the answers via SMS using hidden mobile phones. Plan sounds great on paper, but when you're holding up the cubicle for a long time, people tend to become suspicious. They eventually get caught out, but not before sending off the answers to Thailand, where their clients are patiently waiting. In the last scene of the movie, Lynn is blackmailed by her accomplice. Deciding to be honest this time, she goes to the authorities and makes a confession.

Interesting plot, but a little bit over dramatic and drawn out for me. A lot of unnecessary scenes to heighten the tension. And I doubt that finger-drumming actually works as a cheating method. Given how the seats are positioned, it would be hard for the concerned parties to see clearly Lynn's finger-drumming sequences. If the proctor had been paying attention, he would've noticed all of those sideway glances and a lot of finger-drumming as answers are being relayed. If not the proctor, other students not in on the scheme would've noticed something amiss and called it out.

All in all, the movie is not too bad, genius.

Thursday, August 30, 2018

Reinstalling Windows 7 Pro on a Dell Precision 3510

Company gave me a hand-me-down Dell Precision 3510. Takes literally minutes to boot up. When I press Ctrl-Alt-Delete, it takes literally minutes to give me the logon screen. I type in my username and password. Again, tens of minutes pass by before I get the desktop. With huge icons. IT doesn't want anything to do with it, and tells me to blow it away.

Tried to see if I can restore the laptop to a proper state. Boot up and press F8 to access the Advanced Boot Options menu. Click on "Repair Your Computer". Windows then loads some minimal files to boot up. Choose your language, log in as Administrator, and then you're presented with a choice of System Recovery Options. System Restore is not going to help as there were no previous restore points. System Image Recovery also won't help as no backup system image was created or found. So looks like we'll have to use the Dell Factory Image Restore option (usually the last item on the list).

The tool then goes about reformatting the hard disk and flashing the stored factory image from the recovery partition. In my case, the restoration always fails at the 63% mark. I guess the factory image is borked. Next up, the Dell OS Recovery Tool.

With this software, you simply provide the service tag, and it will download the appropriate Dell recovery image and burn it to a USB stick (at least 8GB) that you provide. Boot up the laptop, press F12 to change the boot order, and select to boot from the USB stick. In my case, the USB prep kept on failing. The tool would start writing the downloaded 7GB image. During the last few seconds (after half an hour or so), it would complain that something has changed and starts the process again, ad infinitum.
After half a day of trying, it was only after I switched to a SanDisk USB stick that the burn completed successfully.

Next problem. According to this, I was supposed to install Windows on the primary partition, but Windows says no. "Windows cannot be installed on this disk. The selected disk has an MBR partition table. On EFI systems, Windows can only installed on GPT disks." Simplest solution is to delete all existing partitions - OS, Recovery, Primary. Another way is to convert the MBR disk to GPT.

  1. Press Shift+F10 to bring up command prompt.
  2. Run diskpart command. 
  3. "list disk" to list disks.
  4. "select disk 0" if disk 0 is the one you want to install Windows on.
  5. "clean" to wipe the selected disk.
  6. "convert GPT" to convert the selected disk.
  7. "exit"
This time you should be able to install Windows successfully. Just be aware that during the restart, remember to remove the USB disk, so the laptop will boot from the hard disk.


Friday, August 24, 2018

How I Got My AWS Certification

Gives me something useful to do while idle and looking for a job. I mean, how hard can it be?
Entry-level AWS certification is the Certified Solutions Architect - Associate. Next level up is Professional.

Read from somewhere that the best way to go about this is via A Cloud Guru's course from Ryan Kroonenburg. Apparently, they used to host their courses on Udemy, and I guess business was so good that they decided to launch their own platform and host their own training videos. The 2018 course on ACloudGuru is $99. If you've bought the course elsewhere, you can transfer it to your ACG account and have access to their updated content. So I went to have a look at Udemy and guess how much is the ACG AWS CSA - Associate course? Currently going for a discounted price of $15! I guess you already know what happened next. Paid for my first Udemy course, and ported it over to ACG.

So I spent the next few days and weeks and months watching the video lessons whenever I have free time. Content is basically Powerpoint slides with Ryan's voice in the background providing additional commentary. First few sections are a bit dry, as we had to go through the intro, some history, overview of AWS and its major components, setting up a free-tier account, etc. Best thing about the course are the lab exercises. For the more complicated topics, we get video recordings with step-by-step explanation - spinning up your first EC2 VM, how to properly set up VPCs, implementing HA, etc.

Once I finished the course, and typed up all my notes, the next step is to take the certification exam. Concerned that the mock exams included in the ACG exam might not be enough to help me pass, I turned to online resources like AWS' own practice exams, Jayendra's Blog and WhizLabs. The latter's exam package costs $20 and gives you:

  • 7 sets of 65 unique questions each (mock exam)
  • 11 section tests (165 unique questions)
  • explanation for every question
  • unlimited access

As I don't like to over prepare, I didn't even take all of the practice exams. Did a set of 65 questions once. Didn't have time to do the sections tests. I also downloaded some sets of review questions and plugged them into Anki on my phone for constant review. (Quizlet also have some sets for AWS.) Once I got them all down pat, I took the actual certification exam. Aced it in one go.

Wednesday, August 22, 2018

Movie 2018.08.22 - Crazy Rich Asians

I've got the ebook, but haven't had time to read it, so watched the movie knowing nothing about it. Of course, except for the usual FB hype as to which actors are in the movie, why it's such a big deal in Hollywood, etc. etc.

To be honest, it was better than I expected it to be. I thought the movie is going to be an extended YouTube video of how the fuerdai spend their hard-earned wealth - the extravagant parties, the exotic vacations, the flashy cars, the one-of-a-kind luxury items, etc. Yeah, it has a bit of those, but surprise! - it actually has a story.

Crazy rich Nick brings poor professor girlfriend Rachel to meet the family, without telling her how wealthy the family is. Mom Eleanor disapproves because she thinks she's not good enough - not a real Chinese. Grandma disapproves because she feels she is the reason Nick is hesitant to come back home for good and take over the family business. All the girls disapprove because she is competition. To fluff up the movie a bit more, we have a crazy rich bachelorette party at a private island resort, a crazy rich stag party on a container ship, a crazy rich wedding at Chijmes, and a crazy rich engagement party at the Marina Bay Sands. Throw in an extramarital affair to add more drama.

In the end, Rachel managed to use game theory (or was that reverse psychology) to make Eleanor change her mind about her and bring about a win-win outcome. Nick proposes to Rachel with Eleanor's own engagement ring, and everyone lives happily ever after. Well, everyone except for unfaithful Michael who lost his golden ticket in Astrid.

Friday, August 10, 2018

Long-Term Learning

Nowadays, it's not just what you learn, it's also about how you learn it.

Ideally, we should be learning by doing as the retention rate is better. However, there are times when we simply need to remember a lot of things in the shortest amount of time. And this is done by rote memorization. I still remember cramming for exams using index cards, memorizing facts and formulas to get me through. Do I still remember them now? Of course, not.

How about learning languages? Well, there's an app for that. A lots of apps, actually. For vocabulary memorization, you can't go wrong with Memrise. For grammar, sentence structure, syntax, context, etc., get Duolingo as a supplement.

For everything else, you can make use of flashcard-based learning systems like Quizlet, SuperMemo or Anki. If you're not sure which one to use, try Quizlet first. Lots of study sets to choose from (or create your own), and usage is pretty straightforward. Select a study set, answer one question for every term, repeat until you get everything right.

For long-term learning, you might want to look into SuperMemo and Anki for their spaced-repetition algorithms. Spaced repetition makes use of an individual's forgetting curve - resurfacing a question just when you're about to forget it for maximum recall.

SuperMemo has been around for a loong time, and its algorithm now on its 17th iteration (SM-17). SuperMemo is not free though. It ranges from $10 to $60 depending on which version (algorithm) you get. Anki, on the other hand, is open-source and free. That said, I believe it implements the older SM-2 algorithm with a few enhancements. Quizlet now has SR as part of Plus offering, but that's $15 per year.

I'd say try out the free apps first and upgrade if you think you need something more.

Monday, August 6, 2018

Book 2018.08.06 - Automate This

Automate This: How Algorithms Came to Rule Our World by Christopher Steiner is what it says it is. It tells the story of how algorithms infiltrated Wall Street, and how they eventually started taking over almost all aspects of our lives.

Most of the stuff mentioned in the book we already know:

  • how algorithms made possible high-frequency trading (HFT) in the stock markets
  • how Google, Netflix, and dating sites make use of algorithms to make uncanny suggestions
  • how music labels and movie producers predict pop hits and box-office blockbusters before they are released
  • how algorithms are outperforming chess players, music composers, game show contestants, poker players, doctors, lawyers, pharmacists, radiologists, sports writers, etc.

There's one thing which is new to me though. When you call customer service, and the automated voice tells you that this phone call may be monitored or recorded for quality and training purposes, what do think is happening? I used to think that such calls are being recorded in case there is a disagreement, so management can go back to the recorded call and check who said what.

What is actually happening is that when you call, a bot listens in to the conversation. It is listening to your tone of voice, how you structure your sentences, what specific words you used, etc. It determines your "personality" within thirty seconds, and advises the call agent on how best to interact with you. Better still, the next time you call, the bot will be able to identify you, and route your call to an agent that best matches your personality traits for a faster resolution time.

The numbers don't lie. Data scientists took 1500 phone call recordings for a group of 12 customer service agents and crunched the numbers. When a caller gets paired with a agent with a matching personality, calls lasted for about 5 minutes with a 92% resolution rate. Matched with a "wrong" agent, calls lasted twice as long and the resolution rate drops to 47%.

With bots and their algorithms take over a lot of jobs (self-driving vehicles!), everyone should start thinking about getting into programming and computer science. Until the day bots start writing their own code.

Thursday, July 5, 2018

invalid vector subscript on MoneyManagerEx

I do my budgeting and income/expense analysis using this software package called MoneyManagerEx. Open-source and easy to use. Best of all, it's free.

So I was in the process of entering a "buy" share transaction. Being the lazy guy that I am, I duplicated a previous "buy" entry, instead of creating a new transaction. After making the necessary edits, the system came up with an error message saying "invalid vector<T> subscript". Cannot edit or delete the new entry because the system keeps throwing up this error message.

Searched the interwebs high and low and found only one reference regarding this. Basically, creating duplicates of stock transactions was never implemented in the software, yet was not specifically disabled. This is fixed in v1.4 where the Duplicate button is disabled for stock transactions.

To remove the offending transaction (if you know which one), you simply run a delete batch file via Tools --> Database --> Database-Debug:

-- MMEX Debug SQL - Update --
delete from CHECKINGACCOUNT_V1 where TRANSID = x;

In general, we first need to list out the account ID of the shares:
select ACCOUNTNAME, ACCOUNTID from ACCOUNTLIST_V1
where ACCOUNTTYPE = "Shares";

This tells us the correct linkages:
select ca.TRANSID, ca.ACCOUNTID, ca.TOACCOUNTID
from CHECKINGACCOUNT_V1 ca, SHAREINFO_V1 si
where ca.TRANSID = si.CHECKINGACCOUNTID;

With this we can determine the extra transaction that needs to be deleted:
select ACCOUNTID, TRANSID, TOACCOUNTID from CHECKINGACCOUNT_V1
where ACCOUNTID = x;

And this is how the debug file looks like (assuming 30 is the account ID of the share with the bad transaction:
-- MMEX Debug SQL - Read --
select ACCOUNTNAME, ACCOUNTID from ACCOUNTLIST_V1 where ACCOUNTTYPE = "Shares";
select ca.TRANSID, ca.ACCOUNTID, ca.TOACCOUNTID from CHECKINGACCOUNT_V1 ca, SHAREINFO_V1 si where ca.TRANSID = si.CHECKINGACCOUNTID and ca.ACCOUNTID = 30;
select TRANSID, ACCOUNTID, TOACCOUNTID from CHECKINGACCOUNT_V1 where ACCOUNTID = 30;

Problem solved.

Thursday, June 14, 2018

Free Qantas Frequent Flyer Membership

Note that we're talking about the $89.50 QFF membership and not the Qantas Club that gives you access to the airport lounges. THAT one costs $540 for a one-year membership, PLUS a once-off joining fee of $399. Wow!

Unlike Qantas Club, you can actually get QFF membership for free. As of this writing, there seems to be two registration links:

https://www.qantaspoints.com/join-now
AND
https://www.qantas.com/fflyer/dyn/joinff

Easiest way to get free QFF membership is to register using a foreign country. Membership fee is only charged if you're from Australia or New Zealand. Once the application has gone through, simply log in and change your address/country to the real one.

If you have kids aged 3 to 11, they can join the Joey Club, which comes with free QFF membership. They also get a welcome pack, including a Joey Club passport. Sign them up here.

There are also lots of online codes that gets you free membership, e.g. https://www.qantaspoints.com/join-now?code=FAMILYFREE

If FAMILYFREE doesn't work for some reason, feel free to try the below codes. They are known to work before:

  • WOOLWORTHS
  • BANKWEST
  • CBA
  • ANZ
  • AMEX
  • HSBC
  • DINERS
  • AVIS
  • NAB
  • UBER
  • DISCOVER
  • EVENTS
  • JETMAIL
  • BUDGET


Do note that these codes seem to only work with the first qantaspoints.com URL, and not the second qantas.com one.

The last time I tried applying for QFF, the website sort of just hangs with a circle that goes round and round forever. The registration page never gave an acknowledgement that the application was received or successful. That said, I did get a QFF card in the post a week later. Other people mentioned that you'll need to fill in ALL the blanks on the web form for registration to work. YMMV.

Monday, June 4, 2018

Memory, CPU and Processes in Linux

Got an alarm about this server having high CPU usage. From experience, I know it's usually due to memory exhaustion.

How to check memory usage in Linux?

[root@server ~]# free
              total        used        free      shared  buff/cache   available
Mem:        2097152      482772     1614380           0           0     1614380
Swap:       2097152           0     2097152
[root@server ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           2048         471        1576           0           0        1576
Swap:          2048           0        2048

Can also read /proc/meminfo file.

[root@server ~]# cat /proc/meminfo
MemTotal:   2097152 kB
MemFree:    1601748 kB
MemShared:        0 kB
Buffers:          0 kB
Cached:           0 kB
SwapCached:       0 kB
Active:           0 kB
Inactive:         0 kB
HighTotal:        0 kB
HighFree:         0 kB
LowTotal:   2097152 kB
LowFree:    1601748 kB
SwapTotal:  2097152 kB
SwapFree:   2097152 kB

You can use top command to get BOTH memory and CPU usage.
If have a newer Linux distribution, you can also use htop, which organizes the information better.

With top, the processes are sorted according to decreasing CPU usage. If you happen to be running Java apps, expect extra long paths and command lines that are truncated. To see the complete command, use the -vv switch (very verbose) to wrap around the output.

To view the processes organized in a tree diagram, which shows the relationships among the processes, use the pstree command.

Output showing garbled or strange characters? That's probably because the system is using the default UTF-8 language/character encoding. If you're too lazy to change the encoding, just use the -A (ASCII) switch.

Tuesday, May 29, 2018

Recipe 2018.05.29 - Sliced Chorizo and Diced Potato

Another quickie, two-ingredient recipe (if you don't count the salt).

Two sticks of chorizo - sliced. Two potatoes - skinned, diced, salted.

Fry the chorizo slices using a little bit of olive oil (or duck fat, if you have). Once a bit charred on both sides, remove from the pan.

Add more oil to the pan. Bring to high heat. Fry the diced potato until brown and crunchy on all sides. Add in the chorizo slices, then serve.

Friday, May 25, 2018

Recipe 2018.05.25 - Crispy Skin Duck Breast

Ingredient list, you say? Duck breast and salt and pepper. That enough for you?

Make sure the duck breast is at room temperature. For best results, score the skin of the duck breast in a crosshatch pattern, then apply salt and pepper all around. If you're lazy like me, you can forego the scoring, but it'll take longer to render the fat. Be careful not to score all the way down to the meat. The salt is to draw out the moisture, so the skin ends up crispy. Pat the skin down with a paper tower to make sure it's really dry.

Lay down the duck breast skin-side down on a non-stick pan at room temperature. If the pan's been preheated, then the skin will seal, locking in the fat, which is not what we want. Gradually turn up the heat, so the fat renders. Once the skin is crisply, turn over the breast. Turn up the heat to seal the duck breast.

Remove the pan from the stove and into a preheated oven (200°C), again skin side down for about 6 - 8 minutes.

Once done, rest for 5 minutes - skin side up this time. Cut into slices and serve.

Tuesday, May 8, 2018

Rasterizer vs. Rasterbator

According to Wikipedia, rasterisation is "the task of taking an image described in a vector graphics format (shapes) and converting it into a raster image (pixels or dots) for output on a video display or printer, or for storage in a bitmap file format."

In the case of Rasterizer and Rasterbator, these software take in an image file as input and blows up the image into a giant poster (in PDF) full of dots of varying sizes to simulate the original image. It's actually half-toning, but let's not get pedantic here.

The Rasterizer (currently v0.7) is a Java program that you download and run from you Mac or PC. You can run it via the CLI or a GUI front-end. With the Rasterbator (v1.21), you can do the rasterisation online by uploading your image or providing a URL, or you download an offline, standalone software.

Both software can do the job, but I prefer Rasterbator as you get a preview before you commit to the final PDF. The online version even overlaps a human figure, so you can estimate how big the final wall art will be.

Wednesday, May 2, 2018

XMPP Secure Messaging

Started looking for a messaging solution to communicate with my kid when he's away from home. Why not get him a phone with a SIM, you say? Well, he's not away that often, and I don't want to pay for an ongoing phone service that I'm not using. That removes WhatsApp, Viber, WeChat, Duo, Allo, etc. as an option as they require a verified mobile number in order to work. There are other options like Facebook Messenger and Google Hangouts, but that requires a user account, which I don't think a kid under 10 can legally sign up for.

Next best option? IM via XMPP. Signing up for an XMPP account is free and easy. All you need is a username and password. No other verification needed. For XMPP client, I'm using Conversations for Android. First, I tried ulloo.net. For some reason, OMEMO encryption didn't work. Tried xmpp.jp - same thing. At least xmpp.jp supports presence. Then I tried, chatme.im. This time, encryption (and presence) works fine. Note that chatme.im's website is in Italian, and I can't find any English option. (Google Translate is your friend.) If all you want is to register for an account, go here.

The great thing with Conversations is that it just works - no messy configuration needed. Just enter the username and password that you used when you signed up with your XMPP provider, and off you go.

Tuesday, May 1, 2018

Capturing L2TP Sessions

Lately, we're been seeing more and more instances of create session timeouts with the cause code 100 - "remote peer not responding".

With constant tunnel failure, it's likely to be due to unreliable transport. Either lost packets or the LAC/LNS getting the sequence numbers wrong, requiring a tunnel re-establishment. Best way to check is to get a trace and verify that the correct Nr/Ns sequence numbers are being used.

When capturing packets from an L2TP interface, you're getting both control messages and payload packets (both port 1701). Bulk of the traffic would be the latter, which does not really help with troubleshooting. To capture only the control messages, use this filter:

udp[8]>>7=1, where highest bit in the first byte of the UDP payload is the control flag

Obviously, if talking to multiple LNS, use the appropriate host IP as extra qualifier.

Good if your requests come in one at a time, and answered in sequence, like so:


More often than not, they come in bursts, and the LNS responds to some but not all. And some responses are delayed, which makes session tracking a challenge.

Best way to handle this is to look at the Assigned Session ID and Session ID in ICRQ, ICRP, and ICCN messages.

  1. ICRQ will have Session ID = 0 and an Assigned Session ID chosen by the LAC.
  2. When the LNS responds with an ICRP, it copies the original Session ID into the Assigned Session ID, and assigns its own Session ID.
  3. Then, in the ICCN, the LAC copies the Assigned Session ID from the preceding ICRQ into the Session ID field.
  4. And the final ZLB from the LNS increments the Nr accordingly.

Monday, April 9, 2018

Downloading YouTube Videos in a Playlist

Again, JDownloader 2 is the tool for you. With JDownloader 2 running, just copy the URL of the YouTube playlist. JDownloader will pick it up and start processing the whole playlist.
With each video in the playlist, by default, you'll get a video file, an audio file, an image file, and some text files - typically subtitles and file descriptions. With the video and audio file, you get multiple variants, if supported by YouTube - different filetypes, resolutions, fps, video/audio codecs, and bitrates.

To remove certain filetypes from the download queue, go to the Linkgrabber tab and enable Filetypes on the right panel. From there, de-select the filetypes you don't want to download.
If you have only a few files, simply select the audio/video variants you want from the drop-down lists beside the remaining files in the main window. If the playlist is composed of hundreds of files, we need a better solution. Again, on the right panel, enable Hoster. Right-click on youtube.com, and select the "Change variant" option.

Saturday, April 7, 2018

Invisible Torrents

So you're in the middle of adding some torrents into uTorrent, and for some reason it hangs. Oh well, just kill it via Task Manager and add the torrents again.

Every time you add the torrents, uTorrent says "The torrent you are trying to add is already in the list of torrents. Do you want to load the trackers from it?" You click the Yes button, and nothing happens. Okay, you add the torrent again. This time you click on No. Again, nothing happens. What's going on?!

Apparently, when the uTorrent crashed, the torrents that are in the process of being added are flagged as hidden. Expand the Labels link on the left sidebar, and you'll find the torrents under Hidden. Either delete and add again, or start the download directly via right-click.

If you're not seeing the left sidebar, enable the Show sidebar option under Tools, or simply press F7.

Friday, April 6, 2018

SpaceMonger vs. SpaceSniffer

Out of the 4TB that I got for my NAS a year ago, only 14GB is left. Time to find out what's been hogging my disk and purge some files.

Tried out two freeware utilities: SpaceMonger 1.4 and SpaceSniffer 1.3.0.1. SpaceMonger has since been acquired by Stardock and has gone commercial. What we'll be reviewing is the old freeware version.

If you're not too fussy, either is just fine. Both works as advertised, no installation required. SpaceMonger (SM) is 105kB in size; SpaceSniffer (SS) is much bigger at 1.6MB. And there's a reason for that. While SM reads a drive, then presents the drive usage as a static treemap, SS is able to analyze drives and arbitrary folder paths, and updates the treemap in realtime. No need to hit refresh. I guess, due to this feature, it seems like that SS is faster.

Looks like the winner is SpaceSniffer!

Thursday, April 5, 2018

Card Trick #5: Identifying a Random Card (Multiple Cuts)

The trick here is to memorize the bottom card without the volunteer noticing.
Ask the volunteer to pick out a card and place it at the bottom of the deck.
Ask him to cut the deck multiple times.
Fan out the cards. The chosen card will be to the right of the card you memorized.

Card Trick #4: Identifying a Random Card (Multiple Deals)

Deal a row of three cards.
Continue dealing overlapping three cards per row until you have three columns of seven cards.
Ask your friend to select and memorize a card, and tell you which column it's in, but not tell you what it is.
Pick up the three columns of cards, making sure the column with the chosen card is in the middle of the stack.
Deal again in the same way - seven columns of three cards. Ask your friend to identify the column with the chosen card. Gather up the cards witht the chosen column in the middle of the stack.
Do this again twice.
On your fourth deal, the chosen card will be the middle card of the middle column.
At this point, you can pretty much reveal the chosen card any way you like. Shuffle the cards, cut them, fan them out and pick it out as if by magic.
Even better, use the Magician's Choice. This force basically uses selective discard and retention of cards to give an illusion that your friend is the one choosing the cards, but in reality you're forcing them to choose one.
For example, lay out the chosen (middle) column into a row of 21. Ask your friend to select three card. If the chosen card was not selected, discard and select again. Once selected, retain the three cards, and discard the rest. Next, ask him to select two cards - using the same principle until he ends up with the chosen card.

Card Trick #3: Aces Together

For this trick, the aces end up on top of 4 piles of cards, even after multiple shuffles and deals.
Keep the four aces on top of the deck, and do some false riffle shuffles.
Hand the deck to your friend, and ask him to deal (face down) and to stop any time he likes.
Now ask him to pick up the cards and deal them into four piles.
Once done, ask him to turn over the top cards of each file. Aces all.

Card Trick #2: Keeping the Face and Ace Cards Together

Collect the face and ace cards in four piles.
Make up a story about the aces being the best of friends, which is why they always stick together. The same goes for the kings, queens, and jacks. They make such a commotion when they're together, so the teacher decided to split them up.
Lay out the aces in one row, deal the four kings on top of each aces. Do the same for the queens and jacks. You end up with four piles with A, K, Q, J each.
Turn the four piles face down and stack them up in one big pile. Ask your friend to cut the cards to separate them even more.
Deal the first four cards face down, deal the next four on top, and so on.
Turn over the cards, and the face and ace cards are still grouped together.

Card Trick #1: Cards of Same Suit Always in Order

For this trick, you'll need all 13 cards of the same suit, sorted in order.
You'll be dealing out the cards, and your friend will help you mix them up. When he says "Deal", you'll deal out one card face down. When he says "Double deal", slide the top card under the next card, then deal them both together.
This gives the impression that the order has been changed, but in reality, it's the same as dealing two cards separately - leaving the order untouched.
Once all the cards have been dealt, turn the cards over to find them all still in order.

Tuesday, March 27, 2018

Windows 10 Guest Account

Had some overseas guests staying with us, and realized that Windows 10 doesn't support guest accounts anymore. By guest account, I mean an account where you don't need to be authenticated, but can still use the PC and the internet. Not allowed to change any Windows settings though.

As far as I can tell, the guest account option is well and truly gone in Windows 10. There are lots of websites out there that tell you how to do it, but:

  • they either don't work and just mess up your OS, or
  • they're actually just a standard user account that is not as restrictive as the real guest account

If you're fine with option two, then read on.

1) Run Command Prompt as administrator.
2) Create a user account called Visitor. Can be any name as long as it's not Guest.
> net user Visitor /add /active:yes
3) Create a password for the Visitor account. Double-enter if you don't want to enter any password.
> net user Visitor *
4) Remove the Visitor account from the default Users group.
> net localgroup users Visitor /delete
5) Add the Visitor account to the Guests users group.
> net localgroup guest Visitor /add

To delete the Visitor user account, just go to Settings > Accounts, select the Visitor account and click Remove.

Now, apparently this does not actually give you a "real" restricted guest account, even though Visitor is part of the Guests user group. When you open up Computer Management, and read the description of the Guests user group, it says, "Guests have the same access as members of the Users group by default, except for the Guest account which is further restricted." If that is true, then might as well create a local (non-Microsoft) standard user.

  1. Go to Settings > Accounts.
  2. Under Other people, click on "Add someone else to this PC"
  3. Scroll down and click on "I don't have this person's sign-in information"
  4. Again, scroll down and click on "Add a user without a Microsoft account"





Thursday, March 15, 2018

Connecting Fronius Datalogger to Solar.web

First thing you'd want to do after having your solar (PV) system installed is to monitor how much power the solar panels are generating. Most inverters will have an LCD panel in front to show the relevant stats. But if you're like me, you probably don't want to be standing in front of the inverter out in the sun (or inside the garage) just scrolling through the numbers. Most inverters would also have realtime monitoring available through an online portal. In the case of Fronius, they have an app called Fronius Solar.web Live on Android and IOS, and an online portal called Solar.web at www.solarweb.com.

Two ways to get the inverter connected to your home WiFi network to get data monitoring going. The first is using an online wizard (wizard.solarweb.com), which you can access via a web browser (desktop or mobile). I tried using a desktop PC running Windows, and for some reason it didn't work. Second option is to call the commissioning wizard from within the app. Just click on the red icon on the lower right corner of the app.

Setup procedure is similar to how you would integrate wireless speakers and Chromecasts to your home network. Basically, you pair your app to the device using a special WiFi access point provided by the device. You provide the SSID and password of the home WiFi, so that the device can connect to the Internet, and continue the setup process from there.

The inverter access point is enabled from the inverter panel - under the Setup tab. Note that the inverter AP will only be active for an hour, so try to finish the setup by then. Ideally, the app should automatically switch APs, but if it doesn't, the inverter panel will display the SSID and password (12345678) anyway. Once connected, a form comes up and you'll have to specify the ff. information:

  • feed-in tariff
  • grid supply tarriff
  • time, day, timezone
  • a name for your PV system
  • PV power in watts
  • home WiFI SSID and password

Once this is done, the inverter will connect to the home WiFi, and you should do the same on your phone/tablet.

The app will ask you to set up a password for your inverter, and add more user accounts if you want to. You will then be redirected to the Solar.web portal to create an account to manage your PV system. Once you complete the verification process via email, you're pretty much done. You should now be able to monitor your system using the app or the web portal.

If you need more help, check out this video.

Next stop, PVOutput!

Setting the Clock on Sharp Carousel

Just realized that the Sharp Carousel microwave ovens to not have a clock button that allows you to set the time, unlike the Panasonic inverter ones.

So how to reset the time after a power interruption?

  1. Press the INFO/TIMER pad, then the number 3.
  2. Enter the correct time of day by pressing the numbers in sequence. (Note: 12-hour clock only.)
  3. Press the INSTANT COOK/START pad.

Thursday, January 25, 2018

Flashing LG G Pro 2 with Mokee

Next step is to root my newly-flashed KitKat LG G Pro 2. No more KingRoot for me. This time I went with DP Tools. (https://forum.xda-developers.com/lg-g-pro-2/development/tool-dp-tools-manage-lg-device-t3084979) As far as I can tell, it works as advertised. Naturally, for it to do its magic, you need to first enable USB debugging under Settings --> Developer Tools. If it's not there, go to About Phone --> Software Info and click on Build Number for seven times.

First time I did the one-click root, it reported Rooted. Yet, when I did Check Root, I didn't get a root prompt. Had to do the one-click root a second time before it eventually worked. Next up, copy over the TWRP APK to the phone and install. Again, "Install from unknown sources" have to be enabled first. Using DP Tools, I rebooted to recovery to make sure TWRP is indeed flashed properly. Full instructions here: https://forum.xda-developers.com/lg-g-pro-2/development/twrp-recovery-lg-g-pro-2-t3318686

You can also copy a newer version of TWRP (https://drive.google.com/file/d/1ADfHyz8ii6w_QErKkzhrKexTQ4a6cAXp/view), and upgrade by flashing the zip file using TWRP itself. With a custom recovery installed, upgrading to a custom ROM is easy peasy.

  1. copy over "LP Baseband and kernel(bumped)+KK bootloader" file", custom ROM, pico Gapps, and Magisk (for root)
  2. reboot to TWRP recovery
  3. wipe Dalvik, cache, data, and system
  4. flash LL baseband, flash ROM, flash Gapps, flash Magisk
  5. reboot into system

Detailed instructions here: https://forum.xda-developers.com/lg-g-pro-2/development/rom-resurrection-remix-m-t3520021
You have a choice of Lineage, Resurection Remix, and Mokee. For me, I chose the latter.

First boot takes an awfully long time. You'll be temped to restart the phone, but don't.

Downgrading LG G Pro 2 from Lollipop to KitKat

The wife recently took possession of a Xiaomi Redmi Note 4X, so her old LG G Pro 2 is mine to play around with. First order of the day is to root it. Lots of tutorials and scripts and tools around. Tried a couple of them, but didn't work. Maybe because the device has already been upgraded to stock Lollipop.

Getting impatient, I decided to use KingRoot. Big mistake. After installing and running KingRoot, it informed me that rooting was unsuccessful. Uninstalled the apk, yet KingRoot still persists. I bit the bullet, and did a factory reset. Guess what? Still there. Once in a while, I'll get a notification from Android asking if I want to disable KingRoot. I tap Yes, but it always comes back. Time for a system wipe.

The idea is to root the device, install a custom recovery, then flash a custom ROM. From what I've read in the XDA Developers forum, this is best done when the device is still on stock KitKat, which requires me to do a downgrade. Now, the problem with an "old" phone is that there are so many posts talking about the same thing, yet many of them have conflicting information. It's up to you to figure out which parts fit your situation. Worse, most of the download links to the ROMs or scripts are now broken. Either the personal domain is non-existent anymore, or the files have been taken down by the file-hosting company.

At the end of the day, I managed to get it done, and this is how I did it.

Downgrade from Stock Lollipop (D83820x) to Stock KitKat (D83810x)
Two ways to do this. Easiest way is to download a KDZ file and flash using LG Flash Tool. Here is the official procedure:
http://www.lg-phones.org/how-to-flash-unbrick-lg-g-pro-2-with-a-kdz-firmware.html

If that looks too complicated for your liking, you can try this modified flash tool from XDA:
https://forum.xda-developers.com/showthread.php?t=2797190

  1. copy KDZ file to the same folder as the flash tool
  2. power off phone
  3. hold down VolUp button, then connect phone to PC using USB cable (a.k.a. download mode)
  4. run LGFlashTool2014.exe file
  5. select KDZ file
  6. click on CSE Flash button

Normal Flash is for when you want to flash ROM without losing any data. Make sure you flash the same exact ROM as you have now, or you'll get bootloops. Used when you need to fix some system error. CSE Flash is for when you need a clean format. Obviously, all data will be wiped. Used when you need to downgrade or upgrade to stock ROM.

Next question is, where do you get the KDZ file? Lots of links on the forum, mostly dead. Well, I've got the link for you. If you're after your current ROM, use this:
http://csmg.lgmobile.com:9002/csmg/b2c/client/auth_model_check2.jsp?esn=<yourimei>
Replacing <yourimei> with your IMEI (15 digits).

You'll then be presented with the download link between the <sw_url> tags. You might also take note of the <buyer> tags, which tells you which region your phone is from.

<response req_cmd="auth_model_check" status="OK">
<auth_model_check>
<result>OK</result>
<esn>xxxxxxxxxxxxxxx</esn>
<model>LGD838</model>
<suffix>ACWTOP</suffix>
<msn>xxxxxxxxxxxxx</msn>
<esn_date/>
<sw_version>D83820B_00</sw_version>
<sw_url>
http://pkg02.cdn.gdms.lge.com/dn/downloader.dev?fileKey=xxxxxxxxxxxxxxxxxxxxxxx/D83820B_00.kdz
</sw_url>
<sw_locale_url/>
<sw_recommand_uri/>
<app_version/>
<app_url/>
<cs_em_flag>N</cs_em_flag>
<cs_em_uri>N</cs_em_uri>
<chip_type>EG</chip_type>
<prod_type>2</prod_type>
<buyer>CWT</buyer>
<file_name>D83820B_00.kdz</file_name>
</auth_model_check>
</response>

Need an older/newer KDZ from a different region/country? This link's for you:
https://lg-roms.com/LG-Firmware-List/LG%20G%20Pro%202
As of this writing, the download links still work.

The first time I ran the tool, the screens are showing gibberish. Window text is possibly in a foreign language, as I can only see question marks. Clicked a few default buttons, and the software quit. Re-ran the tool, and this time the text was in English. First try didn't work because one of the screens has one button to exit from the tool (while in the middle of flashing), which I clicked. Second try worked just fine.

If, for some reason this method didn't work, then you'll have to use flash method #2 mentioned here:
http://www.lg-phones.org/how-to-flash-lg-g-pro-2-with-a-tot-firmware.html
Similar information here:
https://forum.xda-developers.com/showthread.php?t=2475045

From there you can get download links to the flash tool, the crack, and the TOT/DLL files. That said, I wasn't able to find any working download links to the TOT/DLL files that I needed. Good thing the KDZ method worked for me.

Friday, January 19, 2018

周杰倫 - 等你下課 (with 楊瑞代)

周杰倫 - 等你下課 (with 楊瑞代)

作詞:周杰倫
作曲:周杰倫


你住的巷子裡
nǐ zhù de xiàngzi lǐ
我租了一間公寓
wǒ zūle yī jiàn gōngyù
為了想與你不期而遇
wèile xiǎng yǔ nǐ bù qī ér yù
高中三年我為什麼
gāo zhòng sān nián wǒ wèishéme
為什麼不好好讀書
wèishéme bù hǎo hǎo dúshū
沒考上跟你一樣的大學
méi kǎo shàng gēn nǐ yīyàng de dàxué

我找了份工作
wǒ zhǎole fèn gōngzuò
離你宿舍很近
lí nǐ sùshè hěn jìn
當我開始學會做蛋餅
dāng wǒ kāishǐ xuéhuì zuò dàn bǐng
才發現你不吃早餐
cái fāxiàn nǐ bù chī zǎocān
喔你又擦肩而過
ō nǐ yòu cā jiān érguò
你耳機聽什麼
nǐ ěrjī tīng shénme
能不能告訴我
néng bùnéng gàosù wǒ

躺在你學校的操場看星空
tǎng zài nǐ xuéxiào de cāochǎng kàn xīngkōng
教室裡的燈還亮著你沒走
jiàoshì lǐ de dēng hái liàngzhe nǐ méi zǒu
記得我寫給你的情書
jìdé wǒ xiě gěi nǐ de qíngshū
都什麼年代了
dōu shénme niándàile
到現在我還在寫著
dào xiànzài wǒ hái zài xiězhe
總有一天總有一年會發現
zǒng yǒuyītiān zǒng yǒuyī nián huì fāxiàn
有人默默的陪在你的身邊
yǒurén mòmò de péi zài nǐ de shēnbiān
也許我不該在你的世界
yěxǔ wǒ bù gāi zài nǐ de shìjiè
當你收到情書
dāng nǐ shōu dào qíngshū
也代表我已經走遠
yě dàibiǎo wǒ yǐjīng zǒu yuǎn

Gary:
學校旁的廣場
xuéxiào páng de guǎngchǎng
我在這等鐘聲響
wǒ zài zhè děng zhōng shēngxiǎng
等你下課一起走好嗎
děng nǐ xiàkè yīqǐ zǒu hǎo ma
Jay:
彈著琴唱你愛的歌
dànzhuó qín chàng nǐ ài de gē
暗戀一點都不痛苦
ànliàn yīdiǎn dōu bù tòngkǔ
Gary:
一點都不痛苦
yīdiǎn dōu bù tòngkǔ
Jay:
痛苦的是你
tòngkǔ de shì nǐ
合:
根本沒看我
gēnběn méi kàn wǒ
Jay:
我唱這麼走心
wǒ chàng zhème zǒu xīn
Gary:
這麼走心
zhème zǒu xīn
Jay:
卻走不進你心裡
què zǒu bù jìn nǐ xīnlǐ
Gary:
進你心裡
jìn nǐ xīnlǐ
Jay:
在人來人往
zài rén lái rén wǎng
合:
找尋著你守護著你
zhǎoxúnzhe nǐ shǒuhùzhe nǐ
不求結局
bù qiú jiéjú
合:

ō
Gary:
你又擦肩
nǐ yòu cā jiān
合:
而過
érguò
Jay:
我唱告白氣球
wǒ chàng gàobái qìqiú
終於你回了頭
zhōngyú nǐ huíle tóu

躺在你學校的操場看星空
tǎng zài nǐ xuéxiào de cāochǎng kàn xīngkōng
教室裡的燈還亮著你沒走
jiàoshì lǐ de dēng hái liàngzhe nǐ méi zǒu
記得我寫給你的情書
jìdé wǒ xiě gěi nǐ de qíngshū
都什麼年代了
dōu shénme niándàile
到現在我還在寫著
dào xiànzài wǒ hái zài xiězhe
總有一天總有一年會發現
zǒng yǒu yītiān zǒng yǒu yī nián huì fāxiàn
有人默默的陪在你的身邊
yǒurén mòmò de péi zài nǐ de shēnbiān
也許我不該在你的世界
yěxǔ wǒ bù gāi zài nǐ de shìjiè
當你收到情書
dāng nǐ shōu dào qíngshū
也代表我已經走遠
yě dàibiǎo wǒ yǐjīng zǒu yuǎn