Tag Archives: technology

This Week I Learned [19 May 2013 Edition]

This week I learned about:

  • There is a new change to how network devices are named. This may change your network device from eth0 to something like env10p0.
    http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
  • Archlinux is very similar to Gentoo, but it is based on a script to install everything.
  • 2to3 is a python script that will convert a python script from a version Python 2.0 to a 3.0 compatible script.
    • One major difference between 2 and 3 is that the print statement became a function, thus requiring parenthesis.
  • It is easier to hard code the Python 2 environment, rather than to convert the script into a Python 3.0 script.
    • #!/usr/bin/env python2.7 [or whatever Python 2 environment that is installed] should be used in the shell definition of the script.
  • OpenVAS- Open Vulnerability Scanner: I haven’t tried this yet, but this is a neat utility that can help you keep tabs on the software you currently have installed and the possible vulnerabilities that they may have.
  • Always snapshot your VM after you finish major installs. [This saved my butt this week]
  • Ansible -  This looks like a nice Open Source version of HP Operations Orchestration.

Apache Wicket [In Action]: A Review and How It Relates to the Java World

Java is a great tool for creating software. It is well designed, modular, has a wide array of platforms that it can run on, performs well, it’s very extendable, and it has a large community with lots of support. However, it’s support for websites and related services is severely lacking. It’s bad enough that frameworks that extend the existing infrastructure have massive pitfalls that you later discover.

For the most part Apache Wicket solves many of the web related issues that J2EE (JSP) has. If you are to follow the prescribed way of doing things, it can actually be quite pleasant. However, there are a few thorny patches with Wicket. I will get to those later.

Wicket In Action like a marriage. During the honeymoon, everything is great. Everyone is happy, and then later discontent grows and things go up and down. However, unlike a marriage, you don’t really get an ending. This is a rather good way to end things, but some of the lesser parts of the book were rather disappointing. One of the big selling points of Wicket is that it is a framework that assumes that the developer has already prototyped the pages in HTML prior to starting with Wicket [The pages are adapted into Wicket-ized and previewable pages]. This upside was enough to ignore the placement of the HTML files, in the class path rather than the web resources section.

I jumped into this book with lots of enthusiasm after reading the introduction. I even bore through some of the non-stated setup issues in the book. The book starts off by creating a project, from scratch, however I went the Maven route (which I discovered is the better way to go). The book mentions maven, but it doesn’t mention how to build your application or to generate a project. I believe that I went the correct way because Maven helped to setup all of the application servers and the folder structures. The book started by having the user to jump in, examine a few code segments, and then to start on a sample (full featured) e-commerces application. The store was oddly pleasant; the goal was to sell cheeses online. The application started from a few sample view pages, it went on to creating a reusable shopping cart, and finally on to a membership mechanism. This is a very straightforward and to-the point way of starting a new framework. It’s already addressing the needs of the majority of its audience.

Another nice thing to point out about the introduction is that it did not try to cover all of the material at once. It would frequently describe what you were doing, but would mention the chapter where the concepts were explained in depth later on. Something that pleased me was that the code listings did not include a listing number. They were place in the correct location of the text. After you’re done with the sample application, you should be quite proud of yourself. This is similar to your first website.

However, the book got a little disappointing when describing the more detailed interworkings of Wicket: sessions, bookmarkable pages, and layering/rendering. The book improves when it gets to the Ajax functionality and a brief mention of dependency injection and Wicket. The book gets a little rough in the Spring through Hibernate sections and then better in the testing section. The book ends in a rather low note on SEO, production configuration, and JMX. If I had known more about JMX, I would have probably had a better opinion of the ending.

Overall I am not sure if I can say that the less than stellar sections of the book were entirely the authors’ or the book’s fault. It quite possibly may be the technology’s fault.  I would strongly recommend the book if you are new to Wicket.

Lastly, here are some direct tips that I had to discover on my own that helped out a lot:

 

Progress on Tech Resolutions of 2013

Earlier this year I made a few resolutions for this year.

So far I have completed the following:

  1. Finished and reviewed “Groovy In Action”
  2. Refresh on networking

Despite this not being much, I have learned many new things about disk storage, and Maven. Also, I’ve created a new GitHub repository for a ogg2mp3 script that I created.

Things left to learn/do:

  1. Finally get around to learning GridGain.   [I would love to see a well published book, or at least a Kindle eBook to get some headway on this] HazelCast would also be interesting, but GridGain has more of what I’m looking for.
  2. Finally understand how network routing works.
  3. Get more experience with DNS, and DNS tools
  4. Master NMap [not just learn the basic uses of it, but to really excel with the tool] This would be similar to the reading up on SSH I did last year.
  5. Get up to conversational level German. [Living outside of German speaking nations makes this incredibly difficult]
  6. Finally develop some strong time management habits.
  7. Learn how to use Python [to the point where you can do some cool stuff with it]
  8. Learn R [rather than haphazardly hack]
  9. Meet/talk with some of the gurus of airfare scheduling/decoding, and the famous Tom Stuker.
  10. Learn how to use GraphViz [This is one of the odd ones here, but it's interesting]
  11. Get better with Erlang and to find/make real world uses.
  12. Learn/Create a GUI in Apache Pivot
  13. Create a web interface with either Stripes and/or Wicket.

 

Part 1 of 2: How To Make Your Life Easier As A Tech Worker (IT/Software Engineering/System Administrator): Automation

After some time of being a student, and a tech worker [Software Engineer, IT Consultant, or  System Administrator], you should start to find ways to make your job easier.  These are some of the things I found helpful:

  • Create templates for daily status emails. If your employer/ client requires a daily status, this makes the task of writing up the daily status easier. Outlook has the ability to keep track of email templates.
    • If the daily status is being sent to multiple people it may be helpful to create a distribution list. A distribution list is less likely to lose contacts between statuses.
    • One template a coworker of mine uses is this template.
  • Create filters for emails. This can help reduce the amount of email that requires attention. For example if a group communicates with a shared distribution list then create a rule or a filter that can organize that into a separate folder. This can also clear out “Build succeeded” emails [if your company automatically subscribes you to those]
    How To Create Rules In Outlook.
    How to Create GMail Filters.
  • Use SSH keys: SSH Keys can save a little bit of time by creating password-less logins. Also with SSH keys, scripts are able to run commands on other SSH enabled boxes. This means that much of the repetitive system administrative tasks can be automated. Gentoo Guide to SSH [This include generic non-gentoo instructions.
  • SSH Commands: SSH Commands are shell-less sessions in which a user logs into a SSH box with a key to kick off only one specific command. For example, say you had to reset an environment, and it required quite a few commands. With an SSH command, you would combine all of those commands and then kick off the command as an SSH command with its own key. From there on, you could kick off those commands by connecting to the SSH box with the key.  More information.
  • Backups- It can’t hurt to backup your data. I’ve never found a single person that was reliable at doing this frequently. Setting up rsync, SSH-keys and making it a cron job is a good first step. I’ve heard good things about luckyBackup, but I haven’t had a chance to try it. 
  • Using Salt/Puppet to automate system administrative tasks on multiple machines. This would be a bit more helpful for those who regularly roll out new software to multiple machines, or need to perform other system admin tasks.
  • IfThisThenThat (Review) is an online service that connects other online services to perform the intended result. For example, if a Google search reveals specific keywords, you can have that update a twitter account.

Stackoverflow Is A Difficult Community to Participate In

These are a few of the reasons why I have difficulty in participating in the StackOverflow community. I was once a very active user, but due to these reasons, and a few unstated, I am unable to participate in the community anymore. 
  1. The Eternal September Issue. Many new users of StackOverflow [SO] rarely ever follow the guidelines of the community. I’m not sure how to solve this, but it is annoying to see questions posted as a plea for help. Stackoverflow moderates its self as a very terse question and answer site. It’s not a discussion forum. [This is a crutch and a gift] Another issue with this is that duplicates show up despite the crotchety moderators complaining about it. One example of this is questions asking about where to find free stock quote data.
  2. Questions that deal with software development that are not inherently technical are frequently down voted/closed. One example of this is that a question asking about a specific data set [for training/development purposes] was closed for the reason that it “didn’t fit with the community.” Until there is a dataset related StackExchange site that the question can be moved to, that was a perfectly acceptable development related question. By a “StackExchange site that the question can be moved to” I mean a fully functioning site, one not currently being “developed”/on Area51. Closing the question as “not relevant” does not help the author, nor does it help people that are looking for a similar dataset.
  3. Down voting as a means of closing a question. To vote-to-close a question a user must have 250 reputation points. This does not take very long to get, if you participate in the community. Down voting should be a way of saying, this is either wrong information, misleading, or not helpful. If the user believes that the question should be closed, but does not have the reputation needed to close, then make a comment and give evidence on why you believe that this should be the case.
  4. The down voting of correct, but not exact-answers. This gets to be an issue when there are questions that can have multiple answers. For an example: A question about optimization of a Java application, the common answer will be to use a more efficient algorithm. That answer will probably be the most voted answer. However, another valid answer is that the process could be rewritten in a more low-level language and connected to via a pipe [Socket, inproc, JNI, etc] to the main application. The latter is better suited for rather unique situations, but it is still a valid and workable answer. From my experience, the second answer will be downvoted, despite that it gave correct information. I have had a discussion with a moderator about this [Shog9] and, according to him, that strategy is a perfectly acceptable strategy to down-vote a creditable answer.
  5. Timing/Duplicate answers. Since I have stopped participating in the community, I have not seen this as often. However, when there is a question posted there is frequently a rush of answers to be posted there. After some time, someone will post a duplicate answer, and get it to be voted on more than the original answer. This is harder to find, but it does happen and it’s very frustrating.
  6. Misattributing credit on answers: If there are other answers that assist you in answering the question, please cite those other authors. It is polite and it gives their question credibility. [Also those that you cite, you should vote for their answer as well].
  7. This is another one of the odd cases on StackOverflow. A few of the “Exact Duplicate” questions are not duplicates due to minor, but important, differences. I cannot come up with an example now, but commenters, frequently, are quick to claim that it is an exact duplicate without verifying the claim. Sometimes the accusation isn’t backed up by evidence. Links to the other questions are sufficient evidence.
  8. The value of reputation: After the global recalculation, the site’s creators made a bold statement that participation is not valued on the site. The recalculation devalued questions, and the new policy was applied retroactively. This caused a loss of reputation. The creators of the site made a claim that “reputation was useless,” which falls contrary to their claim that reputation is a “value of how much the community trusts you.” Operating on the prior claim would make a statement that a user with 500 reputation points is as valued as Jon Skeet. [A well known user in the community, and an author of many technical books]

EDIT: Correction: Vote to close requires 3k in reputation, the ability to downvote requires a reputation of 125 or better. I still stand by my statement that downvoting

 

Dear Google Analytics for WordPress, Stop It.

An update of your recent plugin. Now has a popup notification when you go to log in.

“Help Improve Google Analytics for WordPress popup”

If you are using a non admin account, you’ll be sent to a page that claims that  ”You do not have sufficient permission to access this page.” This is despite any of using any of the options that it supplies. To get this box to go away, you must log into the Admin account and select one of the options. The box cannot be ignored, and it prevents you from using the WordPress functionality.

 

Don’t trust your Technical Documentation Staff to write Quickstart guides and Tutorials, Hire a Professional.

This is written with an audience of producers of software products/services in mind. Please do not claim that your documentation, used to introduce a new user/developer, is good enough to make the user/consumer (developer) proficient in your technology. Producers of software products [the developers, and organizations] are great at writing references to their products, however they generally are horrible at introducing new users to their product. When quick start guides, or introduction tutorials are written for products, the documentation tends to remain in the domain that the creators made. Solution: Hire a reputable technology writer. This will help you in a few ways:

  1. Gets a credible authority figure giving approval and backing to your technology
  2. Loses a creator bias
  3. The writer, like your audience, has an outside knowledge of other technologies
  4. They should not be influenced by the creators to write things that lack value to your actual users. (This assumes that sales and management cannot affect the contracted author’s work.)
  5. The users will understand the product better, and thus reduce undesirable support calls/emails.
  6. You will have professional documentation. The technical writer’s domain is to create attractive and easily consumable books, the software producer’s domain is not the same.
  7. From a business sense, the author is not a full time employee; they would remain as a short-term contract. Insulation from actual production is a good thing. This also helps the author as that it stabilizes their income streams.
  8. The documentation is written from a potential customer’s perspective
  9. It gives quick feedback on how easy the system, language, or product is to use, setup, troubleshoot, and possibly maintain.

Given these points, it would be easy to justify even a luxurious price on producing high quality introductions / non-referential documentation for your products. Based on these reasons, I conclude it would benefit the business professionals, developers, testers of the product, users, and the marketing department by separating the author him/herself from the general stress of the entire producing company.

Interactive Customer Service: How to fix Airlines’ Broken Phone Service

Ever had to change a complex literary or rebook a flight via the phone? If you have, then you can relate to how painful that is. If you don’t already have status with the airline, then the process is even more painful with a longer wait prior to interacting with the reservation agent.

When you tell a reservations agent where and when you’d like to visit a location, and how you’d like to end the trip, they have a very complex task to perform. They must put together an itinerary that fits your requests – and is available. After finding that information, they then must read it back to you over the phone. Each literary includes a lot of details – times and information about the flights [connection time, class, connection location, etc.]. Most of the time, you are only told the first flight that fits the parameters, which is rarely ever the best flight available. You’re rarely ever told your other options [unless you request the specific flight numbers and know the availability], because the agent is not motivated to give you all of the available options at once.

I believe the way that one could solve this problem is to convert this conversation from just auditory into a visual and audio experience. I believe that the creation of a small website that represents the session between the customer and the reservations agent, similar to a WebEx meeting, would solve the issue. The page would display all of the options available. It would make users a lot happier about their experience with airlines, and give the flyer more information on how tight or open the availability may be [alleviating much of the pain of irregular operations].

How would this work? The user could open up a web page, and use a short code that is shared between the agent and themselves to access the information being described, the page would be updated based on the agent’s action. This may even work at customer service desks where their reservation desks have to read itineraries to passengers.

How does this differ from the current procedure of online flight changes? The functionality of the flight changes aren’t always allowed or functional on the site. Try changing a round trip ticket to a different date and different location. When the, allowed, functionality of the reservation change site is exceeded, the user is prompted to make the changes over the phone.

How difficult is it to sell an open source solution?

I saw the article “Four Insights to Selling and Marketing Open Source Software” by Paul Salazar, and I’m a bit surprised. I am not sure that Mr. Salazar can relate well to the customer side of the open source business. In his article, he presents an argument that selling a piece of open source software requires service and a large customer commitment. That is opposed to selling the software as a common off the shelf piece of software.

He is partially right. It does take a lot of commitment, but the issue is not due to the product being open source, it’s more of an issue due to a lack of reputation, and support. Enterprise-ready software is expensive. This is a given. Microsoft, Oracle, HP, RedHat, and other vendors charge A LOT of money for their software. They charge this, because the requirements are more complex for the customer size, fixes-post sale are required, support is required, and a reputation is required. Open source also has the disadvantage to be flexible enough to have frequent changes in the product compared to proprietary software. Many customers look at this issue and are concerned that this may hurt their ability to perform their operations and makes them a little reluctant to use the product. This requires yet another individual to oversee development for an external tool.

Often times open source solutions are better [personal opinion] than proprietary solutions. However, the solution is merely a tool. If an organization is looking to use a tool, they must know who is responsible for maintaining the tool, and where they can find other people that know how to use the tool. Companies are frequently focused on solving the problem within their constraints, not about becoming a fan boy for solution X over Y.

I would not have any qualms with his article, if he had mentioned that the problems that he saw with the business side of open source technologies were very similar to those of new startups. Startups have the same issues of open source software. They do not have the reputation, the ability to scale to the needed level to support the product and are often unprepared for the level of customizations needed for corporate clients.

“Wanted Java Developer” could you be a little more ambiguous?

I have a bone to pick with the industry I associate with. The tech industry struggles to clearly define the expectations of whatever is desired. This is pretty much a universal issue with the industry. There are always hidden requirements. Job listings are no different.

The bone I have to pick is with the titles/job requirements. One of the worst offenders of this is for a Java Software Engineer. Based on the availability of frameworks, and meta-frameworks, asking for a Java engineer is quite ambiguous. This could ask for a graphics developer, API designer, web developer, Computer vision expert [CV in java is possible with native libraries, trust me!], core libraries developer, or even a micro-JVM developer. The amount of variability with the language makes a generic “Java developer” title frustrating.

As a potential candidate, it is incredibly frustrating to see the “Java Developer” title. Some titles ask for experience in Spring, Hibernate, Solr, Lucene, JAI, J2EE, etc. It’s incredibly frustrating to go into an interview, where the listing asked for all of these and then only be grilled on the minute [rarely used] inner workings of Spring RMI. Just the Spring framework alone asks for a lot. Of all of the potential avenues of spring that one could master are: Message queuing, Web services, Roo, Security, Integration, Web flow, MVC, BlazeDS, Batch, Social, and mobile. That’s not even accounting for the frameworks that you can substitute between the pathways for Spring. I’ve worked with a late Spring 2.x and early 3.0, I was not even aware of the new BlazeDS, Batch, social, or even mobile options for the framework. Things change quite quickly.

Besides ranting, what is the purpose of this article? I believe that the Java title should be a bit more specific. If you want a Java developer that knows a lot of frameworks, still label it as a Java developer position. However, don’t expect him or her to know all of the inner workings: that is just silly. If your business involves multimedia display, request a developer that knows the Java 2D and 3D graphics, and maybe the JAI libraries. There is a lot there for practically any task you want to throw at Java, given you know which library to use.

Scientific or mathematical tasks, ask for a Scientific Java Developer. What libraries should they know? Colt, EJML, JAMA, etc.

Writing a Java API? Ask for a Java API Designer. Expect for them to list their favorite APIs, what works, what doesn’t, and why.

Web applications? Ask for a Java Web Developer. Maybe they should have experience with a SOAP framework, MVC framework, Play, GWT, basic Web skills, and maybe even a non-SOAP based webservice library [REST, Hessian/Binary]. Please don’t use the enterprise title unless you need someone who knows EJB, and/or ESB frameworks.

Moreover as an employer, be more specific the first interview/inquiry on what the job is asking for. If an job application asks for the common ORM Hibernate, how much should one know about it before applying for the position? Should they be able to know how to wire up beans to their DB analog? Should they know how write their own dialect for a new data source? With JUnit, should the applicant be expected to transition your current development methodology to TDD? Should they know how to extend the JUnit framework?

At this point, you should be getting the picture. Different tasks demand different skills. Specify what you’re looking for. Find people that can learn new skills and that are interested in the same problems you are. People who have an active interest can learn what is needed to get up to speed. If you go to a butcher and ask for meat, you’re always going to get what you asked for, but not what you were craving.

Addendum: This can apply to an Erlang, C++, Python, and most other developers. The role of Java currently has such a great demand, and such an ambiguous title, making this article a little easier to communicate.

Related Posts Plugin for WordPress, Blogger...
Better Tag Cloud