Starting to see more flowers blooming and a variety of butterflies. I haven't been able to photography any butterflies yet for a couple of reasons: 1) I haven't carried my trusty 100mm macro lens and 2) they're just too darn fast!
Lots of Robins today. One of them even let me fairly close while he posed for me.
My first Cedar Waxwing sighting of the year:
That same feisty Red-winged Blackbird, protecting the nest - got him in flight today.
And a funny little squirrel:
Also spotted a hummingbird sitting on a high-up branch - too far and too back-lit to get a good image.
About Me
- Kevin
- By day I'm a propeller-head geek. I design software for electronic components for a major automotive supplier. When I'm not earning a paycheck, I enjoy playing music -- primarily jazz and classical but I dabble in other genres as well. I also compose, arrange, and play with electronic gadgets and toys. My other hobbies include photography, colored pencil drawing, genealogy, model railroading, and crosswords.
Friday, June 06, 2014
Tuesday, June 03, 2014
Lunch Walk 03 Jun 2014
When the weather is nice, I like to take a nature walk during my lunch break. I get some exercise but my real motivation is the opportunity to make some photographs. I'll make images of just about anything that catches my eye - flowers, wildlife, objects, and especially birds. I've become increasingly interested in bird photography.
Until now, I've been using an old Canon EF 75-300 f/4-5.6 II (non-USM) lens on my new 6D body. I've got my eye on a new super-telephoto zoom and I'll most likely end up with a Canon 100-400 very shortly. I'd really like to try the new Tamron 150-600 but it just has not been available. Besides, I think I'm going to want the faster AF the Canon offers, even at the loss of reach. I've read that a Kenko 1.4X PRO extender will still allow AF to work on the 100-400, so that could be an option for regaining the extra reach.
Today, I captured a Baltimore Oriole - a new sighting for me. I also got a feisty Red-wing Blackbird, a Blue Jay, and Song Sparrow. The following images are jpegs straight from the camera - no editing whatsoever. (Check my flicker stream for more refined images.)
Until now, I've been using an old Canon EF 75-300 f/4-5.6 II (non-USM) lens on my new 6D body. I've got my eye on a new super-telephoto zoom and I'll most likely end up with a Canon 100-400 very shortly. I'd really like to try the new Tamron 150-600 but it just has not been available. Besides, I think I'm going to want the faster AF the Canon offers, even at the loss of reach. I've read that a Kenko 1.4X PRO extender will still allow AF to work on the 100-400, so that could be an option for regaining the extra reach.
Today, I captured a Baltimore Oriole - a new sighting for me. I also got a feisty Red-wing Blackbird, a Blue Jay, and Song Sparrow. The following images are jpegs straight from the camera - no editing whatsoever. (Check my flicker stream for more refined images.)
Baltimore Oriole
Blue Jay
Song Sparrow
Red-winged Blackbird
Red-winged Blackbird - he's got his lunch!
Wednesday, August 21, 2013
Embedded Systems Virus?
I posted this in response to a question on the LinkedIn Embedded group:
To answer the OP's question: is it possible to inject some virus in a micro-controller based embedded system? I believe it is *possible*. Perhaps not likely at this moment but we are fast approaching a time when the likelihood of attacks on embedded systems will dramatically increase. There have, to date, been a few academic studies on hacking into automotive systems and these have proven successful to some extent. Automotive companies (most notably GM) are now taking a serious look at cyber-security and we can expect to see stringent security (as well as safety) requirements for at least the most vulnerable modules for model years as soon as 2016.
As far as non-automotive micro-controller-based embedded systems, they are all around us - and SPECIFICALLY connected and accessible. Every smartphone (iPhone, Android, etc.) is such a device. Also, we are becoming more and more dependent on "the cloud" -- what if a way was discovered to "poison the pool" by infecting the cloud?I'll bet there have already been some serious attempts!
I was thinking if it is possible to inject some virus in a micro-controller based embedded system?As we move toward the Internet of Things (or pervasive computing, or ambient intelligence, or ...) there appears to be a convergence toward standard interfaces, whether these interfaces are widely published or not. Look at the automotive industry. Every modern car has dozens of embedded systems that are interconnected (via CAN or some other network). Connectivity with the World at large is becoming more affordable and common (e.g. GPS navigation, Wi-Fi internet, and over-the-air services like OnStar and Sync). Also consider that a computer does not necessarily have to be connected to the internet to be vulnerable to attacks -- in the "old days" viruses passed from machine to machine on floppy disks (aka "sneakernet") and today we still use portable media (i.e. USB drives).
To answer the OP's question: is it possible to inject some virus in a micro-controller based embedded system? I believe it is *possible*. Perhaps not likely at this moment but we are fast approaching a time when the likelihood of attacks on embedded systems will dramatically increase. There have, to date, been a few academic studies on hacking into automotive systems and these have proven successful to some extent. Automotive companies (most notably GM) are now taking a serious look at cyber-security and we can expect to see stringent security (as well as safety) requirements for at least the most vulnerable modules for model years as soon as 2016.
As far as non-automotive micro-controller-based embedded systems, they are all around us - and SPECIFICALLY connected and accessible. Every smartphone (iPhone, Android, etc.) is such a device. Also, we are becoming more and more dependent on "the cloud" -- what if a way was discovered to "poison the pool" by infecting the cloud?I'll bet there have already been some serious attempts!
Friday, May 31, 2013
All Politics is Local
It was Tip O'Neill who coined the phrase, "All politics is local." There's nothing more local, or political, than a condominium association if you own and reside in a condominium (and I do).
My condominium complex is a "conversion" (from apartments) that began about 12 years ago. There are 346 units in our development and when the housing market crashed, about many of the units remained unsold. The developer fell on hard times and the association struggled financially. The present treasurer has worked since 2007 to keep us solvent, build our reserves to the minimum required by the bylaws, and at the same time bring the quality of the property up to par with the high standards of our surrounding township. He did his job well enough to be reelected twice (our board members serve for two years). Recently, the developer (and his bank) sold his interest to a new investor, who essentially bought the 108 remaining unsold units.
Despite board members going door to door a couple weeks ago, urging owners to attend the annual meeting so that our interests would be fairly represented, the meeting was lightly attended. Our board of directors consists of seven owner/members who serve for a two year term. Four seats were up for election this year.
After the treasurer's state-of-the-association presentation, the new investor briefly introduced himself but otherwise didn't draw much attention to himself or his business partner, who attended the meeting with him. When nominations were being made for the four vacant director seats, four names were proposed by the investor: himself, his partner, and two others who were not present. There were seven nominations in total, one of which was our beloved treasurer. I don't think anyone (other than perhaps the sitting board members) realized what was about to happen. The votes were tallied and listed one by one. The first person listed received 28 votes; the second, something like 18 votes. The third person on the list was the investor, and there was an almost perceptible gasp as the number 128 was written next to his name. A silent tension filled the assembly as the votes for the next three nominees - the investor's partners - were filled in; the lowest number of votes among them was 108. We were railroaded. Ultimately, all four vacant seats were filled by the investor and his people. There was at least one irate owner who wanted to contest the results - it evidently had not yet "clicked" with her that this one person, the investor, wielded 108 votes while the remainder of the forty or so people in the room collectively held only 28 votes.
Here's the part where I rant:
My condominium complex is a "conversion" (from apartments) that began about 12 years ago. There are 346 units in our development and when the housing market crashed, about many of the units remained unsold. The developer fell on hard times and the association struggled financially. The present treasurer has worked since 2007 to keep us solvent, build our reserves to the minimum required by the bylaws, and at the same time bring the quality of the property up to par with the high standards of our surrounding township. He did his job well enough to be reelected twice (our board members serve for two years). Recently, the developer (and his bank) sold his interest to a new investor, who essentially bought the 108 remaining unsold units.
Despite board members going door to door a couple weeks ago, urging owners to attend the annual meeting so that our interests would be fairly represented, the meeting was lightly attended. Our board of directors consists of seven owner/members who serve for a two year term. Four seats were up for election this year.
After the treasurer's state-of-the-association presentation, the new investor briefly introduced himself but otherwise didn't draw much attention to himself or his business partner, who attended the meeting with him. When nominations were being made for the four vacant director seats, four names were proposed by the investor: himself, his partner, and two others who were not present. There were seven nominations in total, one of which was our beloved treasurer. I don't think anyone (other than perhaps the sitting board members) realized what was about to happen. The votes were tallied and listed one by one. The first person listed received 28 votes; the second, something like 18 votes. The third person on the list was the investor, and there was an almost perceptible gasp as the number 128 was written next to his name. A silent tension filled the assembly as the votes for the next three nominees - the investor's partners - were filled in; the lowest number of votes among them was 108. We were railroaded. Ultimately, all four vacant seats were filled by the investor and his people. There was at least one irate owner who wanted to contest the results - it evidently had not yet "clicked" with her that this one person, the investor, wielded 108 votes while the remainder of the forty or so people in the room collectively held only 28 votes.
Here's the part where I rant:
- We now have an "owner" (investor) with only a 31% share of the entire property (108 of 346 units) but a majority vote on the board of directors. This situation could be even more extreme next year when the other three seats are up for election.
- I'm pretty sure the investor does not live in the complex and therefore has little interest in the community beyond his bottom line.
- I asked him if it was his intention to develop and sell the 108 units or just keep them as rental property and he indicated that selling was the "long term" plan but he didn't want to "flood the market" with all the units at this time.
- Our beloved treasurer, unceremoniously pushed out, is no longer at the helm. "Thanks for saving the world, I'll take it from here." It's unknown if his grand plan will be maintained or if the investor thinks he has a better plan (no doubt his goals are different).
- I can't blame the sitting board for this coup - they tried to warn us (the owners).
Tuesday, May 21, 2013
A More Compact "Pythonic" Guido Function
from random import choice
def guido2(gtxt):
return [guidoPitches[(len(vmap)*choice([0,1,2]))+vmap[c]]
for c in gtxt.lower() if c in vmap]
Wednesday, May 15, 2013
A Simple Composition Algorithm According to Guido
I'm reading Musimathics, by Gareth Loy. Composition and methodology is the subject of volume 1, chapter 9, where "Guido's Method" is discussed. The author presents an implementation of Guido's method in his own devised language called MUSIMAT but I wanted to see if I could do the same in Python. So here it is:
import random
guidoPitches = [ 'G3', 'A3', 'B3',
'C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4',
'C5', 'D5', 'E5', 'F5', 'G5']
vmap = {'a':0, 'e':1, 'i':2, 'o':3, 'u':4}
def guido(gtxt):
G=[]
for c in gtxt.lower():
if c in vmap.keys():
G.append(guidoPitches[(len(vmap.keys())*random.choice([0,1,2]))+vmap[c]])
return G
guido('Ut queant laxis resonare.')
import random
guidoPitches = [ 'G3', 'A3', 'B3',
'C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4',
'C5', 'D5', 'E5', 'F5', 'G5']
vmap = {'a':0, 'e':1, 'i':2, 'o':3, 'u':4}
def guido(gtxt):
G=[]
for c in gtxt.lower():
if c in vmap.keys():
G.append(guidoPitches[(len(vmap.keys())*random.choice([0,1,2]))+vmap[c]])
return G
guido('Ut queant laxis resonare.')
Saturday, February 25, 2012
Model Railroad Progress
It's been a long time since I've made any progress on my model railroad. It has gotten a little scenery work here and there but has been non-operational for at least a year - I have yet to get around to completing the electrical wiring. Today, I finally completed the mechanical work of assembling the operating panel. The next step is break out the soldering iron and put wire to terminal. Here is a mockup of the panel - created in Visio:
Figure 1 - panel mockup
Wednesday, January 11, 2012
True and False in the C Programming Language
I know, C is dead, right? Not quite. While C has been supplanted in many industries by C++, C#, and other object-oriented languages, much of the automotive industry still relies on plain vanilla C - MISRA C, to be specific. I overheard the following question today: "should TRUE be set to !FALSE or should it be set to 1 - which is more MISRA compliant?" I don't know which is more MISRA compliant (off the top of my head), but I'd like to offer an alternative that, to my thinking, is more type-safe and avoids clashes with the macro definitions provided with many compilers.
Since C does not have native support for a Boolean type, it is common to #define TRUE and FALSE:
#define FALSE 0
#define TRUE !FALSE
FALSE is always zero and true may be any non-zero integer, so it is safest to let the pre-compiler decide what !FALSE means. This is portable but not type-safe; TRUE and FALSE may be compared to a result of any type (leaving the type conversion to the compiler). I like to use a typedef'd enumeration, instead:
typedef enum {eFALSE = 0; eTRUE;} BOOL_t;
Since this is "user defined", it is incompatible with the return type of standard library functions, so they must either be handled in the typical manner or with explicit casts.
Thinking about how to define and use boolean types in C reveals an important lesson about the "safe" use of C. That is: Avoid comparisons to TRUE (or eTRUE or whatever). Since zero will always be "false", comparisons with FALSE will always work.
Tuesday, January 03, 2012
Fitting a Round Peg into a Square Hole
I received an iPod nano for Christmas. It's just what I wanted but I was not looking forward to moving the 400+ albums I had in Windows Media Player - complete with album art - into iTunes. My anxiety was warranted: the result was a disaster. So, I took the opportunity to completely re-rip my entire CD library into iTunes. I chose to keep working with the mp3 format but bumped up the resolution from 128 kbps to 192 kbps. I must say that iTunes seems to do a slightly better job of finding album art than WMP, though I still found many albums for which I had to manually paste an image (either found on the web or scanned from the original).
Wednesday, February 10, 2010
Resurrection?
Wow - over two years since my last post here ... wondering if I really have anything to say. Maybe I'm just a little paranoid about putting myself too "out there" on the Web, afraid to voice a disagreeable opinion or to be judged in an unfavorable light. I've witnessed too many "flame wars" ignited and fueled by thoughtless comments and want no part of that childish game. So it's safer to remain a lurker in the shadows. But - what the hell? - nothing ventured, nothing gained.
Random thoughts for today:
I tried Twitter for a short time. I can see its appeal but I had little to say and became overwhelmed with the influx of short messages from those I was following. Tried TweetDeck to get some sort of grip on the volume but the whole thing just became a time vacuum. So I deleted my account and I haven't missed out on anything important yet.
I do have a presence on LinkedIn. My network isn't that big but the service does keep me connected to my career industry.
I uploaded a bunch of stuff to my photostream on flickr - mostly recent art work from my participation on wetcanvas.com.
The Inter-Urban Industrial has been disassembled and moved twice in the last two years. I need to get some new pictures up on Flickr.
Random thoughts for today:
I tried Twitter for a short time. I can see its appeal but I had little to say and became overwhelmed with the influx of short messages from those I was following. Tried TweetDeck to get some sort of grip on the volume but the whole thing just became a time vacuum. So I deleted my account and I haven't missed out on anything important yet.
I do have a presence on LinkedIn. My network isn't that big but the service does keep me connected to my career industry.
I uploaded a bunch of stuff to my photostream on flickr - mostly recent art work from my participation on wetcanvas.com.
The Inter-Urban Industrial has been disassembled and moved twice in the last two years. I need to get some new pictures up on Flickr.
Subscribe to:
Posts (Atom)