Maven Build Problems

| Comments

Maven has been around for a pretty long time and the maven infrastructure is really solid and good. I am playing around with several maven projects and my own maven project which imports several other maven projects. The problem I am facing is that if I wanted to make a release compile of my project it’s becoming hard if some of the other downstream projects only have SNAPSHOT versions. Trying to fork those projects as well and making release compiles of those in my own repositories seems to cause a big domino effect. I am wondering if there is a way to make artificial “release snapshots” which can be treated as local releases within a specific repository even though they are really SNAPSHOT releases fixed to a specific point in time.

Not sure yet if this is at all possible, but this would be a good thing to allow.

UPDATE: There is a maven versions plugin which can be used to resolve this problem. Snapshots are timestamped and it’s possible to use versions:lock-snapshots to lock all external snapshot versions to specific versions of today. This allows you to promote a particular compile to a release or a locked snapshot. The information is contained in the Maven plugins page.

The interesting part is that there will need to be a commit with the changed versions of all the pom files. This was kind of what I wanted to avoid; it’s usually not a good idea to modify the source repo when a compile is released, but this is kind of the basis for how maven works. Maybe in the future someone will come up with another way to do this.

Ambio Beta Is Going Very Well - Releasing Soon

| Comments

For the last year or so I have been contributing to Ambio. This is an android app created by Chris Newby which allows you to build and purchase soundscapes. Those soundscapes can be used as either alarms or for a better way to fall asleep. This is what the author himself says: “Ambio lets you create perfect ambience and whitenoise so you can relax, ponder, and sleep better :)” Here is the ambio information about Ambio.

Other than bug fixes my contributions are centered around creating workarounds to problematic issues with the android system. For example: looping audio sometimes causes gaps in playback, newer APIs to provide continuous playback don’t interact well with looping audio, native audio interfaces change during different versions of the NDK, even when forcing fixed orientation in activities change events still require reconstruction of cursors and database connections.

Yoga and Software Developers

| Comments

For the last several years I have discovered Yoga which I believe is a great addition to any job requiring such long “sitting in front of a computer” time as software development entails. Although our industry as a whole is not a generally healthy one I see more and more other developers in the studio as well. It’s interesting to see as our industry matures from a few people to an industry where a much larger audience can contribute. It used to be very much of a niche field, but the type of development tools and our education system has made it much easier to enter the field.

What to Do With Aging Software Infrastructure

| Comments

Although technology is getting better and it’s easier to develop software in recent years than long ago, debugging them hasn’t gotten any easier. If things don’t work there is work for me. Although it’s many times easier to just patch or hack a system, it’s important to consider to substitute and interface whole new subsystems. Many times new life can be introduced into an aging software infrastructure while preparing for complete refactoring.

It’s very interesting to me how translating software from one operating system to another is done very seldom even though there is a lot of knowledge in the existing software which are lost through a new rewrite. Translation of software is hard, and it’s even harder to shed features that should not have been there in the first place. Removing features to gain a product which implements a few things well rather than a set of features not so well is essential to keeping aging software from becoming a major maintenance problem.

The only way to migrate software is with a good plan and no fear. Just start converting small subsystems one at a time until the whole system is initially converted. It might not immediately work all the way but it’s the first necessary step. Then you need to go through and repair the converted subsystems one at a time. Automated testing helps a huge amount in this process, but also will take additional time if such doesn’t exist. There is definitely a tradeoff.

The important thing is to always look at the software as one whole thing. All servers, routers, computers, browsers and networks should be considered as part of the implementation. It’s important to know the weak spots in the system even if those are not located within the software you control. It might be possible to do things another way to remove weaknesses external to you, but you need to know where they are an have consideration for them.

Software runs at all levels of your stack; from hardware drivers written in C and assembler, to middleware written various higher level languages - with customization such as SQL server for example, to end user software like desktop thick clients, mobile clients or internet browsers. They are all part of the infrastructure your system relies on and therefore are part of your implementation. It’s not very useful to tell an end user if the browser they are using is not one of the ones you prefer. It would be better to design your system to degrade on sub-par browsers rather than not working at all.

Mac OS X Terminal TabName Script

| Comments

A simple set of functions that can be used in bash to adjust the tab names or create new tabs in Mac OS X’s Terminal application. The syntax is just

tabname "<new name of current tab>"

or

new_tab "<new name of tab>" "<command to run>"

The original code was posted on Original Stackoverflow Article

## add to the end of ~/.profile or ~/.bash_profile
tabname() {
printf "\e]1;$1\a"
}
new_tab() {
TAB_NAME=$1
COMMAND=$2
osascript \
-e "tell application \"Terminal\"" \
-e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
-e "do script \"printf '\\\e]1;$TAB_NAME\\\a'; $COMMAND\" in front window" \
-e "end tell" > /dev/null
}