Weston is the reference implementation of a Wayland Compositor. It's sort of like window managers are for X, and it's what you'll be staring at and interacting with while playing with Wayland. I don't know of any other compositors yet.
My current project is setting up the Wayland Display Server on a fresh install of Ubuntu 13.04 amd64. If it turns out well, I might try to figure out how to make live CDs so other people will be able to play with it more easily. From what I've read, there's already a terminal and I should be able to compile Firefox or Chromium for it. So, a terminal and a browser, what else do you really need?
It sounds like a lot of major libraries (GTK+, Qt 5, cairo) already have ports, so hopefully I'll be able to compile many more programs that don't have ports yet. GNOME is aiming to have their stuff fully compatible with Wayland in 2014, so I'm a little nervous about trying to tackle any of that myself. Anyway, here goes a log of my install, starting with Ubuntu 13.04 amd64 just installed on a Dell Studio XPS 15.
I'm compiling everything from source so I'll have the newest versions. I'm working off http://wayland.freedesktop.org/building.html to get a head start, but they leave some things out. I started by git cloning all the repos I'll be using ahead of time, so I wouldn't have to think about it as I went along.
Sadly, my project wasn't quite as magical as that sounds. A better title probably would be, "running wires without drilling MORE holes."
I'm currently living in a rented house. As with most (all?) rented houses, I can't run around drilling holes wherever I feel like it. I also can't fix anything I see that's broken, which is very strange to me. It's practically a reflex for me to fix broken things I encounter. Unfortunately, this house isn't wired with ethernet cables, and we want wired ethernet in two places. We tried to mess around with ethernet over coax cable a little (something called MoCA) since we had an extra cable modem, but it didn't work out. Here's what I wound up doing.
The house is already wired with coax cables, and it's possible to get to where those wires are run. Fortunately for me, every place the coax cable went through the wall or floor, the hole was oversized. It wasn't enough to push an ethernet cable through, let alone it's plug.
The first trick is to disassemble the ethernet cable instead of the house. I already have an ethernet cable that's pretty hacky, a while back I spliced two really long cables together. I'm sure I've introduced a huge amount of noise into signals going through that cable, but so far I haven't noticed any significant loss of bandwidth or increase in latency.
To get the cable through the hole the coax cable was already in, first I cut one end of my ethernet cable and stripped the insulation (outer plastic shell) off. How much insulation is up to you. Ideally, you should only strip off enough to get the wire through the wall and solder the end you cut off back on immediately after the wires come through the wall. The other side of the floor I was going through was the ceiling of our garage, and I didn't feel like doing mid air soldering that high above my head. I stripped off enough of the wire's insulation to reach the plug I was aiming for, since I was lazy.
The second trick is to use the coax cable (or whatever cable is already there) to help run your new unbundled ethernet cable. I discovered there was enough slack in the coax cable that I could use it to run wires. To test, I made a small sharpie mark on the wire and pulled it through from the other side until I saw the mark. Once I was sure it had enough slack, I taped the unbundled ethernet cables to the coax cable with scotch tape. What kind of tape probably doesn't matter, as long as it holds. I imagine something like electrical tape or duct tape might get stuck inside the hole and make running the wires more difficult. Once the ethernet wires were securely attached to the coax cable in a pattern that fit through the hole, I just pulled the coax cable through. When doing this, I suggest you have one person guiding the ethernet wires in from one side while someone pulls from the other side. I almost lost a couple wires inside the floor when some tape ripped off.
One thing to be very careful about when stripping wires. There's a good chance you'll nick the insulation of the inside wires, I did in a few places. It's probably a good idea to inspect the entire length of the wire as you run it and once you're done, and you should cover any nicks with electrical tape, hot glue, or ideally, heat shrink tube.
While running the wire around other parts of your house, there are other tricks you can use while avoiding drilling holes. Zip ties are great, if you're running along other wires like I was you can just zip tie your new wires to the others. You can also open old zip ties using anything pointy enough (lift the tab that prevents you from pulling it open), and if you're feeling daring you take take out existing mounting screws, rearrange things, and put them back. Personally, I avoided that since running screws in and out would have damaged the holes.
Anyway, this project has a happy and successful ending. A couple hours after I started, I switched my desktop over from a cheap wireless USB adapter to wired internet. It's been running great since than, no hiccups.
I'm currently an undergrad. Being an undergrad, I live in a dorm. Which means my computer is a little exposed, and as can probably be expected will occasionally get pranked. Fortunately for me, it almost never happens anymore since people realized it actually bothered me. Even before they did, it was mainly just people changing my desktop background.
Regardless, I've partly solved the problem of forgetting to lock my computer and someone wondering in to mess with it. I just designed a program which takes a picture when it sees keystrokes after a ten minute break of no input. It's pretty simple, I based it off a keylogger I found online. I used the keylogger to learn how to interface with X and recognize keystrokes. I threw out everything that actually examined what the keystrokes were, and just kept that parts that returned when any sort of keystroke event happened. I put in a last_time variable that remembered the time of the last keystroke. Figuring out how long between keystrokes was as simple as comparing the current time immediately after a keystroke to the last time of a keystroke. If it's over a threshold (currently set to ten minutes), it takes a picture.
The general idea is that I'll notice if someone messes with my computer. When I do, I can look up who it was by browsing a log of images of people who typed at my computer. It seems to be working on my laptop, but I was only testing with a three second delay. I'm pretty sure it'll keep working reliably, but I imagine I could be misusing the X libraries somehow and causing a memory leak. I'll probably have to leave it running for a week or so before I trust it.
Maybe I'll find or make some face recognition software that'll try to guess if the user is someone other than me and notify me if it thinks someone else is using my computer.
That'd be a lot of fun. Especially if I can get text to speech working well remotely...
Oh also, for everyone interested in my emacs video tutorials: I haven't forgotten them, I'm hoping to make the next one soon. I'm currently on spring break, so I might record it soon. I'm also starting to consider taking the summer off if I don't get a job I'm thrilled about, in which case I definitely should have time.
A few weeks ago, my dad mentioned he'd gotten a book rebound at a local store. He's had them cut the original binding off and put it on some sort of ringed binding so it'd stay open better.
I'm not sure how, but I'd never even considered that as possible before. I've had many books (especially whenever I try to learn piano) that refuse to stay open and are a massive pain to deal with. Recently, I've been reading Lions' Commentary on UNIX 6th Edition. It comes awkwardly bound, along the long edge so you have to hold the book with the binding horizontal. It's also pretty big, so it's hard to deal with. To top it all off, to really understand it you have to switch between the commentary and the actual sourcecode every few lines.
After learning about how book rebinding is possible, I decided to see if I could get my copy of the Lions' Commentary bound in a more convenient way.
I've been pitching Code Hero to people around me since I ran across it on Kickstarter, but I hadn't been very confident that it would get funded.
They did it! They posted about half an hour ago when they broke $116k (with the original goal as $100k), and they're at about $119.5k now. If they reach $200k, they'll add multiplayer.
I really think they deserve getting enough funding to do Code Hero well, it's a great idea. Even if it doesn't go very far, it helps push the idea of games teaching coding. Backers get access to a private beta among other rewards, so even if they don't get to $200k you get some kickback for helping fund them. Their kickstarter ends in 37 hours (so a little after Friday 12:01am EST), so if you're thinking about funding them now's the time!
Their announcement video from when they reached their goal follows the break
Here's a couple kickstarter projects I ran across yesterday, both are worth checking out. Code Hero could use a lot more help, they haven't been getting much funding and look like they deserve it.
Double Fine Adventure is a classic point and click adventure game by Double Fine Productions. They're a really cool studio that has made other great games, such as Psychonauts, which, if you've never played, you should get it and try it out right now. It's a lot of fun.
Double Fine Adventure got completely funded in a little over eight hours and is almost at 400% funding now. It doesn't need funding anywhere near as much as Code Hero does, but I figured I'd mention it anyway since it looks like it'll be a lot of fun. As well as making the game without a producer (they decided to try Kickstarter funding instead, and it looks like it's working well), they're also making a documentary of the creation of the game and taking fan input from people who helped fund them.
Videos follow the break
Well, it's been a very productive week, I finally got back into serious coding mode. Hopefully I can keep it up when I head back to MIT in a couple days, but semester's about to start so I'll have a lot less time. In the meantime, here's some about what I've been up to, mostly just this past week.
Welcome to my new site! Thanks to my dad and one of his coworkers for helping me with it, it looks far better than any of the sites I've made before.
I haven't entirely decided the best way to use this site yet, and there are still some changes I'm planning on making. How I use this site will probably evolve with time, but whatever I do I'll probably keep making blog posts in the same manner for project updates. I'd love to get feedback on how the site works, please email me (my email is in the banner) with anything feedback/comments.
In the continuing series of posts of content from my old site, here is a a K'Nex crossbow I built in mid 2010. It's very clunky and weak compared to most K'Nex weapons other people have created, but I like how mime comes closer to mimicking a real crossbow. Some of the early versions even had a chain crank, but it got caught a lot.
I recently disassembled my Van de Graaff generator, it now lives in several pieces in a corner of my room. I'll hopefully rebuild it some day, but for now I don't have space. There's a bunch of things I'd do differently now that I'm much better at building things and have access to far more powerful tools. My original VDG was almost entirely made with hand tools, even cutting the hole in the bottom of the mixing bowls. Now I have access to several machine shops and have the tools to design things on my computer before making them.
But for now to get a little bit more closure, I'm copying my old write up I did after finishing the project.
I just ordered the parts for the first prototype, I should be able to make at least two pseudoscopes out of the parts that I ordered, I doubled up on the one item I wasn't sure if I had enough parts for. Since I'll be lasercutting everything, each one can be a new version.
While I haven't blacked out my site, I support the opposition to SOPA/PIPA and internet censorship. I think the internet blackout of many sites today is a great idea, although sadly sites which are tailored to less techie people didn't participate (most notably to me, Facebook and Twitter. I feel like either one of those blacking out at least partially would have been massive). Here's an email to a mailing list I'm on with a collection of a few related links. I'm thinking about doing a writeup of all the sites I can find which are blacked out what who the supporters of SOPA/PIPA are, but I'm really busy right now working on a new site and cleaning up old backups. If you're interested in learning more about SOPA/PIPA and the internet blackout, ars technica has a lot of good articles about it.
I've gone through the original cad and put in the details, as is this should work as soon as I order all the parts. I'm still not sure about mirrors, I'm going to try adhesive-backed mirrored acrylic but I'm not sure. Especially because the pseudoscope I've studied some uses front surface mirrors for the mirrors near eyes. I'm also worried about laser cutting mirrored acrylic, hopefully I can just flip it over and cut it. I'm looking into it before trying it out.
I'm designing a pseudoscope! In short, a pseudoscope switches the images going into your eyes (what would go into your left eye goes into your right, and vice versa). My dad was playing with a paper kit for one around christmas, and it didn't work very well. Unfortunately the paper just didn't hold together well enough. However, he suggested I should design one that can be laser cut, write up instructions for instructables and possibly post it on ponoko.com. So here goes, the plan is to make it out of plastic so it won't warp, and to have all of the assembly to be done with screws so it can be redone (no glue). All machining should be with a laser cutter, but I'm considering drilling out the holes, at least for mine.
Woo! I got an old server World of Warcraft server for Christmas. As expected, it came without hard drives or any way to plug it in. All the servers that were auctioned off were intended for display only. I'm toying with the idea of getting it running, although if I can get it working I probably won't benefit too much. But it will be awesome.
When I first started to learn C, as soon as I finished with learning the syntax I jumped straight into trying to make an RTS engine. I'd written enough of an engine including a server and a client to move units around on both screens and have them collide with each other and pathing blockers. I'd also written a map maker for placing pathing blockers. The whole thing was very crude, basically it was just a lot of colored rectangles that could be selected and move around. After a little over two weeks of working on it, I got bored and moved on to working on an MMO engine (partially shelved at the moment, it's on my GitHub)
Recently, I decided I wanted to work on my RTS engine more. Fortunately I was using git at the time and found an old backup. I hooked up my old repository to GitHub and started working on it about a week ago. Fortunately my coding was neat enough so I didn't have to spend a while figuring out what it all meant.
It's almost finals week, and that means I'm finally done with assignments and only have to study for finals. Before really diving into studying (my first final is on Monday), I decided to take a break and relax.
One of my current pet projects is about terminal emulators. In just about every terminal emulator I've tried (such as gnome-terminal, terminator, and many others) text does not get auto reformatted. That is, when I resize the window the text does not get reformatted to fit the new window size. Mac OS X terminals actually do auto reformat text nicely, as well as the GUI-est terminal I've ever seen. I wish I could get my hands on Mac's terminal's source, but it looks like it's closed source. The other editor is too GUI for me, although I might fish through it's source some day.
I discovered that screen partially does what I want. The output of programs like cat, less, and tail all get correctly auto reformatted. However, ls does not get auto reformatted. I haven't tested it much beyond that yet.
So, about a month and a half ago I took down my new blog due to a bot attack and hadn't gotten around to putting it back up yet. I just started working on it again today, and decided against restoring my drupal installation. It was causing me some trouble, (I foolishly tried to update the installation while bringing it back) and I'm planning on completely overhauling my site over January. I decided that for now, I'll stick to using this blog.
Speaking about that, I'm planning on redoing my whole site to combine my original personal site, alex.willisson.org and this blog while revamping it's look so it doesn't look like it hasn't been updated since the 90's. As much as I like having beautifully simple coding, a background that doesn't blind the user, and a site that scaled to any browser with the same block of code, it looks pretty bad. My new site will probably be based on Movable Type, and hopefully someone I know who actually knows how to make websites look good will be helping me design the site.
Among other reasons (mainly procrastination), I've been avoiding posting because I've wanted to switch my blog over to running on my webserver. I finally built up enough interest in starting a build log for another project (a huge fish tank that suddenly became a challenge instead of a tedious bunch of gluing and waterjetting) and decided it was time to switch my blog over. I've imported my old posts and comments, although comments don't seem to be attached to the posts yet. All my posts currently say they are posted by anonymous, that's another thing I'll be working on.
First, a little bit of backstory
From before I started going to miters earlier this year, there's been a car chair mounted on an old electric wheelchair base. Unfortunately it didn't work and didn't have a battery pack so it was hard to test. Earlier today I decided to see if I could fix it. Fortunately Shane tipped me off that electric wheelchairs often run at around 24v. I hooked it up to a DC power supply and it turned out it worked when everything is plugged in (with the power supply in place of the battery). In other words, all it needed was a battery.
Change in main structure, now I'm planning on building my printer with 1/4" acrylic. It's waaaay cheaper than making it out of aluminum and will be lighter. It's also much easier to build an enclosure so I can heat it instead of just having a heated build platform. Airflow for working with PLA will be harder, I'll just have to build it into the design instead of propping a desk fan up pointed into my printer like I did with my makerbot.
Continuing on with fun things about my door. A few days ago I finally got around to turning my door into a speaker. It's actually pretty simple. Four transducers (horribly simplified, they're the part of a speaker that moves to make noise) are hot glued to my door. They're wired up in pairs in series, one is the left and one is the right channel. Both pairs are hooked up to an awesome little class D amplifier which is duct taped to my wall and plugged into my computer. In short, my door is now another audio output for my computer. My motherboard's left channel is dead so I can only use half of the transducers at the moment but I'm getting a cheap usb sound card to be dedicated to being the output for my door.
I'm bored and don't feel like going to sleep yet. Guess that means it's time to catch up on some of my projects!
I fixed up my doorbell to be much less sketchy. Now, a 555 timer constantly runs at a visible duty cycle (around 17 hertz), driving a 2n7000. When the button is pressed, the voltage source is connected to a 1000uF capacitor and powers the LED. When the button is released, the capacitor discharges through the LED and another resistor to make it drain faster. I probably should have a resistor in series with the LED, but the LED I'm using is tough and a good brightness without any resistor. I'm relying on the fact that the voltage source has some internal resistance for current limiting. Here's the circuit and the new setup
A while ago, I decided I wanted to build a motorized scooter. Brilliantly, I decided I wanted to build my own motor. I'm still pretty sure I could given more time but it'd be tedious and require a lot of redesigning. I might go back and try to do that in the future.
In the meantime, I've decided to switch to a brushless DC outrunner motor from Hobby King.
The start of a gantry 3d printer. The toolhead will move on the X and Y plane and the build platform will move along Z. If it turns out as planned, it'll probably have a build area of around 10"x10"x12". Most (possibly all) of it's structure will be aluminum angles and bars bolted together. I haven't figured out a good way to keep all the joints straight yet but that shouldn't be too hard.
DISCLAIMER: Do not expect any sort of good security from these passwords. I do not guarantee any form of security based on passwords generated through this script. Use at your own risk.
Generates 25 passwords which alternate between the left and right hands for each character, have alphanumerical plus symbols and never require holding down shift. Coded while playing Super Smash Brawl at 3am so I bet there's a million horrible things about it.
EDIT: As several people have pointed out, it would have been MUCH smarter to do the door switch with a transistor. The reason I didn't was because the circuit got about a minute of thought (if that) and I just grabbed a few parts near me.
So far it's just a couple status LEDs (door open/closed and a "doorbell") and sketchy wires but I'm planning on cleaning it up once I have time.
Mid February, I decided to build an electric scooter. Unfortunately I didn't write up what I was thinking along the build, but I took a lot of pictures. I finished the majority of the mechanical work (minus mounting the motor and I still don't have a brake) in late March and have been using it as a kick scooter since then. When I'm done, it will have a hub motor I built, a motor controller I bought, and as many batteries as I can possibly back into the base. I'm hoping for a 10 mile range but I have no idea how efficient the motor will be yet.
Pictures and write-ups of some of the choices I made and the ways I built things coming soon, finals week is coming up so I'm short on time.
Cut a couple strips of Neoprene to get the correct length & 2" wide strips, superglued together to make a belt.
Either a blender motor or hand held electric drill motor (both AC Induction (split-phase capacitor) motors) is probably best. Need to work out how to build a mount for whichever used. If possible, the base needs to be designed to switch the motor out.
The base has to be far enough from the top to hold the Neoprene belt as tight as possible, as long as the bottom doesn't break from the strain. It has to be stretched enough to be pulled from the inner edge of the PVC pipe and not have enough slack to attract itself and have the insides of the belt come in contact with eachother.
- Steel of aluminium mixing bowls
- Aluminium tape
- 4x 5/8" outer diameter PVC pipe end caps (very specific since I already have that size of PVC pipe)
- 2x shafts or pins to mount PVC rollers on
- Paint mixing bucket or other strong base that can have pieces cut out easily (and still be strong)
- Superglue (superglue gel if there is a difference)
- Gloves (to keep fingers safe while working with superglue)
- Something to attach PVC to base, all screws going into the PVC column should be nylon
- Electric motor at least 3000RPM
- Neoprene belt 2" wide
- PVC column 3-3.5" diameter, long enough to stretch neoprene belt slightly. Must be at least 3" inner diameter.
- Metal nibblers (tool)
Going to work out in more detail later:
- 3"-3.5" inner diameter PVC pipe probably around 1.5'
- mixing bowls, bigger the better
- aluminium tape
- 4x end caps that fit small pvc piping
- 2x shafts to put pvc pipe rollers on (or similar)
- paint mixing bucket
- something to attach pvc column to paint mixing bucket (if anything needs to go into the column, it has to be non-conductive)
- electric motor at least 3000rpm which could drive the belt
- power supply for motor (probably a stack of batteries)
- neoprene belt, 2" wide, probably around 36" long
- 2x 1/2" pvc pipe
Circular base to bolt the support column to and a very smooth hemispherical aluminium shroud with a hole in the top for the support column. The shroud should have a small spot on the bottom edge cut out for any wires to leave.Support column
A single Acrylic tube, large enough for the beltHead
Two hemispherical aluminium shrouds connected together, with a hole in the bottom for the support column
Inside the base there will be a motor of at least 3000RPM, a plastic roller and a comb to catch electrons off of the belt. The comb should be 1/32 inch away from the surface of the belt. The pulley, motor mounting and comb should all be grounded.
The support column only has the belt in it, held taut from rollers below & above the support column.
The head will have a metal roller at the top of the pulley, not connected to the metal sphere. The sphere will have a comb going from the inside to 1/32 inch of the belt.