i void warranties
if it ain't broke, fix it till it is
May 31, 2013
Business courses on Coursera
I wrote about MOOC earlier. Since I lack a lot of business management knowledge, I decided to look at Coursera in more depth and take some business courses there. I've already taken courses at edX, Coursera, and Udacity (big three of MOOC) at this point, and I think I can make a fair comparison of them.
I would not say that Coursera's courses are comparable to university classes. At best, they're similar to extremely high quality training courses. I took classes on innovation and operations management (among others). Both courses were 8 weeks long with some tests and "peer-graded" projects. The concepts I learned were solid though. Both classes have optional textbooks that must be bought separately that go into more detail than the online lectures and free materials, but neither require the textbook. The courses are completely self-contained. I spent roughly 4 hours per week on the innovations course (standard track), and roughly 8 hours per week (practitioner track) on the operatons management course.
And yeah, peer-grading really sucked in one of the other courses I took as the grading criteria wasn't clear at the beginning. Even though the class instructor posted in the forums to clarify the grading criteria, many people did not read the forums and I managed to fail the course spectacularly. The innovations course's projects were group projects, and many people complained that their partner got bored with the course and disappeared. (Apparently the course completion statistics of MOOC is only roughly 5~10%.)
These problem is in part due to the multitude of courses available from different universities and instructors. Some of the courses are really professionally made, while some seem to be put up in haste with bugs and missing features. Because I took so many classes all at once, it was quite obvious that the Coursera platform has many optional features that are up to the instructor and staff to use at will, and many are learning as they go along.
Coursera made headlines at the beginning of the year for introducing the Signature Track. The Signature Track really a certificate with a unique URL that contains the student's name and course details. Without the URL, the Coursera (and Udacity) "statements of accomplishments" are completely worthless since you can actually edit your profile name, and re-download any certificate, and the certificate will contain the new name. Another perk of the Signature Track certificate is that it looks really professionally made, I'm not sure though if it's a PDF file like the statement of accomplishment or if you get it in the mail. It costs roughly $30 to $50 for the verified certificate right now, but according to Coursera, prices will go up.
I paid for a Signature Track course just to find out what the verified certificate looks like and see how they handle the verification process. Every time you submit an assignment, there is a typing pattern recognition test and webcam facial recognition test to "prove" that you are really you, and that you're actually doing the work. This is kinda hokey since nothing stops you from cheating and proving yourself to the computer really proves nothing. Besides, I tried typing the verification phrase randomly and not sitting in front of the webcam when submitting, and Coursera still happily accepted my submission. I'm not sure how much tolerance the tests have, but they surely accepted anything I threw at them.
Even with all the verifications and stuff, the Signature Track certificate really doesn't hold any value since it's not from an accredited institute. But like I said above, Coursera's courses both in quality of material and length of the course are only comparable to high quality training classes as opposed to a university class, so they're still invaluable if you're thirsty for knowledge, and not just a piece of paper to prove to your employer that you took a class. Personally, I would pay for the Signature Track as a way to support Coursera, and also to make myself work harder on the courses since it's being paid for, and not give up so easily.
March 28, 2013
Udacity CS253 Web Development
I've never been really interested in "web development" even though I set up the first website in Thailand years and years ago as a joke that got me into heaps of trouble. But I was browing Udacity's course offerings, and the chipmunk looked just friendly enough for me to click in to take a look. The course is taught by Steve Huffman of Reddit fame, so I decided to check it out.
Lesson 1: HTML stands for Hypertext Markup Language! Here's how HTTP works! ...
Problem Set 1: Install Google App Engine and make a basic Hello, Udacity! web app.
?!?!?!?!?!?!?!?!?!?!
Okay, installing Google App Engine wasn't hard for me, but I'm sure there would be thousands of others who would be completely stumped by this. But Python? There's nothing in the course description about using Python and GAE (I had assumed JavaScript), but since I'm learning Python, so I was glad this was another chance to learn Python.
Lesson 2: Here's how to do basic HTML web forms!
Problem Set 2: Make a user signup form using App Engine.
?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!
Okay, this involved some reading of the fantastic manuals, but I was able to figure it out without too much trouble.
Lesson 3: SQL stands for Structured Query Language. Here's how to do some basic SELECT statements.
Problem Set 3: Make a blog.
Wow. I was hooked by Lesson 3 since the lessons have nearly nothing to do with the problem sets and the problem sets really needs a lot of documentation reading and web searching which I'm really good at. No hand holding here and nothing about breaking the problem down into little pieces. I read the outdated forum posts and people seem to be divided into those who were completely lost and those who were saying the course is too simple.
Lesson 4: Cookies.
Problem Set 4: Make the signup form work, including logins and logouts.
Lesson 5: RSS.
Problem Set 5: Make the blog output JSON.
Lesson 6: Caching.
Problem Set 6: Implement caching for the blog.
Final Project: Make a working wiki, including signups / logins / logouts, signed-in users are able to create new wiki entries, as well as edit existing wiki entries.
Bonus Final: Make the wiki display editing history.
Since Udacity's courses are all self-paced, I was able to complete the entire course in about a week. I watched all the videos and did the in-video quizzes, and completed all the problem sets, the final project, and the bonus final, and was able to download my Certificate with Highest Distinction.
Lesson 1: HTML stands for Hypertext Markup Language! Here's how HTTP works! ...
Problem Set 1: Install Google App Engine and make a basic Hello, Udacity! web app.
?!?!?!?!?!?!?!?!?!?!
Okay, installing Google App Engine wasn't hard for me, but I'm sure there would be thousands of others who would be completely stumped by this. But Python? There's nothing in the course description about using Python and GAE (I had assumed JavaScript), but since I'm learning Python, so I was glad this was another chance to learn Python.
Lesson 2: Here's how to do basic HTML web forms!
Problem Set 2: Make a user signup form using App Engine.
?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!
Okay, this involved some reading of the fantastic manuals, but I was able to figure it out without too much trouble.
Lesson 3: SQL stands for Structured Query Language. Here's how to do some basic SELECT statements.
Problem Set 3: Make a blog.
Wow. I was hooked by Lesson 3 since the lessons have nearly nothing to do with the problem sets and the problem sets really needs a lot of documentation reading and web searching which I'm really good at. No hand holding here and nothing about breaking the problem down into little pieces. I read the outdated forum posts and people seem to be divided into those who were completely lost and those who were saying the course is too simple.
Lesson 4: Cookies.
Problem Set 4: Make the signup form work, including logins and logouts.
Lesson 5: RSS.
Problem Set 5: Make the blog output JSON.
Lesson 6: Caching.
Problem Set 6: Implement caching for the blog.
Final Project: Make a working wiki, including signups / logins / logouts, signed-in users are able to create new wiki entries, as well as edit existing wiki entries.
Bonus Final: Make the wiki display editing history.
Since Udacity's courses are all self-paced, I was able to complete the entire course in about a week. I watched all the videos and did the in-video quizzes, and completed all the problem sets, the final project, and the bonus final, and was able to download my Certificate with Highest Distinction.
I'm now ready to take over the Internet.
March 15, 2013
Self-changing Wi-Fi password
I'm totally addicted to coffee, and whenever I see a new coffee shop, I would stop and try their coffee. These days, most coffee shops have free Wi-Fi, and sometimes, it's easy to drink one cup of coffee, and then steal their Wi-Fi permanently since most places don't have the knowledge to change their Wi-Fi password frequently. (Might as well not set a password if you never change the password!)
Presenting... automatic WPA2-PSK password changer for Tomato firmware. Put this little script into the Init script area (Administration -> Scripts -> Init). Now whenever the router reboots, a new password will be generated. You should also put this script either into a schedule so the password can change daily, or preferably, make a schedule to reboot the router daily.
As written the password is based on the current date. If you read the script below, you can see the password is based on a very simple formula: Year x Year x Month x Date, then use only the last eight digits. So if today is March 15, 2013, the password would be 82347605. You can vary the formula, for example, by using %U (week number) instead of %d to change the password weekly, or take out %d to change the password monthly. Just make sure the password is at least eight digits. I prepend the password with 00 in case the generated password is shorter than eight digits. It would be simple to make a spreadsheet with all possible future passwords, or even manually calculate the password.
The delay at the beginning of the scripts waits for the date to be retrieved by NTP. Note that if NTP time can not be retrieved, the Wi-Fi password will be the initial password, which is whatever you saved using the Basic -> Network configuration screen. My configuration is WPA2-PSK, other security types are untested. This script is tested on the ASUS WL500gP (v1 and v2) and the ASUS RT-N16.
You may have to change the nvram line depending on your Wi-Fi chipset if you have another Tomato supported router. The reason I set both wl and wl0 is that I needed both lines to support my notebook and my Android tablet. The wl line for my ThinkPad notebook, and the wl0 line for my Android tablet. If I don't have both lines, then only one device could connect.
Oh yeah, this is not a captive portal since there's no login screen for different users, but rather for changing the Wi-Fi password. As usual, no warranties.
As written the password is based on the current date. If you read the script below, you can see the password is based on a very simple formula: Year x Year x Month x Date, then use only the last eight digits. So if today is March 15, 2013, the password would be 82347605. You can vary the formula, for example, by using %U (week number) instead of %d to change the password weekly, or take out %d to change the password monthly. Just make sure the password is at least eight digits. I prepend the password with 00 in case the generated password is shorter than eight digits. It would be simple to make a spreadsheet with all possible future passwords, or even manually calculate the password.
The delay at the beginning of the scripts waits for the date to be retrieved by NTP. Note that if NTP time can not be retrieved, the Wi-Fi password will be the initial password, which is whatever you saved using the Basic -> Network configuration screen. My configuration is WPA2-PSK, other security types are untested. This script is tested on the ASUS WL500gP (v1 and v2) and the ASUS RT-N16.
You may have to change the nvram line depending on your Wi-Fi chipset if you have another Tomato supported router. The reason I set both wl and wl0 is that I needed both lines to support my notebook and my Android tablet. The wl line for my ThinkPad notebook, and the wl0 line for my Android tablet. If I don't have both lines, then only one device could connect.
Oh yeah, this is not a captive portal since there's no login screen for different users, but rather for changing the Wi-Fi password. As usual, no warranties.
#!/bin/sh
#www.ivoidwarranties.com
cat > /tmp/wifi.sh << EOL
#!/bin/sh
while [ \`date +%Y\` -lt 2010 ]
do
sleep 10
done
YY=\`date +%Y\`
MM=\`date +%m\`
DD=\`date +%d\`
SUMD=\$((YY*YY*MM*DD))
WIFIPW=\$(echo "00"\$SUMD | tail -c 9)
nvram set wl_wpa_psk=\$WIFIPW
nvram set wl0_wpa_psk=\$WIFIPW
service net restart
EOL
chmod a+x /tmp/wifi.sh
/tmp/wifi.sh &
Will update this page again when I have time to test if this script also works on the DD-WRT firmware.
March 10, 2013
Massive open online course
So, I was looking for some online Python tutorials when I came across edX and 6.00x Introduction to Computer Science and Programming. I've heard about massive open online courses ("free university") before, and I've certainly visited MIT's OpenCourseWare site frequentyly, but edX (what is it with adding X to everything these days?) seemed far more interesting than a self-study site, and 6.00x course just happened to be starting, so I registered for it to learn the Python language.
One thing lead to another, now I'm addicted to watching online lectures, and I've tried out courses in all three of the big MOOC players: Coursera, edX, and Udacity.
The difference between MOOC and other free learning resources is that they're operated like a real school. The courses run on a schedule and there are graded assignments. If you join the course too late you can't catch up, so it's best to wait until the next offering. At the end of the course you receive a PDF certificate if you reach the passing grade.
Even though they're free right now, but I imagine in the future it would cost some money to get a certificate, or perhaps a small monthly fee. In fact, as I type this I suddenly remember paying a $4.95 monthly fee for ZDnet University years ago. It was such a great idea back then, but eventually everything fell apart because the courses rarely got updated and they weren't structured like a real school, there was no wide support outside of ZD themselves, and the Internet was way too slow back then. I actually found a link that talks about ZDU. Good old days...
Anyway, Coursera is probably the most famous and with lots of partipating universities and hundreds of courses ranging from programming to biology to music appreciation. edX is owned by Harvard, MIT, and UC Berkeley and seems to be more technical and scientific. Udacity came out of Stanford and seems to have most "industry support" from technical leaders like Google or Intel and generally focuses on technical courses.
I really like Coursera's course offerings. I'm a technical person, but because IT is so much business now, I've been reading about the business aspects of IT, and I've been trying to hire someone into my team who didn't get started as a programmer. Coursera has everything I need. Unfortunately, Coursera's video player simply sucks. If I get any network hiccups and the video lecture pauses, attempting to resume the video just causes it to restart from the beginning. The video also plays in a pop-up window. If I accidentally click outside the pop-up window, the window closes, and if I click on the video again, it restarts too. This is quite unfortunate because all the videos I watched in Coursera appear to be really professionally made. They do offer a link to download the videos, but there are embedded quizzes inside the videos, and I believe I have to skip to the embedded quizzes to answer them even if I watch the videos offline. The web interface is really nicely made too, but apprently each course is free to do what they want with the organization, making things a bit confusing if you're taking more than one course.
(Edit: Also, because Coursera's courses are from so many different universities, each has its own stance on issuing certificates or credentials. I looked a bit and most don't seem to offer any credentials and seem to look at Coursera as an experiment to draw perspective students into their own paid online courses.)
I just wrote above that MOOC's are operated like a real school, but strangely enough, Udacity changed their policy recently to do-it-at-your-own-pace instead of scheduled classes. The reason being many people who are registered in these free classes are not full-time students, and often have trouble keeping up with the rigorous schedules more suitable for part-time or even full-time students. The problem with being at-your-own-pace though is that the forum discussions are totally messed up. I registered for a course and found many of the forum posts are from months ago, and it will get worse as time passes by. It also makes for people who just joins a course, does the final exam, and leaves with a certificate. Which is exactly what I did.
I guess this proves the certificate isn't worth much, and they should stick to scheduled courses and not open registration. But I've always had the same opinion about those MCSE and CCNA certificates. But hey, it might fool my boss. Other than that, all the videos I saw are amateurish, which isn't a problem to me since it actually feels like I'm in a meeting or a training session and not a classroom. But they could've made the slides just a bit more professional looking and not use handwritten papers for the presentations. (It does get hard to read at some points.) However, all these issues may be moot, since Udacity's courses are not based on actual courses, but they're all newly created specifically for the Udacity platform, and are often sponsored by IT industry giants, and all of Udacity's courses are computer or technology related at this point.
As for edX that I started with in the first place, it turns out that I prefer it the most. I'm enjoying the 6.00x Python course tremendously. I joined to learn the Python language and to refresh some computer science concepts, so the programming problems are really simple for me, and so I ended up spending most of the time in the forum trying to help others with their programming issues after I'm done submitting my homework. The video lectures are released on a schedule and programming homework have to be submitted on time. (The server crashed on the due time the first few times due to the sheer number of submissions.) Because everything is on a schedule, the forum discussions are current and viable. I have no trouble with the video player and if I do, I can click on a link and the video opens up in YouTube. The only drawback with edX is that they seem to have designed the site for people with huge monitors, I keep having to scroll up and down to view the course materials.
I tried a few different courses in edX and all the offerings have similar layouts, but it's still up to each course's designer how to organize their course material. 6.00x has really poor lecture notes, with each lecture's note separated into its own PDF file. But the CS188.1x AI course's lecture notes are organized into one large PDF file ready for printing out.
Speaking of printing out, one more cool thing about the 6.00x class is that the textbook (Introduction to Computation and Programming Using Python) used in the course is readable online inside the course material area. (And yeah, some of the Coursera courses I looked at seem more like disguised ads in order to sell the teachers' books.) When I first saw the textbook I noticed it looked pixelated instead of smooth like a PDF file. Sure enough, right clicking the page allowed saving the page as a 1700x2200 png file. The significance of that size is that it's a letter sized page at 200 dpi, perfectly suitable for printing out!
October 30, 2012
300 dpi
August 6, 2012
Arduino RFID (part 3)
(... continued from part 2)
I'm famous!
I'm famous!
When I presented my new standalone RFID box to HR and management, their only reaction was... why is there no beep when a card was scanned?
Right. I know that audio feedback is one of the easiest and simpliest forms of physical feedback, and I should know that management wouldn't care about little technical details like being able to access logged data over http. Hmmf. Anyway, I managed to find a $1 piezo buffer for some hi-fi beeping.
Final BOM of my little RFID box:
Arduino Mega (clone)
Stronglink SL018 Mifare module
Ethernet Shield with POE
16x2 character LCD display
DS3232 RTC module
Generic piezo buzzer
Generic plastic project box
All parts were purchased locally from ETT (Arduino, LCD, DS3232) and ThaiEasyElec (SL018 and Ethernet Shield).
All parts were purchased locally from ETT (Arduino, LCD, DS3232) and ThaiEasyElec (SL018 and Ethernet Shield).
Standard Arduino libraries used to support the hardware include SPI.h, Wire.h, LiquidCrystal.h, Ethernet.h, EthernetUdp.h, EEPROM.h, and wdt.h. External libraries include SL018.h, Time.h, DS1307RTC.h, and SdFat.h. The Arduino Mega uses the Optiboot loader with working watchdog timer. Due to all the libraries and strings, the compiled sketch is around 45K, so it will not work with the smaller Arduinos.
I'm still not sure if making my own RFID box is a good idea. However, the completed RFID box has far more features than any commercial RFID readers available locally (not counting eye candy like color touchscreen LCD display and talking clock), and costs a fraction of the price even though I'm putting the full Arduino board inside. I'm just not sure about the longevity of the individual parts or my soldering skills. But then again, the old RFID reader we had that died with the flood had frequent failures and the clock was never accurate. The 125 KHz prox cards used with that system was prone to failure too. Plus, I've opened up the reader and it was a rat's nest of wires.
I've been really busy lately with family matters. But I will post the source code of my RFID box in the next and final installment of this series.
(... to be continued.)
I've been really busy lately with family matters. But I will post the source code of my RFID box in the next and final installment of this series.
(... to be continued.)
Subscribe to:
Posts (Atom)






