<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6742616518665885369</id><updated>2011-12-30T08:09:12.248-08:00</updated><category term='App Engine'/><category term='eclipse'/><category term='appengine'/><category term='new york'/><category term='cloud computing'/><category term='Android'/><category term='apple'/><category term='macbook'/><category term='coding'/><title type='text'>Technology, Open Source, and Me</title><subtitle type='html'>Just a public announcement of things I'm doing, seeing, or need reminding of.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-3326524526070519651</id><published>2011-12-28T18:16:00.000-08:00</published><updated>2011-12-28T18:16:14.162-08:00</updated><title type='text'>DADS: Massaging Data</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I've decided that "Diary of an Anomaly Detection System" is too wordy to keep writing in the title of the posts in this series, so I'm shortening it to "DADS" hence the title of this post "DADS: Massaging Data".&lt;br /&gt;&lt;br /&gt;Anywho, as I said in &lt;a href="http://faberfedor.blogspot.com/2011/12/anomaly-detection.html" target="_blank"&gt;the previous post&lt;/a&gt;, I'm going to talk a bit about what I needed to do to get my data ready for the anomaly detection algorithm. This post has nothing to do with machine learning, per se, but is an important part of designing an ML algorithm.&lt;br /&gt;&lt;br /&gt;I'm going to use seven metrics ("features" in ML parlance) to start with: short-, medium-, and long-term load averages; memory use; number of processes; and the number of zombies. You can argue whether or not these are useful metrics but I'm not interested in that argument at this point. I'm currently &lt;i&gt;building the framework&lt;/i&gt; for the ML algo; I'll be adding, subtracting, and inventing metrics once I have something to manipulate them with.&lt;br /&gt;&lt;br /&gt;I'm using Python since that is one of the scripting languages of choice at my day job; Perl, unfortunately, is frowned upon and &lt;a href="http://stackoverflow.com/questions/703717/anything-like-scipy-in-ruby" target="_blank"&gt;the consensus is&lt;/a&gt; Ruby can't do scientific programming just yet. Don't even get me started with Java.&lt;br /&gt;&lt;h3&gt;Let's read some data&lt;/h3&gt;The data originally resides in RRDtool and needs to be put into a standard matrix form. Shouldn't be that difficult, right? RRDtool has a Python interface, so it's just a matter of reading the data in, right? &amp;nbsp;I wish! The RRDTool Python API is essentially a wrapper around the command-line tool but the output is "Python-esque". &amp;nbsp;For example, the CLI ouput for the load average looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt; [faber@fabers-desktop data] rrdtool fetch load/load.rrd &amp;nbsp;AVERAGE -s 1321160400 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;shortterm             midterm            longterm&lt;br /&gt;&lt;br /&gt;1321164000: 5.3888888889e-03 1.2805555556e-02 5.0000000000e-02&lt;br /&gt;1321167600: 3.0555555556e-03 1.1388888889e-02 5.0000000000e-02&lt;br /&gt;1321171200: 3.7500000000e-03 1.1861111111e-02 5.0000000000e-02&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;where the first column is the number of seconds from the epoch and the three remaining colums are short-, medium- and long-term load averages; a very handy format. Unfortunately the Python output looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; mydata = rrdtool.fetch('load/load.rrd', 'AVERAGE', '--start=1321160400')&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; mydata&lt;/code&gt;&lt;br /&gt;&lt;code&gt;((1321160400, 1325098800, 3600), ('shortterm', 'midterm', 'longterm'), [(0.005388888888888891, 0.012805555555555468, 0.05000000000000019), (0.0030555555555555557, 0.011388888888888818, 0.05000000000000019), (0.0037500000000000016, 0.011861111111111041, 0.0500000000000002), ...]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;which is not a very handy format. For reasons which I'll get into later, I want the format to be this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;shortterm = ((1321164000, 5.3888888889e-03),&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (1321167600, 3.0555555556e-03),&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (1321171200, 3.7500000000e-03),&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)&lt;br /&gt;&lt;br /&gt;mediumterm = ((1321164000, 1.2805555556e-02), (1321167600, 1.1388888889e-02), (1321171200, 1.1861111111e-02_,...)&lt;br /&gt;&lt;br /&gt;longterm = ((1321164000, 5.0000000000e-02), (1321167600, 5.0000000000e-02), (1321171200, 5.0000000000e-02),...)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So the next step is to format the data.&lt;br /&gt;&lt;h3&gt;List Comprehensions to the Rescue&lt;/h3&gt;I've always thought Python was just an okay language but its list comprehensions are kinda cute. &amp;nbsp;It wasn't until this project that I found out just how useful they are. &amp;nbsp;Here's the blow-by-blow action:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# mydata[0] = timestamp begin, end, and interval&lt;br /&gt;# mydata[1] = labels&lt;br /&gt;# mydata[2] = list of 3-tuples&lt;br /&gt;mydata = rrdtool.fetch('load/load.rrd', 'AVERAGE', '--start=1321160400')&lt;br /&gt;&lt;br /&gt;# create a list of timestamps at the appropriate intervals&lt;br /&gt;tses = [ i for i in range(mydata[0][0], mydata[0][1], mydata[0][2]) ]&lt;br /&gt;&lt;br /&gt;# create three lists from the 3-tuple list&lt;br /&gt;st, mt, lt = zip(*mydata[2])&lt;br /&gt;&lt;br /&gt;mydict = {}&lt;br /&gt;mydict['shortterm'] = zip(tses, st)&lt;br /&gt;mydict['midterm']   = zip(tses, mt)&lt;br /&gt;mydict['longterm']  = zip(tses, lt)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Seven lines of code. I don't know about you, but I'm impressed when a language allows me to do that with native functions.&lt;br /&gt;&lt;h3&gt;So what's with the key/value format?&lt;/h3&gt;There's a subtle problem with the raw data that's not obvious until you start reading in other RRDtool files and try munging them together: you don't always have data for all the same timestamps. &lt;code&gt;memory.rrd&lt;/code&gt; might have data for timestamps &lt;code&gt;t1&lt;/code&gt; and &lt;code&gt;t2&lt;/code&gt; while &lt;code&gt;load.rrd&lt;/code&gt; might have data for &lt;code&gt;t2&lt;/code&gt; and &lt;code&gt;t3&lt;/code&gt;. How do you manage your lists so that you don't duplicate timestamps (two &lt;code&gt;t2&lt;/code&gt;s in the above case) AND fill in values for data you don't have and don't know you don't have? Easy:&lt;br /&gt;&lt;br /&gt;SQL.&lt;br /&gt;&lt;br /&gt;I'm going to store my data into an SQLite3 database then generate a matrix from the database table. If I do my SQL correctly (and I will :-), SQLite3 will fill in missing data, order by timestamp and I don't have to keep track of values or timestamps across rrd files! This is why I break every &lt;code&gt;metric.rrd&lt;/code&gt; file into a &lt;code&gt;(timestamp, value)&lt;/code&gt; data structure and put it into a dictionary called &lt;code&gt;mydict['metric']&lt;/code&gt;; so I can easily insert and update the &lt;code&gt;metric&lt;/code&gt; column in the database!&lt;br /&gt;&lt;br /&gt;How that is actually done, I'll talk about in the next post since it's late.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-3326524526070519651?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/3326524526070519651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2011/12/dads-massaging-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/3326524526070519651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/3326524526070519651'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2011/12/dads-massaging-data.html' title='DADS: Massaging Data'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-1063579528923575118</id><published>2011-12-26T09:14:00.000-08:00</published><updated>2011-12-27T07:09:17.024-08:00</updated><title type='text'>Diary of an Anomaly Detection System</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I recently finished Stanford's &lt;a href="http://www.ml-class.org/"&gt;Machine Learning course&lt;/a&gt; offered as part of &lt;a href="http://see.stanford.edu/"&gt;SEE&lt;/a&gt;.  It was one of the best courses I've ever taken.  Not only did I learn a lot about ML algorithms, but I learned a lot about the applications thereof as well as some math applications.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the algoritms that grabbed my attention was "anomaly detection"; this is the algorithm credit card companies use to flag possibly fraudulent activity.  It can also be used for monitoring computers and, I believe, web pages but more about that later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which brings us to this series of blog posts.  Since I'm on winter break, I decided to spend part of my time designing, coding, and blogging about building an anomaly detection system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;The Motivation&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My current and on-going project at work is called Sentry, a system that processes URLs. The system involves 23 (and counting) virtual machines and four physical machines so obviously, system administration is a not-insubstantial part of the project.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Currently, the overall health of the system can be measured by throughput;&amp;nbsp;I use&amp;nbsp;&lt;a href="http://collectd.org/"&gt;collectd&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://oss.oetiker.ch/rrdtool/"&gt;RRDtool&lt;/a&gt;&amp;nbsp;to monitor the system.&amp;nbsp;If the throughput is too low, I know something is wrong with one or more of the machines but that doesn't tell me which machine(s) is having a problem, so I look at the CPU load graph&amp;nbsp;&lt;i&gt;for each machine&lt;/i&gt; to see if anything looks odd, if not, I look at the network transfers graph for each machine to see if anything looks off, if not, then I... Since there are 27 machines, each with over a dozen metrics, this is a chore, as you can imagine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anomaly detection will reduce the the dozen-plus metrics for each computer down to a range of numbers that we consider "normal behavior" and, by extension, the health of all 27-plus machines down to a range of numbers. So how do we define the range of numbers?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 style="text-align: left;"&gt;&lt;a href="http://www.physics.csbsju.edu/stats/WAPP2_cow.html"&gt;Assume a spherical cow&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All of my metrics measure different things: load average, memory use, etc.  If I plot the range of numbers over time I'll get different looking graphs, but for now, assume all the graphs are &lt;a href="http://en.wikipedia.org/wiki/Gaussian_function"&gt;Gaussian&lt;/a&gt;. What I'm going to do is take each metric's numbers and figure out which Gaussian curve (in other words, the values for μ and σ) best fits the data. I'll then take the latest reading, for say, memory use, and see where on the curve it sits (since I know the equation for the Gaussian distribution function) call that value&amp;nbsp;&lt;code&gt;p(memory),&lt;/code&gt; and for any value of &lt;code&gt;p(memory)&lt;/code&gt; greater than say, ε, I'll tell the computer to flag that reading as an anomaly.&lt;br /&gt;&lt;br /&gt;I'll then take all the latest metric readings (the x-s), calculate the &lt;code&gt;p(x)&lt;/code&gt;s and multiply them together; that gives me a single number, super-ε, that tells me if my computer is acting "weird". &amp;nbsp;If I multiply all the &lt;code&gt;p(x)&lt;/code&gt;s for all 27+ computers, I get another super-ε number telling me if my cluster of computers is acting "weird". Neat, huh?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;First Things First&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But first, I need to gather the data and put it into matrix form that the algorithm can handle. The raw data resides in RRDtool tables. I'll be using Python as my main language. The vectorization libraries will be &lt;a href="http://docs.scipy.org/doc/"&gt;numpy and scipy&lt;/a&gt;.  Even though my main machine at home is a Macbook Pro, installing numpy and scipy on a MBP is a &lt;a href="http://www.urbandictionary.com/define.php?term=PITA"&gt;PITA&lt;/a&gt;, so I'll be doing all of our work on a (Ubuntu) Linux box.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Massaging the data will be the topic of my next blog post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-1063579528923575118?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/1063579528923575118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2011/12/anomaly-detection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1063579528923575118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1063579528923575118'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2011/12/anomaly-detection.html' title='Diary of an Anomaly Detection System'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-3480956336953288158</id><published>2011-02-06T09:45:00.001-08:00</published><updated>2011-02-08T17:12:24.451-08:00</updated><title type='text'>The Budget Game</title><content type='html'>I've been doing Tim Ferris' "Slow Carb Diet" from his book "&lt;a href="http://www.fourhourbody.com/"&gt;The Four Hour Body"&lt;/a&gt;. To help out, I've been tracking calories using the &lt;a href="https://market.android.com/details?id=com.myfitnesspal.android"&gt;MyFitnessPal Calorie Counter&lt;/a&gt; app on my Android phone. So far, so good; I'm down five pounds in two weeks and this is the first time I've been below 190 in a decade.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I got to thinking, why not do with dollars what I'm doing with calories, IOW, set up a budget? Now, I've done that in the past and it's been BORING! so I thought about how to make it more fun and came up with the idea of making it a game.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apparently, the idea of &lt;a href="https://market.android.com/details?id=team.palupunte.kodukai"&gt;making budgeting a game&lt;/a&gt; isn't a new idea but it's not that widespread either.  So I'm thinking how to turn budgeting into a game.  Here's what I've gotten so far:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. A "game" is a month-long and you play 30 day-long "sessions". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. You allocate a specific amount of health points for the game (your monthly budget) and session (your daily budget). The daily allotment shows up on the screen as your avatar (think the Marine from DOOM; I am ;-).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. As you spend money, your avatar's health deteriorates. If you go over budget, your  avatar dies and the game is over until the next day.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. If you do get through the day without killing your avatar, you win points (?) and the remaining health points goes into a vault.  At the end of the game, you see how well you've scored by seeing how many health points you have in the vault.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The idea here is to track &lt;i&gt;day-to-day spending&lt;/i&gt;, not the big monthly outlays like rent and heating.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since this is going to run on my Android phone and I really dislike Java, I'm going to do this as an HTML5 app.  If I understand correctly, I can write the app using vi and Chrome, then wrap it in an Android "package" and I'm done.  I assume something similar can be done for the iPhone, but, come on, who uses an iPhone these days? Really?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The game idea still needs work, but that's what development is for. :-)  If you have any suggestions, comment below or &lt;a href="http://twitter.com/faberfedor"&gt;tweet me&lt;/a&gt; using the hashtag #TheBudgetGame.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-3480956336953288158?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/3480956336953288158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2011/02/budget-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/3480956336953288158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/3480956336953288158'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2011/02/budget-game.html' title='The Budget Game'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-5602333104983961436</id><published>2011-01-16T16:29:00.000-08:00</published><updated>2011-01-20T18:36:29.915-08:00</updated><title type='text'>Help me to choose some new frames</title><content type='html'>From &lt;a href="http://twitter.com/#!/erked"&gt;@erked via Twitter&lt;/a&gt;: @faberfedor You have now taken more time choosing glasses, using a more formal process, than McCain did selecting a running mate.&lt;br /&gt;&lt;P&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_KWdDjPUDB_U/TTOOSAb9iYI/AAAAAAAAACQ/YxxAxoYGv1U/s1600/plasticFrames.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 207px; height: 275px;" src="http://3.bp.blogspot.com/_KWdDjPUDB_U/TTOOSAb9iYI/AAAAAAAAACQ/YxxAxoYGv1U/s320/plasticFrames.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5562946404738763138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_KWdDjPUDB_U/TTOOKSCjKeI/AAAAAAAAACI/fKtZaq_144g/s1600/wirelessFrames.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 207px; height: 275px;" src="http://2.bp.blogspot.com/_KWdDjPUDB_U/TTOOKSCjKeI/AAAAAAAAACI/fKtZaq_144g/s320/wirelessFrames.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5562946272025061858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;iframe src="https://spreadsheets.google.com/embeddedform?formkey=dEpSTzNIeTZRMFF1MG5RTUJmSUhHVWc6MQ" width="760" height="1263" frameborder="0" marginheight="0" marginwidth="0"&gt;Loading...&lt;/iframe&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-5602333104983961436?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/5602333104983961436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2011/01/help-to-choose-some-new-frames.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/5602333104983961436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/5602333104983961436'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2011/01/help-to-choose-some-new-frames.html' title='Help me to choose some new frames'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_KWdDjPUDB_U/TTOOSAb9iYI/AAAAAAAAACQ/YxxAxoYGv1U/s72-c/plasticFrames.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-44892832946948541</id><published>2009-06-22T19:37:00.000-07:00</published><updated>2009-06-22T19:43:14.512-07:00</updated><title type='text'></title><content type='html'>Okay, I have no idea what this mean, but a crocheting friend of mine thinks this is the bee's knees for crocheters everywhere, so I'm passing it along:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;With most afghans that run back-and-forth (in contrast to the concentric type), the base row can be inflexible compared to the rest of the afghan, which results in one end (usually the on shorter sides) being a consistent length and the opposite side getting longer as the afghan is stretched or pulled as it ages.  I had about 10 rows done when I realized the base row was too tight, and I experimented and figured out a way to make the base row and the first row at the same time, and make it as flexible/stretchy as the rest of the crocheting.  One small step for me, one giant leap for crocheters everywhere.  I should publish this technique somewhere.&lt;br /&gt;&lt;br /&gt;[Here's the the technique]&lt;br /&gt;chain 4, yarn over, insert hook in first chain stitch, yarn over, pull through a loop.  Yarn over and pull through the last loop, then yarn over and pull through the last loop (two chain stitches on the end of the hook), then yarn over and finish like a normal double crochet: pull through two loops, yarn over and pull through two loops.  For the next stitch, yarn over, insert hook in the second chain stitch at the bottom of the previous eccentric double crochet, pull through a loop, do the two chain stitches at the end of the hook, then complete the double crochet.&lt;/blockquote&gt;Got that?  Good!  Now someone explain it to me! On second thought, don't bother. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-44892832946948541?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/44892832946948541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/06/okay-i-have-no-idea-what-this-mean-but.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/44892832946948541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/44892832946948541'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/06/okay-i-have-no-idea-what-this-mean-but.html' title=''/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-8848095257502255059</id><published>2009-05-25T11:13:00.000-07:00</published><updated>2009-05-25T11:32:46.021-07:00</updated><title type='text'>Thoughts about the Panopticon</title><content type='html'>I finally got around to reading &lt;a href="http://radar.oreilly.com/josh"&gt;Joshua-Michéle Ross&lt;/a&gt;'s &lt;a href="http://radar.oreilly.com/2009/05/the-question-concerning-social.html"&gt;three&lt;/a&gt; &lt;a href="http://radar.oreilly.com/2009/05/captivity-of-the-commons.html"&gt;articles&lt;/a&gt; over on O'Reilly's Radar. Nice overview of  the topics but I was hoping for somehing more in depth. The last one, &lt;a href="http://radar.oreilly.com/2009/05/the-digital-panopticon.html" target="blank" class="title"&gt;The Digital Panopticon&lt;/a&gt;, gave me an idea.&lt;br /&gt;&lt;br /&gt;While I do love the idea of location based services (I'm even writing one of my own), I'm beginning to wonder if there is a way to anonymize such a service so the end-user can have the benefits of LBS without giving up information to the Watchers. Ideas are welcome.&lt;br /&gt;&lt;br /&gt;As an aside, Joshua-Michéle states:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;blockquote&gt;In the age of social networks we find ourselves coming under a vast grid of surveillance - of permanent visibility. The routine self-reporting of what we are doing, reading, thinking via status updates makes our every action and location visible to the crowd. This visibility has a normative effect on behavior (in other words we conform our behavior and/or our speech about that behavior when we know we are being observed).&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt;He doesn't take into account that we (some of us, at least) are not reporting all of our activities and locations. True, we may be few and far between, but we do exist.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-8848095257502255059?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/8848095257502255059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/05/thoughts-about-panopticon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/8848095257502255059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/8848095257502255059'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/05/thoughts-about-panopticon.html' title='Thoughts about the Panopticon'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-1833710331366332182</id><published>2009-05-20T20:18:00.000-07:00</published><updated>2009-05-20T20:24:42.549-07:00</updated><title type='text'></title><content type='html'>I loved this &lt;a href="http://www.ted.com/index.php"&gt;TED Talks&lt;/a&gt; about &lt;a href="http://blog.ted.com/2009/05/10_things_you_d.php"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: normal;"&gt;10 things you didn't know about orgasm&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;, mostly because I think &lt;a href="http://www.maryroach.net/maryroach.html"&gt;Mary Roach&lt;/a&gt; is hot! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-1833710331366332182?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/1833710331366332182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/05/i-loved-this-ted-talks-about-10-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1833710331366332182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1833710331366332182'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/05/i-loved-this-ted-talks-about-10-things.html' title=''/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-4815927305764436593</id><published>2009-05-16T05:17:00.000-07:00</published><updated>2009-05-23T05:26:29.138-07:00</updated><title type='text'>Last year's MP3 Experiment</title><content type='html'>With the &lt;a href="http://improveverywhere.com/2009/04/27/mp3-experiment-six-save-the-date/"&gt;latest NYC MP3 Experiment&lt;/a&gt; coming up next week, I thought this might be a good time to reminisce about my first  experience with the MP3 Experiment from last year.  So here's a write-up of last years activities.  I'm really looking forward to this years!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/icopythat/sets/72157607548085955/"&gt;Here are some pictures&lt;/a&gt; of last year's event.&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;Okay, if you followed my Twitter feed last Saturday (20080927), you have a pretty good idea how my Day In The city went and my thoughts on Governor's Island,  dinner and girl-watching in Little Italy, and the Museum of Sex.  What you don't know is what actually happened during the MP3 Experiment:NYC because I was busy doing the experiment. &lt;a href="http://improveverywhere.com/"&gt;ImprovEverywhere&lt;/a&gt; will have film and commentary up on their site in a few weeks.  Here's my experience with it all.&lt;br /&gt;&lt;br /&gt;Background: We were told to show up at Governor's Island, just south of Manhattan, wearing a red, green, yellow, or blue t-shirt, bring an umbrella and a balloon.  At precisely 3:15 PM, we were to push the play button on our MP3 players and do what the Voice of Steve told us.&lt;br /&gt;&lt;br /&gt;I showed up about an hour early.  The weather was warm, if misty/raining.  After walking around awhile, I wasn't feeling too happy. Anyway, at 3 PM I head for the large field in the middle of the island, put in my earphones, checked the time on my cell phone, sent one last tweet, and waited.  Fortunately, the weather started to cooperate; the sun hadn't come out but it did stop raining/misting. There were maybe 50 to 75 people scattered about the field which is a couple of acres large.&lt;br /&gt;&lt;br /&gt;At precisely 3:15 PM, I pushed "play" and music played.  And played. And played.  I heard someone mention maybe they were just screwing with us and there was nothing but music on the MP3.  After a minute, we heard The Voice Of Steve.&lt;br /&gt;&lt;br /&gt;The Voice of Steve (which was obviously computer modulated but not computer generated) welcomed us to Governor's Island. After a few minutes of talk, Steve told us to stand and stretch. It was interesting watching the others; some were ten or even twenty seconds later than others.  Along with not synchronizing properly, it turns out that MP3 players don't all play at the exact same rate.&lt;br /&gt;&lt;br /&gt;After we stood and stretched, Steve had us point to NYC, then to our homes, then to Nicaragua.  At this point, I saw some people point at the sky!  Steve commented on our lack of geographical knowledge.&lt;br /&gt;&lt;br /&gt;Steve then told us to look around for a person wearing a different color shirt (I was wearing green) and give them a big hug.  The first person I saw was a large woman wearing blue, so I walked up to her and gave her a hug.  And she hugged back.  Hard!&lt;br /&gt;&lt;br /&gt;Steve said to hug an inanimate object.  Not being near a tree or anything, I hugged my umbrella.  Then He said to hug an animal. Any animal would do: squirrel, goose, an ant.  Unfortunately, I couldn't even find an ant to hug. :-(&lt;br /&gt;&lt;br /&gt;Steve then declared we would have thumb wars!  This cute little chick (she barely came up to my shoulders) in blue denim jacket and jeans was walking by so I grabbed her and we got into position.  "One, two, three, four, I declare a thumb war!" boomed in our headsets and we started thumb wrestling!  I easily one the first round.  My opponent decided I wasn't going to win a second time; she put down her umbrella, got into a fighting stance and "One, two, three, four I declare a thumb war" was heard and she fought hard!  And she won!  So with a tied score, we fought one last battle which I handily one. She bowed to my impressive thumb-fighting skills and we went our different ways.&lt;br /&gt;&lt;br /&gt;Steve then told us to walk to the field in the middle of the island where there would be an "epic battle" later. (Every time Steve mentioned the words "epic battle", a deep baritone would say "EPIC!  BATTLE!" behind him.) This is when I noticed that many people were not on the field to begin with! He told us to take out our umbrellas, hold them high over our heads and walk around the field.  We did this for several minutes; it actually got kinda boring after a while but I got to see some interesting ppl.&lt;br /&gt;&lt;br /&gt;One interesting person I saw was a young woman with &lt;a href="http://users.forthnet.gr/ath/kimon/Euler/Euler.htm"&gt;The Most Elegant Equation in Mathematics&lt;/a&gt; tattooed across her shoulder blades in letters a hand high!  When she walked past me a few minutes later, I tapped her on her shoulder and said "Cool tat!".  She looked at me, confused, and said "Burn" and walked away.  That's when I noticed that it wasn't a tattoo; &lt;a href="http://www.flickr.com/photos/crnphoto/2893642129/in/set-72157607544816852/"&gt;the equation was burned into her skin!&lt;/a&gt; Kids these days!&lt;br /&gt;&lt;br /&gt;We played a couple of "motion games" as I call them: "Equilateral Triangle" and "Attacker Defender".  In the former, you choose two other people on the field and you move in such a way as to form and equilateral triangle.  It sounds easy until you realize they're doing the same thing with two *other* people.  "Attacker Defender" is similar except you keep the person you've chosen as the Defender between you and the Attacker.  Again, they're doing the same thing with two other people.  Then it got interesting.&lt;br /&gt;&lt;br /&gt;Steve told us to find three other people with the same color shirt and form a square with them, so there I was standing shoulder to shoulder forming a tight square with an Irish woman, a swarthy fellow and an Asian fellow.  It's just weird standing that close to strangers, what with them in your personal space, you know?&lt;br /&gt;&lt;br /&gt;At this point, Steve tells us we need to learn how to do a "fife and drum" shtick for the epic battle (EPIC! BATTLE!).  He instructed the reds and the blues to tap out a rhythm on their thighs. He instructed the greens and the yellows to play the fife part and we whistled the tune he gave us.  Imagine the scene: over 200 people standing on  field, forming tight little squares, half of them drumming on their thighs and the other half whistling.&lt;br /&gt;&lt;br /&gt;After we practiced that a few times, Steve congratulated us on a job well done.  Then he said to find three other squares of the same color and form a larger geometric object, you know, like the shapes in Tetris. I'm sure you can guess what comes next. After we form a larger object, we were told to move around the field and find a shape we could fit in with.  Yes, we were playing human Tetris.  So now those squares of people were now scrunched together even tighter!  There was, literally, no room to move.&lt;br /&gt;&lt;br /&gt;Steve then told us to take out our umbrellas and life them over our heads.  We did, and we blotted out the sky!  One minute we're in an open field and the next minute we're under a canopy of plastic. That felt really weird! And then we started humming, cuz Steve said to.&lt;br /&gt;&lt;br /&gt;After a few minutes of this, Steve congratulated us again, told us to put our umbrellas away and to find people wearing different colored shirts.  That was easy, I just turned around and I was standing next to another little cutie in blue (I refer to her as Smurfette), a tall guy in red, etc.  I notice Smurfette wasn't wearing headphones and I asked her if she was hearing The Voice Of Steve?  She shook her head "no" so I took out one of my earplugs and put it on her. I was rather surprised she didn't pull away or anything when I did it, but where was she going to pull away to?  We were all packed tightly together.&lt;br /&gt;&lt;br /&gt;Steve mentioned that we were now going to play "Human Twister"; he would mention a color and either "head", "elbow", "shoulder" or "left/right foot" and you had to put your hand on the head/elbow/shoulder or put your foot next to the foot of someone with that color shirt.  So when Steve said "Red head" we all put our hands on the head of the tall guy wearing red.  With "blue shoulder" I put my hand on Smurfette's shoulder, etc.  That was fun, but at one point I thought some people were going to fall over and take us (and everyone else?) with them.  Fortunately, that was averted by Steve telling us to prepare for the "epic battle" (EPIC! BATTLE!).&lt;br /&gt;&lt;br /&gt;To do so, the blues and greens went to one end of the field and the reds and the yellows to the other end.  We got out our "weapons", the balloons, and blew them up.  Smurfette was still with me, so I was echoing Steve's instructions since she wasn't wearing my other headphone anymore.  The two groups started yelling at each other: "Red rules!" "Get them all!", ""Death to the Yellows!".&lt;br /&gt;&lt;br /&gt;Steve told us to get our "weapons" ready and for each group to walk towards the other and stop when we were twenty yards apart while we did the fife and drum shtick. So there we were: two groups of people walking across the field of battle towards one another, whooping and hollering, brandishing our "weapons", some whistling and some tapping their thighs. That was so much fun and exciting.  I actually thought back to eariier battles in history and wondered if this wasn't just a little like them.&lt;br /&gt;&lt;br /&gt;Anyway, we stopped twenty yards from each other and commenced with more whooping and hollering.  Steve said "Fight" and each group rushed the other one balloons flailing!  Oh, it was an epic battle (EPIC! BATTLE!) to be sure!  A Yellow had broken through the lines and I was attacking him when four Reds come around our left flank and attacked me. As they beat me with their balloons, I fell to my knees, crying for help, swinging my weapon uselessly around me, and then I fell over "dead".  Cries of "Medic!" where heard all across the battlefield.&lt;br /&gt;&lt;br /&gt;I just laid on my back and watched the whole thing. :-)&lt;br /&gt;&lt;br /&gt;Eventually, Steve called a halt to the battle.  By this time over half&lt;br /&gt;of the people were laying on the ground "dead".  Steve then had us close our eyes and meditate for a few moments.  Then He said goodbye and we all waved as He left.&lt;br /&gt;&lt;br /&gt;And with that, the MP3 Experiment:NYC was over.&lt;br /&gt;&lt;br /&gt;As I and 200 of my closest friends  walked over to the docks, I saw my thumb-war opponent.  She saw me and stuck her thumb up in the air.  As I passed, we did a quick thumb war which, alas, was a draw.&lt;br /&gt;&lt;br /&gt;I was wondering how they were going to handle having 200-some people trying to get back to Manhattan all at the same time, especially when the ferries only run once every half hour.  It turns out that they got some really big ferries and they were loading two up at the same time.&lt;br /&gt;&lt;br /&gt;So we formed two queues each about six abreast and we were allowed onto the ferries in groups of ten or so.  While we were waiting, someone led us in various activities like singing "If you're happy and you know it" and "Row, row, row your boat".  Eventually, I did get on the first boat out, had a nice time talking to some other people, and eventually got into a cab and headed for dinner in Little Italy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-4815927305764436593?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/4815927305764436593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/05/last-years-mp3-experiment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4815927305764436593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4815927305764436593'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/05/last-years-mp3-experiment.html' title='Last year&apos;s MP3 Experiment'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-7146060325493488031</id><published>2009-04-05T08:51:00.000-07:00</published><updated>2009-04-05T17:18:19.355-07:00</updated><title type='text'>Washington D.C. Trip, 2009-04-03</title><content type='html'>I had made tentative plans to go to the &lt;a href="http://www.nga.gov/"&gt;National Gallery of Art&lt;/a&gt; (NGA)  in Washington, D.C. this summer with my friend Tish. Now that I have a "real job" it looks like that wouldn't happen, so I decided to make the trip before starting my new job.&lt;br /&gt;&lt;br /&gt;Since D.C. is a pretty good haul from the north-central Jersey boonies, I headed down on Thursday afternoon.  I arrived just in time to go to "game night" with Tish and her brother Mark. We ended up playing a couple of hands of &lt;a href="http://www.boardgamegeek.com/boardgame/929"&gt;The Great Dalmuti&lt;/a&gt;.   Afterwards, we got some pizza then headed back home where we sat around drinking wine and shooting the breeze until 3:30 AM.&lt;br /&gt;&lt;br /&gt;Up way too early the next morning, Tish and I headed down to the Metro in the rain.  That part of Maryland/Virginia reminded me a lot of a New Jersey landscape with more modern infrastructure: better and wider roads, no construction, etc.  The other drivers on the road were just as bad as Jersey drivers though.&lt;br /&gt;&lt;br /&gt;So we got to D.C. around ten-ish and headed over to the East Wing of the NGA. I hadn't been in D.C. since I was a teenager but I hadn't been in this area.  I was impressed with the architecture in this part of town, for example the &lt;a href="http://www.flickr.com/photos/uncle_buddha/3048224764/"&gt;Department of Agriculture's North Building&lt;/a&gt;; the architecture exudes big-bloated bureaucracy and power.&lt;br /&gt;&lt;br /&gt;Even though the East Wing of the NGA is dedicated to modern and abstract art, the best exhibit was the &lt;a href="http://en.wikipedia.org/wiki/Illuminated_manuscript"&gt;illuminated manuscripts&lt;/a&gt;. The artwork on some of those were incredible and I couldn't believe some of them were over 500 years old and still so brilliantly, well, illuminated!&lt;br /&gt;&lt;br /&gt;Next to the illuminated manuscripts, the best part about the East Wing was the &lt;a href="http://www.youtube.com/watch?v=R9VmHANh8-w"&gt;Multiverse&lt;/a&gt; light tunnel you traverse to get to the West Wing. Other than that, I was meh about the East Wing; I expected more...important works, or at least more works that I would recognize.&lt;br /&gt;&lt;br /&gt;The West Wing holds more traditional, or should I say classical, pieces.  I liked it better then the East Wing but still had the same thought; I expected to see more "famous" paintings. There were a few, of course; Da Vinci's &lt;a href="http://www.nga.gov/kids/ginevra.htm"&gt;Ginerva de' Benci&lt;/a&gt;, &lt;a href="http://www.nga.gov/fcgi-bin/tinfo_f?object=46114"&gt;Napoleon in his study&lt;/a&gt; and a couple of Monets come to mind, but still, I expected more.&lt;br /&gt;&lt;br /&gt;Don't bother eating at the cafe in the West Wing.  The cafe was called "Cafe' Amsterdam" and I assume it was themed to go along with the &lt;a href="http://www.nga.gov/exhibitions/2009/cityscapes/index.shtm"&gt;Dutch Cityscapes exhibit&lt;/a&gt;. They had a nice blonde Belgian beer and the stew was good but the rest of the food was meh. Of course, because it was in a museum, the price was a bit much ($20 for the buffet).&lt;br /&gt;&lt;br /&gt;Afterwards we walked around some more.  I think we covered about 80% of the West Wing's exhibits.  By that time, I was just tired of it all.  Oh, the noisy high-schoolers who were on some sort of artsy scavenger hunt didn't help my mood either.&lt;br /&gt;&lt;br /&gt;By this time the weather had turned beautiful, so we walked across the National Mall and made our way over to the &lt;a href="http://www.ushmm.org/"&gt;United States Holocaust Memorial Museum&lt;/a&gt;. As we approached, it looked like there was a throng of people waiting to get in; think Ruby Tuesday's on a Friday night.  Turns out most of the people were coming out of the museum although there were long lines to get in.  The lines were due to everyone having to go through metal detectors to get in.  I thought it was mostly security theater; after all, the other museums don't make you walk through metal detectors. Tish pointed out other museums don't have &lt;a href="http://en.wikipedia.org/wiki/Mahmoud_Ahmadinejad"&gt;wingnuts&lt;/a&gt; running around saying that Picasso never existed.&lt;br /&gt;&lt;br /&gt;I have to say I was pleased to see that the Holocaust Memorial Museum is not the &lt;span style="font-style: italic;"&gt;Jewish&lt;/span&gt; Holocaust Memorial Museum; unless they were talking about &lt;a href="http://www.ushmm.org/museum/press/kits/download.php?content=99-general&amp;amp;image=kitpic5"&gt;specific incidents related to the Jews&lt;/a&gt;, the museum made it a point to mention that &lt;a href="http://en.wikipedia.org/wiki/Roma_%28Romani_subgroup%29"&gt;the Roma&lt;/a&gt; were also targeted for extermination.&lt;br /&gt;&lt;br /&gt;I must say the museum is the quietest museum I've ever been in.&lt;br /&gt;Sure, the lobby is loud and noisy, but once people got off the elevator on the top floor (you start on the fourth floor and work you way down) their mood suddenly changes and, if they say anything at all, it's in a low whisper.&lt;br /&gt;&lt;br /&gt;There were some exhibits in the basement that were overlooked by most people unfortunately: a small display talking about the &lt;a href="http://www.state.gov/www/global/human_rights/kosovoii/homepage.html"&gt;ethnic cleansing in Kosovo&lt;/a&gt;, the &lt;a href="http://en.wikipedia.org/wiki/Rwandan_Genocide"&gt;1994 Rwandan genocide&lt;/a&gt; was mentioned in passing, a display about &lt;a href="http://en.wikipedia.org/wiki/The_Protocols_of_the_Elders_of_Zion"&gt;"The Protocols of The Elders of Zion"&lt;/a&gt; was interesting, and an elaborate exhibit on the Nazi's use propaganda was very good.&lt;br /&gt;&lt;br /&gt;I highly recommend the Holocaust Memorial Museum if you're in the Washington, D.C. area.&lt;br /&gt;&lt;br /&gt;Afterwards, we headed over to the Potomac basin to see the cherry blossoms in bloom.  I don't understand the attraction myself.  Then we headed to &lt;a href="http://www.reiters.com/"&gt;Reiter's bokstore&lt;/a&gt; which is an &lt;span style="font-style: italic;"&gt;awesome&lt;/span&gt; bookstore; nothing but technical and professional books.  If I lived in the area, I'd be there a &lt;span style="font-style: italic;"&gt;lot&lt;/span&gt; just to peruse the math and computer books.&lt;br /&gt;&lt;br /&gt;We finally got back home around 10 PM that night.  It was a long day, but fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-7146060325493488031?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/7146060325493488031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/04/washington-dc-trip-2009-04-03.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7146060325493488031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7146060325493488031'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/04/washington-dc-trip-2009-04-03.html' title='Washington D.C. Trip, 2009-04-03'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-7728003341698153531</id><published>2009-03-26T15:04:00.000-07:00</published><updated>2009-03-26T15:56:38.090-07:00</updated><title type='text'>My NYC Android Presnetation</title><content type='html'>A couple of you have been asking me how my presentation at the  March 24, 2009 meeting of the NYC Android Developer's Meetup went.  Overall, not bad, but it did have its rocky moments.&lt;br /&gt;&lt;br /&gt;The point of the presentation was to demo the mini eco-system I've been writing that uses &lt;a href="http://code.google.com/appengine/"&gt;Google's App Engine&lt;/a&gt; (GAE) and &lt;a href="http://en.wikipedia.org/wiki/Google_Android"&gt;Google's Android&lt;/a&gt; phone. There's nothing really special about it (other than &lt;span style="font-style: italic;"&gt;I&lt;/span&gt;  wrote it ;-) but the group needed &lt;span style="font-style: italic;"&gt;someone&lt;/span&gt; to present &lt;span style="font-style: italic;"&gt;something&lt;/span&gt; and you know how much  I like to stand in front of a technical audience.&lt;br /&gt;&lt;br /&gt;For those of you in the audience that are new, you can read what my little eco-system does &lt;a href="http://lbtdl.appspot.com/what"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The meetings are held at &lt;a href="http://www.fastcompany.com/"&gt;Fast Company&lt;/a&gt;'s NYC headquarters, 29th floor of WTC 7. The meeting room has an awesome view of New York and the Hudson but this was the first time I had seen it in the light (due to Daylight Savings Time change). With the sun setting behind skyscrapers, it was even awesomer &lt;a href="http://en.wikipedia.org/wiki/Sic"&gt;[&lt;span style="font-style: italic;"&gt;sic&lt;/span&gt;]&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I got there early and started setting up.  Of course, the hardware didn't want to cooperate: the GPS on the phone wasn't kicking in; the Macbook display was doing weird things until one of the other members pointed out  I had to put it into "mirror" mode; and &lt;a href="http://androidguys.com/?p=3519"&gt;Droidex&lt;/a&gt;, the application  that displays the phone screen on the computer in real-time stopped working!  Without Droidex, my presentation was worthless. Eventually, though, I got  everything working (except the GPS).&lt;br /&gt;&lt;br /&gt;There was a good turnout for the meeting, probably 25 to 30 people, over half of them new.  We introduced ourselves and mentioned why we were interested in Android.  When the last person finished speaking, Rana the Assistant Organizer looked at me like "Well?  Go for it" so I did.&lt;br /&gt;&lt;br /&gt;The presentation was called "Scratching an Itch". The phrase "scratching an itch" is used in programming to describe the act of a programmer writing a program ("scratching") for his need (an "itch") instead of someone else's need, like his client or boss. &lt;br /&gt;&lt;br /&gt;So the first thing I had to do was explain my "itch". I did it by tellning the story in a &lt;a href="http://presentationzen.blogs.com/presentationzen/2005/10/the_lessig_meth.html"&gt;Lessig-style presentation&lt;/a&gt;.  The story revolved around me missing &lt;a href="http://www.villagevoice.com/slideshow/view/159916"&gt;Banksy's NYC exhibit in October 2008&lt;/a&gt; but first, I had to explain who Banksy was, so I showed &lt;a href="http://www.banksy.co.uk/outdoors/horizontal_1.htm"&gt;several of his art works&lt;/a&gt;.  Things were going well until I showed &lt;a href="http://www.artofthestate.co.uk/banksy/Banksy_disney_and_mcdonalds.htm"&gt;this one&lt;/a&gt;; about half the audience (mostly the older people) didn't appreciate it for some reason. :-)&lt;br /&gt;&lt;br /&gt;Anyway, I got through the "describing the itch" part and started demoing my programs.  That could have gone a &lt;span style="font-style: italic;"&gt;lot&lt;/span&gt; better! I think I'll practice that some more before trying it out on some more audiences.&lt;br /&gt;&lt;br /&gt;Afterwards, I got to talk to several cool people about how to do things in Android and even got into a discussion about &lt;a href="http://aws.amazon.com/"&gt;AWS&lt;/a&gt;.&lt;br /&gt;At that point, there was nothing left to do but head home.&lt;br /&gt;&lt;br /&gt;I want to put up a screencast of my presentation and demo, so if anyone knows of some decent [fF]ree software to do that on a Macbook or Linux, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-7728003341698153531?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/7728003341698153531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/03/my-nyc-android-presnetation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7728003341698153531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7728003341698153531'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/03/my-nyc-android-presnetation.html' title='My NYC Android Presnetation'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-4390211820424760830</id><published>2009-03-18T12:03:00.000-07:00</published><updated>2009-03-18T12:13:00.524-07:00</updated><title type='text'>Android and ProximityAlerts: Have I found "the trick"?</title><content type='html'>As you know, I've been fighting with Proximity Alerts (PAs) in Android.  The idea behind them is I can tell the LocationManager to notify me when I come within X distance of a geopoint (geographical point, a.k.a. latitude/longitude).  There's is practically no discussion of this on the Google Groups, for the 1.0 version of the SDK anyway, and no one has been answering my postings.&lt;br /&gt;&lt;br /&gt;My conclusion?  PAs don't work, which is a shame cause it seems to be a killer feature of the Android framework.&lt;br /&gt;&lt;br /&gt;Well, I Was running errands today and I decided to try something.  I deleted every location in my Android save one.  I then field-tested my app.  The PA worked!  I then drove to a local WiFi hotpsot (the local liquor store :-), changed the geopoint and tested it again.  It worked again!&lt;br /&gt;&lt;br /&gt;So my current theory is this: PAs work, &lt;span style="font-style: italic;"&gt;but only one at a time&lt;/span&gt;.  You can't load up several PAs becasue, presumably only the last one is read/active.&lt;br /&gt;&lt;br /&gt;This means I have to write my own routine to determine what geopoints are nearby which kind of defeats the point of using PAs in the first place if you ask me.&lt;br /&gt;&lt;br /&gt;Maybe I'll actually have a working demo for my presentation on Tuesday at the &lt;a href="http://www.meetup.com/androidnyc/calendar/9780090/"&gt;NYC Android Developer Meetup&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-4390211820424760830?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/4390211820424760830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/03/android-and-proximityalerts-have-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4390211820424760830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4390211820424760830'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/03/android-and-proximityalerts-have-i.html' title='Android and ProximityAlerts: Have I found &quot;the trick&quot;?'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-342051021977536650</id><published>2009-03-09T14:50:00.000-07:00</published><updated>2009-03-09T14:51:15.284-07:00</updated><title type='text'>Musings for a rainy day</title><content type='html'>All throughout my consultancy, my business model was "build it and they will come" and sure enough, for ten years, people kept finding me and hiring me for projects.  Well, that's not working any more; the market has moved and I need to find another market and/or business model.&lt;br /&gt;&lt;br /&gt;The question is "how?" How do you find something that is both profitable and enjoyable? I've been told by marketers "Pick an industry.  Anything.  Selling dog food.  Dry cleaning. Just pick something and focus on it."   That is unsatisfying to me.&lt;br /&gt;&lt;br /&gt;I also need to move "up the stack".  What I've been doing is selling services (programing, admin, training); basically being a journeyman or, in your terminology, a non-full-time contractor. But what's above me in the stack? What skills or knowledge do I have that others would pay for that don't ential billing by the hour for slinging code or doing maintenance?&lt;br /&gt;&lt;br /&gt;And then there's the technical side of it.  I'm familiar with what's going on technically (Twitter and Facebook APIs, Google Android, the iPhone, Cloud Computing) but how do you form a business around them?  A specific example: I have the docs and understand the Twitter API but what can I &lt;i&gt;do&lt;/i&gt; with it? What can I build with it that others will find useful and, even better, pay for?&lt;br /&gt;&lt;br /&gt;Suggestions?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-342051021977536650?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/342051021977536650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/03/musings-for-rainy-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/342051021977536650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/342051021977536650'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/03/musings-for-rainy-day.html' title='Musings for a rainy day'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-4923629597294575668</id><published>2009-02-27T19:38:00.000-08:00</published><updated>2009-02-28T07:56:29.252-08:00</updated><title type='text'>Last night's presentation (2009-02-26)</title><content type='html'>Last night, I gave a presentation on my Google App Engine application at the &lt;a href="http://NYC%20Cloud%20Computing%20Group%27s"&gt;NYC Cloud Computing Group's&lt;/a&gt; (semi-regular) monthly meeting held at &lt;a href="http://www.gemini-systems.com/pub/html/index.html"&gt;Gemini Systems&lt;/a&gt; down in the Financial district (thanks for hosting us, Mick!).  I must say, it went over &lt;span style="font-style: italic;"&gt;much&lt;/span&gt; better than I expected.&lt;br /&gt;&lt;br /&gt;I've been concentrating on my &lt;a href="http://Android%20Developer%27s"&gt;Android Developer's&lt;/a&gt; presentation slated for March 10th and didn't give enough attention to the NYCCC presentation, but then I never think I give enough attention to the job at hand.  Anyway, I put together a NeoOffice (that's OpenOffice for the Mac, doncha' know) Impress presentation which was filled with bullet points. The difference this time was I showed each bullet point individually.  Simple technique but it kept everyone with me instead of having some people listening to me and others reading ahead.&lt;br /&gt;&lt;br /&gt;The original idea was to have a hands-on workshop, so I had planned to give the presentation, lead everyone in programming a simple app, then show a simple app that I had written to "scratch an itch"&lt;br /&gt;&lt;br /&gt;However, given that I was sharing the evening with &lt;a href="http://dustinwhitney.blogspot.com/"&gt;Dustin Whitney&lt;/a&gt; who was discussing Amazon Web Services and we each had only an hour, that idea went out the window real fast. Instead, I gave my presentation and then walked through &lt;a href="http://lbrdl.appspot.com"&gt;my App Engine datastore&lt;/a&gt; for my Tag Your World program.&lt;br /&gt;&lt;br /&gt;As I said, it went over very well.  The audience was full of questions and kept me on my toes.  I really like presenting to a technical audience.&lt;br /&gt;&lt;br /&gt;At the end of my hour, there were still questions and comments, but I had to turn things over to Dustin. After a five minute break, Dustin gave a good presentation on the CloudTools that he has built and showed us some of the ways he uses Amazon Web Services in his day job.&lt;br /&gt;&lt;br /&gt;Overall, it was a great meeting.  Good presentations (if I do say so myself), good audience, and good food.  I can't wait to see what John has slated for the next meeting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-4923629597294575668?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/4923629597294575668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/last-nights-presentation-2009-02-26.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4923629597294575668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4923629597294575668'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/last-nights-presentation-2009-02-26.html' title='Last night&apos;s presentation (2009-02-26)'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-1038666908216855921</id><published>2009-02-24T11:51:00.000-08:00</published><updated>2009-02-24T11:57:03.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='App Engine'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>World Domination is one step closer!</title><content type='html'>I spent half of the day getting my Android app, "Tag Your World",  to download locations from my Google App Engine application!  And it works!&lt;br /&gt;&lt;br /&gt;Okay, it's not perfect, mind you.  I'm not authenticating or anything so I'm just pulling down the "public" info.  However, &lt;a href="http://blog.lenza.org/"&gt;Lenza &lt;/a&gt;just posted some code on how to do that so I should have no problem!  Thank you, Lenza!&lt;br /&gt;&lt;br /&gt;Now I can finish my presentation for this Thursday (although I'd really like to hack some more ;-)!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-1038666908216855921?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/1038666908216855921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/world-domination-is-one-step-closer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1038666908216855921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/1038666908216855921'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/world-domination-is-one-step-closer.html' title='World Domination is one step closer!'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-6122271285076089132</id><published>2009-02-23T19:08:00.001-08:00</published><updated>2009-02-23T19:31:23.080-08:00</updated><title type='text'></title><content type='html'>Not much to report, I'm afraid.&lt;br /&gt;&lt;br /&gt;I had two job interviews last week.  I'll report on those once I hear back from them.&lt;br /&gt;&lt;br /&gt;I'm working on a presentation on Google's App Engine for the &lt;a href="http://www.meetup.com/nyccloudcomputing/"&gt;NYC Cloud Computing Group&lt;/a&gt; this Thursday (20090226).  Problem is I can't find the right hook to make it entertaining.&lt;br /&gt;&lt;br /&gt;Yes, you can make a technical talk entertaining.  I'm also working on a presentation for the &lt;a href="http://www.meetup.com/androidnyc/"&gt;NYC Android Developers Group&lt;/a&gt; about my App Engine and Android ecosystem.  The hook there is (I hope) very entertaining: a Lessig-style story followed by a functional demonstration followed by code discussion and Q&amp;amp;A. &lt;br /&gt;&lt;br /&gt;I need to get at least two more functions working to pull off the demo.  If I'm lucky, I might be able to demo my talk at the next &lt;a href="http://www.perlfoundation.org/abe-pm/index.cgi"&gt;ABE-PM&lt;/a&gt; meeting or even the &lt;a href="http://www.lugip.org/"&gt;LUG/IP&lt;/a&gt; meeting (although I think the next one is spoken for already).&lt;br /&gt;&lt;br /&gt;I'll let you know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-6122271285076089132?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/6122271285076089132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/not-much-to-report-im-afraid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6122271285076089132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6122271285076089132'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/not-much-to-report-im-afraid.html' title=''/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-6874036910803618182</id><published>2009-02-17T10:33:00.001-08:00</published><updated>2009-02-17T10:38:38.736-08:00</updated><title type='text'>That was a short day of programming</title><content type='html'>Today I decided to work on the Google AppEngine (GAE) side of my application's ecology.  If you have a Google account, you can see it &lt;a href="http://lbtdl.appspot.com"&gt;here&lt;/a&gt;. I know, not much to look at.&lt;br /&gt;&lt;br /&gt;What I wanted to do today was to get the AppEngine and the Android talking to one another via RESTful calls.  I wrote a routine to take the data from GAE and convert it into a type of KML format.  When I uploaded it, I found I couldn't save or update data. :-(  There is something wrong with the urlfetch() call; strange becasue I didn't touch that code.  Now I'm waiting to hear back from the GAE mailing list.&lt;br /&gt;&lt;br /&gt;Maybe I'll go work on a website for this app for marketing purposes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-6874036910803618182?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/6874036910803618182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/that-was-short-day-of-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6874036910803618182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6874036910803618182'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/that-was-short-day-of-programming.html' title='That was a short day of programming'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-4029043625253175206</id><published>2009-02-16T19:18:00.000-08:00</published><updated>2009-02-16T19:47:17.618-08:00</updated><title type='text'></title><content type='html'>I just spent the last twelve hours hacking on my Android app, Tag Your World.  I made some progress but the code is still pretty bad (whaddya' expect?  It's still my first Java program!).&lt;br /&gt;&lt;br /&gt;Most of the morning was spent figuring out how to parse a JSON-formatted KML response from Google's Maps API.  After looking at various XML parsers, most notably SAX, I decided I might as well just do it manually. &lt;br /&gt;&lt;br /&gt;By "manually" I mean I took the JSON string, converted it into a JSONObject and looped through the keys. When I found the "Placemarks" key, which holds several addresses of different resolutions (address level, street level, etc.), I converted that to a JSONArray and passed it off to a function which populated an instance variable ("my first use of polymorphism!" he says proudly). &lt;br /&gt;&lt;br /&gt;Overall, I went from a JSON string&lt;span class="status-body"&gt;&lt;span class="entry-content"&gt; -&gt; JSONObect -&gt; JSONArray -&gt; JSONObject just to fetch the first address line in the KML&lt;/span&gt;&lt;/span&gt;.  There's got  to be a better way!  I find it hard to believe that there's no easy way to take a KML-encoded string and magically produce a Java object.   Unless I'm on the bleeding edge and I don't know it.&lt;br /&gt;&lt;br /&gt;Spent the evening doing some cleanup work (the TimePicker wasn't handling hours properly) and adding a few cute features (Satellite View v Map View).&lt;br /&gt;&lt;br /&gt;The next major thing I need to do is to integrate the Android app with my AppEngine app to show them both off at the next &lt;a href="http://www.meetup.com/nyccloudcomputing/"&gt;NYC Cloud Computing Meetup&lt;/a&gt;  on&lt;span style="font-style: italic;"&gt; &lt;/span&gt;the 26th&lt;span style="font-style: italic;"&gt; and &lt;/span&gt;the next &lt;a href="http://www.meetup.com/androidnyc/"&gt;NYC Android Developer Meetup&lt;/a&gt;,  whenever that will be.&lt;br /&gt;&lt;br /&gt;On top of that, I've got two day-long job interviews this week!  For someone who hasn't had any work for awhile, I'm awfully busy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-4029043625253175206?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/4029043625253175206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/i-just-spent-last-twelve-hours-hacking.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4029043625253175206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/4029043625253175206'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/i-just-spent-last-twelve-hours-hacking.html' title=''/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-787286562843790126</id><published>2009-02-08T12:16:00.000-08:00</published><updated>2009-02-08T12:36:32.980-08:00</updated><title type='text'>Thoughts on Ocaml</title><content type='html'>I'm interviewing with a financial company in Manhattan. The position requires wearing many hats, but it's mostly administration.  However, I will be doing a little bit of coding, mostly in the basics (shell, Perl, Python) but also in &lt;a href="http://caml.inria.fr/"&gt;Ocaml&lt;/a&gt;. So I spent the weekend writing two programs in Ocaml based on the problems listed over on &lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;, numbers 8 and 18 to be specific. This was my first foray into &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional programing&lt;/a&gt;.  I must say I like the paradigm although Ocaml itself leaves something to be desired. &lt;br /&gt;&lt;br /&gt;Functional programming treats functions differently than in &lt;a href="http://en.wikipedia.org/wiki/Imperative_programming"&gt;imperative programing&lt;/a&gt;, i.e. "normal" programming.  In FP, functions are treated more like mathematical functions, so it is well-suited for some of the problems over on Project Euler.  Not everything can be done in a non-imperative way (circular data structures, for example) but it is a good tool to have in your developer's tool box.  I was pleased to see that Perl is considered a good functional language, so this weekend's exercise will definitely have an effect on my usual coding style.&lt;br /&gt;&lt;br /&gt;Ocaml itself, well, I dunno. It's a relatively young language, started in 1998, so it doesn't have a lot of libraries or even tools; I couldn't find a decent IDE that was being actively developed. Now, normally, un*x/Linux is my IDE (Vim, make, etc.) but I do like to use a graphical IDE every now and then (my current fave is Eclipse) especially when learning a new language/framework.&lt;br /&gt;&lt;br /&gt;Since I code quite a bit in Perl, I'm used to using Vim and the internal Perl debugger, a paradigm that Ocaml fits into very well, but the Ocaml debugger needs some work.  In the last program I wrote, it kept telling me I had a syntax error on blank lines and even on a line &lt;span style="font-style: italic;"&gt;after&lt;/span&gt; the end-of-file.&lt;br /&gt;&lt;br /&gt;I think I'll go learn Scheme to learn more about functional programing and, of course, Perl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-787286562843790126?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/787286562843790126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/thoughts-on-ocaml.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/787286562843790126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/787286562843790126'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/thoughts-on-ocaml.html' title='Thoughts on Ocaml'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-2950967315149394388</id><published>2009-02-01T05:20:00.001-08:00</published><updated>2009-02-01T05:28:48.929-08:00</updated><title type='text'>Geocoding on Android</title><content type='html'>If you want to do geocoding, that is, if you want to get the latitude and longitude of an address in Android, &lt;span style="font-style: italic;"&gt;do &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt;&lt;/span&gt; use the Geocoder object.  Yes, yes, I know that's what it's for and the docs give you very simple examples but they fail to mention one thing: &lt;span style="font-style: italic;"&gt;it doesn't work!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I lost three frackin' days trying to figure out what I was doing wrong until I came across &lt;a href="http://groups.google.com/group/android-developers/browse_thread/thread/592d8bb14bfa0101/1b75424d1c7ff55a?#1b75424d1c7ff55a"&gt;this thread&lt;/a&gt;.  Turns out there's a bug in Android and forward geocoding doesn't work.  Sure, it's been fixed in "cupcake" (the next version Android that is, as of this moment, pre-alpha) but you figured &lt;span style="font-style: italic;"&gt;someone&lt;/span&gt; would have seen my posts of the past three days and said something about it. &lt;br /&gt;&lt;br /&gt;&lt;sarcasm&gt;I guess no one is geocoding on the Android, eh?  &lt;/sarcasm&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-2950967315149394388?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/2950967315149394388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/02/geocoding-on-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/2950967315149394388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/2950967315149394388'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/02/geocoding-on-android.html' title='Geocoding on Android'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-48308903163091130</id><published>2009-01-27T16:20:00.001-08:00</published><updated>2009-01-27T17:03:34.614-08:00</updated><title type='text'>udev fun!</title><content type='html'>That was a rough day!  I spent most of it trying to get my Android Dev phone to be recognized by my CentOS box.  It turns out the &lt;a href="http://code.google.com/android/intro/develop-and-debug.html#developingondevicehardware"&gt;Google supplied udev rules&lt;/a&gt; don't work under Fedora or CentOS.&lt;br /&gt;&lt;br /&gt;The output of &lt;span style="font-family:courier new;"&gt;udevinfo&lt;/span&gt; is different on the different OSes, hence the udev rule is different.  This one works for Fedora 10:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;SUBSYSTEM=="usb", ATTR{&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;idVendor}=="0bb4", ATTR{&lt;/span&gt;&lt;wbr  style="font-family:courier new;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;idProduct}=="0c01", SYMLINK+="android_adb"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and this one works on CentOS 5:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;SYSFS{idVendor}=="0bb4", SYSFS{idProduct}=="0c02",  SYMLINK+="android_adb"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style=";font-family:times new roman;font-size:130%;"  &gt;&lt;span style="font-family: times new roman;"&gt;Note that the spaces after the commas are important and they're both supposed to be on one line.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you put these rules into 50-android.rules like it's suggested, you will get a device node called /dev/android_adb.  With this setup you'll have to run adb as root.  To fix &lt;span style="font-style: italic;"&gt;that &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style=";font-family:times new roman;font-size:130%;"  &gt;problem, do these two things:&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=";font-family:times new roman;font-size:130%;"  &gt;put&lt;/span&gt; MODE="0666"&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:times new roman;"&gt;  &lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;(with a comma and a space!) in either of the above line, and&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;change the name of the file to 51-android.rules.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family:times new roman;"&gt;&lt;span style="font-size:130%;"&gt;You can restart udev with &lt;span style="font-family:courier new;font-size:85%;"&gt;start_udev&lt;/span&gt; or &lt;span style="font-family:courier new;font-size:85%;"&gt;udevcontrol reload_rules&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-48308903163091130?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/48308903163091130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/01/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/48308903163091130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/48308903163091130'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/01/blog-post.html' title='udev fun!'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-7158629564379813603</id><published>2009-01-21T18:35:00.001-08:00</published><updated>2009-01-21T19:03:10.766-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='macbook'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>I'm really hating Apple...</title><content type='html'>...or at least the Macbook.  Not only does it not have enough keys, the overall interface isn't as consistent as everyone maes (and the damn 'k' ey has been flaky since day one!) it out to be.&lt;br /&gt;&lt;br /&gt;Here's what pissing me off &lt;span style="font-style: italic;"&gt;tonight&lt;/span&gt;.  I'm using Eclipse to write an Android application.  I want to learn a few shortcuts like how to jump to a specific line (Ctrl-L),  got to the last edited position (Ctrl-E), or jump to another class member (Ctrl-Q). Except on an Apples, the function of the Control ey (ARGH!) is usurped by the Command (Open- Apple, Flower thingie) key.  So it's Command-L, Command-E and Command-Q, right?  Amirite? WRONG! It's Ctrl-Q because Command-Q closes the program! So maybe Ctrl-E also goes to the last position?  No, because that key combo does nothing!&lt;br /&gt;&lt;br /&gt;Go head, fanboi!  Argue all you want that Command-Q to close is consistent across applications.  Can you Command-Q the Finder?  Huh?  Can you?&lt;br /&gt;&lt;br /&gt;And I'm not going to blame this on the Eclipse people.  I'm blaming Apple.  Here's another one: the function keys are set, by default to be Special Features Keys (dim/brighten monitor, volume up/down, etc.).  Fine.  So if I want the function eys (oh, screw it!) to act like function keys, I need to push a modifier key.  Fine again, except it's never the same frackin' modifier key!  If I want to quit out of Midnight Commander, it's Command-F10, but to make a directory, it's Control-F7 and to move a file it's Fn-F6!  WTF?&lt;br /&gt;&lt;br /&gt;As soon as I can, I'm getting a Lenovo Thinkpad running Linux.  The only thing this MB is good for is as an iPod updater. I was going to say "as a multimedia box" but I can't even watch The Daily Show on this thing. &lt;br /&gt;&lt;br /&gt;Bah!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-7158629564379813603?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/7158629564379813603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/01/im-really-hating-apple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7158629564379813603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/7158629564379813603'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/01/im-really-hating-apple.html' title='I&apos;m really hating Apple...'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-520866283570790335</id><published>2009-01-17T17:36:00.000-08:00</published><updated>2009-01-17T17:48:21.877-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>More Android Fun! (Yes, I really mean it this time!)</title><content type='html'>I just spent the past 12 hours working on my Android app.  I think I made a fair amount of progress.  For 12 hours, I better have! &lt;br /&gt;&lt;br /&gt;Reverse geocoding (where you look up the address given the latlong) is working so I can now say "Save where I am right now!" and also say "Use this address for this new location".  If you're paying attention, you can see how they both share a lot of code.&lt;br /&gt;&lt;br /&gt;I got Preferences working too!  That was pretty easy, I must say.&lt;br /&gt;&lt;br /&gt;I still can't get my Linux boxen to recognize the Android, so I'm stuck doing hardware debugging on my @#$%^ Macbook. Although it was kinda neat to fire up the program in Eclipse and watch it run on the handheld.&lt;br /&gt;&lt;br /&gt;I think I have only two major pieces left now; doing the proximity checking and drawing the proximity area.  The first is mostly done by the Android framework, unfortunately I'm having difficulting finding code I can ste^H^H^H look at for inspiration.  I still don't know how to do the proximity area drawing.&lt;br /&gt;&lt;br /&gt;Tip of the day: how to properly transfer your app from one machine to another. Tar up the workspaces on one machine, transfer them to the new one, delete the old dir, untar and then....right-click, select Import -&gt; From Existing Files.  Things work &lt;span style="font-style: italic;"&gt;much&lt;/span&gt; better that way.&lt;br /&gt;&lt;br /&gt;Tomorrow it's the LocationManager coding!  Wish me luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-520866283570790335?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/520866283570790335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/01/more-android-fun-yes-i-really-mean-it.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/520866283570790335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/520866283570790335'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/01/more-android-fun-yes-i-really-mean-it.html' title='More Android Fun! (Yes, I really mean it this time!)'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-5498158876689096110</id><published>2009-01-16T11:10:00.000-08:00</published><updated>2009-01-16T11:17:08.269-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>More Android fun (NOT!)</title><content type='html'>Man, today is not my day for doing Android work!&lt;br /&gt;&lt;br /&gt;I've been trying for the whole morning and the past two hours to either a) get my Dev phone recognized by my Linux boxes (no luck so far) and b) get my app running on the Dev phone via my Macbook.&lt;br /&gt;&lt;br /&gt;A major problem is moving an Eclipse/Android app from one machine to another.  I can understand needing to do a &lt;span style="font-weight: bold;"&gt;Project -&gt; Build All&lt;/span&gt; on the new machine but there were still weird problems.  I ended up just rerunning the app several times until all the gremlins were shaken out.&lt;br /&gt;&lt;br /&gt;For future reference, if you do move Android projects from one machine to another, remember to copy your ~/.android/debug.keystore from one machine to another.  I don't know exactly what it does, but your maps won't work otherwise.&lt;br /&gt;&lt;br /&gt;Now I have to prep for a phone conference about putting on a cloud computing conference on Wall Street and then take my second Google interview.  Wish me luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-5498158876689096110?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/5498158876689096110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/01/more-android-fun-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/5498158876689096110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/5498158876689096110'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/01/more-android-fun-not.html' title='More Android fun (NOT!)'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6742616518665885369.post-6689239273457862394</id><published>2009-01-15T11:34:00.001-08:00</published><updated>2009-01-15T11:46:49.903-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='new york'/><category scheme='http://www.blogger.com/atom/ns#' term='appengine'/><title type='text'>NYC Cloud Computing Meetup</title><content type='html'>Last night's &lt;a href="http://www.meetup.com/nyccloudcomputing/"&gt;NYC Cloud Computing Meetup&lt;/a&gt; was another successful event.  I think there were twenty attendees, not including the two speakers, Geir Magnusson from 10Gen and Helena May of AppNexus.&lt;br /&gt;&lt;br /&gt;Geir gave a good overview of the state of data persistence in the cloud, from Amazon's S3 to Google BigTable to his company's offering.  It was quite informative.  The tech guys got pretty into it.&lt;br /&gt;&lt;br /&gt;Helena's pesentation on what her company offers really jazzed up the business types in the crowd.  Succintly, AppNexus offers a production-grade alternative to Amazon's EC2 with 100% uptime, SLAs and the like.&lt;br /&gt;&lt;br /&gt;If you're interested in cloud computing are are near NYC, you really should check us out.  The crowd is pretty interactive and there are always good discussions going on.&lt;br /&gt;&lt;br /&gt;Next month's meeting should be very interesting; the organizer, John D'Esposito, volunteered me to give a presentation on Google's AppEngine.  I just have to figure out what I'm going to say!  Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6742616518665885369-6689239273457862394?l=faberfedor.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://faberfedor.blogspot.com/feeds/6689239273457862394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://faberfedor.blogspot.com/2009/01/nyc-cloud-computing-meetup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6689239273457862394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6742616518665885369/posts/default/6689239273457862394'/><link rel='alternate' type='text/html' href='http://faberfedor.blogspot.com/2009/01/nyc-cloud-computing-meetup.html' title='NYC Cloud Computing Meetup'/><author><name>Faber</name><uri>http://www.blogger.com/profile/05942032524755695224</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='20' src='http://2.bp.blogspot.com/_KWdDjPUDB_U/SYhbBLLTaxI/AAAAAAAAAAQ/aa4A4F8hC4M/S220/headshot.jpeg'/></author><thr:total>0</thr:total></entry></feed>
