Here is yet another installment of things I found interesting/learned this week.
- Typically, when you group disks together there are two options for this: RAID and LVM. This only works if you have similarly sized disks. However, if you don’t have then you can group them together by using “JBOD” related services. JBOD = Just a bunch of disks. At the moment, the technology I’m learning is Greyhole. It looks really awesome for small home server setups.
- Auditing your code base for dead/unused code can make a world of difference to your productivity and size of your executable. I do not have actual figures, but I can only assume that it would make class loading and loading of your executable faster.
- Obvious statement: Math and comparisons with doubles is extremely aggravating. Two numbers can be displayed the same, but unequal when compared. Google’s Guava collection handles this in DoubleMath. The class was introduced in version 13.
- Need a list of locale-friendly holidays for your Java application? There’s an open source library for that: JollyDay.
- BoardingArea found that it is to pull your basic marketing profile from Delta. This didn’t work for me, I can only assume that the data end point has been fixed.
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.
My friend Warren recently expressed a very “scorched earth” opinion of the standard Computer Science curriculum. He suggested that given the available of free CS courses (OpenCourseWare and the like) and experts at your fingertips (Blogs and Stackoverflow); wheres the value of a formal CS degree? That lead me to think …. What are some classes that would be very interesting to take: [Even as an alumni of 2 CS programs, I would be interested]
- Software Development Tools: A lot of classes mention tools, but not how to actually use and extend them. [Build systems, version control systems, formatters, emulators/virtualization]
- Debugging: The goal of this class is to teach basic skills and then go through labs of finding/fixing bugs. Later, to write unit tests to verify the bugs.
- Testing software: This would be a hands-on class to teach students how to write unit tests, implement mocks, test black box software, and write up reports on testing procedures. This would also the involve testing of embedded hardware and software, black box systems, functional languages, network services, concurrent software, and even components that lack a stable test environment.
- Computer Vision: It’s just interesting, and visual, often you don’t hit this class until graduate school.
- How to design an API/Surveying APIs: Let’s get rid of bad APIs. This would also be responsible for demonstrating the differences [good and bad] of available APIs.
- Open Source: Not really a history of open source. But this is to take an open source project, and extend it. The goal of this project is to get students involved with working with one project, and demonstrating improvement to the project.
- Marketing: How to market your work, or someone else’s software. This isn’t designed to replace developers with marketers, but it just helps the developer understand how their work is sold.
- Automation: How to automate manual tasks with software. This could be with build scripts, batch scripts, testing automation software, or even simple system scheduling.
- From hardware to software: The goal of this class would be 2 things. To create a small embedded device, and then go all the way up the chain to a working software client. This would involve writing a device driver, interfacing with hardware ports, and using the driver. The second part of this class would involve creating a simple processor either as a circuit or a manual build. http://blog.makezine.com/2009/10/03/building-a-cpu-from-scratch/
- How Computer Science relates to [Field x, y or z]: This is more of an open ended suggestion. For example: Offer a class on Bioinformatics [It’s a class that combines biology, and computer science], combine a class on art and computer science (that’s more of visualizations though), history and CS [examine potential DSLs involved with history research], or even math and CS [shows the tools, and libraries that one can use in their application].
- How to crack software/re-engineer a binary: [Probably with the permission of the publisher] Crack a copy protection system. Many students know about software cracks, but very few actually know how to create them or how they work. The goal of this class would to familiarize the student with how software is compiled, and can be reworked after compilation. Also, this would demonstrate how to protect their application as well.
- Alternative Language Survey: Yes, this is technically a standard class. But I’d like to see one on functional languages, Groovy, BF, or even creating your own domain specific languages be taught.
- Community Service: This really isn’t as altruistic as the title may imply. This is more of a class to create a software component [as a large group] for a member of a local community. This could be a small interesting game [example I worked with a group for a class], or working with a small company or individual to improve or sofware-ize their product. Elon’s CS department did this a while back with the game deflection. even taking an existing board game [with the original creator] and making a software version. The goal of this class is to research market need, create something usable and getting their fellow peers involved in using it. This would help communicate to the rest of the students about some of the cool things that CS can produce.
- Author selected: Get an author of a quality software related book to teach a class. Have John Skeet teach a C# class. Paul Graham teach a class on LISP. Brian Goetz to teach a class on Concurrency.
- Hands on Software Optimization class: Take an open source system, and optimize it. This class would teach formal procedures on how to optimize an existing application to perform as quickly as possible, monitor, and document the improvements.
Last of all, these classes should be fun and engaging. If you’re not actively involving the student, don’t even bother trying these suggestions.