Joel Grus blogged about a job interview where he was asked about the ridiculous Fizz Buzz question that apparently some companies use to weed out complete frauds from their job interview process. The task is to create a program which prints the numbers from 1 to 100, but where all numbers which are a multiple of three are replaced with “fizz”, all numbers which are multiples of five are replaced with “buzz” and all numbers which are multiples of both three and five are replaced by “fizzbuzz”.
Joel somewhat comically decided to use the TensorFlow framework and solve it with machine learning. Go read his post, it’s pretty comical. Well, if you are a programming geek, it will seem comical.
For the non programmers in my audience (are there some?) this is a trivial program to write. If a programmer can’t bust out a solution to this in a minute or two, they likely have no business calling themselves a programmer. Here’s my 30 second solution (I type moderately slow):
[sourcecode lang=”cpp”]
#include <stdio.h>
int
main()
{
int i ;
for (i=1; i<=100; i++) {
if (i % 15 == 0) {
printf("fizzbuzz\n") ;
} else if (i % 3 == 0) {
printf("fizz\n") ;
} else if (i % 5 == 0) {
printf("buzz\n") ;
} else {
printf("%d\n", i) ;
}
}
return 0 ;
}
[/sourcecode]
No doubt there are some practitioners in the audience who think that this inefficient, because I compute multiple modulo operations per loop iteration. I’d probably argue that this is short and clear, and until profiling revealed it to be a performance problem, I wouldn’t change it. If people insisted that I do a single modulo per loop iteration, I’d probably replace it with something like:
[sourcecode lang=”cpp”]
#include <stdio.h>
int
main()
{
int i ;
for (i=1; i<=100; i++) {
switch (i % 15) {
case 3:
case 6:
case 9:
case 12:
printf("fizz\n") ;
break ;
case 5:
case 10:
printf("buzz\n") ;
break ;
case 0:
printf("fizzbuzz\n") ;
break ;
default:
printf("%d\n", i) ;
break ;
}
}
return 0 ;
}
[/sourcecode]
I’d submit that it is much less clear, but not too bad. I’d probably add a comment to explain the higher level idea.
If we are allowed two modulo calls per iteration, could do it this way:
[sourcecode lang=”cpp”]
int
main()
{
int i ;
for (i=1; i<=100; i++) {
bool mul3 = (i % 3 == 0) ;
bool mul5 = (i % 5 == 0) ;
I used boolean variables, which I think reads a little better, but you could obviously use integers.
What if you don’t want to any modulus calls? Well, you could use a state machine…
[sourcecode lang=”cpp”]
#include <stdio.h>
int
main()
{
int i = 1 ;
int state = 1 ;
while (i <= 100) {
switch (state) {
case 3:
case 6:
case 9:
case 12:
printf("fizz\n") ;
break ;
case 5:
case 10:
printf("buzz\n") ;
break ;
case 15:
printf("fizzbuzz\n") ;
state = 0 ;
break ;
default:
printf("%d\n", i) ;
}
state ++ ;
i++ ;
}
return 0 ;
}
[/sourcecode]
I hope I never have an interview where this is the kind of question I get asked.
I’ve been having a bit of fun with my DJI quadcopter lately, but there is something that is annoying me and stressing me in the back of my head, and that’s surrounding the legality of flying quadcopters.
Basically, it’s impossible to determine with any certainty whether flying your quadcopter in any particular place is legal.
Consider my very first time flying with the DJI Phantom 2:
Within minutes of putting birds in the air, the police roll up and inform us that it’s illegal to fly in East Bay Regional Parks. You might imagine that you’d be able to find this rule somewhere: go ahead and read their rules and regulations. This webpage makes the claim that drones are illegal under Ordinance 38, but I was unable to locate any mention of that in the actual ordinance. The term “drone” doesn’t appear in the ordinance. The word video only appears once in section 702, which covers commercial filming, which I was uninterested in. There doesn’t seem to be any regulations covering remote controlled aircraft in Eastbay Parks at all.
Is it illegal? I don’t know. I’m really not interested in engaging in a confrontation with a police officer about it though, so I’m not flying there. Even if it isn’t illegal, you could probably be stupidly cited under some noise ordinance or failing to cooperate with police. Who needs that headache?
So, the question is, where can you actually fly? And where can you be sure that flying is legal?
For those who would argue against spying or presenting a hazard to pedestrians or other park goers, look at the video again. We chose this park and venue precisely because it was far from residential properties, and from other park users. The parking lot was convenient to launch from, but we launched far from other cars, and our flight path was out over unoccupied park land. We want to operate safely and responsibly, and just have some fun snapping some nice pics of the beautiful landscape that surrounds the Bay Area.
Oh, and by the way, what I have isn’t a drone. It’s a model aircraft, in particular, a quadcopter. It is an unmanned aircraft only in the sense that your RC car is a remotely operated motor vehicle. It weighs 2.2 pounds. Call it a toy. Do not call it a drone.
The Internet is awesome. For instance, this morning I found a link to this amazing Nixie Tube clock, which uses neon bulbs (no transistors or ICs) as the logical elements (clocks are really just fancy counters). I think I might have seen that neon bulbs could be used as logical elements (Alan Yates? Did you tell me about this) but it had slipped my mind.
In the week, Apple released a couple of new iPhones (the iPhone 6 and the iPhone 6 Plus). The early reports were that they were astoundingly good sellers: Apple sold 10 million units over the launch weekend.
There were two things that marred this performance. The first was the 8.0.1 update. It turns out that the first update that Apple pushed out to consumers was terrible, and disabled access to the cell network on phones. This update was only available for a few hours before Apple pulled it, but it made people grumpy. The 8.0.2 update followed shortly, which seems better, but there is a lot of general grumbling (some of it from my missus) about stability, particularly with Facebook. As irritating as this can be, there seems to be little doubt that some future updates will get things sorted out, and all will be well.
The bigger issue was bendgate. Some people reported that they had put an iPhone 6 in their back pocket, and later discovered it was bent. As a consumer, I’m pretty shocked. One thing that I like about Apple is make fairly robust phones. My 2 year old iPhone 5 hasn’t got a scratch on it. I’ve had numerous iPhones, and never had any complaints about physical robustness. But hey, the videos don’t lie…
Or do they?
The problem is that it’s actually impossible for us to figure out how significant the problem is by reading stuff on the Internet. Take for instance this “informative” video:
That looks pretty bad, right? Lots of people apparently claimed it was rigged, so he followed up with this:
Shocking!
But here’s the thing. On release, you’ll find people doing all sorts of things to iPhones, like hurl them at the ground and put them in blenders. The reason they do so is that they can make money by doing this kind of thing. If you can get 45 million hits (as Unbox Therapy did for their first video) you can easily buy all the phones you want and torture them in different ways. And, because the “bend” issue was already the wind, with large communities of individuals irrationally supporting Apple or its opposition, YouTubers are strongly incentivized to toss more fuel on the flame. After all, if youo had a video called “Apple iPhone seems sturdy, hard to bend.” I doubt it will get a lot of clicks.
Of course Apple has responded to say that only 9 bent phones have been returned, and had a bunch of the press tour their “we torture test our iPhone” labs. This too, actually doesn’t help. Apple is notorious for carefully crafting relationships with the press, and it seems unlikely that they would have invited the truly cynical to view the process and ask questions. Indeed, the press in this case seemed to be lobbing softballs at Apple, and didn’t actually ask any interesting questions.
The best information released to day is probably from Consumer Reports. They seemed do a pretty good scientific test. But I must admit: I’m not super happy with this testing either. Their three point testing was centered on the back of the iPhone, when it seems pretty clear from most of the other images of “bent” iPhones that there seems to be some weakness up near the buttons toward the top. It seems to me that changing where force is applied might change the results you get.
In the end, it seems virtually impossible to figure out much useful about the bendability of iPhones. I went and handled one at the Apple Store. It seemed reasonably sturdy. I’m not going to make money by mangling a phone, so I didn’t try. By the time my upgrade cycle comes around next year, there will likely be some additional data when the furor has died down (and IOS 8 will probably be stable). But it seems unfortunate to me that with all the ability to exchange information, I’ve only increased my anxiety over this purchase, not decreased it.
It would seem the Internet is only good at finding information that nobody cares about.
I received my second email inquiry yesterday (yes, two whole emails) asking me why I hadn’t been posting to brainwagon lately. It’s gratifying that both of my readers would each send me a note asking if things were all right, so I thought rather than addressing you each separately, I could double my efficiency by creating a post.
There are many reasons for my apparent slowdown in posting. My new project at work is taking up more time. I haven’t done much amateur radio lately, mostly because I need to rework my antennas (I want a more permanent way to route coax inside, rather than just “opening a window”), and the programming muse has seemingly left me: I can’t seem to muster a lot of enthusiasm for it at the moment.
These would by themselves normally be enough to slow me down, and perhaps bring a temporary halt to blog posts. But there is another reason: the unavoidable drone of the election season.
You see, I’m a person of fairly strong political convictions, and the election season always presents enough fodder that daily I find myself yelling at the television. My temptation in moments of weakess is to turn these diatribes (well founded as I believe them to be) into blog posts, but I don’t think that my readers (both of you) come to brainwagon to read my political positions. If I invited you to my house for a barbecue, I’d be a terrible host if I simultaneously subjected you to rants on the subject of politics or religion. I view brainwagon as a place where I can talk about interesting things of little consequence. I’m going to try to keep it that way.
On the brighter side: some cool projects are underway. The F-22 RC airplane I began several weeks ago is mostly completed. With the help of Mark Harrison of Eastbay RC, I had the thing entirely assembled, and we were set for a trial flight on Friday, but sadly after a week of beautiful weather, Friday dawned cold, with a light drizzle and strong gusty winds. We might have braved it, but I noticed at the last minute an issue with a loose control horn on the elevon, and it would not have been controllable. It needed a return to the workbench for a fix.
When I got back home, I pondered another problem that I had with my assembly, if you check out the following video, note the placement of the servos:
Did you see the issue? the servos are mounted very near the slot where the propeller will be mounted. In fact, when the elevons are in the down position, the little control arm for the servo comes uncomfortably close to the propeller. I decided that while I was fixing one of the control horns, it would be good if I unglued the servos and mounted them further back.
And here’s where having a great mentor like Mark really helps: he informed me that isopropyl alcohol applied to the glue joint would wick in, and I’d be able to peel the glue off. A trip to Walgreens and $2 got me a nice bottle of 91%, which I applied with a cotton swab. A few minutes of waiting, a little wiggle, and the servos popped right off. A little more alcohol applied, and I was able to peel the remnants off the foam and the servo. Very cute.
Today, I hope to get the new, shorter control arms in place, with better control rods in place, with hopefully less flexure. Then, the question will be: dare I try it out? I actually have no experience at all with RC planes: I was going to rely on Mark to help me get it off the ground and maybe avoid a crash by using “trainer mode” on my transmitter (enabling him to take over and fly). I probably shouldn’t have begun with the F-22. Something with some dihedral and maybe even a real airfoil so it can glide in without power would be better for a beginner, but it looks really cool. 🙂 I expect that after two or three flights, it will be in such bad shape I’ll have to harvest its organs for use in another plane. But I will have learned alot.
I’ve already begun to plan a second plane, and to acquire the parts for it (whatever it turns out to be). Ultimately, I’d like to get to the whole FPV (first person video) setup, and be able to fly with cameras aboard, but I think until I gain some experience, it would be pointless (or even counterproductive) to spend lots of money on equipment. After all, you have to walk before you can run.
But I did find an interesting gadget that’s a baby step in that direction: an $8 Turnigy keychain video camera. It records MP4 video at 640×480 resolution onto a microSD card (not provided). I had a 4GB class 4 card, which worked okay for early testing, but it seemed like it had a problem maintaining full frame rate with that, so I ordered a couple of nice little Class 10 cards from Amazon, and they seemed to work out very well. Since my plane isn’t ready for flight testing, I decided to test the camera by velcroing it to the license plate holder on my car, and taking it for a short 15 minute drive. I then took the video and post processed it with ffmpeg to turn it into a time lapse video (25x faster) and got this result:
The overall clarity is not bad: the automatic exposures can sometimes lower contrast and wash out the image, but perhaps less than I might have expected. The biggest problem I suspect I’ll have is that the field of view is quite narrow, and thus when mounted on the airplane, may jerk around a lot. But for a total investment of around $17, it’s perhaps better than I might expect.
Stay tuned for more, and thanks for your patience!
About once a year, I get the urge to push my programming skills and knowledge in a new direction. Some years, this results in some new (usually small) raytracers. Sometimes, it results in a program that plays a moderately good game of checkers. Other years, it results in code that predicts the orbits of satellites.
For quite some time, I’ve been pondering actually trying to develop some modest skills with GPU programming. After all, the images produced by state of the art GPU programs are arguably as good as the ones produced by my software based raytracers, and are rendered factors of a hundred, a thousand or even more faster than the programs that I bat out in C.
But here’s the thing: I’m a dinosaur.
I learned to program over 30 years ago. I’ve been programming in C on Unix machines for about 28 years. I am a master of old-school tools. I edit with vi. I write Makefiles. I can program in PostScript, and use it to draw diagrams. I write HTML and CSS by hand. I know how to use awk and sed. I’ve written compilers with yacc/lex, and later flex/bison.
I mostly hate IDEs and debuggers. I’ve heard (from people I respect) that Visual Studio/Xcode/Eclipse is awesome, that it allows to edit code and refactor, that it has all sorts of cool wizards to write the code that you don’t want to write, that it helps you remember the arguments to all those API functions you can’t remember.
My dinosaur brain hates this stuff.
By my way of thinking, a wizard to write the parts of code you don’t want to write is writing code that I probably don’t really want to read either. If I can’t keep enough of an API in my head to write my application, my application is either just a bunch of API calls, inarticulately jammed to together, or the API is so convoluted and absurd that you can’t discern it’s rhyme or reason.
An hour of doing this kind of programming is painful. A day of doing it gives me a headache. If I had to do it for a living, my dinosaur brain would make me lift my eyes toward the heavens and pray for the asteroid that would bring me sweet, sweet release.
Programming is supposed to be fun, not make one consider shuffling off one’s mortal coil.
Okay, that’s the abstract version of my angst. Here’s the down to earth measure of my pain. I was surfing over at legendary demoscene programmer and fellow Pixarian Inigo Quilez’s blog looking for inspiration. He has a bunch of super cool stuff, and was again inspiring me to consider doing some more advanced GPU programming. In particular, I found his live coding thing to be very, very cool. He built an editing tool that allows him to type in shading language code and immediately execute it. It seemed very, very cool. Here’s an example YouTube vid to give you a hint:
I sat there thinking about how I might write such a thing. I didn’t feel a great desire to write a text editor (I think I last did it around 1983) so my idea was simple: design a simple OpenGL program that drew a single quad on the screen, using code from a vertex/fragment shader that I could edit using good old fashioned vi. Whenever the OpenGL program noted that the saved version of these programs had been updated, it would reload/rebind the shader, and excecute it. It wouldn’t be as fancy as Inigo’s, but I figured I could get it going quickly.
While I have said I don’t know much about GPU programming, that strictly speaking isn’t true. I did some OpenGL stuff recently, using both GLSL and even CUDA for a project, so it’s safe to say this isn’t exactly my first rodeo. But this time, I thought that perhaps I should do it on my Windows box. After all, Windows probably still has the best support for 3D graphics (think I) and it might be of more use. And besides, it would give me a bit broader skill base. Not a bad thing.
So, I downloaded Visual Studio 2010. And just like the Diplodocus of old, I began to feel the pain, slowly at first, as if some small proto-mammals were gnawing at my tail, but slowly growing into a deep throbbing in my head.
On my Mac or my Linux box, it was pretty straightforward to get OpenGL and GLUT up and running. Being the open source guy that I am, I had MacPorts installed on my MacBook, and a few judicious apt-get installs on Linux got all the libraries I needed. On the Mac, the paths I needed to know were mostly /opt/local/{include/lib} and on the Linux box, perhaps /usr/local/{include/lib}. The same six line Makefile would compile the code that I had written on either platform if I just changed those things.
But on Windows, you have this “helpful” IDE.
Mind you, it doesn’t actually know where any of these packages you might want to use live. So, you go out on the web, trying to find the distributions you need. When you do find them, they aren’t in a nice, self-installing format: they just naked zip files, usually with 32 bit and 64 bit versions, and without even a good old .bat file to copy them to the right place for you. On Mac OS X/Linux, I didn’t even need to know if I was running 64 bit or 32 bit: the package managers figured that out for me. On Windows, the system with the helpful IDE, I have to know that I need to copy the libs to a particular place (probably something like \Program Files(x86)\Microsoft SDKs\Windows\v7.0A\Lib) and the include files to somewhere else, and maybe the DLLs to a third place, and if you put a 32 bit DLL where it expected a 64 bit one (or vice versa) you are screwed. But even after dumping the files in those places, you still have to configure your project wizard to add these libraries, by tunneling down through the Linker properties, under tab after tab. Oh, and these tabs where you enter library names like freeglut32.lib? They don’t even bring up the file browser, not that you would really want to go grovelling around in these directories anyway, but at least there would be a certain logic to it.
And then, of course, you can start your Project. Go look up a tutorial on doing a basic OpenGL program in Visual C++, and they’ll tell you to use the Windows Wizard to create an empty project: in other words, all that vaunted technology, and they won’t even write the first line of code for you for your trouble.
After all this, I got to the point where I could hit F5 to compile, and what happened? It failed to compile my simple (and proven on other operating systems) code, with the message:
Application was unable to start correctly (0xc000007b)
You have got to be kidding me. When did we transport ourselves back to 1962 or so when a numerical error code might have been a reasonable choice? If your error code can’t tell you a) what is wrong and b) how to fix it, it’s absolutely useless. You might as well just crash the machine.
This was the start of hour three for me. And it was the end of Visual Studio. I must compliment Microsoft on their uninstaller: it worked perfectly, the first actual success of the day.
Undoubtedly some of you out there are going to proclaim that I’m stupid (probably true) or inexperienced with it (certainly true) and that if I just kept at it, all would be well. These are remarkably similar to the claims that I’ve heard from other religions, and I have no reason to believe that the “Faith of Video Studio” will turn out any better than any of the other religions.
Perhaps before you post, you should just consider that I warned you that I was a dinosaur when I began, and perhaps I was right, at least about that.
Luckily, along with this project, I’ve been thinking of another dimension along which I could develop some new skills, and it turns out that this stuff appears to be more in line with my dinosaur sensibilities, and that’s the Go Programming Language.
Go has some really cool ideas and technology inside, but at it’s core, it’s simply seems better to my dinosaur brain. The legendary Rob Pike does a great job explaining it’s strengths, and almost everything he says about Go resonates with me and addresses the subject of the long rant above. Here’s one of his great talks from OSCON 2010:
I know it will be hard to get my mind wrapped around it, but I can’t help but think it will be a more pleasant experience than the three hours I just spent.
I know the GPU thing isn’t going to go away either. I just kind of wish it would.
Phew. My legs are sore, and my voice is just returning to normal after a whirlwind two days at the Maker Faire in San Mateo. Thanks to everyone I bumped into and chatted with: I had a very nice time, and the partial solar eclipse was an added bonus (some pictures to come in a different post).
But in spite of all the fun I had, by the middle of Sunday, I had begun to have a bit of a uneasy feeling, a feeling that perhaps the event wasn’t really so much about making, but more about just a slightly different kind of consumption. For every individual who worked on some whacky project that they brought to exhibit, there seemed to be a dozen which were companies (mostly small, but some large) which were identifying “makers” as a new market segment that they wanted to sell products to.
In many ways, that’s not a bad thing: after all, I want companies like Sparkfun and Adafruit to succeed, because they make interesting components and technologies accessible to ordinary people with a desire to build. But I can’t help but wonder where are the consumers of these kinds of technologies? Of all the hundreds of thousands of Arduinos sold, why are there so few examples of cool artistic or technical applications being demonstrated on the tables at Maker Faire?
The reason that I go to the Maker Faire is to celebrate in the joy of craft and tinkering. I want to be inspired to think broadly and creatively, to extend my skills, and to share in the pleasure of making the world a tiny bit more beautiful/amazing/fun.
What seems really odd to me is that I heard more than one person lament the sorry state of science/electronics/shop skills in “kids” today, that it’s just really hard to learn this stuff. I couldn’t help but blink: with the internet, with YouTube, with resources like IRC and mailing lists, with great companies (large ones like Digikey, and smaller ones like Sparkfun and Adafruit) I don’t think it’s ever been easier. One lamented the long ago loss of Don Herbert: TV’s Mr. Wizard. It was a great loss, to be sure, but we don’t need a TV network to promote science to young people. We can blog, podcast, form clubs and hackerspaces, and communicate with people all over the world. We have Khan Academy, Udacity, the Khan Academy, Vi Hart, and dozens of others to help inspire and educate.
In other words, we can all be Mr. Wizard. We are challenged not just to be students, but to also be instructors. To inspire others, as well as to be inspired.
By five, our little group was tired, and we were heading back to the car. At 5:18, the moon started to cover the sun, and by 5:30 we were back to the car, where my little Meade telescope and solar filter was waiting. We watched as the moon slowly ate the sun, and shadows of point sources showed the tell-tale crescent shapes. The sky got oddly dark. The temperature seemed to drop, and the wind picked up.
And then, the sun started to grow again. We packed up, and decided to head to dinner.
And I started to talk this out. And I realized that the feelings that I had were really just feelings of my own failure to live up to the ideas that I set out above. After all, I didn’t bring any cool projects to the Maker Faire. (Okay, I wasn’t a total slouch, I helped some young people who did bring stuff there, but the point remains.) Rather than complain about what needs to be done, I could just do something myself. If the ratio of independent creative projects to others is too low, then there is something I can do: I can bring something next year.
And, of course, over the last month, my blog has gotten a thick patina of dust. I’ve not been doing much with it. I could make excuses, but they don’t even ring true to me. I want to do better. I’ll start with trying to resume some regular posting of my ongoing projects. I’ll endeavor to be more creative, and less of a consumer.
Hmmm. Maybe the Maker Faire really does work fine just the way it is.
It seems startlingly anti-consumer for these blackout agreements to continue. The artificial scarcity created by these policies do nothing to enhance the fan experience. I’ve seldom seen an industry work so hard to avoid selling a product that they have and could sell to consumers.
Thanks to John, who pointed out that this post was mangled. Fixed now.
I wasn’t going to mention this one, but Dave, Chris and Jeff over at The Amp Hour brought it up on their most recent podcast, but other than Jeff’s somewhat enthusiastic declaration that he thought it was BS, I don’t think they pulled it apart enough.
The topic is a recent video poasted under the auspices of Google’s new Solve for X program. Try watching it:
If you try googling for “spray on antennas”, you’ll find dozens and dozens of links to this video, or what amounts to a copied press release regarding this video. If you dig a little deeper, you’ll find lots of people complaining about how poor the presentation was. What is somewhat harder to find is any kind of a critical evaluation of the information (what little there is) on this antenna scheme. I’ll try to confine my comments to the latter.
It’s begins with a pitch, and not a modest one. We are told to imagine that we can send signals twice as far using no more power. Or the same distance with half the power. Or that we can get rid of cell towers. Or communicate from the depths of the ocean to outer space. And the key is some kind of nanotechnology. that Chamtech has developed for “spray on antennas”.
Following this pitch is a story: a story how “a business partner” who asked him develop a hidden antenna for Special Operations. He was then asked by “the government” to try his antenna technology, which was then tested by “a government team”, who found that this spray on antenna was “an order of magnitude better” than their best antenna.
I’m sorry, but that’s just bunk. Good antennas are efficient. A given antenna has a particular radiation resistance. For instance, a typical dipole antenna such as the antennas that many radio amateurs use might have a radiation resistance of around 70 ohms or so. But, of course, there are other bits of resistance in the antenna too. There is the ohmic resistance of the antenna, so-called “ground losses”, and “coil losses”. The antenna efficiency is just the ratio between the radiation resistance and the total resistance of the antenna.
But here’s the thing: at VHF+ frequencies, it’s just not that hard to make antennas with efficiencies that are 90% or higher. And that means that there is no “head room” to make an antenna which is “an order of magnitude more efficient”. It’s just basic math. You can’t get more energy out of an antenna than you put in, and existing antenna designs are already enormously efficient at radiating what you put in.
Beyond that, the geometry of antennas is important. You can’t generate an efficient one by just stringing a random conductor (or spraying one) higglety piggly all over the place. The length of the various elements change the feedpoint impedance and that must be matched carefully to the transmitter output impedance in order to be efficient. The idea that these nanocapacitors can “hold” electrons and then release them at their “happy place” is enough to make milk shoot out of my nose.
The “test” on the iPhone was comical: inside an Faraday cage (originally he said anechoic chamber, which I thought was an odd mistake for an RF engineer to make) he claimed that their technology improved the output power of the iPhone by “20 dBm”. I’m sorry, but I cry BS on this as well: dBm is the power ratio referenced to a 1mw signal. It doesn’t make any sense to say that there is a 20dBm improvement. An improvement of 20dB is a hundred fold increase in output power. Just where is this power supposed to be coming from? A typical cell phone has an output power of around 27dBm, or around 500mw. A 20dB improvement would raise that to 47dBm, which is about 50 watts. Bunkum.
Honestly Google, I know you have some pretty smart guys who know about RF: why did you let this guy use your forum to sell this complete nonsense? It doesn’t bode well for Solve For X if it can’t distinguish between “radical solutions” and “snake oil”.
We’ve all heard it (and most of us have said it): “X is just a dumbed down for the masses.” Heck, I came dangerously close to saying it myself in today’s earlier rant. But I didn’t say it, and I try not to, because I think it’s not really very useful.
First of all, if you really are a beginner, you probably need things to be dumbed down, at least a little. For instance, as a relative beginner working to self-educate himself in the field of electronics and RF design, I learned that diodes pass current in one direction, but not the other. This is a “dumbed down” version of diodes: they actually have a forward voltage drop, and it’s only when that forward voltage drop is exceeded that current passes. But that too is a dumbed down version of what diodes do. The forward drop isn’t constant, it depends on things like temperature. Also, there is actually a curve that relates voltage and current, they don’t just snap on. But that too is just a “dumbed down” version of what a diode is. And so on, and so on.
The fact is, these “dumbed down” versions of the diode are very useful: they do convey some bit of useful information and begin to give us some experience and intuition about reasoning about circuits that contain diodes. The only thing that is bad is if we envision that our “dumb” understanding of diodes was a complete understanding of diodes. Then, there would be circuits and behaviors that we simply couldn’t understand, because the real diodes are a bit more subtle than our dumb version, whatever level of understanding that might actually be.
But more than that, when we say something is dumbed down, we stray dangerously close (and often well beyond) calling the people who may use these simplified models as “dumb”. That simply isn’t productive, and runs counter to what I view as the purpose (and mostly successful achievement) of getting people interested in computing and electronics. The Arduino is successful because it does “dumb down” things enough for the people to experience success, who might otherwise have been frustrated and annoyed. When I hear people say that the Arduino is “dumbed down”, I really hear them telling people who use them (or even more tragically, might have used them) that they are stupid. I don’t want to call people stupid, especially those who might actually try something that I enjoy, and inspire me to do better work.
The problem I was trying to make clear was not that the Arduino was “dumbed down”, but that the default development environment was a path that eventually kind of dead ends: to gain any real expertise and fully use the power underlying the $2.50 piece of silicon at it’s heart, you almost need to start over: perhaps by using assembler as some has suggested, or perhaps just by using avr-gcc with avr-libc. You have to learn about interrupt vectors, and the hardware resources, because the particular abstractions that the default development enviroment present rob the underyling hardware of its power. To give another example, no less a luminary than Edsger Dykstra scolded a generation of computer science instructors and students that the BASIC programming language was a fatal disease from which they would never recover. It wasn’t true. For many, it was the only programming that they ever learned, but that wasn’t a bad thing. For many in my generation though, it was a stepping stone to an exciting and profitable career.
Don’t bother saying something is “dumbed down”. It’s pointless. Your understanding of almost anything worth knowing is almost certainly “dumbed down” from its reality. Revel in complexity. Don’t be ashamed that you don’t understand everything today: you won’t understand everything tomorrow either, but with luck, you might understand more than you do today.
Now, if I could develop a slightly less dumbed down idea of how FETs work, I could perhaps understand the behavior of my QRSS beacon a bit better. So that’s what I’ll work on for the rest of the evening…
First of all, I really like the Arduino. There are lots of reasons: great community, relatively inexpensive, wide hardware availability and variety, and often a good “impedance” match to projects. But there are a few design choices (both hardware and software) that can be a nuisance, especially as you try to push the limits of what can be done on such inexpensive and low power hardware.
First of all, there is the basic software philosophy. I love the fact that it is a single download: this simplifies installation, and whether you are an expert or a novice doesn’t matter, that’s simply more convenient. But using the program editor provided is simply not that desirable for experts who might be more used to Eclipse, or to an old fashioned kind of guy like myself for whom vi and Makefiles is more reasonable. With a little work you can find out where avr-gcc, avr-libc and avrdude are installed and add them to your search path, but you still have some work to build a Makefile which can compile your sketch from the command line. That’s a little annoying.
But more annoying are the design choices of the libraries themselves.
High among them are the heavy use of delay and the relative invisibility of interrupts. This may simplify short programs, but it provides no help to more sophisticated programs, and may in fact hinder them. Consider my experiments of last night (which fueled the rant of this morning). I merely wanted to implement a serial terminal using the TVout library and some serial communications library. The idea would be “read from serial, print to TVout”, voila, should be simple.
TVout generates NTSC video on the fly, and it basically works great. To do so, it uses regular timer interrupts. and if you dig into the library itself, you might find out that it uses Timer1. At regular interval, the timer 1 counter overflows, and the library knows that it’s time to bitbang out the video using some carefully constructed code. It also appears to use Timer2 to generate audio tones. Hmmm. The AVR chip that underlies the normal Arduino has only three timers… is that going to be a problem? How can I tell if another library also uses those timers?
You won’t find it in the documentation to any library. Arduino programming is supposed to be easy, and remove the need to understand how the underlying hardware works. Except that when you try to use two libraries together, and they happen to both use the same underlying timer resources, it doesn’t work right. There are no compile issues, it’s just one or both of the modules fail.
Which it did of course last night. You’d think that a loop like:
might have a chance of working, but it doesn’t. It drops and mangles characters horribly. While you might be able to poll some switches, apparently typing is something that is simply beyond the realm of expectation.
Some of you are probably going to leap to TVout’s defense, claiming that “You’re not doing it right! There is an example sketch which shows you the right way to do Serial and TVout!” Let’s have a look at that little sketch, shall we?
void loop() {
if (pserial.available()) {
TV.print((char)pserial.read());
}
}
[/sourcecode]
Okay, we have some new library, which we never heard of before. It’s apparently part of the TVout download. Documentation? No. It calls a function I haven’t seen before, “set_hbi_hook”. Is that documented? No. I am pretty sure it’s a hook which will get called at the end (or the beginning?) of a horizontal blanking interrupt (this isn’t my first rodeo) but what’s really going on here. The pserial.begin call must return a function… time to crack open the source code.
And, it’s about what you expect. There is a hook function that gets called on every line, right before the line is rendered. My guess is that it’s bad if the timing of the hook function is in anyway indeterminate, because then the rows will start at odd intervals. But each render routine starts with a line which waits… for some length…. maybe there is some amount of time (undocumented, different for PAL/NTSC, maybe just the front part of each scanline, read more code) that if you don’t exceed, you’ll be fine. What does pollserial do? Well, it snoops at the serial data registers (polling!) to see if a new character has arrived. It then puts it in a ringbuffer, so that it can be made available to the read call later. Okay, I understand.
But did I mention the reason I didn’t use this code in the first place? It’s that pollserial didn’t compile on my Arduino 1.0 setup (most libraries that aren’t part of the core don’t out of the box yet, in my experience). I could probably figure that out (has something to do with inheriting from the Print class and a prototype mismatch) but in my real, ultimate application, I wanted to read from a PS/2 keyboard. It will of course have the same (but differing in details) issues, and I’ll have to tweak their driver code to make it work with TVout too. Sigh.
Ultimately, I guess I disagree with one part of the Arduino philosophy: that programming can ever really be simple. Writing a program to blink an led, or read a switch isn’t hard, no matter what language or processor you use. Simple programs are simple, but the virtue of computers is that they can do things which are complex. If your software environment doesn’t give you sufficient help in organizing and doing complex actions, then you are missing out a great deal of the purpose of computers.
Addendum: While trying to fix the compile errors in pollserial, I found this fragment:
[sourcecode lang=”cpp”]
int pollserial::read() {
if (rxbuffer.head == rxbuffer.tail)
return -1;
else {
uint8_t c = rxbuffer.buffer[rxbuffer.tail];
//tail = (tail + 1) & 63;
if (rxbuffer.tail == BUFFER_SIZE)
rxbuffer.tail = 0;
else
rxbuffer.tail++;
return c;
}
}
[/sourcecode]
Can you spot the problem? Hints: BUFFER_SIZE is defined to 64, and rxbuffer.buffer is malloced to be BUFFER_SIZE bytes long.
My twitter intro says that I am an “enthusiast for enthusiasm”. When I wrote that, it was simply because there are some questions that I really think aren’t helpful at all. Questions like:
Why didn’t you just buy X instead of building your own?
Didn’t somebody do that years ago? Why are you playing with that old technology?
Why are you writing a program to do that, when you could just use Y, some program/framework/application that I use.
I hate questions like this because they aren’t really questions at all: they are simply trying to tell you that what you are doing is stupid or pointless. Here’s the thing: I mostly understand why I do the projects that I do, and I’m perfectly okay with you not understanding my rationale, or agreeing with it even if you do understand. The proper answer is “why climb a mountain?” isn’t “because it was there”. It’s not even “because no one has before”. The proper answer is “because I’ve not done it, and I enjoy mountain climbing.” Interestingly, most people won’t try to convince you that you shouldn’t like mountain climbing, but all sorts of people will try to tell you that your technical projects are a waste of time. This kind of conversation actually irritates me.
And with all this introduction, I’m going to now criticize a project, which is going to seem a bit hypocritical. Hang with me to the end, and I’ll try to resolve the apparent hypocrisy, at least partially.
The topic is the plethora of news stories about a talk given at the Chaos Communication Congress (28c3) recently held in Berlin. Some links to news stories:
So, what’s my beef? After all, any reader to this blog knows that I’m interested in amateur satellite and communications, surely this is right up my alley?
And indeed it is. But the motivation is just… well… it’s stupid. Not stupid because fighting censorship is a bad idea: it’s a very, very good idea. Even essential. But the idea that satellites constructed by amateurs can play any role (much less any significant role) in fighting censorship is fantasy.
First of all, launching satellites is expensive. Really expensive. While the hardware of cubesats can be constructed quite economically, launches have costs which are multiples of ten thousand dollars, for masses which are less than 1kg launched into low earth orbit. Currently AMSAT has a project called FOX to develop a communication satellite that fits the cubesat form factor, but it’s capacity and power are very limited, mostly by the physical size and weight limitations imposed by available launch opportunities. To launch a satellite into MEO or HEO would require costs measured in the millions of dollars.
Secondly, you can’t get spectrum to operate a satellite network like they imagine. Amateur radio frequencies are subject to regulation and treaties just like any other spectrum, and the uses of such frequency are dictated by regulation and treaty. The governing international body is the IARU (the International Amateur Radio Union) and member nations enact local regulations to enforce treaty restrictions to comply with the regulations of the IARU. The purpose of amateur radio satellites must be to “(1) provide communication for the general amateur radio community and/or (2) self training and technical investigations relating to radio technique”. While these topics are fairly broad, they are not broad enough to provide a general replacement for the Internet. In fact, in the U.S. amateur radio is specifically prohibited from carrying “communications, on a regular basis, which could reasonably be furnished alternatively through other radio services.” You can’t get the frequency allocations. Nobody will launch a satellite without frequency coordination.
Third, if your concern is to bypass the censorship of governments, it seems odd to do it by launching a satellite, because governments tend to have very strict and tight controls over satellites and satellite technology. For instance, in the U.S. ITAR regulations essential prohibit the transfer of dual use technologies to other countries, even to our allies. This isn’t just a theoretical concern: American participation in the amateur satellite projects of other countries have been significantly stifled But even more basic than these issues are the fact that access to space is currently under the control of the very governments we are concerned about. While increasing commercialization is eroding that to a certain degree, we cannot rely on commercial entities to operate in defiance of the governments of the countries in which they operate. There is some possibility that an organization such as Copenhagen Suborbitals might be able provide launches, but these operations must operate within the regulations of the countries from which they operate as well, so I think the idea of access to space independent of governmental interference is a fantasy.
Here’s the bottom line though: if your goal is to prevent government censorship, every dollar that you spend could do orders of magnitude more benefit using more conventional earth-bound technology. Funding projects like the FreedomBox Foundation, HTTPS Anywhere or The Tor Project, or working to generate a mesh based Wifi capability in your area are much, much stronger ways to work to combat Internet censorship.
If you want to build satellites, it’s a perfectly reasonable thing to do. But to try to sell the idea by saying that it provides a way to combat Internet censorship? That’s misleading at best.
Addendum: Here’s the actual talk at the Chaos Communication Conference. It’s actually got some cute stuff in it, mostly because it leaves behind the fantasy that a satellite communication network will provide a hedge against censorship in the first five minutes.
He does have a point, and it’s a point that I’m willing to concede: that asking the very rich for advice on how to run your life is probably not very helpful or realistic. They will tell you a story of their personal adversity, about how they stuck with it, about how the odds were stacked against them, and how they ultimately prevailed.
Of course, you don’t hear the stories of the millions who also followed their dreams, and yet still ended up living in their parents basement.
Steve was bold, brash and talented. He had a real vision. And he was also lucky. When we listen to stories of successful people (in politics, in business, in music, in sports) we often are told these kind of character lessons. We believe that if we emulate these successful people, we’ll be successful too. We ignore the (substantial) role that circumstances and luck play in success.
So I urge people to be cautious about drawing too many life lessons from the writings of the rich and successful.
But Kyle Smith swings way far in the other direction, and in a way that is perhaps predictably cynical, given the industry into which is article is targeted. He relates the story of a Gretchen Neels, who informs a group of prospective employees that the way their employers describe them is “entitled”. This is a common enough complaint (particularly among the WSJ and Forbes target audience), but I would submit two things for your consideration:
Young people are entitled to a better world than the one we are giving them. Our current political and financial institutions are failing them in a huge way. We’ve sold them on the idea that acquiring debt to become educated will pay off. That the things that are keeping them back is due to government meddling in their affairs, and the taxes and regulations that their employers have to pay. That’s not just wrong, it’s a lie, and young people are entitled to better from the world that they inherited. My grandparents and parents both thought their kids were entitled to a better life because that is what they worked for. The nation and its political institutions have failed everyone, but perhaps have disproportionately failed young people.
We should remember that there are two sides of this perception. Maybe the kids do feel they are entitled, but it’s also convenient for businesses to characterize their workers that way. It is an easy excuse for doing things to your employees that might otherwise give you pause. You end up saying things like, “hey, you aren’t entitled to a living wage” or “you aren’t entitled to respect or honesty in dealing with our business”. It’s just another way that employers have been dehumanizing their employees.
Smith is right about one thing: Jobs made a bad choice in not pursuing evidence-based treatment for his cancer. It is a tragedy that even the smartest among us often have some crazy ideas, and pursue them even at a very high cost to ourselves. Sadly, many of these ideas are quite pervasive, such as the idea that lowering tax rates creates jobs, or that immunizing young women for HPV increases sexual activity among teens. Jobs’ particular arrogance was at least primarily directed in his own private life, and while I do view it as tragic, I’m not particularly appalled by it, nor does it invalidate the many great things that Jobs created, and to the philosophy that he expressed via his public speaking (such as the often cited Stanford commencement address).
Many in the business world don’t seem to like the Stanford Address very much, and I suspect that it’s because they don’t actually understand it. It’s not intended as a recipe to make the next great CEO: it’s intended to challenge young people to make the world better. His message is different than the message sent by the WSJ and Forbes. His message was that if you want to change the world, you can only do it by doing what you love. It’s not a recipe for business success: it’s a recipe for happiness. Watch that video again: here’s a guy who was battling pancreatic cancer, and yet who was also experiencing perhaps the greatest period of creativity and success in his life. He was doing what he loved, and I think he was pretty damned happy about it.
If there is one overriding perception of the millennial generation, it’s that these young people have great — and sometimes outlandish — expectations. Employers realize the millennials are their future work force, but they are concerned about this generation’s desire to shape their jobs to fit their lives rather than adapt their lives to the workplace.
Frankly, I hope that the so-called millennials will prevail. The business, political and financial world have been telling young people that they have too high expectations, and in my view, it’s mostly to justify their own thievery of the future from our young people. We’re asking them to do more for less. That they aren’t entitled to better. That as individuals they aren’t important enough, so as individuals we are okay with letting them fail.
I hope I live long enough to see the world swing to a different view.
Steve Jobs, the pioneer of the computer as a jail made cool, designed to sever fools from their freedom, has died.
As Chicago Mayor Harold Washington said of the corrupt former Mayor Daley, ‘I’m not glad he’s dead, but I’m glad he’s gone’. Nobody deserves to have to die – not Jobs, not Mr Bill, not even people guilty of bigger evils than theirs. But we all deserve the end of Jobs’ malign influence on people’s computing.
Unfortunately, that influence continues despite his absence. We can only hope his successors, as they attempt to carry on his legacy, will be less effective.
I didn’t really find it surprising that Stallman would have some harsh comments regarding Steve. They represent two diametrically opposed views about computing after all. Stallman believes that anyone who hides any details about your computer from you is robbing you of your freedom. Jobs was slightly less of an ideologue, but was no real fan of that kind of free software, and was certainly comfortable with enforcing intellectual property rights to blunt competitors.
The odd thing is that I have some respect for both men, even though I disagree with some of their ideas most whole heartedly.
Stallman is an ideologue, in both the best and worse sense of the word. His work was absolutely fundamental in shaping the landscape of the open source and free software movements, but very early I diverged with his views. To me, software is like any other creative work protected by copyrights: it is ultimately the author who decides how and by whom it may be used. The users have no default rights. If they choose to accept the terms under which the authors distribute a work, then there is no basis for complaint.
Ultimately, I found that the model that the GNU license upheld was for me simply not free enough. The GPL is coercive in a way that I don’t find particularly attractive: it says “look, if you want to use my stuff, you have to let me use your stuff”. And of course it uses the copyright system itself (which is one of the ways that companies hold power over users) to gain a legal basis to enforce that idea.
I’ve always found the BSD license to be far more attractive, and I use it for my own works that I release. The basic idea is that you shouldn’t pretend that you wrote anything that you didn’t, so don’t do that. Give the authors their credit, but then feel free to build on what they did. I’ve found that to be more akin to my own goals and ethics.
Steve (and by extension Apple) wasn’t a huge fan of either of these models, although Apple certainly benefited by adoption of some free software projects. But if I was going to really complain about Apple, it’s more about the idea that they insist on interjecting themselves as intermediary in the process of software distribution. Even if I wish to give my software away, I have to get Apple’s permission to let anyone else use it. That’s seriously not good.
But as in all decisions one makes, ultimately you have to make a pragmatic decision. I have an iPhone despite my fundamental disgruntlement, because in the long run it still saves me time, and provides me with enough of value that I think it’s the best product for me to buy. Far from being “jailed”, I simply have made a pragmatic choice, and it’s presumptuous for people like Stallman and Raymond to claim otherwise.
There are worse things to be in than a walled garden. As long as you have the freedom to leave, calling it a jail is just pointless hyperbole.
I’ve had this rant percolating in my head for the last few days, and can’t let it carry into the weekend, so you all with have to bear with me.
First, the caveat: I’m a happy iPhone/iPad/MacBook user. These products are (for me) so clearly better than the products from other manufacturers that they replaced that they have become a part of my daily life. I always have my iPhone. I almost always am carrying my iPad. I do the bulk of my recreational programming on my Macbook. That being said, I’m not relentlessly tied to the upgrade cycle: my MacBook is an old white one (so old in fact the latest Mac OS X release can’t be installed on it). I have a first gen iPad, and will probably not upgrade until the next generation comes out. I have an iPhone 4, but partly upgraded so I could cycle my old one to my sibling.
And I recognize that other products might be preferred by other people. People have specific reasons for picking the products they like. Many people refused to buy iPhones when they were tied to AT&T, and AT&T customer service sucks. It wasn’t ever clear to me that any other cellular carrier had better service, but who am I to argue? Some people like the (quasi-) open source model of Android. Or the cost of phones. Or whatever features float your boat. If you bought an Android phone and are happy with it, who am I to argue? Enjoy.
But I’ve read an astonishingly large number of reviews about the iPhone 4S intro lately which make the claim that the phone is “disappointing”. And I simply don’t get it. Here is one to check out:
Let me repeat: Apple’s new iPhone 4S — with the fastest processor in a smartphone by miles, perhaps the most advanced and smartest voice command assistant on a piece of consumer technology ever, and the basic design and feel of the most wildly popular and beloved cell phone of all time — is a big fat, tremendous letdown of a device, and the event where Apple CEO Tim Cook announced the new iPhone was the Al Capone’s vault of product launches.
This boggles my mind: the author is conceding that it’s fast and pretty, with cool voice recognition and a great camera, but it’s disappointing?
What the hell is wrong with you people?
The phone delivers a bunch of cool features. The voice recognition technology seems very cool to me, integrated in a way we haven’t really seen in consumer applications. The camera is shoots 1080p video and has image stabilization. And of course it folds in all the features that my iPhone 4 will get next week as part of the iOS 5 upgrade,
It’s a terrific upgrade.
Am I going to pay the carrier-mandated extortion to go out and upgrade? No, to be honest, I probably am not. But to label this release as disappointing?
What the hell is wrong with you people?
Many commenters seem to ask “where is the pizzazz?” To me that seems like going into a restaurant, ordering a meal and then asking why they didn’t add more sugar. We all like sugar, after all. Or maybe we should put gold leaf on our food, just so we can crap out precious metals!
The implicit (or often explicit) claim that all this criticism seems to have is that the people who buy Apple products do so merely to show off their wealth. That the iPhone is bling, without any substance. That it doesn’t matter what actual features anything Apple has: the fanboys will dash out to buy them anyway.
The truth is actually exactly the reverse. People buy them because they love them. People love them because they are good. It is pure cynicism to presume that someone who chooses an Apple product does so purely on vanity.
The iPhone and iPad are great (but by no means perfect) products. In my opinion, they are simply take more care and provide better service for their products than alternatives. If that ever ceases to be the case, then I’ll take my business elsewhere. Thus far, I haven’t seen the better product.
The author actually meanders a bit (into the why we call it “ham radio”, for some odd reason, but his main point seems to be this:
As National Public Radio found last March, amateur radio is an experience that can’t be duplicated surfing the Internet. That’s why when NPR attended a ham radio convention in St. Louis, a reporter found teens carrying on the hobby. As one 15-year-old said, Facebook and texting are fun, but it can’t match making friends with a $200 radio for which you don’t have to pay a monthly fee.
I groaned a bit inside, because this is complete balderdash.
Okay, it’s not complete balderdash. I am not one to tell teens (or anyone else) what is fun and what is not fun: they are capable of figuring that out for themselves. I’ve no doubt that the teens they interviewed at a ham radio convention thought ham radio was fun, otherwise, they probably wouldn’t have been there. But I also suspect that if you took away a teen’s mobile phone and replaced it with a $200 HT, you’d find that even those attending the conference would probably be more than a little upset.
The reason is obvious: a mobile phone and an HT aren’t interchangeable. They don’t do the same thing.
Most notably, an HT is a ham radio, and radios like that are almost exclusively for communicating with other hams. If you want to communicate with someone who isn’t a ham, a ham radio isn’t really all that valuable. At best, it requires a clumsy relay. In practice, it just isn’t done. You’d just fire up your phone and call them. Or text them. Or email them. Or Twitter. Or Facebook. Or post something to a blog. You’d send them a picture. Or a link to a YouTube video. If you really want to communicate with someone, I’d submit that the Internet provides a much richer environment than amateur radio.
Okay, but let’s say you do want to talk to hams. Isn’t ham radio the most obvious way to communicate with other hams?
Well, I’d submit the answer is mostly no. If your goal is to communicate, all of the ways that I mentioned above are still excellent, reliable, high bandwidth means of communication. Even if you toss in the requirement that the communication be free, the wide availability of WiFi in many areas (from coffee shops to libraries) makes conventional Internet a very attractive means of communication.
If you accept this, then it does seem that amateur radio is going to go the way of the Dodo.
But I don’t believe it will, because ham radio does provide some things that the conventional Internet doesn’t.
First of all, it relies somewhat less on infrastructure, so it provides a backup in times of emergency. This capability is widely trumpeted as the (primary?) virtue of amateur radio, and as justification for our spectrum allotment. Our pool of self-trained emergency communicators can provide some valuable assistance to local communities in case of emergency as a kind of failsafe.
Secondly, even in non-emergency cases, ham radio can provide some capabilities which would be difficult to reproduce using more conventional wired or wireless technology. Repeaters can provide broad coverage in areas not well served by cell towers. HT’s and small HF rigs can enable people hiking and camping in remote areas to communicate.
But primarily, ham radio is a kind of sport: an active pastime. A form of recreation. We do it because we like to do it. It provides us an interesting opportunity to achieve mastery. Mastery makes us feel better. The activity provides a means to connect with other humans and relate to them about our shared interests.
The invention of the motorboat didn’t end surfing or swimming. The invention of canned tuna fish didn’t end fishing. The invention of cars didn’t end walking or running. Depending on the emergency, skills like walking, fishing or swimming may save your life, but that’s still not why people do them: they do them because it’s fun.
As long as ham radio continues to be fun, ham radio will continue.