Summary: If your DELL laptop suddenly won't boot to Windows and your IT department says your files are unrecoverable - the files probably are in fact recoverable using this tool - R-Studio Emergency .
I've recently had two associates whose DELL laptop harddrives have stopped booting to Windows. In both cases the IT department said the files were unrecoverable. However I found a tool which did indeed recover all their files in both cases.
The tools is R-Studio Emergency downloadable here.
Their setup is very clever. You can download their demo-recovery-tool for free which shows you all the files the tool can recover - file names, sizes, location, etc. However you must pay ~$75 to unlock the tool which will allow you to actually get the files off the ailing hard drive.
You install their tool to a USB thumb drive and can then startup your computer from the thumb drive itself. Doing this skips the operating system (most likely M$ Windows in this case) and boots the computer directly to their tool which has an easy to navigate GUI letting you go through the directories and files easily marking the ones you want to recover.
Once you have unlocked the tool and selected the files you can copy them back to the USB key and from there onto another computer. There are various other networking options but in most cases that will probably not be the easiest route.
For the files I recovered it what I didn't realize right away was that they were encrypted - thus I had to hand the files over to the IT department for decryption rather than handing a bag of happiness directly to my associates.
So it turns out sitting all day is REALLY bad for everyone - not just bad as in you might not be able to fit into last summer's shorts but bad as in you're probably moving up your expiration date.
Or to put it more bluntly: MSNBC - You sitting down? Experts say it’ll kill you
- 6 Ways Your Office Is Literally Killing You - it's #1
- Is Your Office Chair Killing You?
- Stand Up While You Read This!
So what's the answer? It would seem to do less sitting, maybe a lot less.

It's even possible in a few years the way classrooms look could be very different:
More options:
- http://www.standupforlearning.com/
- http://www.anthro.com
- http://www.anthro.com/
- http://www.workriteergo.com/
- http://www.tablelegworld.com/
or even DIY!
We're trying an experiment of zero TV for the summer in the hopes that Aidan (our 6 year old) will get more into reading. I'm also paying him off shamelessly to the tune of $0.05 per book he reads.
It's working out much better than any plan I've hatched to date. There were not even two minutes of combined complaining about summer tv deprivation. This after I braced for at least two weeks of protests.
I'm also incentivizing his little brother Dylan (3 years old) to coax Aidan into reading him books. I'm paying off Dylan on the side (1 cent) for every book he talks Aidan into reading.
It's been surprisingly successful virtuous cycle fueled by micro-bribes.
"This is too important to miss out on. This is possibly the biggest advance in software development technology in the ten years I've been writing articles here." - Joel Spolsky
Every so often a software developer comes across a new tool that positively changes the fundamental way they work. This experience is invigorating and refreshing. For myself this seems to happen about once every two or three years it seems if I'm lucky.
Just recently this has thankfully happened in the form of ?Git. There are loads of great articles on Git - why to use it, tutorials, etc. So instead of repeating those I'll just link to a small subset of the very best ones I would tell 'pre-Git-Brendan' to get started with.
My favorite Git articles and sites:
- Distributed Version Control is here to stay, baby - Joel Spolsky
- Why Git is Better than X
- Learn Git . GitHub - best Git tutorials I've found
- SmartGit Gui Git client
Why I love Git
It's soooo easy to create your repository: git init
As an independent contractor type I'm often working with multiple clients on multiple projects. The problem for me is that I'll sometimes work for a few weeks on a particular project but then switch off it for weeks, months or even years but then need to jump back in. For some of these projects I have Subversion repository created, but honestly it's can be a pain to get one started - find an appropriate server, check in your code trying to tip toe around compiled things your shouldn't be checking in, checkout another copy, switch your new 'subversioned copy' around, etc. The worst part is though even when you go to this trouble you often find that if you leave the project and come back some months later the repository has changed locations or your credentials were removed or EVEN history was lost. This seems like it should be rare but happens all-the-time even with the best intentioned of hosts.
Not to complain about Subversion too much because until recently it was the best option. I only mention it because it's important to understand what makes git so easy.
With Git you switch to your project dir, type 'git init' - your repository is created! A couple more commands to check everything in. $ git init
$ git add .$ git commit -m 'initial commit'It just doesn't get any easier. And since I will have everything (commits, history, etc.) local I know that no amount of other people screwing around upstream will ever cause me to lose this work.
It's super fast
Everything you do is nearly instantaneous. You can just take my word for it or do some more reading.
It's distributed so no cloud required!
The lack of a server being available or even an Internet connection will never again prevent you from researching your code bases history or making meaningful detailed commits.
Git is extremely flexible
You can literally do just about anything imaginable with Git in terms of version control. Detailing the exotic options before you is beyond my scope or really understanding here. I just stick to my own workflows for the most part. But one quick example is that if you accidentally push or check in a plain text password file for instance (something you clearly don't want to do) you can actually erase that from the history. Powerful - yes. Dangerous - possibly, but really it's like any other tool - to be used for good or evil. And Git does try to prevent you from doing things that you probably don't want to usually be doing.
By the way trying to 'uncommit' a file with secret stuff in Subversion is a bit of a nightmare. Someone who has had to do this in Subversion might use Git for this reason alone.
Git and DVCS in general has huge momentum
DVCS is what's happening in 2010. For a lot of people it was happening earlier certainly. I'm perhaps a little late to this party even. But I think it's safe to say any developer who makes an effort to upgrade their skill sets has picked up DVCS or will be doing so very soon.
The most compelling article I've read on the momentum side is Distributed Version Control is here to stay, baby by Joel Spolsky. His article discusses the other DVCS option Mercurial but everything he says is true of both.
Why I seriously love Git
Committing with reckless abandon!
Since I usually have to do so much context switching I like to commit a lot. With Git this is so fast and easy without screwing anyone else up that I find myself doing it more....A LOT MORE. In fact I'm starting to use the comment in Git as a way to report in detail everything I've done so I can find my way back later. With Subversion and other systems you just don't commit nearly as often and by the time you do it's pretty easy to forget a lot of the details about what you've done.
One spin on this is just how easy tagging is....as easy as it could possibly be. With Subversion tagging is actually pretty heavy weight, slow and eats up a lot of disk space. I've never been clear on why people take that approach in Subversion but there it is.
I've already gotten loads of mileage out of doing this, not to mention it just feels good. With a DVCS you can optionally wrap up each minor feature or fix with a commit. You needn't worry about the ramifications that commit will have on the larger team.
If you prefer to pair down the comments in your public commits this is an option - so you don't have to be concerned about the local log you're creating.
Sill have to publish your changes to Subversion or Perforce? No problem!
Git has excellent Subversion integration so it's easy to use Subversion as your public repository. Just as good is that when you clone a Subversion repository to Git you get all the history local! Additionally Git has integration with some other version control systems such as Perforce.
Suddenly all my projects are under version control
No project no matter how small ever needs to be without version control. There are projects I've been coming back to for 10 years where I haven't always adequately documented my most recent changes and the re-discovery process is needlessly time consuming. Git puts an end to this.
SmartGit
SmartGit is a solid, easy to us GUI which has gone a long way towards making Git accessible to me. You still need to really understand Git to use it effectively. I started out trying to use SmartGit as a crutch which was a FAIL. But once I spent enough time learning Git concepts I found SmartGit a great way to get a quick handle on a lot of basic operations. SmartGit seems to currently target and handle the commands I use 90% of the time, but I find myself definitely needing to revert to the command line in several instances. This is actually with me because I'd still prefer to ultimately have a solid grasp of the command line too.
SmartGit is probably also a faster way to help educated teams of developers on the basic concepts. But again without understanding the Git specific concepts like the "index" I guarantee you'll quickly get lost.
So give Git a try. Once you've gotten the hang of it you'll feel like you're finally in control of your version control system and not the other way around.
The iPad came out a couple of weeks ago. Instead of repeating how great it is along with reviewing it's current shortcomings I'm just going to talk about how it successfully fulfills exactly the use case I was hoping it might.
If you're in any kind of tech these days (software development, engineering, biotech) or any rapidly evolving field it's gotten to the point where most likely almost anything you pick up in print supposedly on the cutting edge is already quite dated by the time it makes it to print - especially true of books (unfortunately). This has been the case for about five to seven years but more relevant is the fact that this trend is only accelerating. In fact it's becoming much harder to even find a decent book dedicated to topic you'd like to kick back with in a coffee shop for a couple of hours. You can still find several at Amazon and O'Reilly, but they are drying up at your local bookstores.
The iPad finally solves this in a way no other device does.
The perfect trifecta for tech reading are the iPad apps: Read It Later , News Rack and Safari.
Read It Later is actually the best of these. As you're going about your day and see any article on the web you want to read in more depth but not while chained to your desk/chair and not while you should be working just click on the integrated "Read It Later" link or icon in your browser of choice and it's instantly added to your reading queue. When you flip on your iPad not only does your reading list instantly appear but the app will optionally download all the content for reading even if you're offline (which many iPad users will be a lot of the time). It's simple and fantastic. Truly this is reading evolved.
News Rack is an excellent RSS reader well designed for the iPad. You can swipe through a large number of articles quickly. It integrates/syncs perfectly with Google Reader. Additionally it has "Read It Later" integration allowing you to seamlessly add articles you see in RSS directly to your 'reading list' for later if you don't want to pause for a particularly long article while scanning a few dozen blogs and articles.
Safari a pretty great mobile browser reading articles. And with this too you can mark articles for your "Read It Later" list. It does have a lot of shortcomings: lack of a good book mark manager, no tabs, and I won't even mention the F____ word.
The iPad allows you to clearly separate out your 'focused reading' time from 'should be working' time. I don't think the value of this can be overstated. You can still read stuff only found on the web (which is pretty much everything when it comes to tech reading) but without getting IM'ed, Tweeted or emailed someone just tagged your prom photos, etc.
Using the iPad this way is actually making me more productive as I spend a lot less time surfing while I should be working. I still spend a bit, but for the most part I just mark with RIL the articles of interest and now I know I actually will get to them. And that is a first.
I've never had much occasion to deal with Oracle directly beyond hooking software up to it. But these last couple weeks I've had to do a bit of work with it. And I am COMPLETELY shocked at the basic features it lacks. Here are two examples.
Example (1): Backup and restore
using MySQL:
backup: mysqldump --opt mydatabase > sql.dump restore: mysql --user=XXXXXXXX --password=XXXXXXXX mydatabase < sql.dump
using Oracle:
There is no such feature!!! Are you kidding me?
It appears you have to write something custom to achieve a subset of the above functionality.
Example (2): Search and replace some text in a CLOB object.
Here is the MySQL answer:
update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
Here is the Oracle answer - you have to create a custom function, good luck debugging this if you have an issue:
CREATE OR REPLACE FUNCTION dfn_clobReplace
( p_clob IN CLOB,
p_what IN VARCHAR2,
p_with IN VARCHAR2 ) RETURN CLOB IS
c_whatLen CONSTANT PLS_INTEGER := LENGTH(p_what);
c_withLen CONSTANT PLS_INTEGER := LENGTH(p_with);
l_return CLOB;
l_segment CLOB;
l_pos PLS_INTEGER := 1-c_withLen;
l_offset PLS_INTEGER := 1;
BEGIN
IF p_what IS NOT NULL THEN
WHILE l_offset < DBMS_LOB.GETLENGTH(p_clob) LOOP
l_segment := DBMS_LOB.SUBSTR(p_clob,32767,l_offset);
LOOP
l_pos := DBMS_LOB.INSTR(l_segment,p_what,l_pos+c_withLen);
EXIT WHEN (NVL(l_pos,0) = 0) OR (l_pos = 32767-c_withLen);
l_segment := TO_CLOB( DBMS_LOB.SUBSTR(l_segment,l_pos-1)
||p_with
||DBMS_LOB.SUBSTR(l_segment,32767-c_whatLen-l_pos-c_whatLen+1,l_pos+c_whatLen));
END LOOP;
l_return := l_return||l_segment;
l_offset := l_offset + 32767 - c_whatLen;
END LOOP;
END IF;
RETURN(l_return);
END;
/
Oracle installation on Mac OS
Quite simply - FAIL. Even after I installed the compiler and other Unix tools the 'installer' requires. It was like amateur hour when they created the OS X Oracle installer. Not just because it fails completely or that UI could be from 1990, but because of the ridiculous dependencies.
Conclusions:
Perhaps I'm missing some great Oracle options. Perhaps the full time Oracle DBA I work with is missing those options. Perhaps Google is also missing those options.
What it all seems to add up to is that there might be good reasons to use Oracle - speed, stability, incremental backup features, advanced transactions, etc. I don't really know since it's hard to find where Oracle has clear advantages over modern MySQL and Postgres. But in some painfully obvious ways Oracle seems to be an inferior product to MySQL or Postgres....even if MySQL were to cost as much as Oracle (which clearly it does not and that's TCO). Another great example of a much more expensive solution that has perceived advantages while it is actually (from a certain perspective) an inferior product.
I know that Oracle is a backbone of corporate America, but then so is IE 6 and right now I see them in about the same light and used for about the same reasons (admittedly Oracle crashes a lot less).
When I was looking through the Tomcat 6 logs I noticed this.
"catalina.2009-04-16.log:INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: "
After a bit of Googling came across this:
"Apache Portable Runtime to provide superior scalability, performance" for Tomcat 6.
There are comments that when using the APR Tomcat will server static content on par with Apache (httpd) server speeds - though I haven't been able to personally verify this just yet.
So that is extremely compelling. I'm still searching for some statistics on how much good the APR does and may try to create my own.
Here are some instructions on building / installing the APR:
http://apr.apache.org/
(I actually used this page which was a bit easier to follow: http://www.mbaworld.com/docs/apr.html)
Basically the steps which got it working for me were:
- download the APR source zip
- build the source as per the instructions listed on the page above - if you have the privleges this installs the package to /usr/local/apr
- Follow the steps here using
After getting the APR to build/install as mentioned above this was the line the worked for me.
./configure --with-apr=/usr/local/apr --with-java-home=$JAVA_HOME && make && make install - the final trick to get it working for me was to copy the libs from /usr/local/apr/lib to one of the directories listed in the 'java.library.path' above - which will be different for each machine but Tomcat thankfully tells you where it's looking.
That's more of a high level list rather than individual steps, but those can be found
You can tell it's installed when you see this line in your log files - most likely in logs/catalina.out
Loaded APR based Apache Tomcat Native library 1.1.14
In this case the environment is:
JDK 1.6
Tomcat 6.0.18
Confluence 2.10.3
Mac OS 10.5 and a Linux Cent OS server (the notes above would vary a bit for Windows)
If you're an Atlassian customer using JIRA, Confluence or one of their other great products be sure to consider attending Atlassian Summit.
After attending their 'Atlas Camp' developer conference last November in 2008 the small investment of time and traveling expense was easily justified. I immediately reaped a number of rewards through new relationships, networking and being able to ask very targeted technical questions of not only the expert developers but also of whom I consider to be some of the top developers in the world.
Here's a quick video I made showing just how fast it is to compile / build / deploy your Confluence plugin. It's hard to win converts.
Here are the real goods
Imagine for a moment that you're developing a Confluence plugin. Usually each change to your code requires at a minimum that you:
- uninstall the plugin
- run a maven build (which also reinstalls the plugin)
- if you're using a debugger probably struggle a bit to keep the instruction pointer on track
This is already an extremely efficient process for server development by any measure, but still takes a few manual steps and likely at least 20 to 30 seconds. That's not long, but after a few iterations is just enough time to where you might decide to glance at Digg, the BBC or see if the Chevy Volt is still on schedule and get distracted.
Now imagine there is virtually nothing to do and no delay for your Java changes to be picked up - approximately 1 second.
This is JavaRebel.
There is thorough information on the JavaRebel site in terms of the advantages and benefits it affords so I'll just briefly mention my personal experience.
The one thing I've always liked least about server side development are the delays to compile, redeploy and sometimes even minutes to restart a server. What JavaRebel has accomplished is really a Holy Grail of sorts in my mind.
I tried using JavaRebel for plugin devel upon its release in 2007. However at the time I could not get it to work with Confluence's plugin class loader. Last week I decided to give it another go and with help from their very responsive support and leveraging a new 'JavaRebel plugin framework' we now have it working with the Confluence plugin devel cycle.
Here is a demo video I made showing it used with a Confluence plugin ![]()
Here are the JavaRebel installation instructions specific to Confluence.
There are more polished videos of JavaRebel in use here.
One last question might be, "Is it worth the price?" (currently $49 or $149 or ....) I believe JavaRebel easily pays for itself in a couple hours of active coding in increased productivity not to mention a sense of empowerment and accomplishment when you start to fly through tasks in minutes that used to take hours. Personally I think Java development just got a lot more fun. ![]()
One last thing. I've not yet tried it with JIRA plugin development but the benefits will be even much more vast as JIRA does not as of yet support dynamic loading for plugins. Actually because of JavaRebel I plan to become much more active in JIRA development.
I got out of my Verizon account without paying the ~$175 early termination fee.
this was the link that helped me
It's pretty funny convincing someone that $0.15/month is a 'materially adverse affect', but one man's $0.15 cents is another man's treasure.
The Verizon supervisor said "we'll credit you the $0.15 cents that we raised the administrative fee."
I said, "thanks but no thanks, I'm going to go ahead and take advantage of Verizon's offer in the agreement."
"but it's only $0.15 cents"
I said, "Hey man it may only be $0.15 cents to you, but it's materially adverse to me. That's great if you're rolling in cash but I've gotta fill up my mini-van and if you haven't noticed gas prices aren't going down."
I might feel a tinge of guilt if their service in my area weren't so bad and drops calls all the time in Los Angeles no less.
At last no longer an iPhone 'have not' and the 3G in three weeks no less.
Groovy!
The dynamic scripting language for Java I've been meaning to learn and start using. I'm a bit embarrassed its taken me this long, but now that I have I'm a bit floored at how productive it is starting to make me.
One thing essential for me personally to use any programming construct with confidence is to be able to hook it into a debugger. I know of people who love their println statements, but having to sprinkle those into an app to understand what's happening is seems silly at best....incredibly inefficient, time consuming, mind numbing at worst.
Here are a couple quick videos of what I discovered. While experimenting with mixing in some Groovy to an existing Java application, debugging it, and then changing things around it all just worked. Without needing to stop the JVM or recompile-hotswap the debugger still picked up everything. The JVM and debugger even picked up signature changes like new methods and method params. Such somersaults usually makes the JVM hotswap laugh at you like you're a penguin trying to fly.
here are two quick amateur videos showing this:
the winner is my MacBook Pro!
It wasn't cheap but the MacBook Pro is a bargain at 10x the price.
This computer + OS X Tiger is just so good I'm constantly in awe of it even after having it for six months. The thought of ever having to go back to a Windows environment for anything more than a couple of apps (like Quicken/Quickbooks) or 2 via VMWare Fusion makes me break out in a cold sweat. I'd sooner be lashed (lightly).
Everyone I know who already used a Mac has said, "You have a keen grasp of the obvious."
I finally made the leap because of Apple's switch to the Intel chip and the availability of solid virtualization software like VMWare's Fusion. The few apps I do have to run in a Windows environment work like a dream. I guess they tried all this in the mid-90s (running Windows on a mac), but finally everything has come together for real.
Here is a short list of my can't live without OS X apps in no particular order:
Skitch
PathFinder - Finder got a lot better with Leopard but PathFinder is much more powerful.
QuickSilver
VMWare Fusion
Freemind
Cyberduck
Adium
IntelliJ IDEA
ITerm
Thunderbird
Firefox
possibly ScreenFlow or Jing (if you could save useful files).
I could go on, but my procrastination break time is over.
Finally TechSmith is developing for the Mac. Their main product Camtasia is the best screencast software / editing package IMO in the range of a couple of hundred dollars. But of course it's only on Windows at the moment.
Their new Jing Project is very exciting and quite good, but not great. The one place it falls short is that it only saves files in SWF (Flash) format. That's fine for playing, but you can't do anything else with them. For instance if you want to edit a recording as in snip a few seconds here and voice over a few seconds there you're completely up the creek.
SnapZ Pro would be OK if it would just let you pause a recording. Short of that I find it generally not very useful verging on useless.
The best hope for screencasting on the Mac for which there are currently no good options South of Final Cut Pro ($$$$) is still when Camtasia is release on the Mac.
This is a rather targeted post which will mainly be of interest to independent contractors using QuickBooks. And probably only people who have no accounting background like myself and are stymied when they discover QuickBooks is rather primitive. QB is surprisingly incapable of doing some very basic things without being prodded along.
The issue is the duplicate deposits that show up when you 1) invoice customers and then click on 'receive payments' you have recorded income in the 'undeposited funds' account 2) when you download your bank records another deposit shows up. So you then have two records for that 'income'. This of course screws up your summary Profit & Loss statement. What to do? It should be simple. It is harder than it should be, but easy enough once you figure out how to treat QB like the primitive program it is (at least primitive in this area).
I worked out these answers after reading a few dozen posts on the QuickBooks Online Community.
Here is what I do:
1) create invoices for every bill I send
2) when the customer pays click on 'receive payment'. This puts it into the 'undeposited funds' account (semi-secret account).
3) When I download my bank statement from Bank of America I associate those deposits with an income account (the field on the second row and third column of the bank record in the register)..
4) I then click on those deposits in the bank account records, click on 'edit transaction', and then click on the 'payments' button (with the green dollar icon) at the top ......this lets you bring into this record money from the undeposited funds account. Check off the right records from the right customers and click 'OK'.
Now the details for that record will show two deposits in the same amount - one is from your bank account download and one from your 'undeposited funds acct'.
5) Now change the amount of the original record to 0.00. You are doing this so you don't have double the income in QB.
6) In the memo field I write m.d.e. - matched deposit entry followed by the number # for that paid invoice or invoices. That makes it trivial to go back later and figure out what came from where if you need to.
Done! Rinse and repeat for each customer payment showing up in your bank's register.
It also helps to understand the definition of 'undeposited funds'. Basically that account represents the paid invoices which your company has received but you've not yet deposited in the bank - hence 'undeposited'. Money flows through accounts in QuickBooks, but when you do automated downloads the same money shows up in two places. This might seem obvious to anyone with some accounting knowledge but I found it extremely confusing. I was probably equally confused because I develop software and I simply could not bring myself to believe that QuickBooks was so primitive that I had to manually edit payments.
In theory you might be able to use the QB 'matching' right when you pull the bank records in and that match window pops up, but this is unreliable because the amounts might not be perfect and if you haven't already created an invoice and clicked 'receive payment' when you download the bank records you cannot go back and do this.
QuickBooks has some nice features, but it's rather primitive in some ways as well. For instance when using the above method it only shows lump sums for undeposited funds from a particular client, you cannot split those across bank records. In these cases I just pull the lump sum into the bank records and go zero out the other downloaded bank deposit records while adding a comment to the memo field of the matching invoice numbers and former amount.
I hope this saves someone the time it took me to figure out. If you know a better method please let me know.


