September was a good month for projects. I accomplished all the things I set out to do and more:
- I’ve finished the Hornyphon radio for my customer
- Repaired and began using the Hallicrafters
- Got the broken ViewSonic monitor going again
- and put lighting effects on my coffee table out of spare parts.
In addition to writing once in a while, I read a lot of blogs. They’re about a quarter political, a good bunch of news, about a quarter are photo feeds, and the rest are life interest and hobbies.
One of the more interesting ones is “Art of Manliness” which runs all manner of short and frequently humorous how-tos on topics like shaving with a straight razor, catching a horse, fixing things on your car, you get the picture. They recently put up a great article about re-purposing a broken antique radio into an external speaker for an MP3 player.
When I encounter a broken antique radio, my first instinct is to fix it up and add an input for the iPod but sometimes they’re just too far gone to save or aren’t valuable enough to spend a dozen or more hours repairing. In that case, tapping into the radio’s volume control and re-using its existing speaker is a good alternative and is usually a reversible modification. A lot of purists might complain about ruining an antique to make this repair, but it’s a reversible modification and let’s face it – fixing the radio up well enough to receive a signal and then using an AM transmitter isn’t going to sound nearly as good most of the time, anyway.
Around WW2, they changed how antique radio speakers work. Before then, speakers were electrodynamic using a field coil instead of a magnet. Since they have no magnetic field if they’re not fully powered by a very high voltage, they won’t play sound – you need a permanent magnet speaker. I mentioned this to the author and he updated the copy of the page to reflect this important information that might have resulted in a lot of disappointment for someone who used the wrong type without knowing:
Important Note: Commenter J.W. Koebel brought to our attention that if you want to use the radio’s original speaker like we do in this project , the speaker needs to be a permanent magnet speaker. Radios from about the mid-1940s and on should have permanent magnet speakers. Earlier radios used electrodynamic speakers. Our amp won’t work with electrodynamic speakers.
How do you know if your old-time radio has permanent magnet speakers? Check the back of the speaker. If it has 2 or 3 wires going to the speaker, it’s a permanent magnet speaker.
Better-known gadget blog Lifehacker picked up the story, and devoted about 1/4 of their summary article’s copy to that same warning.
Two caveats: Make sure your vintage radio is not terribly valuable before you take it apart and also make sure the speaker in the old radio is a permanent magnetic speaker and not an earlier electrodynamic speaker that won’t work with the new amp. If 2 or 3 wires are connected to the speaker, it’s a permanent magnetic speaker.
That’s pretty cool. I didn’t think much of it at the time, but I’m glad some of my advice will help fellow hobbyists have a successful project. (Also, this is my blog’s 100th post!)
Long distances apart can make it tough to keep up friendships, and while the Internet has helped with this through the advent of e-mail, instant messaging and video conferencing like Skype none of these mediums can accurately duplicate the experience of being able to quickly ask and see “What’s going on?” to a friend or colleague across great distance.
E-mail is a bit too asynchronous. Instant messaging suffers the same problem, along with the lack of visual feedback and a frequently too small text window. Skype calls go the other direction, they’re slightly too synchronous: it’s not possible to automate them, and they use more bandwidth than something more laid back really needs to be successful. What’s missing is a passive solution to let people passively – and pervasively – interact with others with video feedback.
Enter the “Digital Window”. Originally conceived a year or two ago, the idea is simple: a panel mounted in a visible location connected to a camera which shows a passive viewing portal into another space via a similar device located elsewhere. Glance out the window into a previously authenticated friend or colleague’s space and see what they’re up to, and start a conversation if it’s interesting. Time not spent in front of the computer is often when some of the most interesting projects take place and if nobody knows they’re happening, it’s impossible to collaborate and seek feedback.
The idea became reality with some minor revisions when a software developer friend recently got married – what better gift than writing a video conferencing appliance on dedicated hardware using nothing but off-the-shelf components? I collaborated with another member of our group across the country to make the system a reality, and we bootstrapped it from the ground up using it to help continue its own development once some basics were in place.
The wedding gift, our implementation of the digital window, consists of the client-side appliances: two Asus netbooks running Windows XP, configured to automatically begin broadcasting via their internal webcams using Windows Media Encoder 9, and load the Viewer application in a web browser. The viewer application itself is a web page hosted on the streaming server itself, a simple automatically-refreshing container loading a set of borderless Windows Media Player controls to display the streams. The viewer code is self-refreshing and requires no maintenance.
Windows Media Encoder 9 was somewhat difficult to find as it’s no longer officially supported, but it’s still available from Softpedia. Its replacement is the Windows Expressions Encoder, a commercial product with a free version, but it’s a heavier package and the Asus netbooks don’t need to waste cycles running a bigger application than necessary.
When the system first launches, it automatically launches a Visual Basic script via a shortcut in the Startup folder. Through some trial and error, we learned we needed to set the shortcut to launch the script minimized to avoid popping up a command prompt window over the output. The script then sets up an Internet Explorer window, the Viewer application, and launches Windows Media Encoder. The script can be found below, with some identifying information removed for security reasons – you’ll need to fill in your own URLs to use this code if you’re going to clone our setup yourself.
On Error Resume next Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = CreateObject("InternetExplorer.Application") Set sHTMLTitle = "Viewer Application" Return = WshShell.Run("Custom.wme") 'Set this to the location of the .WME profile you created in Windows Media Encoder WSCript.Sleep(60000) 'Sleep to let the encoder load - it does a lot of stuff on start-up. objIE.StatusBar = 1 objIE.Toolbar = 1 objIE.Width = 1024 objIE.Height = 600 objIE.Left = 0 objIE.Top = 0 objIE.Visible = 1 objIE.Navigate "Viewer Application URL" ' Wait for IE to finish loading before continuing. Do While objIE.Busy: Loop Do While objIE.ReadyState <> 4: Loop WScript.Sleep(5000) Set EncoderAgent = CreateObject("WMEncAgt.WMEncoderAgent", "127.0.0.1") ' Grab the running encoder via the WMEncoderAgent. Set Encoder = EncoderAgent.GetEncoder(EncoderAgent.EncoderNamesCollection.Item(0)) Encoder.Start ' Begin Streaming WshShell.AppActivate("Viewer Application") 'Activate different possible titles of the window. WshShell.AppActivate("Internet Explorer") 'Depends on the local system's configuration what IE is titled...covers possibilities. WshShell.AppActivate("Windows Internet Explorer") While 1=1 'Watchdog Select Case Encoder.RunState Case 5 '"STOPPED" State WScript.Sleep 2500 Encoder.Start WScript.Sleep 2500 WshShell.AppActivate("Viewer Application") WshShell.AppActivate("Internet Explorer") WshShell.AppActivate("Windows Internet Explorer") WshShell.AppActivate("Site URL Goes Here in Titlebar") WshShell.AppActivate("Site URL Goes Here in Titlebar - Viewer Application") WScript.Sleep 100 End Select Err.Clear WScript.Sleep 1000 Wend
The script isn’t incredibly complicated. We’ve settled on using AppActivate commands because the programmatic pressing of the “Start Encoding” button in the watchdog loop causes Windows Media Encoder to pop to the foreground over the viewer, blocking the window – not what we want to happen. The AppActivate pops the viewer back to the foreground where it belongs
To make the system more robust and appliance-like, the system checks to see whether the encoder is active and if it’s not (due to a network drop or other connection error) to reconnect. The Asus netbooks have a webcam driver that likes to act up after a few days running, so we’ve configured them to reboot automatically at around 3AM every day. They’re configured to come online fully automatically, so this restart is seamless.
The result came out better than expected: by simply monitoring the encoder’s state and disabling popup error messages, the system is robust enough to overcome non-critical driver errors, client-side network drops, and even reconnect automatically if the server is taken offline due to connectivity or maintenance. It’s expandable, too: viewer can be transparently updated with new features (as it’s a web browser, after all) and new clients can be added limited only by your screen’s area. It’s also possible to create different viewer interfaces depending on the device – a flat panel monitor, a large TV or a netbook. The initial startup page could become a landing page, redirecting the viewer clients to pages based on their HTTP request, User-Agent, IP, or another mechanism.
The first time the system is configured, you must create a new Session in Windows Media Encoder and save it to a file on your hard drive. The Session contains the source, destination, security and formatting information for the stream. We’re streaming video only right now, although audio streaming may come in a later version. Unfortunately, a profile must be created for each system manually, as it contains information about the specific driver and device that will be used.
The Encoder session is configured in Push mode – connecting to the server directly, instead of the server connecting to the encoder. This allows the appliance to work from behind nearly all firewalls, and is an additional security feature as the encoder controlling the camera cannot be accessed from outside the network, so it’s not possible for an unauthorized party to tap into the video feed. Additional security (authentication and IP range) is provided on the server.
Finally, we’re streaming 320×240 at 4 FPS, ~100Kb/s. CBR was chosen due to its simplicity, as it’s less taxing on the Celeron and Atom CPUs in the netbooks – and although being labeled as constant, when the camera is pointed at an unchanging scene without much color the bandwidth really does drop down, for example if the camera is pointed at a wall, it’s shutter is closed, etc. This might seem low, but it’s designed to be highly portable and we had to keep screen resolution concerns in mind. The quality is quite acceptable for casual use as we’ve designed it.
It’s pretty simple and can be expanded or modified as needed.
On the server side, the viewer code and stream brokering is handled by Streaming Media Services running on Windows Server 2008 R2. The streaming is hosted on a business-class connection with a 5Mb/s upstream, which is more than sufficient for current and future applications: the incoming bandwidth scales linearly with the number of clients, and while the outgoing bandwidth scales as the square of the connected clients this issue is mitigated by controlling the encoder settings to use only approximately 100Kb/s per stream. Our four-encoder system uses only 400Kb/s downstream bandwidth and 1.6Mb/s upstream – it will scale transparently to around 12 clients before becoming bottlenecked on the connection, or around 8 clients with higher resolution and audio.
Early adopters of Google+, myself included, have been drawn to its clean interface , user-centric privacy and content controls, “Circles” model of friendship networks and general user-friendliness. It’s not open to everyone just yet, and they’ve recently decided to make it less appealing for everyone else – by instituting a draconian Real Names Only policy.
Use your full first and last name in a single language.
If you use your full name, you’ll be able to connect with people you know and help them find you. Names that consist primarily of initials or those that include indications of membership in professional, educational, societal or religious entities, such as “Dr.”, “Rev.” or “JD” are not allowed in the first or last name fields. Names that include more than one language script aren’t allowed either.
Violation examples: Doctor Stan Livingston, Bill Smithwick DDS, Rev. Jim Copley, 蔡玉娴 Archer, S. P.
Put nicknames or pseudonyms in the Other Names field.
If you’re referred to by more than one name, only use the one that commonly identifies you, and place the rest in the “Other names” or “Nickname” section of your profile.
Violation examples: Timothy “TK” King, Jonathan Richards (JonnyBoy), PunkRockerSF
Avoid unusual characters in your name.
When you create your profile, our system will check the name you submitted for unusual characters. For example, numbers, symbols, and obscure punctuation are not supported.
Violation Example: John246 , ★★Shelley★★, J@SON W@T$ON, ‘Rachel Smith/
Your profile and name must represent one individual.
Google+ does not support profiles for couples or groups of people. Additionally, you cannot create a profile for a non-person entity such as a pet or business.
Violation examples: Jones Family, Jeremy & Mel Mason, Vegas the Dog, Brooklyn Bagels, Northern California Conservation Society
Don’t use the name of another individual.
Impersonation is a serious issue. Pretending to be someone else could cause your profile to be deleted. If someone is pretending to be you, go to their profile and click Report this profile.
I’m all in favor of not stealing someone’s identity, or allowing corporations or conglomerations of people to set up profiles, but a strict reading of the “full first and last name” rule puts my profile squarely out of compliance. I’ve gone by J.W. for a very long time. It’s the name that’s printed on my business cards, all of my personal and professional profiles, anything I’ve written including this blog, and it’s what 100% of people I know call me.
Leaving aside the fact that anonymity is of incredible importance on the Internet, especially in the face of a creeping security state, Google’s real name policy disregards variations of people’s legitimate real names. They can suspend my account if they feel like, but I’m not going to change it – I’ll delete it entirely and revert to pre-Google+ status.
Google+ makes connecting with people on the web more like connecting with people in the real world. Because of this, it’s important to use your common name so that the people you want to connect with can find you. Your common name is the name your friends, family or co-workers usually call you. For example, if your legal name is Charles Jones Jr. but you normally use Chuck Jones or Junior Jones, any of these would be acceptable.
Makes sense…but my common name is primarily initials, falling squarely in violation of their first guideline. Rather than making it easy for people who want to connect with me to find me, using my legal name would virtually guarantee I’ll never be located.
Residential Comcast service is pretty objectively terrible for most power users and hobbyists, even if it does meet the needs of most less-technical consumers (although that may be less of the case as Internet use continues to grow…) Residential High-Speed Internet has a 250GB/month maximum contractual limit on your combined bandwidth transfer. If the sum of your uploaded and downloaded bandwidth exceeds 250GB, you’ll receive a warning; multiple of these in a 12-month period will result in you being banned from the Internet for a year unless you go find another provider. Before I started doing more technology-related hobbies and projects at home, I wasn’t that close to hitting the cap (my experience similar to his) but over the course of the year my bandwidth use has ramped up to the point where I was about to get cut off.
June was worse, but I don’t have a bandwidth graph available for it anymore unfortunately. My uploads have been ticking up, too – I’m running a telepresence system and hosting several web sites now, in addition to my normal Netflix-streaming and online activities. So it was time to upgrade to Comcast Business-Class Internet. I’m on the Premium package, offering 22Mbps download and 5Mbps upload compared with residential service which was offering up to 12Mbps download and 2Mbps upload.
Business Internet is running on an entirely different technology stack. It uses a different block of frequencies and the DOCSIS 3.0 standard to deliver dedicated bandwidth. The contention ratio for the connections is about 1/10 that of residential connections. The speed advertised is the minimum guaranteed speed, not the maximum speed possible by demand; the actual maximum is determined by contention on the node. And there’s no bandwidth caps.
Because I’m on a primarily residential node with either 0 or 1 other customers on the same service class, I’m getting a bunch of bandwidth extra for free:
San Jose, CA:
I’m seeing about a 30% premium in downstream and a >100% in upstream for close-by targets, and even a 25% increase for long-distance links.
Don’t get me wrong, I still despise everything Comcast does as a result of their cozy revolving door relationship with their Washington regulators but in Seattle, there’s exactly one credible option for Internet service, and if you want to play you’ll play by their rules. This service might be better in a lot of ways, but it’s still terrible on principle.
If you’re like me, you probably find it terribly annoying when an annotation appears automatically over a YouTube video. They stick around until you dismiss them and block the view.
It’s possible to disable them for all videos by default, though. You need to be logged into your Google account (since it’s an account preference), once there, it’s an option under Playback Setup:
Uncheck “Always show captions” and “Show annotations” to keep them from popping up. You can re-enable them on a per-video basis by clicking the button along the bottom of the viewer.
Following up on my complaint about Netflix streaming not having enough content, I’ve discovered something even more annoying: apparently content that’s previously been there is rotated or otherwise phased out.
I’d been working on translating the Greek text from the Japanese TV show via Netflix Streaming, but got sidetracked and didn’t get through the entire thing. When I went to go through a few more episodes today, I was helpfully greeted with this:
Not only is there a limited selection, apparently it’s not even consistent.
There’s a lot of uproar about the Netflix price increases lately. I ditched my Cable TV subscription about 6 months ago and haven’t looked back, relying on Netflix, Hulu, YouTube and television network sites to watch the shows over the Internet. Personally, I don’t care all that much as I’m not on a DVD plan – but I’m starting to think about cancelling my streaming-only service. It’s easy to use and has good video quality…but never has the content I’m looking for.
I jumped on their search for a quick check of what I could come up with. I searched for programs I’ve thought about/heard about/read about/talked about/remembered in the last week or two. The results?
- Babylon 5 (1994-1998) – Nope
- Futurama (1999-)- Partial (Stops at 2009)
- Harry Potter – Nope (Not a single one)
- Independence Day (1996) - Nope
- It’s Always Sunny in Philadelphia (2005-2009) – Nope
- Lord of the Rings (2001-2003) - Partial (only part 1/3)
- Shrek Anything - Nope (and I shudder to realize there are in fact 8 Shrek movies)
- The Walking Dead (2010) – Nope
- V (1980s or 2010) – Nope
That’s a set of largely mainstream programming spanning several genres and market segments but they’re all long-running well rated television shows and several critically acclaimed high-performing feature films. And they’re not available. That doesn’t leave me with a lot of options for getting the content – I can buy it on DVD, but for something I’m only interested in watching once every few years, spending $50 on a DVD Box Set isn’t a good bet. (Not to mention, who uses physical media anymore?) It’s not available anywhere else for legitimate streaming, either. This leaves me with two options: don’t consume that content or download it from a file-sharing site. I find BitTorrent annoying for many reasons, so end up not doing anything followed by writing about it on the Internet.
Netflix really does need to do something, though. I haven’t actually used my subscription in the last 3 months because nothing I wanted to watch was available. It’s not going to make much sense to keep paying for something I “might” use for much longer. Netflix may end up losing another customer – not because of the price hikes, but because the news about the price hikes has made me really evaluate how much value I’m actually getting from the service. The answer seems to be “not much” – and since the monthly fee is about equal to two cups of morning coffee, that’s really not a very glowing endorsement.
We’re living in an age where we’re inundated with communication and information all the time. Smartphones are expected to exceed 50% of all cell phones in circulation this year and with that, millions of people will join the already large ranks of the constantly connected. A smartphone in your pocket brings voice and text, along with personal and corporate e-mail, video chat, instant messaging and social networking to you with always-on push notification in addition to pulled services like navigation and search.
We’re constantly being bombarded with attempts to reach us, but the software we use to manage these attempts hasn’t really caught up. Google Voice takes a stab at organizing voice and text-messaging, providing a number that can deliver messages to your mobile device or to any web browser and offering up the ability to set rules, ring groups, calling times and default behaviors per-caller but there’s no good solution for the other items. For example: I wake up in the morning, and see my phone will have a few notifications. Typically, a few text messages, e-mails on both my personal and work accounts, and frequently several instant messages or a missed call or two. That’s a lot of messages to sort through, and the phone’s default behavior of handling all incoming notifications from any source exactly the same way just doesn’t match the way I want to organize my interactions.
I’d like my phone to be able to decide what to do with a message automatically based on rules I set up. Rules that let my device decide what to alarm about based on the day and time, the sender, the medium and keywords in the message. “Don’t make noise for incoming messages between Midnight and 5AM unless it’s from a priority group, in which case make extra noise”, “automatically send all unknown number calls to voicemail”, “always alarm for boss phone call even if otherwise muted”. Right now, all the settings are either on or off all the time: either notifications make noise, or they don’t. I either miss things I don’t want to miss, or am woken up by alerts for spam e-mails. I think we’re just slightly too early for this kind of granularity, but I expect it’ll catch on soon.
Gmail has an interesting characteristic that falls somewhere between “really cool feature” and “strange parsing bug”, depending on how you want to look at it. Whatever the underlying cause, the end result is that you can create custom aliases to your Gmail account that can be used to help differentiate your accounts. There are two different ways. The first one is the appended alias.
The second behavior, which I believe is unintentional, is delimiter invariance. In most e-mail systems, “FirstLast@gmail.com” and “First.Last@gmail.com” are treated as unique identifiers. They may be bound to the account on the back end. Gmail appears to use complete delimiter invariance in their systems, though. My e-mail address does not currently contain any separators, but if I sent e-mail to first.name, f.irstname, firstnam.e, or even firstname.lastname@example.org they all route to my primary e-mail account. This is especially interesting because another Internet user in another part of the country with a similar name, has registered the same e-mail address. Gmail allows periods when creating the account, but ignores them. I occasionally get e-mail directed to this other individual because of this issue.
Combining these two, you can sort and filter your e-mail a bit before it even reaches your inbox by making your address uniquely identifiable. It’s a pretty neat feature.