App Savvy By Ken Yarmosh

App Savvy is a great book if you’ve got an idea for an iOS app or want to move into the space. It has a good introduction to the topics that you should be thinking about, presenting a strategy for how to produce a successful app.

I’ve recently received an iPad and can see some opportunity for Ephox on the platform. App Savvy has helped me frame my thinking around what this might look like, and how to go about producing a successful app. While the book suggests acting while reading, I’ve been using it as my background reading first. If I start moving forward with an app I expect to reread parts of the book. I’ve definitely been making copious use of the iBook highlight and bookmark functions as I’ve been reading.

One of the only drawbacks in what I’ve seen is that there is a little too much jumping around to different chapters as the author gets the mix of content flow and timelines right. I’m not sure if it was avoidable, but I did find it a little bit awkward at times.

Overall this is a good book, and I’d recommend it to anyone looking at putting together an iOS app.

A Thought On Dynamic Languages

Published by Rob on January 7th, 2011 - in Development

Reading http://www.codecommit.com/blog/ruby/monads-are-not-metaphors got me thinking on a tangent not related to the article. The examples start in ruby then move to Scala. Daniel points out the difference between some of the scala and ruby code which led me to the following thoughts.

Duck type code encourages reading the source of methods to see the type requirements of params. This is  a good thing.

For this to work well methods need to be short and well written, another good thing. While this doesn’t negate the value of STRONG types, it does make the case for dynamic languages better.

The Art of Community – Jono Bacon

Published by Rob on January 6th, 2011 - in Miscellaneous

The Art of Community provides good coverage of community, helping readers to think about building a community and the tasks and work involved in doing so.

For me this book comes at a good time as I step into a new role at Ephox, leading our JavaScript and TinyMCE work, looking at getting involved with the TinyMCE community and thinking about how Ephox can best get involved with enterprise and the greater community.

Jono writes well making the book a good read, presenting his experience and thoughts very clearly and coherently.  The book makes good use of examples and is definitely readable. It struck me as useful in my early stages of thinking about community (myself being earlier in thinking than the community I’m getting into), and had information and examples pertinent to much bigger communities as well. I’ve highlighted and bookmarked many  pages in iBooks for my future reference, as I expect that the topics will come up in future communities that aim a part of. Many other parts matched and confirmed my experiences and conversations that I’ve had with different people about community in the past. In particular the comments around programmers and mailing lists rang true.

Overall I wouldn’t hesitate to recommend the book to anyone who is interested in the topic.  The Art of Community provides good information and food for thought around building communities.

O’Reilly Blogger Review Program

I’ve recently signed up for the O’Reilly Blogger Review Program at
http://oreilly.com/bloggers/. It’s pretty much an ideal setup for me since I end up having book reviews as most of my posts here anyway.

I’ll be putting posts in an O’Reilly Blogger Review category to try and make it obvious which ones they are. I’m obliged to be honest and real in my reviews which matches my style. I plan to be selective in my books to review so don’t be surprised if the reviews are positive. That’s more a comment on what I like to read and say than me being influenced by free books.

Inter-Servlet Communication using a request dispatcher

Published by Rob on October 26th, 2010 - in Miscellaneous

In code, here is how to pull in data from a different JEE web-app

1
2
3
4
5
String pathToWebApp ="/otherApp"
String pathToServlet ="/myServlet" //relative to the otherApp context
ServletContext configContext = context.getContext(pathToWebApp);
RequestDispatcher dispatcher = configContext.getRequestDispatcher(pathToServlet);
dispatcher.include(request, response);

4 Tips from the Unix Greybeards

Published by Rob on September 28th, 2010 - in Development

So I’ve been using Unix for a number of years, and think of myself as relatively competent in using Posix based operating systems. I’ve recently had the great pleasure of working with a few guys who’ve been using Unix for longer than I’ve been able to read, and I’ve been able to add a couple of more commands that are extremely useful. It’s always great to watch a master using their tools, and to learn while working with them.

The commands below are a mix of ones that I’ve just learnt. I probably should have known these already – but they are lovely, and you need to add them to your arsenal.

  1. !!
  2. locate
  3. look
  4. xargs

    1. !!

    re-execute the last command.

    !! also has friends like !COMM where it will execute the last command in your history that starts with COMM.
    e.g.

    1
    !find

    will re-execute your last find.

    2. locate

    With a locate database setup, locate is magic. Think spotlight for the commandline.

    3. look

    The man page for look talks about it searching a file, then mentions about the default location being /usr/share/dict/words. The default location is the key for the best usage. It’s a great little dictionary for looking up how to speel words.

    4. xargs

    The most masterful developers that I work with have advanced beyond xargs to the next level, but for people continuing on their pathway to true unix mastery, xargs is a great tool to add in.

    I commonly end up using variations of find and xargs together to search the contents of files, or to find out information about a project. If nothing else, the command:

    1
    find . -name "*.java" |xargs wc -l | sort

    is your friend.

    Tags: ,

    Database Security Product Vapourware

    Published by Rob on September 23rd, 2010 - in Oracle, Security

    from the posts that I never got around to posting department (originally dated at 26 July 2005)… posting now because Oracle Open World has a bunch of database security products now – and someone might actually implement this :) .

    I have got a product vapourware idea that has been floating around in my head for a little while. A product that will help protect databases.

    The tool will do the following:

    1) record checksum for key objects in the database (by default it shoud do the data dictionary). It will allow users to record checksums for all objects, in particular supporting stored procedures, and views. This will help prevent attackers from hiding there tracks. This type of attack has been setup in a proof of concept shown at Red Database Security Services (edit – sorry – not sure of the deep link or if this is still publicly available).
    2) check the passwords of users in the database, ensuring that the password quality is good.

    I can picture quite easily how to do this in Oracle, can see the feasability of it in SQL Server, and know that every database will provide a data dictionary that will make at least step 1 possible. So – to all you database security vendors out there – please implement.

    Rule Zero for writing a JavaScript Widget

    Published by Rob on July 17th, 2010 - in Miscellaneous

    If you are adding ID’s you are doing something wrong.

    This will cause issues for people who want to have multiple copies of the widget in
    the page.  There is to much risk of ID collision.

    There is always a way of navigating down the tree to find children (Especially if you
    are writing a JQueryUI widget).

    Classes are ok – and use them to find children – but DO NOT add an ID.

    (This blog post written as a public service, after having seen way to many JQueryUI widgets that don’t get this right).

    Mounting a folder on OSX over SSH

    Published by Rob on May 31st, 2010 - in Miscellaneous

    It’s suprisingly easy to mount a folder via ssh. This is especially useful when you need to access something via ssh tunnels. Following is the process to follow when using an ssh tunnel.  To do without the tunnel, remove step 3, and make the sshfs command directly reference the server in step 4.

    Step 1) get and install macfuse http://code.google.com/p/macfuse, along with the ssh filesystem http://code.google.com/p/macfuse/wiki/MACFUSE_FS_SSHFS

    Step 2) create a folder to mount to. mkdir -p /mnt/remote

    Step 3) setup the ssh tunnel: ssh -C -L 2022:server_with_data_to_get:22 ssh.tunnel.server (going into server_with_data_to_get via ssh.tunnel.server, making this available at localhost:2022).

    Step 4) Use sshfs to mount the drive: sshfs -C -p 2022 username@localhost:/path/to/folder_to_mount /mnt/remote (connect to the localhost -ssh tunnel end point- mount remote folder /path/to/folder_to_mount to the local folder /mnt/remote).

    Executing Play! from outside of Play! code

    As I’ve said earlier, I think that the Play! framework is lovely. It makes it easy to develop and write code quickly. One of the ways that it enables this is through performing runtime byte code enhancement of the code. This makes execution of your code somewhat non-trivial when coming from a non-Play! context. Play! aims to meet all your needs, but use cases exist where it is important non-Play! code with Play! code, and have your non-Play! code call into Play!

    Having said that this is non-trivial, it is reassuring to know that the process to do this is very straight forward.

    1. Create a subclass of play.Invoker.Invocation.
    2. Override the public void execute() method.
    3. Call the run() method of the invocation.
    1
    2
    3
    4
    5
    6
        Invoker.Invocation invocation = new Invoker.Invocation() {
            public void execute() {
                //do stuff with play here
            }
        };
        invocation.run();

    With this simple snippet of code, it is possible to have non-Play! code easily and cleanly call your Play! application code.

    Tags: ,
    © Rob@Rojotek