Joining is easy.
Subscribe to our announce list. We'll send you a confirmation email in reply. Come back, enter the confirmation password, and you're done!
I have a bunch of notes from the O’Reilly MySQL Conference & Expo 2011, and I figure its about time I started blogging it. These are notes from the panel on the SkySQL Reference Architecture, led by Kaj Arno and Ivan Zoratti. The notes are raw (read their FAQ for more), and I talk a little bit about the SkySQL Configurator at the end (a tool I immediately used, and submitted some bugs/improvements for – 7 at last count, which I hear got fixed in the 0.02 release, which got pushed last night!).
There were 7 panelists. The MySQL world needs:
SkySQL Provisioning tools:
I did a test, and it seemed like I got binaries built in under 5 minutes. Custom configurations with a stock build. You get a 70MB binary. Hosted at http://www.enovance.com/. A lot of people never configure their my.cnf, so I think having a GUI on the web might be a good idea to help people have sensible defaults.
lovegood:skysql byte$ ls total 143352 drwxr-xr-x 3 byte staff 102 14 Apr 06:13 ./ drwx------@ 598 byte staff 20332 14 Apr 06:13 ../ -rw-r--r--@ 1 byte staff 73395132 14 Apr 06:12 SkySQL-mariadb-poboffcfrm5bi054559q8iea74.tar.gz lovegood:skysql byte$ tar -zxvpf SkySQL-mariadb-poboffcfrm5bi054559q8iea74.tar.gz x etc/ x etc/my.cnf x install x packages/ x packages/xtrabackup-1.4-74.rhel5.x86_64.rpm x packages/MySQL-client-5.5.10-1.rhel5.x86_64.rpm x packages/MySQL-server-5.5.10-1.rhel5.x86_64.rpmSkySQL is also going to have a customer advisory board, and they are starting it this week. (I don’t know any further details about this as of yet.)
The SkySQL Configurator can only get better. I expect it will do custom packages including things like Sphinx/SphinxSE, Drizzle, and other things in due time.
Related posts:
People are always in shock & awe when they find out that DiGi, one of the largest three telcos in Malaysia, had an employee that went out of their way to help me solve a problem in February 2011. So I naturally wrote to their CEO, Henrik Clausen, on Charlie’s can-do attitude. This was sent on 22 February 2011 14:35:10 GMT+08:00. I’m publishing it here so I don’t have to retell the story at bars, meetups, etc.
Dear Henrik,
As I am about to get on the same weekly call that I got disconnected from last week, I figured now is the best time to write a quick can-do note for one of your employees who went out of their way to solve my problem – Charlie Chia.
A little backstory. I’ve been a DiGi customer since March 2009, when MNP was enabled. It seemed time to become an Enterprise customer, so that was what I decided on the 10th or 11th of February 2011. My DiGi assigned provider told me that the numbers that were to be ported in would need new SIM cards but the current DiGi numbers should be fine.
On February 14, he was rather frantic that the DiGi SIMs also needed to be changed, but there was no way he could pass me the SIM cards then. On February 15 at about 4.30pm while I was on a conference call, my line went dead it just said “emergency calls only”. It was a public holiday of some sort, but I work most times when I’m in the country (I’m sure you understand running a business is tough and requires commitment).
I tweeted at about 5pm, thinking nothing of it. The @DiGi_Telco account seemed to also be on vacation. But what happened later was what was most amazing. Twitter user @CharlieChia told me that he will solve this problem for me, and by about 10.15pm or so, he brought the SIM card to me at Royal Oak in Jaya One, where I was wrapping up my second last meeting for the night.
Now that is service. And a total Can-Do for Charlie Chia
On the morning of the 16th February, I received all the other SIM cards for my accounts. All is well. We’re happy DiGI Enterprise customers now
And I am your loyal evangelist, because I cherish good service, and I ensure it is rewarded
Related posts:
If your on Campus at Newcastle university and want to watch some TV all you need is vlc media player.
The simple way is just lunch vlc remote it’s sitting on most university computers and select channel and go.
Otherwise just open vlc select open network media stream and copy address from below
ABC news24 udp://@239.240.240.1:1234
So, I wanted to do some very simple functional tests using a real-ish webserver, but I didn’t want to have to depend on twisted.web or an external setup. So I did this:
from wsgiref.simple_server import make_server from multiprocessing import Process, Queue class TestPosting(unittest.TestCase): # FIXME: THIS IS TERROBLE def setUp(self): self.q = Queue() self.p = Process(target=self.serve, args=(self.q,)) self.p.start() self.port = self.q.get() def serve(self, q): httpd = make_server('', 0, simple_app_maker(q)) port = httpd.server_port q.put(port) httpd.serve_forever() def tearDown(self): self.p.terminate() def test_something(self): url = "http://locahost:%s/whatever" % self.port ... result = self.queue.get() # make some assertions on the results def simple_app_maker(queue): def simple_app(environ, start_response): post_env = environ.copy() post_env['QUERY_STRING'] = '' post = cgi.FieldStorage( fp=environ['wsgi.input'], environ=post_env, keep_blank_values=True ) q.put(...) # put the relevant stuff in the queue status = '200 OK' response_headers = [('Content-type','text/plain')] start_response(status, response_headers) return ['Hello world!\n'] return simple_appjust have the simple_app function put whatever you want to check in the queue, and your tests pull it out and make some assertions. Super nasty, but it actually works!
So a little while ago (at 19:56:40) I posted a tweet containing just a single url. Within seconds, I had these bots requesting the file:
::ffff:128.242.241.122 - - [22/Jan/2011:19:56:43 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1" ::ffff:128.242.241.122 - - [22/Jan/2011:19:56:43 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1"No rDNS, but it is NTT IP space, who are who twitter hosts with, so could well be some official url scraping bot. Forgot to get my robots.txt, though.
::ffff:66.249.67.72 - - [22/Jan/2011:19:56:43 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 143 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"Google twitter search foo. Probably already had my robots.txt.
::ffff:128.242.241.122 - - [22/Jan/2011:19:56:43 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1" ::ffff:128.242.241.122 - - [22/Jan/2011:19:56:43 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1"Twitter again.
::ffff:65.52.2.212 - - [22/Jan/2011:19:56:44 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 199 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"Microsoft space, no rDNS, maybe Bing with a fake UA? No robots.txt retrieval.
::ffff:216.52.242.14 - - [22/Jan/2011:19:56:44 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 169 "-" "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"Linkedin, obviously - not sure if they scrape all urls or just the ones on feeds people have listed on their profiles (which I have). No robots.txt retrieval.
::ffff:128.242.241.122 - - [22/Jan/2011:19:56:44 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1" ::ffff:128.242.241.122 - - [22/Jan/2011:19:56:45 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Twitterbot/0.1"Twitter again.
::ffff:67.195.115.246 - - [22/Jan/2011:19:56:46 +1100] "GET /robots.txt HTTP/1.0" 200 146 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" ::ffff:67.195.115.246 - - [22/Jan/2011:19:56:46 +1100] "GET /what_loads_twitter_urls HTTP/1.0" 404 169 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"The very polite and honest yahoo bot.
::ffff:38.113.234.181 - - [22/Jan/2011:19:56:47 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 169 "-" "Voyager/1.0"Some social media search company called ‘kosmix’. Forgot to ask for robots.txt.
::ffff:65.52.17.79 - - [22/Jan/2011:19:56:47 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 199 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"Another MS bot, maybe bing again.
::ffff:89.151.116.52 - - [22/Jan/2011:19:56:48 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 529 "-" "Mozilla/5.0 (compatible; MSIE 6.0b; Windows NT 5.0) Gecko/2009011913 Firefox/3.0.6 TweetmemeBot"No idea. Reverses to bearpub.favsys.net, but (www.)favsys.net has no working web server. IP space belongs to some random dedicated server company. Possibly related to tweetmeme.com, some blah blah twitter trend thing.
::ffff:72.30.161.218 - - [22/Jan/2011:19:56:48 +1100] "GET /robots.txt HTTP/1.0" 200 146 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" ::ffff:72.30.161.218 - - [22/Jan/2011:19:56:48 +1100] "GET /what_loads_twitter_urls HTTP/1.0" 404 169 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"Yahoo again.
::ffff:50.16.239.114 - - [22/Jan/2011:19:56:52 +1100] "GET /robots.txt HTTP/1.1" 200 146 "-" "Mozilla/5.0 (compatible; Birubot/1.0) Gecko/2009032608 Firefox/3.0.8" ::ffff:50.16.239.114 - - [22/Jan/2011:19:56:52 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 169 "-" "Mozilla/5.0 (compatible; Birubot/1.0) Gecko/2009032608 Firefox/3.0.8" ::ffff:50.16.239.114 - - [22/Jan/2011:19:56:52 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 169 "-" "Mozilla/5.0 (compatible; Birubot/1.0) Gecko/2009032608 Firefox/3.0.8"Some ec2-hosted link trawling thing I guess.
::ffff:216.52.242.14 - - [22/Jan/2011:19:56:52 +1100] "GET /what_loads_twitter_urls HTTP/1.1" 404 169 "-" "LinkedInBot/1.0 (compatible; Mozilla/5.0; Jakarta Commons-HttpClient/3.1 +http://www.linkedin.com)"Linkedin again.
::ffff:184.73.156.250 - - [22/Jan/2011:19:57:02 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Firefox" ::ffff:184.73.156.250 - - [22/Jan/2011:19:57:02 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "Firefox"Random ec2 customer with a fake User-agent.
2620:0:10c0:1002:a800:1ff:fe00:11fe - - [22/Jan/2011:19:57:22 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "@hourlypress"Google ipv6 space! Given the user-agent and lack of rDNS, maybe it’s some software running on appengine?
::ffff:74.112.128.61 - - [22/Jan/2011:19:57:24 +1100] "GET /robots.txt HTTP/1.0" 200 146 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly/) Gecko/2009032608 Firefox/3.0.8" ::ffff:74.112.128.62 - - [22/Jan/2011:19:57:24 +1100] "GET /what_loads_twitter_urls HTTP/1.0" 404 169 "-" "Mozilla/5.0 (compatible; Butterfly/1.0; +http://labs.topsy.com/butterfly/) Gecko/2009032608 Firefox/3.0.8"Some social web search engine startup I guess.
::ffff:75.101.170.136 - - [22/Jan/2011:19:57:51 +1100] "HEAD /what_loads_twitter_urls HTTP/1.1" 404 0 "-" "PycURL/7.18.2"Some random python ec2-using bot that forgot to change their U-A or get my robots.txt.
If nagios claims:
Error: 'bar' is not a valid parent for host 'foo'!it is because bar doesn’t exist (e.g. you used a name directive instead of a hostname one).
If you have one of the free PositiveSSL certs that Namecheap gives away with new domains, you’ll find that it probably needs an intermediate cert to make OpenSSL stop complaining. Since they list a bunch here, let me save you some time: you need this one. If you’re using nginx, just add that file to the bottom of your signed cert (i.e. the thing PositiveSSL emailed you).
nginx now has ipv6 support! Yay! To have it work on Debian, all you need to do is open up /etc/nginx/sites-available/default and replace:
listen 80;with
listen [::]:80 default ipv6only=on;ipv6only=on here is a bit of a lie - it will listen on both ipv4 and ipv6.
Then, in your /etc/nginx/sites-available/* files, add
listen [::]:80;just below
listen 80;so nginx listens on both.
Thanks to the awesome work of Diego Giagio (for writing it) and Paul McEnery (for packaging it for Debian), using your iPhone as a modem under Debian is about 60 seconds work:
dmesg|grep iPhone should show something like:
[867025.370421] ipheth 3-2:4.2: Apple iPhone USB Ethernet device attached
and you’ll find you have a new Ethernet interface
This config snippet configures vim to highlight trailing whitespace in a horrendous red, making it easy to spot and remove.
:highlight ExtraWhitespace ctermbg=red guibg=red autocmd Syntax * syn match ExtraWhitespace /\s\+$\| \+\ze\t/Even better would be to only highlight it on lines that have been otherwise modified since the last commit…
Download it from here (with a browser, it does some redirect crap). Install dosbox:
sudo aptitude install dosboxIt is a self-extracting zip file, so you can either use wine to unzip (holy nuclear option, batman) or install unzip:
sudo aptitude install unzipCreate a directory that we can ask dosbox to mount as ‘C:’, then unzip it:
mkdir -p ~/.dos/Dune2 cd ~/.dos/Dune2 unzip ~/Downloads/Dune2.exeGet a default config file by starting up dosbox:
dosboxand (in dosbox) ask it to write out a config file for you:
config -writeconf /home/you/.dosbox.conftype ‘exit’ in the dosbox window to, er, exit. Add the line to mount the directory we created:
echo "mount c /home/you/.dos" >> ~/.dosbox.confand start dosbox again (with that config):
dosbox -conf ~/.dosbox.confand run Dune2 in the dosbox window (dosbox’s shell has tab completion, yay):
cd Dune2 Dune2.exeClicking in the window will make dosbox grab your mouse and keyboard - ctrl-f10 to escape.
Since feeds in ikiwiki are just the result of the [[inline]] directive generation a list of pages, you can use the combination of a pagespec and the tag plugin to stop ikiwiki from syndicating draft pages. Just include “!tagged(draft)” in your page spec for the page that generates the feed (e.g. blog.mdwn):
[[!inline pages="./blog/* and !*/Discussion and !tagged(draft)" show="100" ]]then for each article you’d like to hide for now, simply add the ‘draft’ tag:
[[!tag foo bar baz draft]]Since getPage just passes most of its’ args through to HTTPClientFactory, you can just make a simple wrapper to set the user-agent:
from twisted.web.client import getPage ... def my_page_getter(*args, **kwargs): if 'agent' not in kwargs: kwargs['agent'] = 'your user agent/1.2' return getPage(*args, **kwargs)We had a query about running Skype and WebEx on XOs.
Getting Skype to work is quite straightforward.
WebEx requires Java, which is trickier.
Note that I only tested to the point of being able to run a test applet in Firefox. If anyone wants to try WebEx, please let me know of your experiences.
©2011 Sridhar Dhanapalan.
This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Australia Licence.
Besides being your run of the mill computer geek, I’ve always been a bit of a car geek as well. This often solicits down-the-nose looks from others who associate such people with V8 Supercar lovin’ petrolheads, which has always surprised me little because the most fun parts of working on a car are all just testing physics theories anyway. With that in mind, I’ll do this writeup from the point of view of the reader being a non-car, but scientifically minded person. First a bit of background…
Background For the last 3 years or so my dad and I have been working a project to fuel inject our race car. The car itself is a 1968 Mk2 Cortina and retains the original 40 year old 1600 OHV engine. This engine is originally carbureted, meaning that it has a device that uses the vacuum created by the engine to mix fuel and air. This mixture is crucial to the running of an engine as the ratio of fuel to air dramatically alters power, response and economy. Carburetors were used for this function for a long time and whilst they achieve the basics very well, they are, at best, a compromise for most engines. To overcome these limitations, car manufacturers started moving to fuel injection in the 80?s, which allowed precise control of the amount of fuel added through the use of electronic signals. Initially these systems were horrible however, being driven by analog or very basic digital computers that did not have the power or inputs needed to accurately perform this function. These evolved to something useful throughout the 90?s and by the 00?s cars were having full sequential system (more on this later) that could deliver both good performance and excellent economy. It was our plan to fit something like the late 90?s type systems (ohh how did this change by the end though) to the Cortina with the aims of improving the power and drivability of the old engine. IN this post I’m going to run through the various components needed from the electrical side to make this all happen, as well as a little background on each. Our starting point was this:
To have a computer control when are how much fuel to inject, it requires a number of inputs:
Standard Crankshaft pulley
36-1 sensor wheel added. Pulley is behind the wheel
To read the teeth, we initially fitted a VR sensor, which sat about 0.75mm from the teeth, however due to issues with that item, we ended up replacing it with a Hall Effect unit.
The above are the bare minimum inputs required for a computer to control the injection, however typically more sensors are needed in order to make the system operate smoothly. We used:
So with all of the above, pretty much the complete electronics system is covered. Of course, this doesn’t even start to cover off the wiring, fusing, relaying etc that has to go into making all of it work in the terribly noisy environment of a car, but that’s all the boring stuff
ECUFinally the part tying everything together is the ECU (Engine Control Unit) itself. There are many different types of programmable ECUs available and they vary significantly in both features and price, ranging from about $400 to well over $10,000. Unsurprisingly there’s been a lot of interest in this area from enthusiasts looking to make their own and despite there having been a few of these to actually make it to market, the most successfully has almost certainly been Megasquirt. when we started with this project we had planned on using the 2nd generation Megasquirt which, whilst not having some of the capabilities of the top end systems, provided some great bang for bang. As we went along though, it became apparent that the Megasquirt 3 would be coming out at about the right time for us and so I decided to go with one of them instead. I happened to fluke one of the first 100 units to be produced and so we had it in our hands fairly quickly.
Let me just say that this is an AMAZING little box. From what I can see it has virtually all the capabilities of the (considerably) more expensive commercial units including first class tuning software (Multi platform, Win, OSX, linux) and a very active developer community. Combined with the Extra I/O board (MS3X) the box can do full sequential injection and ignition (With direct coil driving of ‘smart’ coils), launch control, traction control, ‘auto’ tuning in software, generic I/O of basically any function you can think of (including PID closed loop control), full logging via onboard SD slot and has a built in USB adaptor to boot!
Megasquirt 3 box and unassembled components
In the next post I’ll go through the hardware and setup we used to make all this happen. I’ll also run through the ignition system that we switched over to ECU control.
SBS television recently screened a documentary about Yves Behar, the person behind the distinctive industrial design of the OLPC XO laptop. It’s a fascinating insight into the mind and influences behind one of the most influential designers around. The documentary was originally aired in November 2008, so it is a little dated. For example, Yves talks about the “XOXO” XO-2, which has since been replaced with the XO-3. Nevertheless, it is well worth watching.
You can view the full version at the SBS Web site. The section on OLPC starts at 14:48.
UPDATE: if you are having trouble viewing the video, try this one instead. The attention to detail and quality is astounding. Yves rightly points out that products seen in lesser economically developed countries are normally second hand or second rate. The design is rugged and functional. It provides scope for personalisation. What was most interesting to me is Yves’ commentary on the keyboard. Its one-piece design means that the letters can be printed in one silkscreening process. This makes it feasible to translate into languages that would be uneconomical with a standard keyboard design.
©2011 Sridhar Dhanapalan.
This work is licensed under a Creative Commons Attribution-Share Alike 2.5 Australia Licence.