Corner of Seven Helping Tech and People to Get Along

22Jan/100

DNN Module Creation, Explained. (part 2)

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 .


  1. 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.
  2. 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: Site Creation Dialog
  3. 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: DNN Install WizardClick 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).
  4. 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.
  5. 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: DNN Module Creation Finally, Create the solution by pressing "OK".
  6. 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.'
  7. 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: Module Creation Page 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.
  8. Hope that this helped anyone needing it.

22Jan/101

DNN Module Creation, Explained (part 1).

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.

10Nov/091

Quandary (part 1)

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)

3Nov/092

RbEQ update

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.

31Oct/090

Eclim and Android

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. :)

28Oct/090

Don’t Break the Chain

After reading this post on LifeHacker, I couldn't escape the feeling that I should start doing something like this.  I mean, it works for Jerry Seinfeld, it can't be all that bad. :)

Basically, as described on the link above, the idea is that you keep a daily calendar of all the specific goals you want to accomplish.  Every time you do something related to a goal,  mark off the day on the calendar.  Once you have a few days consecutively, that is a chain.  The object of this motivational strategy: Don't Break the Chain. Seems like a simple enough thing.

In the spirit of bringing in new ideas in order to make things work, I'm going to use a modified schedule, but the chain still takes effect.  Different days for me will be devoted to different goals/tasks.  Mondays and Thursdays I tackle some Ruby code, so I can stay fresh and learn about some of the newer developments that I've missed, having been out of the Ruby loop for a while.  Tuesdays and Saturdays are devoted to Corner of Seven.  That's right, you might actually see more blog posts. In addition, I'm looking at building new and experimental pieces onto the domain, including rails and Java webapps, and playing around with php and python, so I can apply these to the blog, and keep the site as a form of digital portfolio.  All of my things will be up here, so it makes it more centralized.

Motorola Droid

Motorola Droid

Finally, the big hurdle in my calendar, and what is to be the biggest chain - Android.  I've been looking at the mobile phone operating system for a while now, but haven't had the drive to fully enter in and create things for it.  That is, until I saw (and afterwards, held) one of these.So, starting today, once a day I will try to do something new in terms of Android development, in an effort to increase my skill and knowledge in the mobile OS.  Hopefully we'll get to see some neat little apps come out of this "Don't break the chain" mentality.  Hope you're along for the ride - I guess we'll see come every Tuesday and Sunday.

Cheers for now.

12Aug/092

The Job Hunt is Over, and RBeq moves!

I've found a place to work, and it's right around where home is.  I'm currently working as a contractor on the Rock Island Arsenal, as a contractor through a company based in Virgina called Sysorex.  Essentially, I'm reviewing and cleaning up code written for a transportation system.  Outside of that, Rhythmbox EQ has found a more permanent home over at Google Code: Check it out here to see it in all it's new, shiny, google-fied glory.

Outside of that news, not much new going on here.  I'm single again, as Laura has decided she no longer feels anything for me.  I'm still a bit pissed off about the whole thing... it doesn't seem like she's losing much out of the arrangement (her parents never really liked me anyway, to the point of her dad saying that he wouldn't come if we got married), where it's been the second time I've contemplated giving her a ring.  Hooray for putting too much emotional attachment on something that doesn't work.  But, in the process of that recovery, I've found a fantastic music group and group of friends that I couldn't have ever imagined.  Toting the name I Fight Dragons, their music is part rock band, part 8-bit NES game, all crazy fun and awesome rolled together.  I suggest heading over to theSixtyOne and listening to them.  I've gone to one of their concerts, and am planning on going to another one at the end of this week. I've also made lego figurines of their 8-bit caricatures; some of the results of that:

Packy - Guitar, NES

Packy - Guitar, NES

Dave - Drums

Dave - Drums

Bill - Plays what I refer to as the Octo-pod

Bill - Plays what I refer to as the "Octo-pod"

Laura - Vocals and Controllers

Laura - Vocals and Controllers

There are two more of the band members, Brian and Hari.  I didn't forget them, I just ran out of legos. :)

I do need to get on here and put up some more things on occasion; I just don't always have something to talk about, and so things get lost in the process.  I was humbled when I realized this comic was talking about me: http://xkcd.com/621/.

Have a good day, and I'll catch you guys on the wire sometime. :)

11Jul/0923

Rhythmbox EQ update!

Update: Today RBEQ 1.3 was released.  Find it on the google code page.

Yes, a month plus later than expected, RBEQ version 1.1 is out. :)

Updates since the last release:

  • The window for the equalizer no longer wrests control away from Rhythmbox itself.  This makes it easier to change the EQ and play with volume and songs to get things working optimally.
  • Added GConf hooks to allow persistent states for the equalizer between sessions.  Most requested feature from the previous release.
  • Full base-code rewrite, much cleaner to work with and understand.

Next up, adding a load-save functionality to the EQ so that you can swap settings on the fly.

As always, the download is located here, and the install instructions are the same.

Download from http://rbeq.googlecode.com

Installation instructions:

  • Open a terminal, and enter this:

tar -xvzf rbeq-1.3.tar.gz -C ~/.gnome2

  • That's it!  You're set.

Hope that this release is as popular as the last.

Chris

28Apr/0948

Rhythmbox EQ

UPDATE: The Rhythmbox EQ has been updated.  You can find it at  google code.


Good evening everyone!

I've finally gotten to the point where my basic rhythmbox equalizer is up and running, so I figured I'd let the package sit here as an available download.  I'll also link it to the rhythmbox devels, in hopes that it generates a bit more interest, and someone might come along and clean up and add to it more, in the true open source sense.

You can download the package here: Click Me!.

Installation instructions:

Uncompress this package using an archive utility (file-roller) to the ~/.gnome2 directory, or use the following command:

tar -xvzf rbeq-1.3.tar.gz -C ~/.gnome2

And that's it!  Open rhythmbox, and go to "Edit -> Plugins" and select "Rhythmbox Equalizer."

Screenshot (by request):

Screencap for the Rhythmbox EQ.

Screencap for the Rhythmbox EQ.

It feels good to finally have a project of my own out there to help the community. :)   Ciao!

26Mar/092

iGoogle vs. Netvibes

In the realm of personal web startup pages and managing, these two titular offerings stand out.  I offer to you as readers the option to try out both, in hopes that one of them sticks for you.  For me, it makes the time working around trying to find my usual morning reads of pages, blogs and activities like twitter and facebook that much easier to take care of.