|
www.brianziman.com
Linux – Java – Web – Questions Answered, Problems Solved
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Brian Ziman about contact terms of use privacy policy activity site map |
Welcome to www.BrianZiman.comWelcome to your source for high quality freelance coding, research, and training in Northern Virginia. If you need to build a simple Linux system for your home office, or set up a sophisticated file server for your company, with in-office training for you and your staff, I can help. Do you need a custom application written in Java or PHP? I can help. Want to learn how to write code for yourself? I can teach you. Do you have a business idea, but no idea how to implement it? That's what I do. Linux. Java. Web. Questions answered, problems solved. To get started, please use the contact page to send me a note, then watch, as your problem is solved. If you are interested in learning more about what I do, please take a look at my résumé, or browse my technical blog, below. Job Opportunity: UI Developer, Reston, VA (Monday, July 26, 2010)A young, high-energy technology solutions provider is looking for a Web Application Developer who has great breadth and depth of skills, and who can flourish in a fast-paced, demanding environment. They use Flex, Javascript, Python/Django, and Java. In this role, you will perform technical design, code implementation, unit testing, and integration testing. You will be expected to manage code using git. This is a role for someone who wants to challenge themselves and learn every day. Requirements:
Contact: Kelli Rice Hrivnak, Life Search Technologies, 443-578-5135. IT 306 001 Data Structures - GMU Fall 2010 (Wednesday, July 21, 2010)As luck would have it, I will be teaching another class for the Fall semester. This time around, it's IT 306 - Program Design and Data Structures, the three credit sequel to IT 108. Really, it's the sequel to IT 206, but this will be the first semester that IT 206 has been offered, so no one has taken it yet, so that's where that comes from. The course meets at the Prince William campus in Bull Run Hall, room 247, on Tuesdays from 4:30 PM to 7:10 PM, and I will hold office hours by appointment after class in the adjunct faculty closet on the first floor. The text book for this class is Deitel's Java, How to Program, which is a bit of a monster, so hopefully you've got bags with wheels. Your TA will be Minu Hariharan. This is going to be a programming intensive class, where you will be writing an awful lot of Java. It's probably going to take me a while to get all the materials for the semester put together, but I hope to have everything done in advance of the start of the semester, next month. In the meantime, if you need to contact me, please send e-mail to bziman@gmu.edu. Any message not sent from your GMU account and with "IT306" in the subject line will probably be eaten by my spam filter. All of the material for this class will be posted on the GMU Blackboard site, as it becomes available. Job Opportunities: Metron Aviation, Dulles, VA (Wednesday, June 30, 2010)Metron Aviation has just won a ten year, billion-plus dollar FAA contract to help develop the Next Generation Air Transportation System and is now hiring for the following positions:
Visit the Metron Aviation careers site to apply, or send me your résumé. IT 108 001 GMU Spring 2010 Wrap Up (Thursday, May 20, 2010)Okay, so I'm a little behind on my updates, but I figured I'd better write up my thoughts on IT108 now that the semester is over. My first goal for the semester was to motivate my students, and keep them interested in programming, even if they find it challenging, and aren't sure how it could possibly be of any use to them. Well, out of the thirty students originally enrolled, only a handful dropped the class, and twenty-one students made it all the way through to the end. And most of those showed up to every class. From what I hear, that's a lot better than the average for this class. What wasn't better than the average were the grades. Only six students passed the class, and that's mostly due to the dismal performance everyone had on the exams. While many students made huge improvements on their programming assignments as the semester went on, the results on the final exam were every bit as dismal as the results on the midterm. Despite the improvements that students made on their programming throughout the semester, their performance on the exams indicates that they really didn't have a firm grasp of what they were doing — you can write a program without understanding how it works. Next semester, I need to work harder to make sure students are understanding, as well as just doing. I think that's going to mean walking through many more examples, and having more practice assignments that resemble the sort of questions the students can expect to see on the exams. I think one of the reasons the students had trouble, was because I dumped a lot of really heavy theory on the class at the beginning, and I think I need to start with much simpler assignments. On the other hand, the students had tremendous difficulty with even basic problem solving — a skill that all college students should have. I fear many of my students would be unable to coherently explain the steps for solving a problem, even if it didn't involve Java. Another major problem the students had throughout the semester was meeting the required formatting for their submissions. The design diagrams and Java programs have a specific required format. It should make it easier for them to write, as there are fewer variables — it's like the difference between short answer and multiple choice. When you just have to choose from a handful of operations, and assemble them in the correct order, that should be a lot easier than coming up with your own operations. But the students just couldn't get the hang of it. I gave them a ton of code, but they couldn't recognize the pattern and get the indentation and formatting the same. I don't see how anyone can expect to do well when they won't do the simple stuff. Of course it's not entirely their fault — there's just too much crammed into one class, and the department recognizes that, and starting in the Fall, they're breaking the programming requirement into two classes: IT106 and IT206. Of course this doesn't really help my students. The students who did not pass have two choices. They can either re-take IT108, in which case the grade for their second attempt will replace this attempt in their GPA; or they can change to the new catalog year and take IT106 and IT206, which would be better for their learning, but worse for their GPA and add yet another semester to their program of study. So here's my advice. If you averaged better than 80% on the programs and project, then you should probably re-take IT108, and you'll have a much easier time at it. For you, taking IT106 would probably be a waste of time, since you probably already have a good grasp of all the material that will be covered there. If you did not achieve at least 80% on the programs and project, then you're pretty much going to be starting from scratch either way. Only two of the students who were re-taking IT108 passed on their second attempt. If you aren't at least somewhat confident in your ability to do the projects from the class, you would probably benefit from switching to the two-course track. If you're not sure what to do, and want advice specific to your case, or if you have Java questions, or IT questions, or really anything, please feel free to contact me. I really appreciate the encouragement and positive feedback I received from the class all semester. It's good to know that I'm making a positive contribution. Now all I need to do is get the pass rate up! IT 108 001 Programming Fundamentals - GMU Spring 2010 (Tuesday, December 22, 2009)I will be teaching IT 108 Section 001, Programming Fundamentals, for the Applied Information Technology department at George Mason University in the Spring semester of 2010. I've noticed that a number of students have been trying to find out who I am, since my name was added to the course. At some point, all students will have access to Blackboard, where the syllabus and other course materials will be posted. These materials are not yet available, but I hope to have them up well before the start of the semester. The university is also having difficulty provisioning my GMU e-mail account, so right now, there is no good way to contact me for course-related issues. I'm posting this message as a courtesy for students who are like me, and have to know as much as possible in advance. In general, I will not be posting course-related information or material to this site during the semester. Enjoy your winter holiday! Update! My GMU e-mail account has finally been fixed, so please direct any course related correspondence to bziman@gmu.edu. Any message not sent from your GMU account and with "IT108-001" in the subject line will probably be eaten by my spam filter. Job Opportunity: webMethods Developer, Longmont, CO (Thursday, October 15, 2009)DigitalGlobe, Inc., a profitable, fast growing technology company, who operate earth-imaging satellites, and provide commercial imagery solutions, is seeking a webMethods Developer with in-depth expertise in software design, development, and implementation of Enterprise Application Integration (EAI), Enterprise Service Bus (ESB), and Service Orientated Architecture (SOA) using the webMethods product suite 7.x or greater. Desired skill set: Three to five years using the webMethods Product Suite, five years Java development, solid understanding of web services, web development experience, bachelor's degree in I.S. or equivalent experience. U.S. citizenship required. Contact: Mike Nemeth, DigitalGlobe, Inc. Ignoring Spurious Repeated KeyAdapter Events in Java (Friday, October 9, 2009)When running in an X11 environment, it appears as though either Java or the windowing system stupidly generate lots of repeated key events when you hold a key down. As it is impractical to get users to reconfigure their systems, and Sun seems unable to fix this issue (having been reported nearly ten years ago). I have written an adapter that is an attempt to filter out the useless events, and released it here as open source software. Many people have whined about this, but few have fixed it. Some have tried, but their solutions are not as clean as my OCD nature requires. Here are some examples of what this is meant to handle:
The goal is to generate a KeyPressed event when a key is pressed, and to generate a KeyReleased event when a key is released. And ONLY when a key is pressed or released. LinksHarmony One, Streamzap, EventGhost and XBMC, Oh My!(Monday, March 30, 2009)Last month, I announced that I'd finally got my media center PC up and running, and outlined quite an extensive to-do list to make the system truly usable. The first task was to get a remote control to operate the PC, and after reviewing the devices supported out-of-the-box by EventGhost, a utility that allows you to capture events on Windows (like a pressed key on a remote control) and respond appropriately (like emulating a keyboard button, which is the easiest way to control XBMC), I chose the Streamzap remote, as the lowest cost USB remote that appeared to have the necessary number of functions. One quick note — apparently, someone has been working on direct integration between EventGhost and XBMC, however there are way too many references to "the latest beta" for me to bother with it. I prefer to stick to stable releases. And while the forum claims Harmony support, you'll probably still have all the issues between the Harmony and the Streamzap that I walk through below. With a little tweaking, the Streamzap remote works very well with EventGhost and XBMC. I'm using the default Keymap.xml that is found in the System folder of the XBMC installation. After installing EventGhost, I exported an XML version of the configuration, which is much easier for me to work with than the GUI (though, the GUI is fairly good, as much as a GUI can be). I then heavily customized the configuration (download my evg3.xml to import into EventGhost):
At this point, it was time to replace the Streamzap and the plethora of other remotes with the Logitech Harmony One Advanced Universal Remote. Even if I wasn't obsessively trying to simply my entertainment experience, the Harmony One provides a significant step up from the Streamzap remote. While the Streamzap IR receiver provides enough distinct functions to operate XBMC, it is necessary to assign those functions to buttons that might have otherwise been designed for something else, or worse, simply given a color, which my feeble mind is incapable of remembering. So, the goal was to set up the Harmony One with logical mappings between the buttons on the remote and the functions that are actually run on the media center. Configuring the Harmony One should have been a relatively simple task. Unfortunately, it has been cursed with the world's most feeble software utility. You know you are in for pain and suffering when the first thing an application tells you to do is to change your screen resolution. The application then goes on to be totally unusable with only the keyboard. Never mind that it is totally incompatible with Linux (and I really do prefer not to install poorly written, untrustworthy software on the Vista media center system, as I considering the stability of Windows to be tenuous at best). Fortunately, there is a (slightly) simpler approach. After you've installed the software, you can go directly to http://members.harmonyremote.com/, where you can use your browser to perform all of your vital functions — when the time comes for it to interact with the remote, your browser downloads a firmware image that the software knows how to install. That part, at least, seems to work pretty well. So the first thing I had to do was set up a bunch of activities on the remote, so it could operate the television, the receiver, the TiVo, and the DVD player. That was fairly simple — the device catalog knew about each of these. One key point for me, is that the volume controls always go to the receiver, which allows me to overload the mute button on the Streamzap remote, for that one extra function! Unfortunately, Logitech's device catalog fails completely when it comes to the Streamzap remote. There's an entry for the device. But not a single button press is recognized by receiver. In the end, I had to have the Harmony One manually "learn" each and every button on the Streamzap remote. That didn't take terribly long, except for the wasting of several hours figuring out that it was necessary. You need to be really careful while you're doing it, too, because I apparently mispressed a button, and had to go through the process again to fix it. Once you have taught the remote how to send the right commands, you actually need to map the buttons to the commands. From the web interface, you need to customize your PC activity, and then click on the link to change the behaviour of the buttons. All of the buttons on your Harmony One should be listed, and you'll need to specify a device and command for each. All of the buttons are moved to the PC device, except the two volume buttons and the mute button, which go to the receiver. I also set up five "Additional Buttons", which show up on the device menu on the Harmony One's screen. A few are actually duplicates of hard buttons, but with my memory, sometimes it's hard to remember what button does what. Here's the complete mapping of buttons to commands to keystrokes (in the order that they appeared for me on the Logitech web site):
Here are the noteworthy items that merit further discussion. I've become very used to the "skip back a few seconds" feature of my TiVo, and it took me a while to figure out how to do it with XBMC. It turns out that during video play back, the left and right arrow buttons do a skip back and skip forward, with a default interval of 30 seconds. For skipping forward, that's just about right for a commercial, but for skipping back after you've missed a few seconds of dialog, or whatever, is way too much. It turns out that this can be configured via the AdvancedSettings.xml file, which you need to create in your UserData folder. It took me a while to figure out that this is NOT the UserData folder under the XBMC directory, but rather (at least on Vista) the UserData folder in your user directory. For other platforms, see the FAQ for that platform. I created a version of the file that contains two sections. One with the actual customizations, called "video", and a bogus section called "videoAllSettings" which contains the all of the possible video settings, along with their defaults, for my own future reference. The only really meaningful customization is changing timeseekbackward from -30 to -5. (Download my advancedsettings.xml and copy it to the appropriate UserData folder.) The other noteworthy item is that the Streamzap IR receiver doesn't have the ability to wake the PC from S3 sleep. It should have the ability to do so. The documentation from Streamzap says that the receiver "doesn't provide enough power" to do so, but that's nonsense. If you have your BIOS configured to allow a USB device to wake the computer from S3 sleep, then the IR receiver should stay fully powered, and the hardware should watch for a "power on" command. Unfortunately, I'm not sure if that's something they can fix with a driver update, or not. Depressingly, my proposed workaround is both expensive and complicated. Currently, I wake the PC from sleep by sending a magic wake-on-LAN packet from my laptop. This is only temporary. I am in the process of setting up a full Insteon-based home automation system. One of the niftier Insteon devices, is the IRLinc IR receiver. This will allow me to (at least in theory) configure the Harmony One to send commands to the home automation system. Since I'll be routing all of the home automation commands through a central server using the Insteon PowerLinc Serial Modem, I can just have the server watch for the "turn media center on" command, and issue the magic wake-on-LAN packet. This would be a total deal-breaker for the Streamzap, if I weren't already planning on adding these other components. If that's way too much for you to deal with, your other choices are leaving the PC on all the time, or using a more sophisticated IR controller, such as the Microsoft Windows MCE Remote (which I actually wanted, but couldn't verify actual continued support for from Microsoft). So that's what I have for you for now. Stay tuned as more details emerge. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
All material copyright © 1995-2010 by
Brian Ziman, unless otherwise noted.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||