Monday, February 27, 2012

Objective C Explanation

I found the following post at Cocoa Dev an excellent introduction to the Objective-C programming system. It has cleared up quite a bit of confusion regarding accessors, object instantiation and properties.

http://cocoadevcentral.com/d/learn_objectivec/

I now need to find a good explanation of the memory management model (when and how to use garbage collection vs. code level memory mgmt).

Sunday, December 11, 2011

Audio Delay

I've always wanted to build an audio delay box, something that would take an audio input (mono or stereo) and delay it by some variable amount (user determined). Why? Because when I've watched the Saturday afternoon game and the baseball playoffs for my home team (SF Giants), I realize just how lousy those national league announcers are. But, playing an out of sync radio broadcast with the TV broadcast is the stuff of nightmare. The radio is always ahead of the TV broadcast because the radio is transmitted locally and the TV broadcast goes around and around, up and down, cable, satellite, whatever.

So, I need an audio delay device. The Arduino family seems like a great place to start building such a device. Just before starting to build this project, I looked around to see if anyone had built one of these. There are plenty of options for products between $60 and $200 that delay between 1 second and 1 minute. I found one product that could delay up to 20 minutes.

I only need a delay of max 5 seconds, but I'm an engineer, so as big as I can make it will make me happy. Plus, I need to build it for less than $60 in parts, or I might as well buy it. Actually, that's not exactly true, any cost over $60 pays for my enjoyment in building the project, but you get what I mean.

If I use the Arduino (or the Mega) that's half or all of my budget, so this engineering process should get interesting.

I have a few ideas for designs and will make follow up posts detailing them with some pros and cons. In short, here's what I've thought through so far:


  1. ADC -> MEM -> DAC + CPLD/FPGA + Arduino
  2. ADC -> Flash Mem -> DAC + CPLD/FPGA/Arduino
  3. ADC -> MEM -> DAC + Arduino Mega (which has lots of address pins)
  4. Delta-Sigma Modulator + Delay Queue (implemented w/ Arduino + majolsurf mem expansion)
For MEM, I was thinking of an old DDR2 board.

Basically, the designs come down to some combination of the following elements:
  • An Analog to Digital Converter that outputs one or two channel (mono v. stereo) and 1 bit or N bit (generally, 16 bits). However, even the N-bit ADCs really stack up 1 bit outputs and then release them as N bits, but on a serial line! Therefore, the N-bit ADCs are simply bursty one bit ADCs. None of them have 8 or 16 parallel output, so their output needs to be thrown into a shift register if to be used in parallel.
  • A Digital to Analog Converter (1 bit or N bit). If data held in parallel, then it needs to be placed in an SR and sent to DAC, serially. N-bit DACs don't accept input in parallel.
  • Memory
    • Flash memory accepts input as a bit stream and it should be in page chunks, that is, written or read sequentially. Flash memory really isn't meant to be Random Access, or least NAND based flash isn't.
    • DDR2 has some interesting requirements (a section of low addressed memory that is off limits for storage) and 200 PINs to drive or read. The Arduino Mega could run a DDR2 board.
  • Data Transfer Protocols
    • I2C or SPI or Parallel or NIH (Not Invented Here or Roll My Own).
    • The challenge of the first two are lack of familiarity and/or speed limitations.
    • The challenge of the second is a heck of a lot of wiring - ugh!
    • The challenge of the third is inventing a stable (serial) protocol better than I2C or SPI.
  • Delay Control - one or two knobs that allow the user to dial in a delay (coarse/fine grained delay). It would be great if the delay could be from sub microsecond up to limit of the system. Also, if the system delay maximum is large, the coarse grained control should be non-linear in response (smaller steps closer to zero).
  • Display Delay - it would be nice if the user could see how much of a delay the system was using.
    • Controller/Control Signaling - somehow, all of these elements need to communicate with each other and do the delay work.
    In the end, the system converts analog voltage levels into frequency bit streams that get delayed then returned back into a voltage signal. Everything else is just implementation.

    Sunday, December 4, 2011

    Hardware Hacking

    There are some fabulous hardware devices out there for hardware hacking - it warms my EE heart. Having been out of the field for decades (really, only played with this stuff in college and high school), I'm enjoying getting back into things.

    That said, folks who've never studied the material before can still play.

    First, get yourself and arduino or similar device.

    Then, learn some basic electronics - youtube is a great place to start.

    Then, build and enjoy...

    Tuesday, November 29, 2011

    Watch a Memory Bit Switch

    Want to watch a memory bit flip at the atomic scale?

    Calling all my fellow EE's and any other physics/geek aficionados, check out this 5 min interview explaining latest research in ferroelectric memory. Why is it cool? Because you can see the material change state (the field sweep) through the memory layer. Bonus: this imaging of the process was unexpected, current models do not represent this effect. They need to be revised. So cool.

    http://www.youtube.com/watch?v=7I-G9TzfDYY

    Don't know about that youtube title - I doubt this effect is "real time". It has to have been slowed down.

    Friday, October 7, 2011

    Brown Fox and Lazy Dog

    I saw this video and it reminded me of my early computer days. My father owned a computer time share business; companies ran their business on software designed and built by my father's software team on computers maintained by the company. It was the first cloud. Of course, it wasn't called that then. It was called time share, which was invariably mistaken for vacation property.

    How could this video possible trigger that?


    The jump happens around 1:20 mark.

    I worked at my dad's office in the summer between high school. They had IBM key punch machines. You'd bang out something in numbers and letters on the machine and it would produce a card with the characters printed on top and machine readable holes printed on the body of the card. My father's company produced a piece of hardware that meshed with the key punch interface and caused the machine to read or write cards. You had to pop a plate off the back of the machine and wire the device in there. There were hundreds of pins sticking up, but only forty or so were relevant.

    The device converted card data back and forth into RS-232, which at the time was the new plug-in standard between computer devices. Now, we have USB, Parallel, Serial (RS-232 was serial), FireWire, Wireless, etc. To test each hand built device they manufactured, you'd have a stack of cards with the alphabet and numerals on them, each one shifted in a loop (A-Z0-9 then B-Z0-9A, etc.). Sometimes, if you wanted to do a quick check, you'd type in "The quick brown fox jumps over the lazy dog."

    I helped build some of those devices, soldering them together at a workbench. The main builder, Freida, taught me how to solder. Earlier in her career, she worked on space hardware and missile electronics. When the electronics were soldered into boards for a missile special care had to be taken because of the vibrations from the missile's engine. Little double bends were made into each resistor, capacitor and inductor leg, that became springs to dampen the vibration. She built every device that way and made sure I did, too. Between her hardware production talent and the software designer who wrote the code that ran the box, those things were bomb proof.

    Companies all over the world bought the device. The company saw the future of computers and realized that other companies would want to take all of their punch card data and convert it into some other electronic format (magnetic tape and disk drives). But, that's not exactly what happened. Many of their customers had processes that centered around punch cards. For a manufacturer, the cards represented a pick list and notes could be made on the cards by hand. They were a physical token that was also machine readable. Think of today's 1D and 2D bar codes.

    These devices were built in the early 1970s and 1980s. I think years later one of the companies called him to ask if it was year 2000 compliant. Ha.

    The smells in that office were stunning, not in a bad way. The company was located in the basement of an apartment building. They had three large HP computers, bays of disk drives that would be laughable today due to their very small storage capacity. There's more computer power and storage in an iPod nano than was in that whole basement. There were teletype machines, hardware workbenches, and free coca-cola, BBQ potato chips and pretzels. The place smelled of ozone and machine oil and solder flux and bbq. There was a constant churning and humming going on from the teletypes, disk drives and magnetic tape.

    It's amazing what that little basement operation had going on inside of it. It was at the forefront of so many of the technologies that we see around us, today. Cloud, data centers, business accounting and manufacturing software, free goodies for the staff. All of that was going on forty years ago.

    The quick brown fox jumps over the lazy dog, indeed.

    Wednesday, October 5, 2011

    RIP Steve

    http://www.ted.com/talks/steve_jobs_how_to_live_before_you_die.html

    Monday, September 5, 2011

    Sims Social Addiction


    Hello, my name is Andy, and I'm a Sims Social Addict.

     "Hello, Andy."

    It all started so innocently. When a good friend of mine who works on The Sims stopped by, my son asked him about the new Facebook game Sims Social and if it was in Beta. "Sure, give it a try." I told myself I, too, should check it out. It's my friend's game, and I've never played The Sims.

    In fact, I've never really played computer games. Decades ago, I did play my share of RPGs when they were only paper, dice and manuals. I'm a software developer and have plenty of time in front of the computer. I don't need any more. They've never really been able to attract me for very long.

    I jump on facebook, find Sims Social and run the application. I've never even run a Facebook application before! Suddenly, I'm opening boxes, visiting my neighbor Bella Goth (more about her later), finding my Facebook friends who play Sims Social and asking to be their Sims Social neighbor. Wow, this is fun!

    I'm harvesting my garden, cooking, keeping my Sim happy, visiting friends, buying furniture, re-arranging my house, and buying a new room for my stuff. Everything is going great! Then, wa-wa-wa, I'm out of energy or, fzzzzt, something breaks. So, I wait to recharge, five minutes, ten minutes... one hour goes by. What happened to the time?

    Full screen mode really knocks me out. Everything is so much bigger and easier to manage; yet, in that mode I don't even know I’m on the computer, anymore. I lose track of time with no clock at the edge of the screen telling me to move on with my (real) life.

    No matter. Go run an errand or attend a meeting. 90 minutes later I'm fully recharged and ready to go. I start working on musicianship, cooking skills, writing skills, artistry. Got to clear that lawn and build my house.

    After a while, game strategies emerge. I'm not sure if gardening helps because energy may have more value than the simoleons harvested. Still, I plan my plantings around when I think I will be returning to the game. One hour? Four hours? Eight? One day? Got to pick them when they’re fresh!

    Whenever I return to Sim Social, I need to work on my mood. Better use those simoleons to buy things to make me (my Sim) feel better: a telescope and a stereo that lets me dance and exercise. Attend to the basic needs, have fun, beat back the boredom, visit a friend and then... Inspiration!

    Doing stuff when I’m inspired nets more simoleons. It also seems to make me more attractive socially. Which is great because some of the objects I buy for my house or levels I achieve require Hearts (love). Inspiration makes neighbor Sims more receptive, makes it easy for me to get some love.

    This is when things began to go off the rails.

    I need to take a moment to tell you about my neighbors in this game. They consist of four real people (their Sims, actually) and Bella Goth, everybody's friend. The four real people behind the Sims are my son, my friend who works on the game, his wife and a distant Facebook acquaintance who happens to be a gay man. So, that's my neighborhood - three males, two females. My son, my best friend since elementary school, his wife, a dude who could almost be complete stranger 'cause I couldn't pick him out of a line up, and a fake, totally made up woman.

    To achieve certain goals in the game, I need to make some romance. When I visit a neighbor and click on the Sim to interact, one of the choices is Flirt. But, with whom? There’s the rub. The object of my (male) Sims attention needs to be female, or it just won't work for me. The game doesn’t care, my Sim doesn’t care, but it needs to work for me. Flirting with my best friend's wife's Sim? NO! WRONG! Flirting with a gay man’s Sim? Nope, don’t care how open minded I am and that it’s all a fiction. It ain’t me. What if the real guy found out, I wouldn't want to lead him on. So, the only choice for me was Bella Goth.

    Probably, no one would ever know, by the way. Well, almost no one. My eight-year-old daughter starts to sit next to me and watch me play. She begs me to let her play or get her a Facebook account so she can play herself. She talks about what she would do with her Sim, that she can't wait for the time when she has a Sim Social and buys it things and arranges the house and has neighbor Sim Socials. She begs me to buy a Pink Bathroom.

    The thing is, I can't have her next to me when I flirt with Bella! I can't let her watch her dad (whoops, my Sim) flirt with and romantically kiss a woman not my wife/her mother. I especially can't let her watch me give Bella Goth a massage on that couch. No one should watch that with another person in the room, let alone one's daughter (no matter what age she is).

    Guilt and embarrassment start to set in. I begin hiding my playing time. I turn the sound down on my computer. I try turning it off, but I need to hear the sounds coming from Sims Social, I need to know what's happening in the game. I play at wonky hours. I plan strafe runs at the game. Quick in, full energy burns, then out. Don't give anyone a chance to see me. I do late night sessions after everyone's in bed so I can really focus on my crafts, skills, levels, house. Am I about to jump up a skill level? Make sure I use most of my energy 'cause I’ll get a full boost at skill jump. Plan when and how.

    The thing is, I can't get anywhere with Bella, not anywhere real, anyway. I need to find a woman neighbor on facebook, if this is going to work for me. At this point, my wife is clear that I am in full-blown addiction, and she wants no part of the game. Plus, being married - I'm not going to recruit a single woman on facebook to be my neighbor for Sims Social so I can try that relationship thing. I’d feel like I’m cheating.

    Also, I need non-romantic help with my Sim, but I’m embarrassed to recruit new players to be neighbors. In the past, I successfully staved off the fire hose of Facebook requests to help people grow carrots, raise pigs and never, ever participated in an assassination. I can’t bear to be that guy begging his (real) Facebook friends for help in his (fake) Sim world. This is getting to be too much.

    Then, it all changed. It’s last night:

    I really need some help. I need someone I can count on, someone who would be there for me, to visit when I call, to repair my broken easel or clean my dirty toilet whenever I need it and without asking.

    Unbidden, a thought occurs to me, the answer stares me in the face, a little bit of my own human inspiration. I need a sockpuppet - my own neighbor Sim! I do it in a flash. Clickity-clack, I make a Facebook sockpuppet - a new account that I control, a fake person that I friend. Of course, he is male, a married man can't have too many single female friends. I friend him. Clickity-clack, he creates a female Sims Social sockpuppet. Two different browsers with two Sims, one of them me and one of them some other not quite unreal, not quite female, not quite me.

    This is fantastic. It works so well. She sends me things I need. No more wasting energy cleaning puddles from the bathroom floor or fixing that busted stereo. She makes my bed. We giggle, we flirt, we become lovers, we date. We build a two-person bed together. She cares for me, she is my Muse. I can clear my land of mushrooms. I gain skills without the drudgery and annoyances that hold back those Sims who lack that all giving partner. Ahhh, perfection - bliss.

    My two Sims, one real, one fake, both empty of all of their energy, I exit the game, satisfied with my brilliant new move. Then, I glance at the clock. I told my wife I'd be up in a minute, it is now 1:30am.

    This is very wrong, I have traded my life with some strange electronic version of Dorian Gray's picture, and it’s not going to end well.

    Hello, my name is Andy, and I'm a Sims Social addict.