Shiney Code

I’m a girl geek, software engineer, and ultimate addict among other things.
  • Old Shiney Code
  • rss
  • archive
  • 30+ days later with AppCode

    More than 30 days have elapsed since I put myself on the AppCode challenge. So you may ask, what’s past that cliffhanger? Wait for it…

    I felt crippled managing the codebase when I was not in AppCode. The lack of proper refactoring functionality and inability to find references in a quick and efficient manner slowed me down a lot.

    By the end of the month, the list of things that allowed me to be more productive with AppCode grew so big that I could look over the few minor caveats it had. I am sure those will be improved upon in the upcoming releases.

    No tool is perfect but this one got me pretty close for my needs.

    I switch back to Xcode when I need to, but 90% of my time is spent with AppCode. So there you have it.

    • 6 months ago
  • My 30 Day AppCode Challenge

    I was talking to @apontious recently about an episode of his podcast, EdgeCases and his thoughts on trying out AppCode aka @jetcidr. He didn’t really like AppCode very much but it provoked me to consider trying it for 30 days to see how I feel about it vs Xcode.

    Since the dawn of my Xcode time, which started about 3 years ago, I thought that it was a suitable IDE for development. Suitable - yes; Great - absolutely not. Like many things in life, one learns to live with Xcode’s many quirks such as its inability to easily refactor code or find usages of properties and methods, the far too periodic, lengthy appearance of the beach ball while attempting a trivial task, and best of all, crashes at inopportune times. You learn to say to yourself over and over that as a developer, this is the pain you must endure to build neat things. 

    When Jetbrains announced their preview version of AppCode, I tried out a 0.x version briefly. At the time, I didn’t feel like it was ready for primetime for me to use as my primary dev tool but I kept an eye on it being familiar with their track record.

    The last IDE that I used just prior to Xcode was IntelliJ IDEA made by JetBrains. I had used IntelliJ on a PC & Mac for about 5 years for both Java and Groovy/Grails development. I forgave it not being a native app on the Mac in exchange for how much easier it made my dev life. Want to find usages of a method named ‘foo’ in my project? It’s a snap with the ‘Find Usages’ option, providing me with accurate results. How about if I wanted to override a method from base class? Just use the ‘Code -> Override Methods’ option. What if I wanted the Project Navigator to be in sync and show me where a file I’m modifying is within project folder hierarchy? Not a problem - choose ‘AutoScroll From Source’.

    Most the features I mentioned are not arcane tasks for most developers and by no means are they revolutionary by today’s standards. But I chose to give them up and work with Xcode because that was my only option to do iOS development. I recognize many people are very productive using Vi, Emacs, Textmate, or insert a favorite text editor but I am not one of them. 

    The other factor that led to reconsider AppCode is that during my working hours, I periodically use with the other flavors of IDEs made by JetBrains. My mobile teammates who have to work with Java are split between Eclipse and IntelliJ IDEA, while many of my Ruby/Rails teammates rely on RubyMine. I’ve never found Eclipse to be my cup of tea so when I need to peruse through the other codebases, I stick to IntelliJ and RubyMine. While using them, I often miss some of their nifty features that Xcode lacks.

    Hour 1 of using AppCode in earnest was jarring and involved a lot of customizing. First thing I did was to change the keymap style to Xcode (Preferences->Keymap). Next thing on the list was to customize the color scheme to my liking. Then over time, I’d tweak one little thing here and there. By the end of the day, things felt smoother.

    After only having tried Appcode for 5 days, I’m going to say that the remaining 25 days will probably be similar and hope that my employer will buy me a license for it.

    Here are my not-so comprehensive list of pros & cons so far.

    PROS
    • Open up a class, file or symbol in the project by specifying regex patterns such as “Abs*Detail*Co”. I found Xcode to be terrible at this and have needed it countless times when working in a large codebase.
    • Incredibly easy to find usages of specific methods/properties vs Find by Text, the only way to search for anything in a project Xcode
    • True “smart completion in code” - AppCode will find images and other assets in your project and offer up suggestions for things like [UIImage imageNamed:]”
    • Lots and lots of options to customize code appearance to your heart’s content. I missed the ability to apply a specific code style for the entire project that was available to me in IntelliJ.
    • Debug console is much nicer to view variables and watch specific ones
    • Code folding, especially for useful things like @synthesize blocks (although Xcode 4+ with iOS6 no longer requires this, I have old code that still use it).
    • Being able to say ‘Override Method’ and be given a pop-up with a list of all methods of your super class to choose from. I love this instead of having to open up the super classes .h file.
    • In-place renaming of variables renaming actually works instead of getting a modal-style dialog.
    • Highlights unused methods/ivars/properties (although AppCode can report false positives for methods that dynamically invoked at runtime). Nonetheless, I still find it helpful to quickly see these so I can check to DRY out the codebase)
    • The ability to float some windows e.g. the debug console, variables and expresssion windows to wherever you want on your screen instead of just to the bottom of your main IDE app window is nice.
    • AppCode always tells you the current line & column number while Xcode never had a ‘current column’ display of any kind. However, Xcode does have the visual end of line vertical guide line to help.
    • Actual git integration especially given that Xcode’s git support is laughable.
    • Hasn’t crashed yet
    CONS
    • CocoaLumberjack logging won’t work because of a bug in AppCode so I feel like I’m debugging blind. Our project has lots of levels of logging and I take advantage of that. Sadly most of these statements do not get printed out to the console while using AppCode. I don’t want to switch out to another logging tool right now nor do I want to litter the code base with NSLog. I’m hoping they address this sooner than later.
    • Can’t find the “Page Guide at Column” equivalent offered in Xcode. This feature is very helpful to me and I can’t find it anywhere in the settings so far.
    • Still have to go to Xcode to alter build settings, change xib files or anything project related. So that means running AppCode and Xcode side by side most of the time.
    • Unused methods/properties/ivar highlight gives you false positives if there’s run-time use of said elements (as mentioned in the Pro side)
    • Still have to switch over to Xcode to view full documentation - I’m not sure if there’s an AppCode shortcut to launch this.
    • Weird to have a separate windows for Console and LLDB - I kind of like having the two together and being able to ‘po variable’ right into the console window.
    • I haven’t tried using Instruments or sign the app to take to the App Store but I am certain that you cannot do the latter with AppCode. I’m willing to be okay with this because of the infrequency of the task.
    • AppCode has some of the terrible interface affordances borrowed from Windows and Eclipse (or it the other way?). This takes getting used to but in a sense, much of the pros make this aspect tolerable. That said, if Xcode ever improved to be on par, I would switch back over.

    All in all, I find that it’s much easier to navigate through a large or unfamiliar codebase with AppCode as is the case with all of the IDEs made by JetBrains.

    • 8 months ago
  • A Misleading Error Message

    Filing this under a very misleading error message:

    The first screen I got the 2nd time I launched this app was this:

    When I saw this, my first thought was that I must have left my phone on Airplane mode. A quick glance at the top of my screen told me otherwise so I hit the ‘Retry’ button which gave me the same results once more. Then I realized that I had not allowed this app access to Location Services when I had initially tried it out. 

    Improvement from Version 1

    A few days later, I noticed that this app had an update so I refreshed it. Here’s the same error, with better information:

    What I really liked about this version (besides a better language about the error) is that they tell you how and why they want your location. This is a very nice touch and I applaud their transparency. I wish more apps would be explicit about why they want my location data.

    • 1 year ago
  • It’s really about the interface

    Recently, I needed to buy a very banal item for our home: a programmable electrical outlet timer. I fully acknowledge that this is over-thinking of a simple purchase but I want to share the one overwhelming factor that influenced my action.

    I’ve used a number of the digital timers over the years. Every single one of them has their own quirky and convoluted way of doing one simple task - setting the timer to go off at the same time, every day. I can’t think of a more basic and elemental task but on most of them, it would take more than a minute or two to set it, which is far too long in my opinion. Additionally, they all typically accompany by a 20 page manual that for some reason is compulsory reading.

    So when faced with two equivalently priced products at the store, what do I do? Buy the simple mechanical timer that’s this one.

    Why? Because just by looking at the front of it through the clear packaging, I could easily tell what needed to be done to configure it. 

    When I opened up the packaging, I could quickly discern that I either need to push down or pull out the small buttons to set the timer. All I had to consult the manual for was to verify which position was ON or OFF. Where was this information? Clearly shown with a picture on page 1 of a 3 page manual.

    Okay so you’re asking, “So, what does a mechanical timer have to do with software?” I purposely didn’t buy a fancy timer because I didn’t feel that I needed to deal with year another quirky interface to operate a simple tool in my house.

    The reality is that I think most people in the world don’t feel the same way about gadgets as those of us who try to design and build them. We care that we can tinker and tweak software to our heart’s content, maybe modify it to improve, or just break it to learn from it. The rest of the world, meanwhile, just want to go on about their day with tools that just work. 

    What’s the solution? When we start designing a cool new piece of software, be it for a browser, smartphone or a microwave, we must absolutely stop fooling ourselves and believe that everyone else in the world likes to spend their time troubleshooting and “playing” around with gadgets. Instead, we should always run it through 3 tests:

    1) Can at least 75% of my non-developer friends use it without having to scratch their heads or even have a momentary feeling that they need to read the manual?

    2) Make it pass my Mom test. It’s a cliche used in our industry but she really doesn’t want to read any of the product manuals and usually makes me do it.

    3) Would I use this, had I not worked on it?

    • 1 year ago
  • 5 Quirks That Should Be Fixed in the New Yorker iPad app

    In the last post, I described feature requests I’d like to see in the New Yorker iPad app. I also hinted at my desire to love the app, but a number of strange quirks with it leave me wanting more.

    I should note that one of my favorite apps on the iPad is Flipboard, because I think they’ve done a pretty stellar job in designing a good experience for reading content on the device. All my suggestions would go away if  the New Yorker was published via Flipboard, but that’s probably not going to happen very soon unless the two companies hash out some agreeable subscription terms. Until then, here’s a list of what I’d change in v2.0 of the app.

    1. Which Way Do I Flick to Move Between Pages? 

    The most awkward feature of the app is the navigation from one page of an article to the next. The New Yorker makes you flick downwards on the screen to move from page 1 to page 2. I can’t tell you how many times I was reading a page and flipped left to right to move to the next one, only to be annoyed that a very natural and intuitive movement resulted in completely unexpected behavior. It is one thing to adhere to affordances provided by a digital medium, but it’s equally important to remember the real-life version. Whether it’s the paper version of a book or a magazine, when I want to read the next page, I flip the page over, left to right and not up and down. Both iBooks and Flipboard understand this paradigm for tablets and maintained it in their respective apps. I wish the New Yorker had done it as well.

    2. Better Overall Issue Navigation

    It’d be nice if I could either tap the top status bar to jump to the start of an article or a specific page in the issue.

    The current “slider” offered by the “Viewer” provides a nice preview of each article, but why not combine it with the “page by page” preview so you can access a specific article or jump to a specific page? I wouldn’t separate navigation into top and bottom sections as currently offered. 

    3. 100+ Mb Downloads per Issue

    Broadband is faster these days, but that’s still not a good reason to warrant such humongous sized downloads.  It’s like getting a phonebook-sized edition of each issue.  The layout shifts a little between issues due to varying length of the articles, but overall, it’s pretty static.  So why is there ~130 Mb download for each issue? 

    It appears to be a per-page snapshot of print version at a screen-readable resolution and saved as a JPEG. I’m assuming that this was attempted for a couple of reasons:

    • Preserve the print version of the layout and font-type for “branding”
    • Less work to produce a digital edition 

    While adhering to the paper version’s layout and fonts is nice for branding, a regular reader like me would happily trade them for better readability and UX that’s appropriate to the medium I’m reading on.

    4. Does the app have to crash every time there’s a new issue to download?

    I’m almost certain that every time a new issue is ready for me to “view”, the app crashes. As I write this article, the app has crashed in each of the five times I’ve launched it. 

    5. Concurrent Download of Multiple Issues

    iOS supports multithreading when an app is a foreground process, and it allows several sockets open at once. So it is puzzling that the New Yorker app can only download one issue at a time. Additionally, if I’m downloading one issue and decide to download a second one, it conveniently pauses the first download, but never resumes it once the second one has finished. 

    Continuous Revenue Stream from Advertising

    The New Yorker should take a lesson from web advertising and dynamically serve ads even in old issues.

    In order to achieve such a feat, I’d consider building the app with the 3 distinct pieces. The overall magazine layout is the only static part released with the app, while articles and advertisements are treated as two distinct pieces of content, fetched dynamically at a later time.

    Separating the content types achieves two nice benefits at once. It improves the download footprint and allows for displaying fresh, targeted ads that change based on when an issue is being read as opposed to getting the original static ad that was published with the paper copy.  Imagine going through the archives to read an issue from ten years ago and seeing an advertisement for the Nissan Leaf instead of GM’s now defunct Saturn. The New Yorker could be capturing new ad revenue from old issues.

    I’m very aware of the resource constraints that teams have to deal with in order to release software. However, translating what works well in the paper medium into the digital version with more thought to the native affordances would make the app a whole lot better and would lead my family to happily give up our paper subscription.

    • 1 year ago
© 2010–2013 Shiney Code
Next page
  • Page 1 / 4