Why are software development estimates regularly off by a factor of 2-3 times?

Advertisements

Northeast District Health Inspection Records

Northeast District Health Inspection Records

My first native Android app is live and published on the Android market. I realized that I would be waiting for a long while if I wanted the first release to be perfect so here it is: Athens GA Northeast District Health Inspection Records [ or http://bit.ly/janefirstapp

Please download it and give it a try. I’m inordinately excited about it and I hope it provides some utility for you. 

 

Scapy – Decode and forge your own packet

tosch production

I started to write articles on the wiki of Sec IT’s related to the posts on this blog. If you want to modify or improve the articles (I’m pretty sure there are plenty of typos and materials to describe), feel free to edit it on the wiki.

Scapy is an application for packet manipulation written in Python by Philippe Biondi. It is able to forge or decode packets of a wide number of protocols, send them on the wire, capture them, match requests and replies, and much more. It can easily handle most classical tasks like scanning, tracerouting, probing, unit tests, attacks or network discovery.

Installation

Scapy is an application written in Python, therefore, before install it, you need to get Python first. Python is a cross-platform programming language. You should find all information for the install on the official download page. Once Python installed, download and install

View original post 1,103 more words

Application Structure

I’m currently adding some new features to my app. Here’s my summary of changes since my last post:

  1. Added  Navigation Drawer go the first “page” of the application which allowed me to add links to things like an About fragment, Copyright fragment, Signup and Login Fragments, etc. I really like the Navigation Drawer UI pattern and will probably roll it out to the rest of the pages once I’m done testing thoroughly. My Navigation Drawer’s a little bare now so once I’ve worked out any lingering kinks, I’ll add some icons to the left of the drawer menu items.
  2. Used Parse to manage the users of my application. Currently, the app supports user signups, user login and allows the user to use the floating context menu to save their favorite restaurants to a Parse database.

I’m trying to avoid the shiny toy syndrome so I think I will stop at this latest iteration, focus on “hardening” the application and continue testing. Check the pics about and I’ll share one cool thing I learned from tonight’s coding binge. So, I created a custom adapter to handle my Restaurant objects. to give me greater control over what was returned when selecting items from my ListView and to present a prettier display. This is what that code snippet looks like:


ArrayList[Restaurant] rr = restaurantDAO.getRestaurantsByCounty(county);
RestaurantAdapter adapter = new RestaurantAdapter(this,R.layout.itemlisting, rr);
ListView listView = (ListView) findViewById(R.id.restaurantsListView);
listView.setAdapter(adapter);

When I was handling onItemClick events on the ListView called listView, I was grabbing a String representation of my Restaurant and was doing some string manipulation on the values returned from what was essentially myRestaurantObject.toString().  While I was adding the floating context menu to listView, I realized that I didn’t need to convert my Restaurant object to a string in order to get the restaurant ID from a series of string operations! I know this seems obvious in hindsight but when I was learning how to handle onItemClick events on ListView objects, I blindly followed a recommendation to do this:

String rString = parent.getItemAtPosition(position).toString()

When I needed to do was:

Restaurant temp = (Restaurant) parent.getItemAtPosition(position);

So, long story short, if you’ve created a custom Adapter, don’t let your hard work go to waste! I saved myself an unneeded database call once I realized I could grab my Restaurant object from the ListView instead of parsing the toString() value for the restaurant ID and then querying the database.

Screenshot_2013-11-01-21-49-00 Screenshot_2013-11-01-22-40-16 Screenshot_2013-11-01-21-49-19 Screenshot_2013-11-01-22-40-00 Screenshot_2013-11-01-21-49-33

Lastly, I may have gone a little overboard on organizing my files into packages. I’m not sure what the proper way to group things so I just went with what would make my life easier. So far, here’s the layout of my Java files. That’s a lot of code for a simple app but my chief concern is readability so wherever private inner fragments were used, I pulled those out into separate classes and tried to keep the names consistent. My goal is to be able to forget about this app for a month and pick up where I left off with minimal difficulty. I’m open to any conventions or better ways of organizing. With that, I bid you a good night! 🙂

Screenshot from 2013-11-01 22:24:57