Wednesday, April 29. 2009phpTodo ... In Fedora!!Apparently I'm always the last to know... But.. I found out today that phpTodo, the todo list manager I wrote (and continue to write) has been included in Fedora. In fact, it seems it's been in there since Fedora 7. It's not in the main distribution, nor should it be, but apparently it's a maintained package. Thanks, Marc! Honestly, I'm truly honored. I wrote this on a whim and it has served me well. I use it every day! And since writing it, I've had a handful of people make suggestions and offer patches. I think it's been pretty successful for a small project. So, how about an update? Well, I've been working on phpTodo in my spare time, which, unfortunately, has been relatively lacking as of late. I have been able to add in a number of fixes and new features, however. The biggest change in the next release will be the removal of categories in favor of having tags. In using phpTodo over the years, I've noticed a number of times where I'd like to be able to put an item in multiple categories, and display multiple categories at once. While this may have been possible with categories as they were implemented, I think tags works a bit better. I've borrowed an idea from the Serendipity blogging platform to implement tags in a user-friendly manner, so I think the implementation works pretty well. I still have some more work to tie it all together, but it is coming along. Another change is the addition of the Prototype and Scriptaculous javascript frameworks. There are a few reasons I decided to go this route. First and foremost, it significantly reduces the amount of work necessary to perform cross-platform javascript operations. To date, I've used relatively simple javascript functions, mostly for front-line input validation, but with the addition of tags, I wanted to move into some more advanced techniques. I'm striving to keep it simple and not overdo it, so don't worry. And, of course, there are the various bug fixes that need to be added. Overall, I'm excited about the next release of phpTodo. I don't have a timetable as of now, but I'm hopeful that my free time will increase shortly, giving me more time to work on it. If so, then I'm optimistic about a new release sometime in the next 3-4 months. We'll see what happens. If you're using phpTodo, I'd like to hear from you. I'm interested in what you like and what you dislike about the program, the interface, the workflow, etc. What features would you like to see? What features would you hate to see? Thanks! Sunday, January 25. 2009CVS to Subversion...I've been using CVS for a number of years and it has served me well. I have looked at Subversion a number of times, but never really had the time to deal with it. That has changed somewhat and I have had the chance to use SVN a bit more recently. SVN feels a bit more elegant, and, in most cases, faster than CVS. But, I'm also having a bit of trouble as well. Perhaps someone out there can provide me with some insight into my problems. Most, if not all, of my recent coding has been in languages such as Perl and PHP. Additionally, I mainly code alone, so my use of a revisioning system is purely for historical data rather than proper merging. I also use CVS to handle updates of deployed code. This alone has proven to be the strongest reason to continue using a revisioning system. With CVS, I develop code until I'm ready to deploy it. At that point, I tag the current revision, usually with a tag of RELEASE. Code is then deployed by checking out the code currently tagged as RELEASE. From here, when I update the code for a new release, I use the -F flag to force the RELEASE tag onto the new code. A simple cvs update handles updating the deployed code to the latest release. If the deployed code was changed for some reason, as sometimes happens, CVS handles merging and I can make and necessary adjustments. Overall, this has worked quite well for some time. There are hiccups here and there, but overall it has been pretty flawless. Recently, I used cvs2svn to convert my existing CVS repositories over to SVN. After some false starts, some research, and a few minor headaches, I have all of my code converted over to SVN. I was able to get websvn running as well, which is a nice change as I can browse the repositories freely. I started playing around a bit and noticed that all of the imports have three additional directories, trunk, tags, and branches. More research and I discovered that SVN doesn't handle tags the same way that CVS does... This concerned me as I used tags pretty heavily for deployment. So now we come to my problem. I have identified how to create new tags using svn copy. This works great for the first copy of a given tag, but it breaks down when updating a tag. A second copy fails because the files already exist. I can use svn delete to remove the files before copying the new ones, but that's an additional step I have no desire to do. After all, the purpose of moving to SVN is to make life easier, not harder. After some more reading, I find that I can merge releases. Presumably, I can check out the tagged version and then merge changes from the trunk version. However, this is still more complicated as I have to merge the code and then commit it back to the repository. So, again, we have more steps than I want to deal with. I think I understand the reason behind not being able to copy twice. I'm also aware that the way I was using CVS was fairly non-standard, but it worked for me. The code base I normally worked on could have multiple features I'm implementing at any given time, and deployment of one feature may get prioritized. So, merely copying the base to a new tag doesn't quite work as not everything in that code may be complete at a given time. So what are my options here? SVN has some advantages that I really like, including the web view and better handling of authentication and permissions. However, being unable to re-tag is kind of a pain. One way or another, I think I'll be using SVN anyway, but I was kind of hoping to find a decent way to handle everything... Anyone out there have any suggestions? Wednesday, August 13. 2008Programming *is* Rocket Science!John Carmack is something of an idol to me. He's an incredible programmer that has created some of the most advanced graphical games ever seen on the PC. He also dabbles in amateur rocketry with his rocketry company, Armadillo Aerospace, whom I've written about before. I joined the Amateur Rocketry mailing list a couple years ago. The aRocket list is a great place to read about what's going on in the amateur rocketry scene. The various rocket scientists on the list openly discuss designs, fuel mixtures, and a host of other topics. There's also a lot of advice for both those getting into the game, as well as those who have been in a while. Recently, John posted a note about the Rocket Racing League and some advice about the programming controlling vital components of the jets. Unfortunately, the mailing list archives require you to be a member of the list to view, but I'll include some snippets of his post here.
Shutting off the engines on a regular plane is bad enough, but we're talking about a full-blown rocket with wings here. I can imagine that a sudden loss of engines is enough to cause a good deal of stress for any pilot, but losing the engines just as the plane is taking off could be devastating. Of course, the engine exploding could be pretty devastating too.
I've found similar situations in my own programs. There are areas of the code that I'll change, knowing it will have no real effect on anything else, and then there are those areas where changes are trivial, but they cause odd problems that come back to bite you later. Testing is, of course, the best way to find these problems, but testing isn't always possible. But then, I'm not writing code that could mean the difference between life and death for a pilot. Not *that* has to be some serious stress.
John's team probably runs tests more than any other team out there. He has successfully married the typical programming cycle with aerospace engineering. They constantly make incremental improvements and then run out to test them. And as surprising as it sounds, it seems to cost them less to do this. By making incremental improvements, they can control, to some degree, the impact on the system. What this means in the end is that they don't spend an inordinate amount of time building this huge, complex system, only to have it explode on the first test. Not that they haven't had their share of failures, but they've been a bit less spectacular than some. John also presented some additional info from his other job.
Small and simple is definitely the best. The more complexity you add, the more bugs and odd behavior pop up. Use the KISS principle! Monday, April 28. 2008Instant Kernel-ificationServer downtime is the scourge of all administrators, sometimes to the extent of bypassing necessary security upgrades, all in the name of keeping machines online. Thanks to an MIT graduate student, Jeffery Brian Arnold, keeping a machine online, and up to date with security patches, may be easier than ever. Ksplice, as the project is called, is a small executable that allows an administrator the ability to patch security holes in the Linux kernel, without rebooting the system. According to the Ksplice website :
Of course, Ksplice is not a perfect silver bullet, some patches cannot be applied using Ksplice. Specifically, any patch that require "semantic changes to data structures" cannot be applied to the running kernel. A semantic change is a change "that would require existing instances of kernel data structures to be transformed." But that doesn't mean that Ksplice isn't useful. Jeffery looked at 32 months of kernel security patches and found that 84% of them could be applied using Ksplice. That's sure to increase the uptime. I have to wonder, though, what is so important that you need that much uptime. Sure, it's nice to have the system run all the time, but if you have something that is absolutely mission critical, that must run 24x7, regardless, won't you have a backup or two? Besides which, you generally want to test patches before applying them to such sensitive systems. There are, of course, other uses for this technology. As noted on the Ksplice website, you can also use Ksplice to "add debugging code to the kernel or to make any other code changes that do not modify data structure semantics." Jeffery has posted a paper detailing how the technology works. Pretty neat technology. I wonder if this will lead to zero downtime kernel updates direct from Linux vendors. As it is now, you'll need to locate and manually apply kernel patches using this tool.
Posted by Jason Frisvold
in Programming, Security, Technology
at
17:28
| Comments (0)
| Trackbacks (0)
Thursday, April 26. 2007To optimize...... or not to optimize, that is the programmer's dilemma. Optimization is a powerful tool in the programmer's arsenal, but one that should be used sparingly and with care. The key to optimization is identifying what exactly to optimize.
Shawn Hargreaves, creator of the Allegro game programming library recently posted a link to the blog of Thomas Aylesworth, a.k.a. SwampThingTom. According to his blog, Thomas is a software engineer for the aerospace and defense industry. He's also a hobbyist game developer. Tom's first foray into the world of blogging is a series of posts about optimization, specifically targeting XNA based games. In his first post, he explains the importance of design and what Big O notation is. His second post delves into prototyping and benchmarking, complete with examples. In part three, he introduces us to the NProf execution profiler as well as pointing out a few other potential bottlenecks. Optimization in general is something you shouldn't really need to worry about until the very end of the development cycle, if ever. Optimization is a great tool for squeezing just a few more cycles out of your code when you really need it. What you normally don't see, however is a significant increase in speed. If you're looking for a significant increase in speed, take a look at your underlying algorithm. Generally speaking, unless you're writing extremely specialized code, optimization should be used very sparingly. You're better off looking for the elegant way to solve your programming dilemma. Look into alternative algorithms or possibly re-design the data flow. If you're not sure where the bottleneck is, look into using a code profiler, or simply add debugging statement that surround suspected "slow" code. You'll usually find that a poor design decision is causing the bottleneck and that a simple re-design can result in huge speed increases while keeping your code readable and maintainable.
If you're interested in optimization, or even just curious, take a look at Tom's articles, they're a great read.
Posted by Jason Frisvold
in Programming
at
22:23
Defined tags for this entry: optimization, programming
(Page 1 of 4, totaling 19 entries)
» next page
|
Calendar
Momentary Wisdom"It is in your moment of decision that your destiny is shaped"
LinksCurrently Reading...TagsSyndicate This Blog |
|||||||||||||||||||||||||||||||||||||||||||||||||




