A new version of RBEQ, the Rhythmbox Equalizer plugin that I’ve been hacking away at, is out for public availability. Of course, this means that I have to go update all of my previous links to point to the new download. For ease of accessibility, you can find it at http://rbeq.googlecode.com, as the featured download. Installation instructions are the same: download the file, open a terminal, and type:
tar -xvzf rbeq-1.3.tar.gz -C ~/.gnome2
New in this release:
The ability to save and load presets. This has been a big request, and I finally found a decent way of handling it.
Layout cleanup and arranging to add in the new preset functions.
Backend code cleanup, so that it behaves more python-y. I’m not a python programmer, so this has been a neat experiment in trying it out.
Thanks to all out there who have used and enjoy the past versions of this plugin. Hope that the new one is to your liking.
I received a phone call from my Mom earlier this week, posing what would seem to be a simple question: “Could you help come up with something to manage the pinewood derby at the beginning of March?”
Little did I know that it was going to become a rather taxing endeavor.
The first step has been figuring out the best way to generate heats. Given m entrants and n lanes, there must be m/n, rounded up, ‘heats’ in order to make sure everyone has raced the same number of times. Some of these heats would be less than the number of lanes, but should be set up to be not only most fair to racers, but keep the scoring as even as possible.
I started out to see if, given m entrants and n lanes, if it was possible to have a true round-robin tournament; that is, make every racer have a race against every other entrant, and have each racer have the same number of races. That would make the calculations for the winner the simplest. Unfortunately, while easy on paper, it becomes impractical in real life.
For example, say we had 8 racers on 4 lanes. In order to achieve a true round-robin state, we need to have 8C4 races, or 70 heats, in order to satisfy the above conditions. Now, in practicality, do you think it’s possible to have 8 elementary school students sit patiently enough through seventy races? I didn’t think so either.
My current goal is to make a heat generator out of some form of predictive system. Using a map of entrants to see how many times one has competed against another, the generator picks the least raced candidates, in order to keep fairness at a maximum. There are some other things to take into account for the day, like damage, re-races, and run-offs for ties, but those become part of the operation logic. The true core of this is creating the heats for each level, and keep track of the points received for those races.
As everyone is quite aware, Apple’s release of their tablet, now known as the iPad, was announced yesterday. With their own System-on-a-chip processor, near-10″ screen, and storage sizes ranging from 16-64 GiB, these pieces of technology are impressive at their price point, even for a non-macHead.
However, the overwhelming response to the announcement yesterday was that of its name: “iPad.” Throughout the afternoon, the 2nd-highest trending topic on twitter was ‘iTampon,’ a not-so-subtle play on the name. Many jokes set in along the same lines:
This led people to question: “Who in their right mind would use this name? Especially considering this MADtv Clip?”
Others: “Were there NO women on Apple’s naming board?”
Personally, I think Apple knew EXACTLY what they were doing. It thrives off of the idea that “any publicity is good publicity.” Everyone now has the name iPad stuck in their mind, even if it was because they heard it in a joke somewhere. They know what the device is, and they knew about the MADtv sketch. As these things get passed around more and more, it will create more interest in the actual device.
On top of that, Apple’s fans are the some of the most extreme technology followers, even worse than Stallman, et. al. in the GNU/Linux world. These people, who would buy the device anyway, coupled with the tech world, who is actually impressed with the functionality, makes me think that even with the interesting choice of name, they’ve still got a hit on their hands.
I put my resume up for availability as I’m not quite certain how much longer I can stay at my current job. I’ll be looking around for things to work on in the Dubuque area, so if anyone knows of any open positions, please let me know.
The resume itself can be found here, or just use the link at the top of the page.
Let’s assume for the sake of presenting this, that you have a copy of SQL server Express 2008, and Visual Studio 2008. Not that this is the only system you can run DNN on, but the only one I’ve ever tried doing this with. Once finished, we will have an instance of DNN running, and the default compiled module, with a LINQ Data Access Layer added in Part 3. Thanks to Mitchel Sellers for his description on how to build DNN modules here: http://www.mitchelsellers.com/blogs/articletype/articleview/articleid/179/developing-a-c-wap-module-in-dnn.aspx .
Get a copy of DNN. We can’t really use it without getting it, now can we? From this page, pull down the Visual Studio starter kit. After installing, you should be able to build DNN sites and projects from Visual Studio.
Create a new Web Site project. Open up Visual Studio, and create a new Web Site project (WSP). Make sure that ‘Visual Basic’ is chosen as the language (don’t worry, you won’t have to write much VB), and choose ‘DotNetNuke Web Application Framework’ as the project type. Give it a place to live, and verify that everything looks right:
Build. The site comes ready to go out-of-the-box, so either hit ‘Start without Debugging’ from the ‘Debug’ menu (thanks VS), or press Ctrl+F5. After building, a browser window will pop up, and you will be face-to-face with the DotNetNuke Installation Wizard: Click on the “Auto” option to have the site automatically set up a SQL Server database file, and default administrator and host user credentials. NOTE: If you don’t have the “Auto” option selectable, because of a SQL Server error (it’d show up in red on the bottom of the screen), something’s up with your sql server install. Either hand configure your server (outside the scope of this tutorial), or fix SQL Server (also outside of the scope of this tutorial).
Open a new instance of Visual Studio. There might be a better way around this, but I haven’t found it yet. The instance holding our web site project needs to stay up, so we keep the web site running.
Create a new Compiled Module Project. In our new instance of VS, go to ‘File -> New -> Project…’ Pick your preferred language (I’m going with C#), and under ‘Project Types:’, select “Web.” In the ‘Templates:’ window, under My Templates, select DotNetNuke Compiled Module. Give the module a meaningful name. IMPORTANT! Follow these next steps TO THE LETTER, or this doesn’t work. Make the project’s location point to the DesktopModules folder inside our web site, and DESELECT the checkbox that says ‘Create Directory for Solution’. It should look something like this: Finally, Create the solution by pressing “OK”.
Run the database script. One of the files created along with the rest of the Compiled module project (or WAP project) is ‘xx.xx.xx.xx.sqlprovider’, where the xx represents a version number. This script generates the SQL tables and stored procedures for handling the new module. We need to run this so our Data Access Layer has something to access. In the web site, log on as host, with the default username and password ‘host’ and ‘dnnhost’. Once logged in, go to the host menu, and find SQL. Copy the contents of the sqlprovider file, and paste them into the text box. Important: check the box below the text box that says “run as script.” This allows DNN to replace generic pieces in the script with their specific counterparts provided by DNN. Run the script by pressing ‘Execute.’
Install the module. In the website, go to host->Module Definitions. From here, at the bottom of the page, there should be a link that says ‘Create New Module’. Click that, and this menu pops up: in the Dropdown, select ‘Manifest’, and the page will reload, with more options. Under Module folder, select your module, and the page refreshes again. a modulename.dnn file should be in the ‘resource’ dropdown. Hit ‘create module’ to put the module into your website.
Since I haven’t shown up here for a while, I should talk a little bit about what’s been going on in my life. I’ll keep it short.
December: Left my job in Rock Island, was in a musical at Quad City Music Guild, Found a job in Dubuque at 365Advantage, lived in a suitcase until I found an apartment, worked on mobile phone development.
January: found an apartment, continued phone development until our other two developers left, was told in a week to learn DotNetNuke module development.
So here we are.
I’ve had some consternation in trying to figure this framework out (I come from the Java n-tier and Ruby on Rails MVC worlds). The biggest is getting my head around WebForms. For some reason, carrying state of pages between each other seems dirty to me, compared to handling everything by referencing the entities themselves (a la REST). I’ve even googled it:
Turns out that’s not how they do things in the DNN world.
Through some aid via the book Professional DotNetNuke Module Programming and the books author, Mitchel Sellers, I think I’ve slowly gotten a hang of the basics.
On the face, DNN is a CMS. Compare a default install with something like vanilla Radiant or Wordpress. But most people forego that aspect of it, and use the portion of DNN that they’ve become known for: pluggable modules.
You would think that a system that was built to be completely modular would make it easy to build modules, right? I WISH. Maybe it’s just me, but I shouldn’t NEED Visual Studio, SQL Server Management Studio, and some magic to build a module. Then again, I come from Java and Ruby, where I’m not tied to an IDE. DNN Module building requires it, though.
Now that I’ve finished complaining, Part 2 will demonstrate how I’ve managed to get around this, and use the services that .NET provides (like LINQ to SQL) to make DNN Module building as painless as possible.
I wish to pose a question to the masses, particularly to other available software developers. Take this statement:
“The more screwed up the process, the longer you have a job.”
How does that make you feel? Does it bother or amuse you? Would you feel uncomfortable hearing it from a coworker? A boss? When does the statement cross the line, if ever? As a programmer, you strive to produce the best product possible. When is there a “good enough” point? If something is broken, but acceptable, is that ethically capable of being released? Is a project that has no (unit, acceptance, ui, etc.) testing capable of release?
Let me know in the comments.
(PS: wrote this post from my Motorola Droid, which I’m having an absolute blast with)
Not really an update of the software per se, just letting everyone know I haven’t forgotten about it. I have two computers at home; one desktop mainly purposed for gaming and general usage, the other is an older, low-powered notebook that I end up doing most of my development on. In the past few months, things have slowed down with rbeq because both of those systems have been outside of the GNOME environment. That’s right, I’ve moved to KDE4. I know quite a few people who find this odd, but it’s because of the new direction that GNOME is taking with G3.0, and I don’t necessarily want to be a part of it. I know some of those on the team, and I wish them the best, but the new changes, like Gnome Shell, frighten me off, like the initial releases of KDE4 did for me. I was a long time KDE3.5 user, and when they took the plunge, I got off of the boat. Things have been settling in nicely now at KDE4.3, which I’m running on Kubuntu 9.10.
That being said, I saw that someone was having trouble with the recent release of Ubuntu, and so I thought, as maintainer, I should, well, maintain. I’ve got Rhythmbox pulled down onto the laptop, and I’ll throw a couple of songs and the plugin on there, to see how everything behaves. Hopefully, there should be an update with some added functionality (saving and loading preferences was a big request) by the end of November.
Since deciding to start working with Android and see just what I would be able to accomplish with the SDK and devices, my biggest hurdle so far has been Eclipse.
Now that most of the Java developers have now either cringed, cried, or shot themselves, I’ll explain why. From the outset, I have never liked Eclipse. Something about the way the program is presented, coupled with the fact that I could never seem to get it to act the right way (either something was going haywire, or breaking, or the IDE would crash in front of me). During college, there was a brief push to get us to try Eclipse, and that’s where my dislike of it began. We were moving from BlueJ (which, although it serves as a nice Java text editor, doesn’t really count as an IDE in my mind) to Eclipse, roughly around the same time that Netbeans 5.0 was coming out (late 2005, for those keeping track). Once I started working in Netbeans, I saw no reason to move back – things behaved when I asked them to do something. When I made a new class, it automatically put it in the right package (Eclipse: Default package? What?), When I added a wsdl reference, it allowed me to edit it on the fly, and auto-generate the interface class for me. It was perfect for any big Java job I needed. Anything smaller, and I’d drop to a text editor, like KDE’s Kate, or vim. I essentially lost any reason to go back to eclipse.
Fast forward 4.5 years. Android is coming out big. I mean, Really Big.Phone announcements like the HTC Hero, Motorola Droid, and Sony Ericsson XPeria X3 have captivated the tech world, and even some people outside of it. It’s around this time that I decide to buckle down and really start on some Android development (it gave me a reason to buy a new phone, too, but that’s beside the point ). Unfortunately, I found that Google, in their infinite wisdom, had chosen Eclipse as their base platform for Android development.
Naturally, I first tried it on it’s own again, to see if anything had improved. Certainly it did in the four years of not using it. But things still felt uncomfortable. Load times were atrocious, and the interface was not nearly as snappy as what Netbeans provided. When I tried a plugin for Android in Netbeans, though, things were shaky at best. I wasn’t sure whether or not the correct things were loaded, it didn’t have AVD controls, and other issues kept me at bay.
It wasn’t until this morning that I found the answer. Often times, when I’m faced with editor anger, I turn to a more lightweight friend: VIM. I know that there is a lot of power packed inside this text editor, I’ve just never had the energy to learn about all of it. That may change, as I stumbled upon this page in my android search today: http://jyro.blogspot.com/2009/05/android-development-with-vim-eclim.html. Go ahead – visit. Take a while to soak in all that it says and provides. I’ll be here when you get back.
See, that’s awesome. I went out and immediately pulled down this Eclim extension, which acts as a handshake between what Eclipse provides on the back end (error checking, dependency resolution, and automatic imports) without the headache and body of running eclipse on it’s own. I’ve been working with this for the better part of the day so far, and let me tell you, it’s been fantastic. I’ve been working on the Sudoku example given in Ed Barnette’s book “Hello, Android!” (get it if you’re interested in Android Development), and can’t believe how fast it’s being put together. Best of all, it lets you do this in VIM:
Now, if you ask me, that’s pretty cool. Back to code.