MacBook, defective by design banner

title:
Put the knife down and take a green herb, dude.


descrip:

One feller's views on the state of everyday computer science & its application (and now, OTHER STUFF) who isn't rich enough to shell out for www.myfreakinfirst-andlast-name.com

Using 89% of the same design the blog had in 2001.

FOR ENTERTAINMENT PURPOSES ONLY!!!
Back-up your data and, when you bike, always wear white.
x

MarkUpDown is the best Markdown editor for professionals on Windows 10.

It includes two-pane live preview, in-app uploads to imgur for image hosting, and MultiMarkdown table support.

Features you won't find anywhere else include...

You've wasted more than $15 of your time looking for a great Markdown editor.

Stop looking. MarkUpDown is the app you're looking for.

Learn more or head over to the 'Store now!

Monday, April 30, 2012

Got most of the way there with this post on StackOverflow. Figured out the rest and tried to edit the answer to show what I'd learned. No dice. My edit was rejected. QQ I guess I'll just add another answer later.

(Aside: Not sure I dig the edit police on stackoverflow. For some reason I figured the original author would be notified and allowed to choose, which makes more sense to me. I mean, I know that the edit isn't, "incorrect or an attempt to reply to or comment on the existing post", but I'm still unable to share what I learned to make things work with others. I don't care about the 2 points of rep for an edit; I want others (including myself) to be able to find the answer more quickly.)

Anyhow, here's the info I'd need to redo what I did, put in a place where at least I can find it again easily...

Here is an example of how this might look in a .gitconfig after those three calls. Alternatively, you can edit the .gitconfig directly.

[merge]
tool = winmerge
[mergetool "winmerge"]
cmd = "wmDiff.sh \"$LOCAL\" \"$REMOTE\""
trustExitCode = false
keepBackup = false
[mergetool]
prompt = false


Then, making sure WinMerge's folder was in my box's PATH variable (go to the cmd line and check echo %PATH% to double-check), I inserted a file called wmDiff.sh into the WinMerge folder.

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -ub "$1" "$2"


Then I got my Git for Windows bash prompt, typed git mergetool after attempting a git merge branchName that had conflicts, and nothing happened. Because I'm an idiot. Close that window, since when it opened and read .gitconfig those lines weren't there, open a new Git bash window, and knock yourself out.

Labels: , ,


posted by ruffin at 4/30/2012 11:24:00 AM
0 comments

How can I see all my rejected edits? - Meta Stack Overflow:

You can also use data to search for your suggestions that were rejected or approved. I have just created two queries for this:

* My rejected edits
* My accepted edits
 
Who knew?  You can query stackoverflow with SQL.  Neat.

Unfortunately I'm apparently going to have to start learning its schema if I want to find "edits not yet accepted or rejected", which is what I'm looking for right now.

Labels: ,


posted by ruffin at 4/30/2012 11:01:00 AM
0 comments

All you ever needed to know about Time Machine backups :
Turning Snapshots ON or OFF manually:
This requires using the Terminal app, in your Applications/Utilities folder.

...

Copy the appropriate command after the prompt, then press Return:

1. To turn Snapshots ON: sudo tmutil enablelocal
2. To turn Snapshots OFF: sudo tmutil disablelocal
3. To make a Snapshot: tmutil snapshot
 They're not real backups.  It's just a passtime for OS X and your startup drive.  Why bother?

posted by ruffin at 4/30/2012 10:05:00 AM
0 comments
Friday, April 27, 2012

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace gitCompare
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.richTextBox1.Text += "This is some text. ";
this.richTextBox1.SelectionColor = Color.CadetBlue;
this.richTextBox1.Text += "This is some text. ";

richTextBox1.SelectionStart = 5;
richTextBox1.SelectionLength = 10;
richTextBox1.SelectionColor = Color.CadetBlue;

this.resetCursorSelectionColor();
}

private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text += textBox1.Text;
richTextBox1.SelectionStart = richTextBox1.Text.Length
- textBox1.Text.Length;
richTextBox1.SelectionLength = textBox1.Text.Length;
richTextBox1.SelectionColor = Color.Crimson;

this.resetCursorSelectionColor();
}

public void resetCursorSelectionColor()
{
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.SelectionColor = Color.Black;
// still writes crimson after click.

richTextBox1.SelectionStart = 0;
richTextBox1.SelectionLength = 0;
richTextBox1.SelectionColor = Color.Black;

}

}
}

Labels: ,


posted by ruffin at 4/27/2012 12:06:00 PM
0 comments

I think I've "figured this out" before, but this is a better explanation (from the VIm Wikia):

(EDIT: I think I'm wrong. I think the old way is better.)

Converting the current fileEdit

A common problem is that you open a file and see ^M at the end of many lines. Entering :set ff? will probably show that the file was read as unix: the problem is that some lines actually end with CRLF while others end with LF. To fix this, you need to tell Vim to read the file again using dos file format. When reading as dos, all CRLF line endings, and all LF-only line endings, are removed. Then you need to change the file format for the buffer and save the file. The following procedures will easily handle this situation, but they only work reliably on reasonably recent versions of Vim (7.2.40 or higher).

Convert from dos/unix to unix

To convert the current file from any mixture of CRLF/LF-only line endings, so all lines end with LF only:
:update  Save any changes.
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]
:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]
:w Write buffer using unix (LF-only) line endings.


In the above, replacing :set ff=unix with :set ff=mac would write the file with mac (CR-only) line endings. Or, if it was a mac file to start with, you would use :e ++ff=mac to read the file correctly, so you could convert the line endings to unix or dos.

Labels:


posted by ruffin at 4/27/2012 11:51:00 AM
0 comments

If you want to check out a local working branch based on origin/test you need to check it out with

git checkout -b test origin/test



another source:
git merge --abort
This attempts to reset your working copy to whatever state it was in before the merge. That means that it should restore any uncommitted changes from before the merge, although it cannot always do so reliably. Generally you shouldn't merge with uncommitted changes anyway.

Labels: ,


posted by ruffin at 4/27/2012 10:42:00 AM
0 comments

C# Blog - Tips and Tricks: Add Syntax Highlighting Control:

ICSharpCode.TextEditor
After searching i found editor control from a well known open source IDE SharpDevelop. Syntax Highlighting Text Editor Control looks very good and light after Scintilla. It requires less time to load and seems much more stable. 



Scintilla
First, what i have try to use, was ScintillaNet, but i have no luck to get it worked in test program. It need to setup before use, require unmanaged companion library, what make difficult to multiplatform use. After all i see my Visual Studio C# 2010 Express very unstable, after adding ScintillaNet control to Toolbox. After many experiments i get it worked, but result seems unstable and unrepeatable. Personally i not recommend to use Scintilla in .NET application, but possible it good choice for C++ project.

There's a StackOverflow thread on this question, and the ICSharpCode lib, especially with the excellent sample project at the above link, seems the most portable (though its answer had no votes until I came along).

Works well with simplest case tests.

Labels:


posted by ruffin at 4/27/2012 10:18:00 AM
0 comments
Thursday, April 26, 2012

Quick bit that threw me off in git initially: A merge doesn't merge you into something else.  It merges something else into you.

git merge crazyBranch

... takes in crazyBranch and puts it into whatever branch you're in now, which you can figure out with...

git branch

So if I'm in "myBranch" and I hit git merge crazyBranch, now anything in crazyBranch, assuming it doesn't conflict with what I've done, is sitting in myBranch.  myBranch did not merge with crazyBranch.  It's still wholly crazy.

Capiche?

Labels:


posted by ruffin at 4/26/2012 03:48:00 PM
0 comments

From IEEE Software "Best Practices" Column by Steve McConnell:
Developers tend to be introverts. About three-quarters of developers are introverts compared to about one-third of the general population. Most developers get along with other people fine, but the realm of challenging social interactions is just not their strong suit.

That was from May 1996.  Wonder if it's still true.  The strange thing is the way programmers tend not to "perform introversion" so much around other programmers.  Then it's often your normal display of wolves playfully (and not so playfully) jockeying for alpha.  And if reddit and imgur don't show you that geeks have a very advanced, um, style of humor, you're not trying hard enough.  This manifests away from the keyboard too.  ;^)

Not sure how the author got those numbers, but I do think communication with folks that can't think as logically as programmers can (and unfortunately often programmers return the favor, and can only communicate in a sort of hyper-logical zero-sum fashion, approaching Sheldon or Spock, depending on your generation) be troubling.  I'd argue programmers, as a whole, aren't as empathetic as the general population.  You must see it not precisely their way, but what appears to them to be the [logical] way.

The inability to have others catch their meaning as easily as, well, other programmers often can, probably reduces confidence and has programmers perform introvertedly.  But that's like saying that you're introverted if you were dropped into a jail cell full of, well, sketchy folk and didn't talk to them like they're buddies. 

Avoiding painful situations isn't precisely introversion.  The key is finding a translator.  And hiring programmers who can blog, natch.  (See what I did there?)

posted by ruffin at 4/26/2012 09:09:00 AM
0 comments
Wednesday, April 25, 2012

I'm kinda tired of showing you what these say, so I'm just pasting the source. I think my email addy is the only thing personal about it, right? GREYLIST, DANGIT. I feel like applying for a job with Gmail just to drop in, set up greylisting, and getting out (if I need to). Seriously, guys, please?

Awl, heck, here's the contents:

Dear Valued Member,

We have just detected that your account details requires verification.

Please Follow the instruction in updating your account: http://accounts.google.com

Sincerely,
Verification Dept.

The link to "accounts.google.com", of course, goes to http://exoticaquaticsnmore.com/wp-content/plugins/2.htm Guess it's compromised by some sort of trojan. I'm not looking. Now the source.
Delivered-To: me@gmail.com
Received: by 10.180.90.137 with SMTP id bw9csp239324wib;
        Wed, 25 Apr 2012 17:13:05 -0700 (PDT)
Received: by 10.60.0.196 with SMTP id 4mr6132978oeg.0.1335399184992;
        Wed, 25 Apr 2012 17:13:04 -0700 (PDT)
Return-Path: <users@buanmes.com>
Received: from p3plwbeout14-05.prod.phx3.secureserver.net
 (p3plsmtp14-05-2.prod.phx3.secureserver.net. [173.201.192.190])
        by mx.google.com with ESMTP id e3si849576oea.7.2012.04.25.17.13.04;
        Wed, 25 Apr 2012 17:13:04 -0700 (PDT)
Received-SPF: neutral (google.com: 173.201.192.190 is neither permitted
 nor denied by best guess record for domain of users@buanmes.com)
 client-ip=173.201.192.190;
Authentication-Results: mx.google.com; spf=neutral (google.com:
 173.201.192.190 is neither permitted nor denied by best guess record
 for domain of users@buanmes.com) smtp.mail=users@buanmes.com
Received: from localhost ([10.6.247.13])
 by p3plwbeout14-05.prod.phx3.secureserver.net with bizsmtp
 id 2QD41j00L0J4hK601QD45p; Wed, 25 Apr 2012 17:13:04 -0700
x-cmae-analysis: v=2.0 cv=YcQ/Fntf c=1 sm=1 a=6W2818VcfmQA:10
 a=Vi3tIpmJ0u0A:10 a=zh8fTVfHSgoA:10 a=IkcTkHD0fZMA:10 a=1XWaLZrsAAAA:8
 a=1RVrM1SAAAAA:8 a=olr3WNEDlF__GWSlLcYA:9 a=mySC-jjKsEQu7ivFEUoA:7
 a=QEXdDO2ut3YA:10 a=_W_S_7VecoQA:10 a=tXsnliwV7b4A:10 a=Zjt0ng-I9kQA:10
 a=UTB_XpHje0EA:10 a=hiYTfSJL-DgA:10 a=ihEvBWhtUgrxT65tEBkGDw==:117
Received: (qmail 30861 invoked by uid 99); 26 Apr 2012 00:13:04 -0000
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="utf-8"
X-Originating-IP: 41.151.218.148
User-Agent: Workspace Webmail 5.6.16
Message-Id:
 <20120425171302.4476b9f9d29763db8bad81f0aa41a003.76f2945de5.wbe@
 email14.secureserver.net>
From: "Google Alerts" <intops@gmx.com>
X-Sender: users@buanmes.com
To: accounts@google.com
Subject: Google Email Verification
Date: Wed, 25 Apr 2012 17:13:02 -0700
Mime-Version: 1.0

<html><body><span style=3D"font-family:Verdana; color:#000000; font-size:10=
pt;"><div style=3D"color: rgb(34, 34, 34); font-family: Verdana; font-size:=
 13px; font-style: normal; font-variant: normal; font-weight: normal; lette=
r-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-aut=
o; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; =
word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-widt=
h: 0px; background-color: rgba(255, 255, 255, 0.917969); "><span>Dear Value=
d Member,</span></div>=0A<div style=3D"color: rgb(34, 34, 34); font-family:=
 Verdana; font-size: 13px; font-style: normal; font-variant: normal; font-w=
eight: normal; letter-spacing: normal; line-height: normal; orphans: 2; tex=
t-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space:=
 normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -web=
kit-text-stroke-width: 0px; background-color: rgba(255, 255, 255, 0.917969)=
; "><br></div>=0A<div style=3D"color: rgb(34, 34, 34); font-family: Verdana=
; font-size: 13px; font-style: normal; font-variant: normal; font-weight: n=
ormal; letter-spacing: normal; line-height: normal; orphans: 2; text-align:=
 -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal;=
 widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text=
-stroke-width: 0px; background-color: rgba(255, 255, 255, 0.917969); ">We h=
ave just detected that your account details requires verification.</div>=0A=
<div style=3D"color: rgb(34, 34, 34); font-family: Verdana; font-size: 13px=
; font-style: normal; font-variant: normal; font-weight: normal; letter-spa=
cing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; te=
xt-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-=
spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0p=
x; background-color: rgba(255, 255, 255, 0.917969); "><br></div>=0A<div sty=
le=3D"color: rgb(34, 34, 34); font-family: Verdana; font-size: 13px; font-s=
tyle: normal; font-variant: normal; font-weight: normal; letter-spacing: no=
rmal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-inden=
t: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing:=
 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; backg=
round-color: rgba(255, 255, 255, 0.917969); ">Please Follow the instruction=
 in updating your account:<span> </span><a title=3D"http://accounts.go=
ogle.com" href=3D"http://exoticaquaticsnmore.com/wp-content/plugins/2.htm" =
target=3D"_blank" style=3D"color: rgb(17, 85, 204); ">http://accounts.<wbr>=
google.com</a></div>=0A<div style=3D"color: rgb(34, 34, 34); font-family: V=
erdana; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-=
align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: n=
ormal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webki=
t-text-stroke-width: 0px; background-color: rgba(255, 255, 255, 0.917969); =
"><br></div>=0A<div style=3D"color: rgb(34, 34, 34); font-family: Verdana; =
font-size: 13px; font-style: normal; font-variant: normal; font-weight: nor=
mal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -=
webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; w=
idows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-s=
troke-width: 0px; background-color: rgba(255, 255, 255, 0.917969); "><div>S=
incerely,</div><div>Verification Dept.</div></div>=0A<div><br></div><div></=
div></span></body></html>

Labels:


posted by ruffin at 4/25/2012 08:50:00 PM
0 comments

Comments on Why is estimating so hard? from Reddit can eventually lead you to a comment on another post titled, Engineering Management: Why are software development task estimations regularly off by a factor of 2-3?:

Let's take a hike on the coast from San Francisco to Los Angeles to visit our friends in Newport Beach. I'll whip out my map and draw our route down the coast...

The line is about 400 miles long; we can walk 4 miles per hour for 10 hours per day, so we'll be there in 10 days. We call our friends and book dinner for next Sunday night, when we will roll in triumphantly at 6 p.m. They can't wait!

...

Man, this is slow going! Sand, water, stairs, creeks, angry sea lions! We are walking at most 2 miles per hour, half as fast as we wanted. We can either start walking 20 hours per day, or we can push our friends out another week.  OK, let's split the difference: we'll walk 12 hours per day and push our friends out til the following weekend. We call them and delay dinner until the following Sunday. They are a little peeved but say OK, we'll see you then.

...

G-----n map doesn't show this s--t! We have to walk 3 miles inland, around some fenced-off, federally-protected land, get lost twice, then make it back to the coast around noon. Most of the day gone for one mile of progress. OK, we are *not* calling our friends to push back again. We walk until midnight to try to catch up and get back on schedule.

...


Okay, well, that's why you hire someone who has walked that route before to estimate it. The problem is, of course, that it's surprisingly rare to find programmers who have walked the exact route that your customers want. And if they have and it's available, that's usually called off the shelf software. As beager so eloquently puts it, when it comes to OTS software (commercial, OSS, whatever):

Ooh, the best part is, the wireframes have items that are SO PAINFULLY CLOSE to what plugins do, but are EVER SO SLIGHTLY different in a way that makes you have to roll your own.

That, my friends, is often, unfortunately, an entirely new path, if only because you haven't hired the authors of the plugins.

Perhaps more (less?) succinctly put:

Engineers attempt to scope work by estimating the time all known substeps will take to address. Any other kind of scoping seems unprofessional, since you are basically making things up. Yet everyone agrees that there will be a number of potentially large unforeseen issues (the unknown unknowns).

If all the steps were known and independent, estimation would work much closer to your intuition--some steps would be overestimated and others underestimated, and you would expect these mistakes to cancel each other out. This is the kind of estimation people are used to and good at. In reality many steps are sequential so one problem may cascade into others, and worse new work items continually arise which are added to the total.

posted by ruffin at 4/25/2012 09:27:00 AM
0 comments
Tuesday, April 24, 2012

Code's not exactly a house remodeling project. You don't have to take a hammer to your old bathroom before you can make the new one. You can keep both buildings around as long as you want, and if you find you forgot to put a kitchen in the replacement, you can always route your users, within reason, back to the kitchen that's sitting around in the old house.

The lesson? Never raze the old house until you're completely sure the new one is working. There's no great reason to destroy code that you're replacing. Cut off the calls to the code, but unless there's a really good reason, keep it around until you're done with your testing and roll out. You'll thank me later.

Labels:


posted by ruffin at 4/24/2012 03:59:00 PM
0 comments

Ext.Msg.confirm -- their example almost works.:
Ext.onReady(function(){
    Ext.Msg.confirm('Hey!', 'Is this ok?', function(btn, text){
        if (btn.toLowerCase() == 'yes'){
            alert('go ahead');
        } else {
            alert('abort');
        }
    });
});
Had to add .toLowerCase() and change Yes to yes, but otherwise a good note to self.

Labels: ,


posted by ruffin at 4/24/2012 10:32:00 AM
0 comments

My latest complaint.
When I edited the post in BlogThis, those br tags with the close slash weren't there. I like the old style Blogger html edit where you were editing HTML directly *EXCEPT* for line breaks, which were inserted for each EOL. So if I hit return, a br was inserted. That's been very hit & miss with the new interface. And if you do insert br tags automatically, which I prefer but didn't expect here, I shouldn't be able to see them later, should I? What happens now? Will more br tags be inserted when I save for each EOL? If not, why not? etc etc
I've got a number of blogs, and the spacing has been especially wonky in each of them as Blogger/Google keeps tinkering. This stinks. See how this paragraph is smushed up against the blockquote above? The preview said this wouldn't happen.
This stinks. Beta level stuff, at best. Embarrassing for something with the backing of Google. I could write a blogger editor this crappy.

Labels: ,


posted by ruffin at 4/24/2012 09:39:00 AM
0 comments

Useful question asked::

However, my workflow is slightly different. FIRST I want to create a local branch. And I will only push it upstream when I'm satisfied and want to share my branch.

Answer:

Instead of explicitly specifying the server name, you can just use origin, which means "the server I got the rest of this repo from": thus git push origin .

I think that's the quickest route to getting what was asked done. Seems to work so far.

I like git in theory. Still waiting for it to work intuitively.

Labels:


posted by ruffin at 4/24/2012 09:34:00 AM
0 comments
Monday, April 23, 2012

Bug 380252 – Mono.Data.SQLite crashes on call to SqliteDataAdapter.Fill(DataTable table) with simple SELECT:
It might be useful to fix the DataTable Load & Fill methods so that
sqlite3_column_origin_name() is avoided; the above email suggests:
----------------------------------
I see this issue was opened AGES AGO!!! My word guys lets fix/improve this
shall we? Save the developers of the world lots of heartache...

You think?  Man, what a pain.  Apparently all the binaries for SQLite on OS X, including the preinstalled one, bork on when you call the function sqlite3_column_origin_name.  Luckily that's only used for stuff like, well, loading freaking DataTables.  So I have to recompile SQLite to get it to work and, if I release an app using it into the wild on OS X, have to get schomes to update theirs too, which is insane.

What a pain.  This is why I thought I'd probably end up using C#-SQLite anyhow.  Then I can include a dll that's all in C# or even embed the db in the code of my project.  But what a pain when that's the easiest solution.

Labels: ,


posted by ruffin at 4/23/2012 11:27:00 PM
0 comments

Yes, I'm about two decades late at a minimum writing this up.Finally created a bat file to back up my projects:

Edit: Gosh, thanks for flattening all my pre tags, new BlogThis interface!
Edit2: Ooops.  Guess I wasn't backing up before 10am very often?  Great solution to one-digit times in bat files from StackOverflow (well, ServerFault), inserted below in bold.  Changes all spaces to zeroes, I believe.

SET mydate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
SET mydate=%mydate: =0% 
echo %mydate%

zip -r Z:\Documents\MyFiles%mydate%.zip C:\dir\to\Zip\up

Labels: , ,


posted by ruffin at 4/23/2012 05:30:00 PM
0 comments
Wednesday, April 18, 2012

More interviews with Steve Jobs are popping up, somewhat surprisingly. I mean, Jobs would become a guy that seemed pretty pressed for time, but this interviewer? From AppleInsider: "Many [of the tapes] I had never replayed--a couple hadn't even been transcribed before now," Schlender wrote. Sure, these were mostly during the NeXT & Pixar years, but don't you have a duty to your interviewee to at least replay the tapes?

Anyhow...

Here's my favorite quote block so far:

"In most businesses, the difference between average and good is at best 2 to 1, right? Like, if you go to New York and you get the best cab driver in the city, you might get there 30% faster than with an average taxicab driver. A 2 to 1 gain would be pretty big.

"The difference between the best worker on computer hard-ware and the average may be 2 to 1, if you're lucky. With automobiles, maybe 2 to 1. But in software, it's at least 25 to 1. The difference between the average programmer and a great one is at least that.

"The secret of my success is that we have gone to exceptional lengths to hire the best people in the world. And when you're in a field where the dynamic range is 25 to 1, boy, does it pay off."

This feels intuitively and experientially true, but why? Is it because great programmers have better ideas of how to get things done? Or is it that the code they write is more modular and easier to maintain and change over time? Or is it simply that good programmers can actually write things that work, even if the internals still break from perfect programming paradigms now and again?

What exactly makes a great programmer's marginal utility over an average schmoe so much greater than a great taxi driver's? I'm not asking so that we can teach it or can it so much as know when we're looking at it.

Basically, though, I think comes back to a phrase I saw Neal Stephenson's Zula think in REAMDE: "A's hire A's; B's hire C's." It doesn't take more than one bad programmer on a team to sink that magic multiplier, and bring 25 to 1 right back down to 1 to 1. Part of the magic Jobs saw might very well be the result of putting together a great team of great programmers, and that's where the gestalt really happens.

posted by ruffin at 4/18/2012 07:54:00 AM
0 comments
Tuesday, April 17, 2012

Type initializer circular dependencies - Jon Skeet: Coding Blog:

I have to say, part of me really doesn't like either the testing code or the workaround. Both smack of being clever, which is never a good thing.

I surfed around Jon Skeet's Stackoverflow profile and ran into his blog, which I've got to say is really good.  Especially enjoyed this recent comment on being clever.  I enjoy being clever when the result is easy to understand and rock-solid, even when there's perhaps a bit of clever recursion used (which tends to degrade both the "rock-solidness" and easy understanding, admittedly), but here he's bang on -- too many developers we've all worked with like to do things that work for a particular piece of code, but the scalability (or even ability to undergo plain ole change) of the solution is almost nil.  Code that's a cleverly constructed house of cards (Skeet uses "brittle") isn't good construction at all.

And if there's one thing I've learned, it's that programmers are 21st century construction workers.  (So too are actual construction workers, to be clear.  It's simply that there's a new sort of construction.)

In other news, Skeet accepted a very minor edit I made to one of his answers (re-inserting a link using archive.org to a site that'd disappeared, but was still obliquely mentioned, in his post).  Yes, that's a reputation score of 66 to his 428,000+.  Brush with greatness.  ;^D

I'll now stop talking about Skeet, but his coding knowledge is impressive.

posted by ruffin at 4/17/2012 08:57:00 AM
0 comments
Monday, April 16, 2012

It worked.

posted by ruffin at 4/16/2012 09:44:00 AM
0 comments

I stopped receiving emails, and this morning dug this up...

Office 2011-update focust op Outlook, Lion | One More Thing:
Rivanov op 13 april 2012

De update heeft er helaas voor gezorgd dat mijn connectie met m’n Kerio mailserver niet meer werkte. Wanneer ik een email verstuurde, kwam deze niet meer in Verzonden Items binnen Outlook, terwijl hij w�l netjes bij Sent Items staat in de webmail van Kerio. Ook nieuwe emails werden niet weergegeven.


Ik heb dus Office volledig verwijderd en draai nu 14.0.0 en het werkt weer naar behoren.

Koppelingen met Microsoft Exchange hebben tot op heden geen problemen. Maar wanneer je Kerio gebruikt zou ik de update dus niet installeren!

Which, as we all know (where "we" == "those with Chrome"), means...

The update has unfortunately ensured that my connection with my Kerio server no longer worked. When I sent an email, this was not in Sent Items in Outlook, even though it neatly Sent Items found in the Kerio webmail. Also new emails were not showing.
So I completely removed Office and turn now 14.0.0 and it works properly again.
Links to Microsoft Exchange, to date no problems. But when you use Kerio update so I would not install!

I'd really hoped the update would fix some of the things I hate about Outlook 2011, but nope, not only does it not receive emails, it still doesn't play nicely with plain text.  Seriously, who is writing this crap, and when can I join as an alpha tester?

Now to find the easiest way to downgrade Outlook.

posted by ruffin at 4/16/2012 09:10:00 AM
0 comments
Friday, April 13, 2012

Digital Web Magazine - Scope in JavaScript:
Scope is one of the foundational aspects of the JavaScript language, and probably the one I’ve struggled with the most when building complex programs. I can’t count the number of times I’ve lost track of what the this keyword refers to after passing control around from function to function, and I’ve often found myself contorting my code in all sorts of confusing ways, trying to retain some semblance of sanity in my understanding of which variables were accessible where...

What if we just call a normal, everyday function without any of this fancy object stuff? What does this mean in that scenario?

In this case, we weren’t provided a context by new, nor were we given a context in the form of an object to piggyback off of. Here, this defaults to reference the most global thing it can: for web pages, this is the window object.

OO Javascript is neat, but I agree completely; scope is a real pain.

This link brought to you, well, via me, but to me via a post on Stackoverflow by superstar Jon Skeet.  The man is good.

Labels:


posted by ruffin at 4/13/2012 02:46:00 PM
0 comments
Thursday, April 12, 2012

(This could be an endlessly continuing list. The app really is rough. How many folks can be working on this? It's shareware quality as a mail handler. Does lots of stuff, but as a mail handler, not too good.)

I really like plain text email. I like to send it and receive it. Outlook 2011's (Mac, natch) handling of plain text is horrendous. Very second class citizen.

I'm going to cheat and paste the feedback I just sent in to save time. I'll pretend one of the three guys they have on the mail client will listen. Hopefully so...

Three items:

1.) Need to have Outlook stop stripping out spaces when I paste. Two spaces in a row become one, and indented text, like code, is left justified after a paste. That's simply incorrect behavior.

2.) Need an option to stop wrapping text by default. I don't necessarily want a fixed width message when editing in plain-text format. Same issue described here.

3.) Need to have autocorrect stop inserting non-ASCII characters in plain text edit mode. For instance, an ASCII "..." becomes an ellipses single-character, which isn't expected behavior for "plain text".
In other news, if you add a file called userContent.css to ~/Library/Application Support/Camino/chrome and paste in the following, you get monospaced display of mail in Gmail online (in Camino, duh). Looks like it only does plain text emails in monospace, so that's a win.
div.ii.gt {
 font-family: monospace;
 font-size: 90%;
}

Labels:


posted by ruffin at 4/12/2012 09:43:00 AM
0 comments
Wednesday, April 11, 2012

If your ExtJS TabPanel doesn't have scrolling arrows (and you do have enableTabScroll set to true), it could be because your chosen layout isn't "a fitting layout'.

Jack Slocum says:
The issue with the code is a TableLayout is not a "fitting" layout. It provides no dimensions to underlying components. Your TabPanel has no width defined, and no layout that provides a width, and so it can't calculate the scroll sizes correctly.
 
Can't quite figure out what happened to Jack and ExtJS, but I sure appreciate his answers more than most of the other guys.  They're well-written and to the point, and only happen when he feels like actually answering a question.  That's a relative rarity on the ExtJS boards. That is, if he posts, it's going to tell you what you haven't learned yet, not tell you to read the fantastic manual or, more common in ExtJS land, the library's source code.

I slapped width:500 in mine, and *poof*, profit.

Lots of wacky stuff in TabPanel, at least back in 2.x. If you have an id with two underscores in a row, that's apparently going to bork their id parser (which figures out tab relationships), for instance, which I found out the hard way. The way layout managers break (as with the above) with my Java-born expectations is also a pain.

Labels:


posted by ruffin at 4/11/2012 01:26:00 PM
0 comments
Tuesday, April 10, 2012

d3.js:
D3 allows you to bind arbitrary data to a Document Object Model (DOM), and then apply data-driven transformations to the document. As a trivial example, you can use D3 to generate a basic HTML table from an array of numbers. Or, use the same data to create an interactive SVG bar chart with smooth transitions and interaction.

posted by ruffin at 4/10/2012 04:47:00 PM
0 comments
Friday, April 06, 2012

In case you'd missed it, like I had.

Sun Microsystems - Wikipedia, the free encyclopedia:
In February 2011 Sun's former Menlo Park, California campus of about 1,000,000 square feet (93,000 m2) was sold, and it was announced that it would become headquarters for Facebook.
If that isn't a sign of the times, I'm not sure what is.  Pretty cool looking campus too.

posted by ruffin at 4/06/2012 01:42:00 PM
0 comments
Wednesday, April 04, 2012

A pretty good, step by step guide is here.

Keys:
1.) Get information from your tnsnames.ora file.
2.) oracle12.jar can be found here, though you might want ojdbc14.jar, also on that page.

Here, we can find some important things. Match your tnsnames.ora file and note the following details like me:
Database-name : XE
Server / Host = lordamit-laptop
Port: 1521

Remember, these are case sensitive. close the tnsnames.ora file. Now, once again. get back to squirrel. From the left menu, select Aliases. Click on the plus button to add a new alias.

now, make the following configurations [in SQuirreL]:

Name: myHR (change it if you want)
Driver: Oracle Thin driver
URL: jdbc:oracle:thin:@lordamit-laptop:1521:XE (replace it with the info you got from tnsnames.ora)
Username: HR
password: iit123
now, press ok. It will be saved. You can now press Connect to connect to your oracle

Labels:


posted by ruffin at 4/04/2012 09:28:00 AM
0 comments
Sunday, April 01, 2012

For some reason, I had a hard time tracking down MailPriority using OpenPop.NET. It's not part of the OpenPop package, and is, instead, part of System.Net.Mail.

using System;
namespace System.Net.Mail
{
public enum MailPriority
{
Normal,
Low,
High
}
}


/sigh

It's a little incestuously scoped, as if System.Net.Mail were to strangely disappear or move, you're toast in OpenPop, but that's more my neurosis than a huge failing for OpenPop. But even a trivial mapping (which, yes, I can do myself) would remove the need to use using System.Net.Mail everywhere I want to use MailPriority.

Labels: , ,


posted by ruffin at 4/01/2012 12:44:00 PM
0 comments

Support freedom
All posts can be accessed here:


Just the last year o' posts:

URLs I want to remember:
* Atari 2600 programming on your Mac
* joel on software (tip pt)
* Professional links: resume, github, paltry StackOverflow * Regular Expression Introduction (copy)
* The hex editor whose name I forget
* JSONLint to pretty-ify JSON
* Using CommonDialog in VB 6 * Free zip utils
* git repo mapped drive setup * Regex Tester
* Read the bits about the zone * Find column in sql server db by name
* Giant ASCII Textifier in Stick Figures (in Ivrit) * Quick intro to Javascript
* Don't [over-]sweat "micro-optimization" * Parsing str's in VB6
* .ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture); (src) * Break on a Lenovo T430: Fn+Alt+B
email if ya gotta, RSS if ya wanna RSS, (?_?), ¢, & ? if you're keypadless


Powered by Blogger etree.org Curmudgeon Gamer badge
The postings on this site are [usually] my own and do not necessarily reflect the views of any employer, past or present, or other entity.