Categories
Computers Thinking

The Internet hates programming

I was annoyed the other day by something the other day (well, by meetings in general), and wanted to check if other people are just as annoyed by it than I am. So I went to Google, started to enter “meetings are…” and since search is correcting what I type according to what people look for and type around the Internet, I got this:

Google's suggestions for what meetings are
Google’s suggestions for what meetings are according to the Internet

The results were really for my liking, and I was thinking whether I can use this to get some insights into fields of knowledge, for example what does the Internet think about different programming languages?

Started with LabView, since that’s the one I’m struggling at work at the moment (that’s for some other stories). I don”t want to overly generalize, and I have a lot to learn about it, but still, I am not that surprised by the Number 1 spell correction:

Labview is crap
Labview is….. crap, according to the Internet

So let’s see how the other languages and software engineering keywords come are treated?

Positive sentiments

There were some keywords with positive sentiments, never really among the top suggestions and never too many but there were

Neutral sentiments

There are some languages, that come up only with language related corrections, I guess that’s mostly because people don’t have strong negative or positive feelings, or maybe it’s more confusing then infuriating? Or people just don’t know much about some of these?

Mostly negative sentiments

Now onto the good parts…

I think my favorites are “worse than crap” and “an exceptionally bad idea”, with so explicit phrases, people must feel very strongly about it. Also, I’m surprised that with this many “dead” languages there’s still any programming going on! Of course, this is not an exhaustive list, would love to see more examples, and add to the list

Anyways, let’s head back to coding now that I have cheered myself up. Programming is hard, and the Internet knows that too.

Categories
Admin Lab Programming

Laboratory 2.0 – a monitoring system

Looks like that one of my specialty as a physicist, and contribution to the labs where I have worked so far, is bringing different kinds of programming techniques, and technologies to the table. I’m not saying I’m any better than many of the professors, post-docs, and students I’ve met so far (there are plenty of ingenious ones), it’s more like I experiment with different tools, have tried more of the cutting edge or recent technologies, did some web programming and could whip up something quick – that might not work very well at first, but does broaden the horizon for the rest of the people.

Also, I’m a lazy person, so want to automate as much as possible. That was on my mind recently when we have been preparing to do a vacuum-system bake-out. It’s essentially a procedure to have a delicate experimental system, mostly made up of steel, glass, and stuff like that, closed up from the atmosphere, all the air pumped out, then heated up to high temperature (~150-300°C). One has to be careful, because things can break, there are temperature limitations for some materials, also on how quickly that temperature can change, requiring careful monitoring of the status of the system. And the whole thing takes something like two weeks or more. Perfect setting for automation.

Set up the electronics

The pressure measurements are done by some expensive other equipment so didn’t have to bother with that one yet, so set to work first on the temperature monitoring. Before it was a bunch of thermocouples and multimeters, requiring manual intervention and lots of labour. Instead, got some inspiration from Adafruit’s Thermocouple Breakout Board, using the MAX31855 chip, and also from the Thermocouple Multiplexer Shield. It can handle only one channel, but can use some other chip together with it to switch between the different thermocouples, and so we can read it out one-by-one. The Adafruit board could only handle 1 channel, and the multiplexer shield was using an older chip for the measurement that I could not buy anymore. In the end, found a good analog multiplexer that one that is sold in the computer market here in Taipei, the CD4067B, and it works pretty well.

Breadboard setup for temperature monitoring Arduino
Breadboard setup for temperature monitoring with Arduino

Of course, setting it all up was quite a bit of fun times, as there were way too many gotchas along the way.

  • MAX31855 is a surface-mount component, and haven’t worked with it before. Not too bad, and can be much neater, just takes some plactice
  • MAX31855 is a 3.3V circuit, so the CMOS voltage levels used by my Arduino Mega ADK had to be level shifted
  • Unlike the older chip, MAX31855 really needs differential input, and it’s much more sensitive to the environment. This required different kind of analog multiplexer than that board had
  • The Arduino Mega is a new model for me, and had some strange behaviour in terms of the serial communication
  • Surprisingly there are not too many options for 3.3V voltage regulators over here, just the LM1117, which is different from what others are using elsewhere
  • Lots of noise and stability issues until figured out what should be how. For example under no circumstance should touch the thermocouple to conducting surfaces, and avoid ground loops
  • While MAX31855 says it’s “cold-point compensated”, meaning that it accounts for the chip-s local temperature when measuring the thermocouple, it doesn’t appear completely compensated, meaning that we can have unexpected measurement change because the chip is heating up for example by being in a closed box.
  • Figuring out the right amount of time to wait between switching channels (375ms seems to be good enough, 500ms is totally fine)
In the end, though, we did have a nice 16 channel thermocouple multiplexer, sending off the measurements onto an LCD screen and to the computer over an USB cable.
Temperature monitoring board soldered
Temperature monitoring board in it’s lab setting with 16 thermocouple channels

This is then saved in a database, and can be accessed from elsewhere.

Visualize!

The thing that my co-workers were most amazed by wasn’t the electronics. Sure, they haven’t worked with Arduinos, but did do similar stuff. Instead they liked the monitoring interface much more, this is the one on the picture right here (can click to enlarge)

Bakeout Monitor  interface showing the vacuum system, temperatures, pressures and long term graphs
Bakeout Monitor interface (click image for full view)

It’s the schematic layout of our equipment, with the temperatures positioned where the actual sensors are. Also, the change of the measured values in time are also displayed with live scrolling.

I’m not saying it’s great. Thinking about it, the major insight that made it good for the rest of the people is that I realized how much more people understand visual data: the placement of the values to the corresponding locations on the schematics. That’s the only thing.

So inside it’s a MongoDB database (learned from previous mistakes, using a replica-set at least), with Python scripts talking to the sensors and saving the data, NodeJS / Smoothie Charts for visualization (and plain old CSS positioning of <input> tags for the reading display), nginx‘s upstream module for running two monitoring servers just in case. It’s mostly in the Github repo of the monitoring code, as well as the Arduino sketch for talking to the electronics.

It was actually quite fun to write it all, and the gradual improvements, trying the new tech, trying not to lose to much data, amazed how well it works. Especially had a good time learning about the database, scaling, fault tolerance, performance…

Of course there could be room for a lot more improvements.

  • My failover-restart bash scripts are awful, though they do seem to work more or less and counteract the USB unreliablilities
  • There were some changes to Smoothie Charts that I could improve on: logarithmic plotting, some display enhancements, wonder if it can be more optimized for performance
  • More efficient data loading. 12h data is about 30Mb in JSON format, that I send compressed, apparently it gets down to ~5% in size, but it still takes quite a bit of time to process on the frontend
  • The layout now can be changed from config files if the sensors change, so co-workers can do that without programming knowledge. I wonder if that can be simplified even more

Of course, I’m a person who generally overengineers stuff, so maybe it’s good to stop somewhere. And the somewhere might be when I got to the point to use my Kindle for monitoring (craps out on 1h data already, but some real time things are good enough).

Bakeout Monitor interface running on Kindle
Bakeout Monitor on running on Kindle 3, not perfect but does work

Get on with it

I did learn a lot along the way, and I’m sure that with this experience I will be let to do a little bit more in the lab in terms of programming ideas. I don’t like that the rest of the system is currently forced to be LabView, but that’s for another post, and there are so many things that can be improved in general as well. Let’s just go and do that.

Categories
Life Thinking

The Lean Startup of Me

Recently I have read Eric Ries’ The Lean Startup, and it got me thinking on multiple levels. It had so many interesting insights and counter-intuitive results, that it really inspired me to take a good look at so many things I’ve been doing. I’m not running a startup (yet) by the common definition as in running a company, but take a look at his definition:

A startup is a human institution designed to deliver a new product or service under conditions of extreme uncertainty.

First, this pretty much applies to the physics lab I’m working in as a post-doc at the moment: team, uncertainty, novelty. Most definitely have to take a big look how can I that group better using the lean lessons (in another post).

On the other hand, could this definition apply to quite different but just as important thing: myself? I do aim at creating something new, making a person like no-one else in the history; I am extremely uncertain; and I’m a human as well (though not sure how many humans one needs for an “institution”).

The Lean Startup book cover
The Lean Startup book cover

Could these lessons somehow adapted to one’s own development as a person? Can the observations be far-fetching enough to encompass this much?

Startup lessions applied to a person

Here I’ll be picking out some points that stood out for me, and see if I can use them to be more successful – whatever that means (getting there in a minute).

Stop wasting people’s time

This is probably the number one thing he brought up. Stop wasting people’s – and your own – precious time. Don’t build a product that nobody wants (if you are a company), don’t make things unnecessarily troublesome for others. If discussing something, get to the point. If want something, use your voice. Don’t promise something then underdeliver. Make things transparent, whether it’s about good or bad things, since then others can make up their own mind with complete information and minimal distortion.

Make it clear to others that you expect the same from them as well.

When it is about myself, I should really figure out what is wasting time, and what is valuable. It is not always obvious, playing games, reading, watching a movie, checking things on the ‘net, writing emails can be just as much be a growing experience as total, utter timesink. I know already I have a lot of timesinks, now have to eliminate them so I can spend more time with the things I value. But it’s only me who can decide it, since everyone’s values are different.

I do feel that if there’s only one advice from the book to take, this would be it.

Learning

The second major thing that got to me, that the aim of the startup is actually learning. One has to learn what are the good things to do, how to handle different situations, what do people react positively, or even just how people react to different changes one makes in the startup setting. Success is then the amount of validated learning.

But this is the same thing for people: I should set up hypotheses, and learn about them, try to prove and disprove the fastest way possible, so I can improve my attitude and behaviour towards the world. By gaining more understanding, success is then now all that knowledge that I can put to use to achieve the goals I’ve set out to reach.

This learning for myself can be very many, all different kinds of stuff:

  • Could waking up earlier make me more productive during the day?
  • How can I make myself wake up ealier if I constantly oversleep 5 alarm clocks?
  • How to work together with people with the least amount of effort?
  • What is the setting I can enjoy my books the most?
  • What steps to take to become a better writer?
  • Would I improve my work environment if I applied some lean principles to our lab?
  • What’s the best way to start new projects?
  • Would delegating in some important side projects make them work better?
  • What techniques work best for me to learn new languages?
  • Would running, swimming, cycling, hiking or something else make me feel (and be) healthier?

These are not all good questions, not all actionable ones. Just all the things that I have brainstormed here, but it’s a start. Would have to take actual things to try and learn from. There are plenty of questions. Now just take the time to formulate plans and learning goals.

How to measure success

This is connected to the learning goals, in a way, that I would have to have some meaningful metrics whether I’m getting closer or not. The idea of “vanity metrics” and “actionable metrics” from the book are really fundamental things as well – way too easy to get useless (and even worse: misleading) vanity metrics of a process (such as total visitor count for a website) instead of actionable metrics (like income from products that didn’t exist in the company X years ago).

This is much harder to apply to people, as a person’s learning goals are probably more qualitative than quantitative, and quantitative things could feel quite awkward or unusual. But still:

  • How big part of  income is from projects that I have started in the last X years?
  • What fraction of my projects are still alive (even if not managed by me) after X years?
  • What fraction of people I worked together with started their projects on their own?
  • How big part of my communication is with my important long term friends? How many is with new friends? How big portion of my new friends are dropping out of touch within a year?
  • What fraction of books I’ve read inspired me in one way or another?
  • What fraction of new places I’ve visited, within the country or abroad, are such that I’ve haven’t heard about them X years ago?
  • How many new techniques, tools, languages I know and could use / use regularly that I couldn’t X years ago?
  • What fraction of ideas I come up with I could turn into working projects?
  • What fraction of my expenses I consider “well spent”?
This X years ago seems to be a convenient shortcut (also taken from the book), and there might be a better way of looking at things, though since we are talking about temporal change (getting better over time), it might be a good one.

5 Whys

The 5 whys is a very powerful management technique to figure out the root causes of things: whenever something bad happens, ask (and figure out) what was the immediate cause (the first why), then figure out the cause of that (the second), and go back at least 5 layers until you get to the root cause. Here’s an explanation video by Eric Ries how to use that in the startup setting.

It is useful to see beyond the obvious and fix the real issues. Can guide what should one put effort into, and how much. This technique would work right away with myself:

  • “I’ve broken an expensive PC card in the lab” (true story)
  • Why? – I connected the power supply wrong
  • Why? – I had a fleeting thought that it might not work, but didn’t pay enough attention
  • Why? – I was too sleepy that day
  • Why? – Stayed up too late for too many days in a row
  • Why? – Been on Facebook, checking things out

Here you go: cut down on Facebook, sleep better, don’t do anything critical when tired, do stop to think even if I know what should be done, and finally get my electronics knowledge in shape (and check out that power supply).

Outlook

Of course I wasn’t the only one coming up with similar ideas, there’s also for example The Startup of You, that seem to be a bit more focused how you achieve a startup, instead of the things I mentioned here of how to be a better/more successful person using the lean startup principles. Still there might be plenty to learn there. And here’s an infographic about that from Imagethink (picture #2 on their site).

Infographics
The Start-up of You from http://imagethink.net

All in all, I want to see how this works out in the long run. Will definitely be a lot of work, but there’s so much to gain, that it worth it. One doesn’t become an Elon Musk, a Salman Khan, Richard Branson or Richard Feynman by sitting around.

And to get there, you can leave me some useful or useless advice in the comments.

 

Categories
Computers Startups

A different smart dressing up

I was out with a few friends the other day, they were forming a team to go to StartupWeekend Taiwan Hardware next month. I have been to one or two previous StartupWeeekends and they are good fun. Haven’t made up my mind about the hardware one, but since they asked me could they prepare for it, since it’s their first experience, I did try to gather some advice. Not sure how better they are off with it, but I hope at least a little. Looking at the previous events, a little bit of experience and knowledge can put people way ahead, because Taiwan is just learning startups, every experience is golden.

Later, though I started to think what I have told them. One particular advice I had to examine: don’t start with a tech that you find interesting, start with a story instead and choose your tech for that.

Now I’m not that sure that this is a good advice for every occasion, especially because I was brainstorming about one particular tech that really excites me, and if I was right earlier, then I’m wrong now. And the more I thought about it, the more I felt, that there can be a case (especially for StartupWeekends) for starting with a tech, even if it is probably the harder way to get something awesome out of the process. Still, given that limitations make one more creative, it worth doing at least some proper brainstorming about it.

Lilypad Arduino

The tech I was thinking about that time was the Lilypad Arduino. I haven’t got one (it’s sitting in my Sparkfun basket, ready to be ordered), but really want to make a project using it.

Lilypad Arduino Ebroidery
Lilypad Arduino Ebroidery by Bekathwia (click picture for Flickr link)

The Lilypad Arduino is a microcontroller (a very tiny computer) that you can stitch (using conductive thread),  and people most often use it for wearable computing / smart clothes. It has a lot of periferials, could use it with LEDs, accelerometers, buzzers, buttons, light sensors, temperature sensors, wireless communication, vibration motors, and whatnot… Really the imagination is the limit.

So now the question is, what kind of projects I could come up with that could use this. In the last few days of brainstorming (and now writing this), I came up with a couple of opportunities, not sure if any of them has been done. Not sure about the quality either.

Project ideas

Smart bag: figure out how to make some simple/small way of communicating with a little sensor that can be attached to items that one does want to always bring along: keys, wallet, phone…. The bag would sense it if they are out of its range and warn the user. Never leave stuff behind at home or at a cafe.

Visual turn-by-turn navigation for cycles: use a smartphone to get navigation directions to where you want to go with your bicycle or motorcycle. A jacket is outfitted with lights on both arm, and would have a Lilypad to communicate with the smartphone, signaling which way to turn and when.

Movement direction clothes:  smart clothes that would detect the position and posture of the person wearing them, and use light or vibration to signal what movement is the next one. Could maybe correct choreography or teach karate katas.

Communicating clothes: this could be done in multiple ways, wireless, infrared (like the TV remote control, just two way), consciously controlled or in the background. Ultimate spy clothes, send messages between people in the crowd without them actually doing anything. Could local business send out signals that are received the clothes could prompt you with a deal or order ahead your favorite if you are a regular (though, this can really easily be very spammy). Also, the different units can synchronize with each other – cue super visual flashmob.

Smart bedding: what if your bed could monitor your sleep and  wake you up when the morning comes? Bit like Wakemate, but for the bed.

People tracking: build into work clothes for a factory and can log in and out people just by sensing them. Make it part of the ticket in an amusement park, and can see which rides are too popular, can communicate back to advise about waiting time and suggest other ways to pass the time. Finding people in a crowded place in emergency, see if anyone’s left behind. Though these can be very 1984 if done badly….

Health sensing: monitor vital body functions for people who are somehow at risk: older people, partying in town (drink responsively), doing sports…. Warn them when some critical situation is predicted.

Style guide: clothes having smart tags with “style” and “colour” and “pattern”, and either all of them collectively, or a central piece of clothing would check whether these thing you wear do match with each other. Could also make recommendations what to wear. “I have this trousers, shoes, and so on – which shirt should I wear to that?” – press a button, the right choice lights up or vibrates in the closet.

Well, that’s for now. Most of these, I realize, are quite a bit tentative, many of them seem to miss some key ingredient, or have a (technical) problem to solve before it would work. Which one would I bring to a StartupWeekend if I’d go, which one is ready to be made and could be made in 54 hours? Tough one…

Found anything interesting here, or have some more ideas? I’d love to hear them, let me know in the comments!

Categories
Learning

Online learning in the 2012 Spring semester

The 2011 Autumn semester brought a handful of online classes, and it worked out pretty well for me, as I finished 3 courses and learned a lot. After that success, arguably spearheaded by Stanford, I think everyone was expecting big things to come, and the the number of offered courses, also the number of course offering entities multiplied. I was looking forward to it as well, planning to dig into all different topics, and had to start choosing between all those classes, since I was interested in so many but definitely didn’t have time for all. In the end, the new semester was mostly a failure for me. Fortunately that doesn’t mean a complete failure of things.

First  of all, Stanford offered a lot of new courses, as more and more of their faculty wanted on, but then those courses were delayed by weeks, then months. It was pretty underwhelming and took some wind out of my sails. While I was waiting, I was looking around for other offerings, and fortunately there were some interesting stuff.

MITx 6.002x

MIT’s first offering (that I’ve seen) launched with quite the style, slick new website, corny promo video of two students preparing for and doing their MITx course, and so on. Nevertheless, the topic was interesting, 6.002x Circuits and Electronics. It’s right into the things I like to learn, and it’s engineering perspective (more practical) felt great to match my gaps in electronics education from the physicist point of view (more theoretical). It started great, and evolved a lot during the 14 weeks or running.

When it was new material, it was presented pretty well by Prof Anant Agarwal, it had great tools like interactive circuit design built right into the site, good quizzes, interesting questions. It was going all well, up until almost the end. Here’s the result of my course, ending in a grade C:

Results of the MITx 6.002x course

It all comes down to that I didn’t do the final exam. I could have. I had a whole weekend to do that, or about 4 days. Just it somehow didn’t happen, had “other things to do”, or something.

Right now it feels that all the things that went wrong with this course, can be traced back to handling it as the online version of the offline course (which is actually pretty explicit, denoting the course 6.002x, after the offline courss 6.002). If it was just about the content, it’s okay, but it was also about the teaching methods.

In the beginning I didn’t notice it a lot, but as the weeks progressed, one thing stood out is the number of reviews. Let’s review what you have just seen in the previous video. Then two videos later review it again. That got insanely boring in the end, and while I was managing it by skipping videos that were just reviews, my interest did take a little hit. It’s an online course, if someone wants to review a topic, can just watch the same video again, can’t they? Why not just refer to the previous material via a link or something?

The other thing is that for exams (the midterm and the final) they only left a weekend for, with 24h limitation after you opened the test. For an online course that seems to me again as a mistake, people are from all over the world, indeed they wanted to have a great variety of students from all different backgrounds, why to expect that people are available in a given 4 day interval? Let’s go a step further, why is there even a semester limit? I was doing multiple weeks in one go, then falling behind because not checking the site for a while. In the end, the whole 14 weeks of coursework, with exams and all, could be done in about 6 weeks if I wanted to, beside my daytime job. As soon as people go online, semesters make just as much sense as trying to stick to the same time zones for all the students – not much.

Of course, I’m very grateful for the whole course, even without taking the final exam I learned a lot, that I’m already using in the lab, and it helps me every time I do electronics (which is pretty much all the time). Just thinking that online education in this form is just faster horses, not automobiles, as Henry Ford would say.

It was a successful enough course, though, that it seems now they have extended the experiment into edX, an distance learning initiative. Let’s see what happens!

 Venture Lab

From the new Stanford bunch, Venture Lab (originally Venture Class) was one I was really looking forward to, since there is so much entrepreneurial influence from others in my life at the moment, looks like half of my friends are up to something. It was pretty delayed, I guess partly because they were changing base idea of the course, and partly because they were building a brand new site from scratch for that. Originally it was to teach people about technology ventures (and I had the matching book called Technology Ventures earlier anyway) in the usual online class way. When it launched it became a “lab”, where people form teams and collaborate and actually create new stuff. It was going to be really exciting!

Then when it started, after a first week or two, or maybe even less, it turned out that managing a team, even 4 people, remotely is not such an easy thing. If we were in the same place, and we got together because of the same vision, it might have worked. This way, fragmented both in ideas, in space, available time, skills and everything, it wasn’t working that much. Which is a really big shame, because I really liked the people on the team. I really hope to get back in touch with them again and do something else, though that is unlikely.

Venture Lab class interface

In the end I was just watching it from the sidelines (or still watching because due to the delay its semester hasn’t finished yet), and admiring the people who step by step built up something tangible. I heard multiple teams actually starting companies upon the ideas they came up with for the course. Now that’s some achievement! I feel a little bit that I missed a great opportunity to learn something, learn a lesson in an unusual way.

On the other hand, I did learn something actually: don’t throw good time after the bad one, if it feels it’s time to quit, then just do it. The sooner it’s done, the better everyone can move on to bigger and better things. So this course is not a total writeoff. And I’m still going to watch the videos, read the book, and get on with technology.

Udacity

This one was also something I was looking forward to, since Udacity was co-founded by Sebastian Thrun, who was an instructor in last semester’s AI Class. Looks like after last semester, he have seen the potential of online communities in learning environment, left Stanford (as far as I know) and came onto this project. They had and will have a lot of different classes, mostly IT related, from robotic cars to building website and programming languages.

I looked at a couple of different courses, and the most amazing thing was, that my friends, one of them programmer but in different area, another one not really a programmer at all, were already taking one of them – CS253 Web Application Engineering, no less! Of course I wanted to join them, collaborate and also challenge each other. Well, in the end, didn’t happen. By the time I got there, it was all over for the semester, and they both kinda dropped it, or procrastinated out of it along the way. That doesn’t smell like success to me, but as long as they are not discouraged, hope we can do something similar next time together, and if I get in on time, would do everything in my power to get every one of us through.

Udacity CS253 interface

It looked good, Reddit and Hipmunk founder Steve Huffman showing you how to build some real stuff for the web? There should be one or two things to learn. If they keep it online, I’ll probably go back and check it some other time.

Next up

Looks like I failed this semester for a couple of reasons. Being busy with real life projects like Ignite Taipei and Future Shorts, as well as actually building stuff, I didn’t have that much time to study anymore. The teaching methods eroded my motivation sometimes. The peer pressure went on, but gone out too quickly as well. Now these things might be fixed next time

By now there are online classes everywhere, and universities are lining up to put online their classes. Can look around on Class Central to see what else is new. This time I looked up some humanities courses for the autumn and maybe check a bit more, cannot be without science, though definitely will try not to overcommit myself.

Now just have to see how this online learning experience will work out, whether the universities and knowledge providers will be able to fix the current deficiencies stemming from not using the Web to its full potential, just as “another medium”. But I think online learning / anywhere learning is here to stay, and the ball is on our court, the prospective life long students.