July 26, 2013

だるまさんが転んにゃ - Stalking Cat - - YouTube

This is perfect.

Posted by josuah at 10:13 PM UTC+00:00 | Comments (0) | TrackBack (0)

June 17, 2013

Nami & Kiba - Away From Home

nami.pngI just got back from a very short trip, to bring Nami & Kiba to my parents' house in New York. They're going to be living there from now on. I feel horrible and miserable and like I'm going to throw up all the time.

kiba.pngSo I can check on them I set up a Samsung Galaxy Tab 2 with Skype set to auto-answer. It's permanently plugged in and facing the room, so if I dial in then it will show me the room, allowing me to see and hear them, as well as speak to them. I bought the 10.1" screen because even though they can't really tell it's me on the display it might be a little easier for them if the video is bigger.

Unfortunately the picture quality is a little poor, in part because Skype doesn't have the best encoder setup but also because the Wi-Fi signal in their room is a little weak. But when I call at least they can hear me. Detective Nami investigated right away, and turns to look when I call. Kiba came over when he heard me calling his name, but I'm worried he is disappointed when he can't find me.

Posted by josuah at 6:23 AM UTC+00:00 | Comments (0) | TrackBack (0)

May 5, 2013

Goodbye Ellie

Shelly & EllieOne of our turtles, Ellie, died last night. She was a little over ten years old. Christina noticed she was sluggish on Friday, and I took her to the vet on Saturday morning. The doctor said she had a respiratory infection and gave her a shot, but by this morning she had passed. Ten years isn't very long for a turtle. I'm afraid the move, and being out of her tank, placed a lot of stress on her. She wasn't the healthiest turtle because her shell had grown in tight, constantly rubbing her neck, and after she lost some claws they never grew back correctly.

Posted by josuah at 4:17 PM UTC+00:00 | Comments (0) | TrackBack (0)

April 5, 2013

iOS 6 Notification Sounds w/out Notification

For the past few days I'd been experiencing a strange phenomenon on my iPhone 5 running iOS 6. Every so often the notification sound would play, but there would be no notification displayed. The timing was seemingly random and could happen at any time of the day, no matter what I might be running (or not running) on my iPhone at the time.

I figured it might be related to disabling notifications as I recently turned some off for a few apps. Turns out that's what it was. I had disabled notifications in the Notification Center from the Slickdeals app, but that app was still sending out notifications. When I turned notifications back on for the Slickdeals app in the Notification Center, a whole list of them was displayed in the iOS pull-down menu. Notifications that were previously hidden but still occurring. These notifications were being issued even with the Slickdeals supposedly app force-quit.

To fix this, I had to change my notification settings within the Slickdeals app itself.

Posted by josuah at 4:46 PM UTC+00:00 | Comments (0) | TrackBack (0)

October 13, 2012

Evangelion Mini Cooper S Clubman

evacar-passenger.jpgYesterday the Evangelion Mini Cooper S Clubman was born. For the past several months I'd been planning to turn my new car into an 痛車 or a car with fan images on it. I'd already been gradually leaning towards Neon Genesis Evangelion with my iPod case and a small sticker I purchased off eBay a while back. I was originally planning to order the stickers from Japan, but that fell through and I was able to find a great local company, Mission City Signs, who could print for a comparable price as well as professionally apply the stickers onto the car. I still have tire air valve caps and license bolts on order, but those are minor details.

Making the images took quite a bit of time, and taxed my iMac for the first time since I last did some serious graphic design work. The images needed to be high quality actual size at 150dpi for a good print result. It took me a while to find source images large enough to work with, and there wasn't a lot of images that large. Luckily the recent Evangelion reboot has come with some excellent high quality artwork. I needed to extract Asuka, Rei, and Mari from the background and then composite them actual size onto an actual size image of my Mini. I would say doing all this took at least a couple dozen hours. The resulting source and final image files take up about 2.8GB and prompted me to ensure I was using GigE for my network connection.

evacar-driver.jpgI'm super happy with the results! There are a few blemishes in the application but they're only noticeable up close. From start to finish, this project took me about two months of research and work. The stickers should last about 5 years, maybe longer if I keep my car out of the sun and away from harsh weather.

Posted by josuah at 10:24 PM UTC+00:00 | Comments (1) | TrackBack (0)

July 2, 2012

Some Thoughts on the Affordable Care Act

It is constitutional to collect taxes based on things citizens consume, do, or do not do. That's the basis for the Supreme Court's ruling that upholds the Patient Protection and Affordable Care Act.

From both an economic and financial standpoint, these types of taxes (usually excise taxes) are imposed to encourage, discourage, or help pay for the costs associated with a product or service. A common one is the tax on cigarettes.

Cigarettes are taxed because there is an external cost associated with their consumption that will not otherwise be borne by the manufacturer, retailer, or consumer: health problems and the associated cost for treating them.

There are many who consider health care to fall under the category of a social service similar to police, fire, military, unemployment insurance, etc. Truthfully, most of the rest of the first world considers it as such. In fact the UN includes it as a human right, much like the U.S. constitution lists the pursuit of happiness and freedom. In such a situation, barring universal government-provided health care, the current reform bill is a halfway measure towards that.

The tax is thus a mechanism (albeit a somewhat unbalanced one due to its small dollar amount) by which to still rely primarily upon private health insurance companies while moving towards universal coverage. That's also why the majority of provisions in the bill are designed to prevent the private insurers from rejecting applicants or denying coverage.

A different implementation would have been to expand Medicare and Medicaid to cover all citizens and increased taxes or reallocated spending to cover the additional cost. Then the arguments around being forced to buy something would sort of be moot in the same way you are "forced to buy" other government services via taxation. But that couldn't get past the Republicans and the health insurance industry lobbyists.

In one ways, the tax associated with the reform bill is similar to Medicare/Medicaid because it is a progressive tax: the amount you have to pay for not having purchased health care is dependent upon your income. Taxpayers currently pay into Medicare and Medicaid based on their income.

History and economic theory has shown that the universal safety nets provided by government services like the police, fire departments, military, education, and also health care have a net positive effect on economic growth, social stability, and technological advancement. By contrast, environments at odds to that have a net negative effect as seen in the reaction of financial markets to war.

One example of the benefits of support services and safety nets are individuals being more likely to quit their current job to start a new business without having to worry about reduced income affecting their family's health or safety. (e.g. the police, fire departments, military, schools, etc. won't stop providing services to that family.) Likewise, with less basic living necessities riding upon a paycheck, individuals are less bound to indentured servitude.

An argument against this is that providing too many basic services can discourage individuals from actually contributing to society. And this has happened in some countries where social protections and safety nets have gone too far and tipped things upside down. The right balance is to provide enough to keep people safe and healthy without providing enough to satisfy their recreational and entertainment desires. (Plus, there is always a percentage of people who will produce for the sake of producing or advancement of technology.) I don't believe health care risks pushing the balance too far.

Posted by josuah at 5:09 AM UTC+00:00 | Comments (0) | TrackBack (0)

June 28, 2012

Poor Arguments in John Stossel's Health Care Opinion Piece

I really don't understand John Stossel's opinion piece on the health care ruling.

In one sentence he says, "No more cruel discrimination against the obese or people with cancer." But then he compares that with optional flood insurance and car insurance costing more for risky drivers. Last I checked there wasn't a whole lof of 'risky' behavior that I can eliminate to seriously reduce my chances for brain cancer, colon cancer, or breast cancer. Black people are more susceptible to certain diseases--can they become less black?

Likewise, there are some risky behaviors that are supposed to, overall, have benefits that outweigh the risks. Such as playing sports, which is more likely to result in broken bones. Have you done a genetic analysis lately to find out if red wine is going to decrease your chance of a heart attack, or instead destroy your liver? Don't like (or can't afford) to eat fish twice a week? Your insurance premiums should go up.

Later on, he talks about everyone getting health care because hospitals treat those without insurance, medicaid (government health care funded by taxes) is available, people pay cash, or doctors will let some people pay less or nothing if they can't afford it. Other than pro-bono work, the rest of those don't seem like amazing options when your child is diagnosed with leukemia. And I kind of doubt the hospital is going to handle that pro-bono.

There are a dozen things we pay for collectively that aren't directly linked to our individual chance of contributing to the need for that thing. Criminals don't pay more taxes to fund the police or justice system. People who buy boxes of matches don't pay more taxes to fund fire departments. Politicians who weaken political relationships with other countries don't pay more for the increased intelligence gathering and military operations that result (maybe they should). The reason is that we know that our civilization is better off with people having the social and financial security and stability associated with those services.

Posted by josuah at 11:26 PM UTC+00:00 | Comments (0) | TrackBack (0)

June 12, 2012

LG 47LM6200 DHCP-Only

We picked up an LG 47LM6200 television over the weekend for use in the bedroom. Right now it is hooked up to an Apple TV and Christina is enjoying it a lot because she can use AirPlay Mirroring from our iPad to watch Chinese shows off YouTube. We also used it for watching Crunchyroll content.

Unfortunately there is one problem with the TV: it does not support static IP network configuration. I was able to get everything working via Wi-Fi and DHCP (in fact this is necessary as the Wi-Fi MAC address is only visible after connected; only the Ethernet MAC address is listed in the device information screen based on my memory) but despite text on the TV setup screens and user manual that implies support for static IP configurations, I was unable enter one.

I ended up spending about one and a half hours on the phone with LG support. The representative was very helpful, and called me back after doing some investigation. But the end result is that the TV only supports DHCP. (I think she got some confusing answers from LG technicians because her explanation on the callback wasn't entirely correct.)

So, we won't be using the SmartTV features of this display. Too bad, since it's Netflix UI should be better than what's on the Apple TV. But, it's okay because we have network access via the Apple TV.

Posted by josuah at 12:13 AM UTC+00:00 | Comments (0) | TrackBack (0)

May 24, 2012

The Importance of Development Documentation

Overview

Lately I've found myself harping on the importance of documenting code, program execution, and SCM items (i.e. JIRA issues and Perforce changelists). Documentation can be a controversial topic, particularly when mixing people from opposite camps on the subject. It has even been referred to as a philosophical difference.

Typical arguments against producing documentation for internal consumption tend to fall into the following two categories:

  • The documentation is superfluous with respect to the source code.
  • The resources spent producing documentation are better spent elsewhere.

While I could continue to espouse the benefits of good documentation, in many ways the discussion reduces to a disagreement along the lines of he-said/she-said. So instead of proselytizing I will instead provide scientific evidence in support of documentation. It is not a difference of philosophy.

The majority of evidence presented here applies to software developers but the analogous benefits apply o any persons involved in the development process including QA, technical writers, and anyone else that may need to synthesize information about the product. Only evidence indicated as statistically significant is included.

This essay will not cover the benefits of clean code although those benefits may be discussed in the referenced papers. For more on clean code, see Clean Code: A Handbook of Agile Software Craftsmanship [Google Books] or Writing clean code [IBM developerWorks].

The Importance of Comprehension

To identify the value associated with the variable or attribute of a scientific experiment a metric must be defined. For documentation that metric is comprehension and the resulting benefits of improved comprehension.

Debugging Efficiency

Leo Gugerty and Gary M. Olson. 1986. Comprehension Differences in Debugging by Skilled and Novice Programmers. In Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers, Elliot Soloway and Sitharama Iyengar (Eds.). Ablex Publishing Corp., Norwood, NJ, USA, 13-27.

Gugerty and Olson conducted an experiment to determine differences in debugging skill between novice and expert programmers. Experts were able to identify and fix the programs in less than half the time (18.2m/17.3m for novices, 7.0m/9.3m for experts), with fewer attempts (4.5/2.2 for novices, 1.9/1.1 for experts), and with less probability of introducing new bugs (23%/30% for novices, 17%/0% for experts). Results indicated this was in large part due to generating high quality hypotheses with less study of the code primarily due to their superior ability to comprehend the program.

Murthi Nanja and Curtis R. Cook. 1987. An analysis of the on-line debugging process. In Empirical studies of programmers: second workshop, Gary M. Olson, Sylvia Sheppard, and Elliot Soloway (Eds.). Ablex Publishing Corp., Norwood, NJ, USA 172-184.

Nanja and Cook studied differences in the debugging process of expert, intermediate, and novice programmers and measured their performance when debugging. Their results support the conclusions of Gugerty and Olson's study: experts relied on superior program comprehension to fix bugs faster (19.8m for experts, 36.55m/56.0m for intermediates and novices) with less code changes (8.83 LOC for experts, 10.33/23.16 LOC for intermediates and novices) and without introducing as many new bugs (1 for experts, 2.33/4.83 for intermediates and novices).

Robert W. Holt, Deborah A. Boehm-Davis, and Alan C. Shultz. 1987. Mental representations of programs for student and professional programmers. In Empirical studies of programmers: second workshop, Gary M. Olson, Sylvia Sheppard, and Elliot Soloway (Eds.). Ablex Publishing Corp., Norwood, NJ, USA 33-46.

Holt et. al. examined the correlation between a programmer's perceived difficulty and complexity of code on that programmer's debugging performance. They found a small but significant correlation between debugging time/attempts and the difficulty in finding information (0.235/0.184/0.237) and the difficulty in recognizing program units (0.291/0.177/0.205). A somewhat less significant correlation was found between difficultly in working with the code and time to debug (0.210) and between program formatting being too condensed and number of debugging transactions (0.197).

Poor comprehension increased the time to fix bugs and correlated with the introduction of new bugs or incorrect fixes.

Systematic Understanding

David C. Littman, Jeannine Pinto, Stanley Letovsky, and Elliot Soloway. 1987. Mental models and software maintenance. Journal of Systems and Software. 7, 4 (December 1987), 341-355. DOI=10.1016/0164-1212(87)90033-1 http://dx.doi.org/10.1016/0164-1212(87)90033-1{info}

Littman et. al. analyzed the development process of experienced programmers tasked with modifying a program and identified two categories for understanding programs.

  1. Systematic developers trace data and control flow to understand global program behavior. The programmer detects causal interactions between program components and designs a modification taking these interactions into account.
  2. As-needed developers limit the scope of their understanding to the code that must be modified to implement the change. Data and control flow and interactions that may be affected due to the modification are unlikely to be found.

In their experiment all five developers who used the systematic strategy successfully modified the program while all five developers who used the as-needed strategy failed to modify the program correctly.

Failure to understand global program behavior and interactions between components resulted in incorrect implementation every time.

Code Reuse

Hoadley, C.M., Mann, L.M., Linn, M.C., & Clancy, M.J. (1996). When, Why and How do Novice Programmers Reuse Code? In W. Gray & D. Boehm-Davis (Eds.), Empirical Studies of Programmers, Sixth Workshop (pp. 109-130). Norwood, NJ: Ablex.

Among developers who are pre-disposed towards code reuse, comprehension influenced both the frequency of and form of reuse. Two mechanisms of reuse were examined:

  1. Direct is reuse of a function by calling it from new code.
  2. Cloning is copying code out of an existing function into new code.

An abstract understanding of functions resulted in 65% reuse (both direct and cloned) while only an algorithmic understanding resulted in 12% reuse. Misunderstood functions had low direct reuse of 5% but were reused by cloning 40%.

Code that is not well understood is less likely to be reused. Code that is misunderstood is likely to result in incorrect code.

Improving Comprehension

Beacons

Beacons are key features in code that indicate the presence of a structure or operation and strengthen the reader's hypothesis of functional behavior. They serve as shortcuts towards comprehension; failing to recognize a beacon requires a developer to spend additional time on comprehension.

Susan Wiedenbeck. 1986. Processes in Computer Program Comprehension. In Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers, Elliot Soloway and Sitharama Iyengar (Eds.). Ablex Publishing Corp., Norwood, NJ, USA, 48-57.

Wiedenbeck's experiments found that experienced programmers were able to recall 77.75% of the beacons versus 47.50% of the non-beacons in the code while novices only recalled 13.83% of the beacons and 30.42% of the non-beacons.

Martha E. Crosby and Jean Scholtz and Susan Wiedenbeck. 2002. The Roles Beacons Play in Comprehension for Novice and Expert Programmers. In Programmers, 14th Workshop of the Psychology of Programming Interest Group, Brunel University. 18-21.

Comment beacons indicative of functionality are quickly processed by experienced programmers. Pure code beacons (i.e. important lines of code) require more time to process and might benefit from comprehension aids.

Edward M. Gellenbeck and Curtis R. Cook. 1991. An Investigation of Procedure and Variable Names as Beacons During Program Comprehension. Technical Report. Oregon State University, Corvallis, OR, USA.

Gellenbeck and Cook found that meaningful procedure and variable names resulted in higher rates (52% and 74%) of correct behavior identification compared to combinations with neutral procedure and variable names. However this still shows a large percentage of incorrect identification (48% and 26%) for undocumented source code.

Add documentation beacons (comments, mnemonic hints, or whitespace and formatting) to highlight important operations and logical concepts to speed up comprehension time and ensure proper comprehension.

Plausible Slot Filling

Stanley Letovsky. 1986. Cognitive Processes in Program Comprehension. In Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers, Elliot Soloway and Sitharama Iyengar (Eds.). Ablex Publishing Corp., Norwood, NJ, USA, 58-79.

Plausible slot filling is an attempt to explain an unknown based on existing incomplete knowledge. It is a result of [abductive inference|http://en.wikipedia.org/wiki/Abductive_inference] (i.e. guessing) where one tries to explain something through reversed logical deduction. In other words:

if "Q" and "P implies Q" then "maybe P"

The deduction may be incorrect. In Letovsky's experiment a developer incorrectly guessed that a memory allocation within a database function was for a database record. In another example the developer did not immediately understand why only six elements were displayed when the record array contained seven elements.

Document background information and the purpose of code to prevent incorrect conclusions, even when the issue appears isolated or minor.

Program-Dependent Items

Mark Thomas and Stuart Zweben. 1986. The Effects of Program-Dependent and Program-Independent Deletions on Software Cloze Tests. In Papers presented at the first workshop on empirical studies of programmers on Empirical studies of programmers, Elliot Soloway and Sitharama Iyengar (Eds.). Ablex Publishing Corp., Norwood, NJ, USA, 138-152.

A cloze test is a comprehension and vocabulary test where words are removed from a larger body of text. Removed items fall into one of two categories:

  1. Program-independent items can be resolved correctly without understanding the functionality (e.g. by process of elimination or to meet compilation requirements).
  2. Program-dependent items require functional understanding for correct resolution.

In the tests conducted by Thomas and Zweben cloze test error rates for program-dependent items were 41.14%/32.11% while only 12.41%/5.75% for program-independent items. Stated differently, participants had a much harder time deciphering the correct meaning of the code when lacking program-dependent information.

Document considerations (global, external, state) to reduce the chance of incorrect conclusions due to missing context.

Abstract Comprehension

Hoadley, C.M., Mann, L.M., Linn, M.C., & Clancy, M.J. (1996). When, Why and How do Novice Programmers Reuse Code? In W. Gray & D. Boehm-Davis (Eds.), Empirical Studies of Programmers, Sixth Workshop (pp. 109-130). Norwood, NJ: Ablex.

Experiments found that students having difficulty summarizing code were less likely to reuse code. Additionally, abstract comprehension resulted in 65% function reuse versus 12% function reuse with only algorithmic comprehension. Code that was not understood either abstractly or algorithmically was cloned 40% of the time which likely resulted in incorrect code.

Documentation should be written towards both abstract and algorithmic comprehension to increase code reuse and prevent incorrect code cloning.

Encouraging Documentation

While the benefits and mechanisms of improved development documentation may be clear, it is also important to take action that will result in the production of this documentation.

Herb Krasner, Bill Curtis, and Neil Iscoe. 1987. Communication breakdowns and boundary spanning activities on large programming projects. In Empirical studies of programmers: second workshop, Gary M. Olson, Sylvia Sheppard, and Elliot Soloway (Eds.). Ablex Publishing Corp., Norwood, NJ, USA 47-64.

Krasner et. al. conducted an informal analysis of the communication issues affecting large programming projects and identified areas in which the culture and environment discouraged effective communication. These areas include communication skills, incentive systems, representational formats, rapid change, jargon, information overload, scheduling pressure, and peer/management expectations.

Encouraging the production of documentation and effective communication must be accomplished through a combination of peer pressure and management behavior.

  • Hire or foster developers with high communication and technical competence who exhibit an attitude of egoless programming.
  • Reward documentation, communication, and long-term goals instead of short-term performance.
  • Use similar/standard documentation formats and minimize the use of jargon.

Posted by josuah at 12:55 AM UTC+00:00 | Comments (0) | TrackBack (0)

May 22, 2012

Transmit SFTP Failure

I ran into a strange problem today where my attempts to SFTP to my server were failing but I could SSH in just fine. My login credentials were correct, and my server logs weren't indicating a failure. They seemed to indicate a problem with the client.

May 21 10:56:55 binibik systemd-logind[979]: New session 21304 of user wesley.
May 21 10:56:55 binibik sshd[7714]: subsystem request for sftp by user wesley
May 21 10:56:55 binibik sshd[7714]: Received disconnect from 69.53.237.65:11: disconnected by user
May 21 10:56:55 binibik systemd-logind[979]: Removed session 21304.

I am using the wonderful Transmit FTP client and version 3 of the client displayed an error dialog stating 'permission denied' while version 4 of the client displayed an error dialog stating the username or password was incorrect.

So both the server logs and client error message was incorrect and therefore misleading. I turned on Transmit verbose logging which showed authentication succeeded. I think the log messages might have indicated something was wrong but there wasn't a clear message indicating so.

Turns out the problem was my sshd_config configuration. The sftp subsystem configuration line was pointing at an old file location that no longer existed. I fixed that so it pointed at the correct location and everything works now.

Subsystem	sftp	/usr/lib/ssh/sftp-server

Posted by josuah at 4:23 AM UTC+00:00 | Comments (0) | TrackBack (0)

July 2013
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Search