Last week, I was frustrated with Oracle SQL Developer (on Mac OS X) for two reasons:
- When a connection times out (after being left idle too long), the application hangs and I have to Force Quit and restart it.
- Every 90 days, the passwords for our databases change, so an updated connection XML file is put into source control (passwords are encrypted, and we aren’t allowed to know the passwords) and we have to import the new connections. You can’t delete multiple connections at a time from the SQL Developer interface, and importing over an existing connection pops up a Yes/No dialog box asking you if you want to overwrite the existing connection. Since the file contains about 30 connections, this means clicking Yes to the same dialog box 30 times.
I decided to vent, and tweeted this:
I wish more software developers used the software they create on a regular basis, so they’d fix the annoyances. *ahem Oracle SQL Developer*
— Rob Warner (@hoop33) March 21, 2014
The first part of the tweet contains sage advice: developers should indeed use their own software regularly, and that will encourage them to build better software. Then, however, I took a snarky swipe at the developers who work on Oracle SQL Developer. Oracle is a soulless corporation after all, right? And it’s not as if real people work on that software, right? My tweet is in no way offensive, right?
Then I got this tweet:
@hoop33 our team uses it on a daily basis, I live in it. What annoyances can I help you with?
— Jeff Smith (@thatjeffsmith) March 23, 2014
Wow. Not so soulless after all: a real person who not only cares enough to respond to my tweet, but also chooses to ignore my snark and answer with an attitude of helpfulness and class. Properly chagrined, I explained the two issues I was having, and he asked which version of Oracle SQL Developer I was using. Um . . . it turns out that the version I have is pretty old, so he encouraged me to upgrade, and even told me the latest version that would work on my (work) Snow Leopard machine. I downloaded it, connected to a database, and then let it sit for hours. Then I ran another query. In the past, this would cause SQL Developer to hang, and I’d have to Force Quit it. With this new version, however, it automatically reconnected to the database and ran the query. Success!
Let’s look at what I did wrong:
- When I had a problem, I just felt victimized and did nothing about it. For years.
- I never bothered to look for any updates to this piece of software.
- When I got frustrated enough, I took a public swipe at the developers.
I’m a developer. I should know better. I ship buggy code. I release updates all the time that fix bugs and add new features. I don’t enjoy criticism, especially snarky criticism, and especially about something I’ve already fixed!
So, Jeff, I apologize, and I thank you for your help. And for the unspoken reminder to stay classy. I’m still hoping for a smoother, less-interactive import of updated connections, but this time I’ll ask nicely.
And, since Jeff deserves the last word on this far more than I, here’s his response when I told him the new version corrected the application’s hanging:
@hoop33 we spent a lot of time between 3.1 and 3.2 on connection stability/robustness – and handling timeouts properly.
— Jeff Smith (@thatjeffsmith) March 24, 2014
I just bought a new MacBook Pro to replace my mid-2010 MBP. This is my first retina laptop, and it’s beautiful. I’d been waffling for awhile, but I’m glad I took the plunge.
- Go to the App Store and install all updates
- Set the hostname (System Preferences > Sharing > Computer Name) to “Truth” — homage to Paul Pierce
- Install Chrome Dev Channel
- Install Xcode from App Store
- Install Dropbox and let it sync
- Set up links to config files:
- ~/.bashrc -> ~/Dropbox/config/.bashrc
- ~/.bashrc.local -> ~/Dropbox/config/.bashrc.local
- ~/.vim -> ~/Dropbox/config/.vim
- ~/.vimrc -> ~/Dropbox/config/.vimrc
- ~/.vimrc.local -> ~/Dropbox/config/.vimrc.local
- ~/.vimbundles -> ~/Dropbox/config/.vimbundles
- ~/.gitconfig -> ~/Dropbox/config/.gitconfig
- ~/bin -> ~/Dropbox/config/bin
- ~/.atom -> ~/Dropbox/config/.atom
- ~/.lighttable -> ~/Dropbox/config/.lighttable
- ~/Library/Application Support/Sublime Text 3/Installed Packages -> ~/Dropbox/config/st3/Installed Packages
- ~/Library/Application Support/Sublime Text 3/Packages -> ~/Dropbox/config/st3/Packages
- ~/Library/Application Support/Brackets -> ~/Dropbox/config/Brackets
- From command line: echo ‘. “$HOME/.bashrc”‘ > ~/.bash_profile
- From command line: defaults write -g ApplePressAndHoldEnabled -bool false
- Change Caps Lock to Control
- Set Key Repeat Rate to Fast (slider all the way to right) and Delay Until Repeat to Short (slider all the way to right)
- Turn on display of ~/Library (open home in Finder, Cmd+J, check Show Library Folder)
- Install Homebrew and packages:
- macvim (editor)
- git (source control)
- hub (source control for working with Github)
- leiningen (Clojure project manager)
- wry (App.net command-line client)
- mongodb (NoSQL database)
- tig (text-mode git interface)
- mysql (RDBMS)
- tmux (terminal multiplexer)
- elixir (Erlang-based language)
- ctags (tag generator)
- markdown (markup language)
- Install Homebrew Cask (thanks, @pittman!) and apps:
- tower (source control)
- evernote (note taker/junk drawer)
- appcode (Objective-C IDE)
- rubymine (Ruby/Rails IDE)
- marked (markdown viewer)
- path-finder (finder alternative)
- iterm2 (terminal alternative)
- kaleidoscope (diff viewer)
- codekit (less/sass/coffeescript autocompiler)
- fluid (make apps from websites)
- firefox (web browser)
- brackets (editor geared toward Web development)
- kiwi (App.net client)
- copy (cloud storage)
- hazel (automation utility)
- bbedit (editor that can edit plist files)
- calibre (ebook reader)
- balsamiq-mockups (interface mockup application)
- sizeup (window manager)
- alfred (launcher)
- lighttable (Clojure IDE)
- Install others:
- Java 7 & 8 (language)
- Ubuntu Mono font (my current favorite programming font)
- rvm (Ruby version manager) and latest ruby
- safe (password management utility — gem install safe)
- Atom (editor)
- Sublime Text 3 (editor)
- Eclipse (Java IDE)
- viPlugin (Eclipse vi plugin)
- Macaw (Web development tool)
- Photoshop (graphics editor)
- MS Office (productivity suite)
- Google Drive (cloud storage)
- Box Sync (cloud storage)
- Snapz Pro X (screenshots)
- Install App Store apps:
- Caffeine (prevent mac from sleeping)
- Archy (Google Docs management)
- Oyster (regex IDE)
- Paprika (recipe manager)
- Dash (documentation viewer)
- Unclutter (scratchpad/clipboard viewer)
- Glui (screenshots)
- Skitch (screenshots)
- Pixelmator (graphics editor)
- Sketch (vector graphics editor)
- CodeRunner (run code)
- Patterns (regex editor)
- Twitterrific (Twitter client)
- Requester (HTTP client)
- Todo (task manager)
- MarsEdit (blog editor)
- Base (SQLite client)
- OneDrive (cloud storage)
- OneNote (note manager)
- xScope (screen measurement utility)
Whew! That’s a lot of stuff, but I installed only the stuff I use (well, except for OneNote—I’m going to give that a whirl). That’s an awful lot of text editors, I know, but I hate to miss out. I left a lot of stuff out, too. Let’s see how long I go before I install something else!
EDIT: OK, so the nested lists look terrible, so I changed the nested ones to ordered. I also added xScope, which I had already installed but somehow missed on the list. I also noted that I had changed Caps Lock to Control and changed Key Repeat Rate and Delay Until Repeat.
Steps to Lock Up Linux Using Sublime Text 3:
- Log in to your Mac OS X machine.
- Install VirtualBox.
- Install a Linux virtual machine.
- Boot that Linux virtual machine.
- Install Sublime Text 3 on that Linux virtual machine.
- Launch Sublime Text 3 and open some files for editing.
- Hit Cmd+P to Goto Anything….
There you go. As we say in The Deep South, you’re locked up tighter’n a tick. You can click around, mash keys, yell, and curse, even for a long time, and you’re completely stuck.
Steps to Unlock Linux After Sublime Text 3 Has Locked It Up:
- Hit Cmd+P to uncheck the Machine > Pause (Host+P) menu item.
- Hit Ctrl+P to Goto Anything….
Don’t ask me how I know this; maybe I read it somewhere.
A $5 app isn’t expensive: Customers need to help fix the App Store economy | Macworld: “You don’t buy a Kindle just to enjoy the dictionary and manual that come pre-installed on the device. You shouldn’t buy an iPhone to enjoy only free apps, either. You’re cheating yourself, all because we’ve become conditioned to feeling that $5 is a lot to spend on an app. It’s okay to pay for good products.”
That’s the best line in a great article.
I’m astonished at how little people value software these days. “Didn’t have feature X! Complete waste of a dollar!” Yet they waste dollars willy-nilly by leaving lights on when they walk out of rooms. Great software can only be produced by great skill and great effort. Use great software, pay for it, and you’ll be happier.
I’ve released a command-line App.net client for Mac OS X: Wry. Its home page is http://grailbox.com/wry. It’s released under the MIT License, and is hosted on github at https://github.com/hoop33/wry. Check it out, and let me know what you think!
I have a Dropbox Pro account with 107.5GB of storage, an iCloud account with 15GB of storage, and free accounts with Box (50GB), SpiderOak (2GB), GDrive (5GB), SkyDrive (7GB), ASUS WebStorage (8.5GB), Cubby (5GB), and UbuntuOne (5GB). I have plenty of cloud storage space. What I don’t have is a good way to manage that space.
Each of those cloud storage options operates as an island. Most create a directory in my home folder that its daemon syncs to the cloud. I can set preferences on my various devices for what gets synced inside that folder, but that folder is its own beast. If I want to save something to the cloud, I have to decide which cloud service to sync to and either save to that directory or otherwise upload to that service.
I got to thinking: what about an app that virtualized all that storage into a single virtual drive? This app would take care of managing which service to save files to, depending on file sizes and free space, and could even replicate files across services for my peace of mind. Sounds fun to build and definitely useful.
As I thought about it, though, I realized this app would have two issues:
- It doesn’t seem very sporting. These cloud services need paid customers to stay afloat. My proposed app could entice people to never pay for any cloud services, mooch the free services, and let the app take care of never running out of space.
- The primary target audience would be the people mentioned in objection #1, and they’re cheapskates. Not only wouldn’t they pay for cloud storage, they also wouldn’t pay me for the app, either.
TL;DR — Turn off Path Finder desktop to use GeekTool.
I’ve been meaning to install GeekTool on my new Mac that I bought, um, over two years ago. Time flies. Anyway, I installed it from the App Store, ran it, and tried to drag an icon to my desktop as the instructions say. I kept experiencing these symptoms:
When opening GeekTool, I am welcomed to a blank Properties box with just “Geeklet Settings”. Many tutorials have told me to drag either “file” “Images or “Shel” onto the desktop. I do this and nothing happens. The little black box that appears when you click and drag bounces back up to the GeekTool 3 preference box.
The remedy most often listed was to uninstall and reinstall, but before I did that, I realized: I wasn’t actually dropping the icon on my desktop. I was dropping it on my Path Finder desktop, which I enable in Path Finder’s settings (Features > Show Path Finder desktop). That makes a difference! I turned off the Path Finder desktop (admittedly, I don’t know what it offers, so I don’t know what I’ve lost), and BOOYAH! Dropping GeekTool icons now works.
In this post, I talked about my travails getting my son’s USB wireless adapter working in Linux. A few weeks later, it stopped working. Puzzling. I opened a terminal and ran:
The computer duly reported that it saw the USB wireless adapter. Then, I ran:
Yup, the driver was loaded. I checked /etc/modules and verified that ndiswrapper was listed. At that point, I had dangerously stretched my sysadmin abilities. Frustration descended, I set the computer aside, bought my son a MacBook Air, and sent him to college.
Last night, I finally got around to looking into the problem again. The device was still present, and ndiswrapper still had the driver loaded. I then tried:
sudo modprobe ndiswrapper
I got an error message: something about no such module existed. Hmm. I decided to rebuild and reinstall ndiswrapper. As I ran:
make && sudo make install
I realized that I’d probably updated his Ubuntu installation, and it probably included a kernel update, so the new kernel didn’t have that module. Duh. By chance I’d hit upon the solution. When I than ran:
sudo modprobe ndiswrapper
it worked fine and survived a reboot. Total rookie mistake.
Things like this, though, are IMHO why so many developers have moved to Mac OS X. We want the power of Unix without its headaches. We want to write code, not administer our machines. We don’t want to download and compile wireless drivers and figure out why we can’t get on the ‘Net. We don’t want to follow the politics of Gnome 3 or decide whether to switch to KDE or Xfce. Don’t get me wrong: Linux has come a long way and requires far less care and feeding than it used to, and there’s a whole lot to love about it. But the lower-maintenance Mac OS X is far too alluring for many developers, including myself.
After I wrote this, I came across Miguel de Icaza’s “What Killed the Linux Desktop.” And now I see it made Slashdot. Take the time to read this, keeping in mind that this guy is no Linux lightweight. He started the GNOME project, after all. Take that, Linux! You’re over! Apple won!
Yes, Apple has claimed a ton of developers that used to run Linux as their primary OS. They’ve also converted scads of developers from Windows to Mac OS X. And they’ve gotten a little too smug about that. See, the Linux expatriates can always go back to Linux. Even klutzes like me can administer our own Linux machines, keep things running, and get lots of development done. What’s more intriguing, though, is that former Windows users have now been trained, thanks to Apple, in all kinds of Unix-y things, and would now be far more comfortable in Linux than they would have been before. Apple might have won, but the game isn’t over.
When people talk about Apple’s overwhelming recent success, they point to the iPod, the iPhone, the iPad, and Mac OS X. Certainly all those are key, but that list ignores an essential ingredient that bedevils BlackBerry, Windows Phone Whatever, and even to an extent Android: the developers. People don’t generally buy an iPhone or an iPad or a Mac; they buy what an iPhone or an iPad or a Mac can do for them, which depends on apps. And a healthy app ecosystem. And app developers. Developers are almost invariably a leading indicator of a platform’s eventual success.
Apple has recently gone some directions that, while perhaps consumer-friendly, could be interpreted as developer-hostile. If Apple’s trajectory continues toward iOS-ifying Mac OS X and the App Store, developers may sour on Apple. If the Mac App Store becomes the only fount for installing Mac OS X apps, the developers are gone.
Where will we go? While Ballmer is betting on Windows 8, and certainly Windows 8 will claim some number of developers, most will go where bash (OK, or zsh) is a first-class citizen, Rails runs hiccup-less, and you can develop applications without Visual Studio (OK, hyperbole, but c’mon–it’s not far off). I see a Linux laptop in my future–assuming I can get it to connect to the Internet.
It’s frustrating that Apple has no problem playing gatekeeper and keeping apps out of the store for the most trivial and arbitrary of reasons, but won’t play gatekeeper when presented with clear evidence of repeated copyright infringement. A serial infringer who is stealing the creative output of dozens of developers, designers, and publishers gets a pass because that’s the legal path of least resistance for Apple.
(Via iPhone Development)
So, this guy named Wang Ting is finding Github projects, swiping the code, removing copyright notices, ignoring licensing on those projects (the project in question requires attribution and preservation of copyright notice), and selling the apps on Apple’s app stores. Shady and illegal (IANAL)–and Apple isn’t doing much about it. Jeff LaMarche articulates the frustration pretty well, above, but that’s not even the best line in his post. That honor belongs to this gem:
Too bad protecting developers’ livelihoods is less deserving of gatekeeper protection than defending the App Store from an occasional nipple.
Anything that deters developers from sharing code is a bad thing, for developers AND for Apple. LaMarche not only has provided a free tool, but he’s also demonstrated many aspects of how to develop code for Mac OS X by providing the source. Code examples attract more developers to the platform, which results in more apps and more users. Apple has seemed more like Twitter lately, though: shifting focus from developers to users. When developers move on, the platform eventually dries up.
Fight the good fight, Jeff!
Google snatches up Sparrow team to work on Gmail | Internet & Media – CNET News: “Leca says that the company will continue to make Sparrow available, and keep it up and running with support, though he did not offer any details about the addition of any new features in the months ahead.”
Here’s a snippet of the email I got:
We will continue to make available our existing products, and we will provide support and critical updates to our users. However, as we’ll be busy with new projects at Google, we do not plan to release new features for the Sparrow apps.
I can’t view this as anything but bad news for Sparrow users. Like me. I use Sparrow on both the Mac and the iPhone. And now they’re dead. And this is why the Open Source guys are right. Sigh.
- The RSS feed for this twitter account is not loadable for the moment.
Follow @hoop33 on twitter.
What I’m Writing
- April 2014 (1)
- March 2014 (2)
- January 2014 (3)
- August 2013 (2)
- July 2013 (2)
- May 2013 (3)
- April 2013 (6)
- February 2013 (1)
- January 2013 (1)
- November 2012 (6)
- September 2012 (1)
- August 2012 (6)
- July 2012 (10)
- June 2012 (4)
- May 2012 (7)
- April 2012 (4)
- March 2012 (8)
- February 2012 (7)
- January 2012 (7)
- December 2011 (1)
- November 2011 (1)
- September 2011 (4)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (4)
- April 2011 (2)
- February 2011 (1)
- January 2011 (1)
- December 2010 (3)
- November 2010 (3)
- October 2010 (4)
- September 2010 (6)
- August 2010 (96)