Blogs
Tagged:  •  

Well that didn't take long! An excited user has dugg isfound.at(and even created an address for it at http://dugg.isfound.at). How exciting is that?

Tagged:  •    •    •  

After the brief 'super beta' of isfound.at, I am more than happy to announce the new and improved version!

Isfound.At is a new service that provides anyone with an OpenID to create a simple, easy to remember, and fun alias to whichever website they would like. All of a sudden anyone can turn their long web address into http://.isfound.at. See how simple it is?

Check it out at http://isfound.at.

Please let me know what you think about. If you like it, tell your friends. If you hate it, well, tell them anyways!

Enjoy.

Tagged:  •    •  

Woo! After years of talking about it, I have finally implemented some functionality into the isfound.at idea.

The whole plan is to allow users to easily create a easy to remember domain, and allow it to redirect to whatever urls they want. Using a simple form, users can create something like http://justin.isfound.at (Justin Is Found At...get it? Clever, I know. ;-) ), and it will simply redirect to the url they specify.

Currently there is a very very beta version of the site online. Check it out at http://isfound.at! This is so beta, I didn't even include instructions on how to use it, but hopefully it is pretty straight forward. Release early, release often I suppose.

Please, please, please if you find any bugs, let me know. Feel free to leave a comment, or give me an email. Or both!

Expect some better versions to come out soon, with expanded functionality.

Woo!

Tagged:  •  

Well, things probably look a bit different around here. I try and remind myself that while change isn't always good, in this case it is great.

Recently Mike Burns and I went in together on purchasing a new server to host all of our sites, along with some new projects that we have been working on(WePay for example).

Mirwin Server

After a couple long days of work, we are finally up and running to full capacity. No longer will we have to use the free virtual hosts so kindly offered from friends(Thank you!), and no longer will we have to worry about unexpected downtime. What a glorious thought.

I urge you to keep an eye on Mirwin as we continue to work on the site, and look out for future updates about what the Mirwin guys are up to.

Stay tuned for much more to come.

Tagged:  •  

Well, the time has come. I am now sitting in my hotel room, counting the minutes until it is time for me to give my first talk.

I am very excited for the conference this week, as there are some very interesting topics being talked about. I am looking forward to a lot of the talks including the following:

  • Code Like a Pythonista: Idiomatic Python
  • Python 3000
  • How to Herd Cats and Influence People
  • Who Gets to Decide What Open Source Means?
  • PHP: Bigger and Faster
  • Hello? Is There a User in the House?
  • GPLv3 for People Who Aren't Lawyers
  • VIM for PHP Programmers
  • Super-sizing YouTube
  • When Interface Design Attacks!
  • Next Generation Version Control Systems
  • Writing Big Apps with Google Web Toolkit
  • Subversion Worst Practices

I really would like to attend the Django Master Class, but it is during the same time as my tutorial. If anyone going to that would be willing to take good notes, please let me know. Thanks a lot!

Overall, I am very excited for the conference. On top of all of the smart people that will be around, all of the cool topics being talked about, and all of the great connections that can be made, I happen to be turning 21 on Thursday(7/26), so it will cap the entire week of with a lot of fun.

Woo! Time to have some fun!

Tagged:  •    •  

I want to keep this short, but first off, I just have to say woot! My new B3 XO(don't know what this is? Check out http://www.laptop.org) came today, and it is beautiful. I thought I would take a little time and put up some pictures since I haven't seen any around quite yet.

The first thing I noticed immediately that is different is the outside of the case. The previous plain, white 'XO' character is now brightly colored! Check this out:

After I opened it up and got it started, I noticed immediately how much faster it is. Startup time was a fraction of what it took before, and getting into X was much faster. All around *everything* is faster about the laptop.

Being a developer of the Watch & Listen activity, I had to see how our media player did on the new hardware. After loading up Watch & Listen, and getting some content on the machine, all I have to say is one word. Amazing. The new hardware enables us to play videos at a *much* higher bitrate than we could before, and newer codecs that we couldn't even think about using before. Also, the new hardware fixed some X driver issues we were running into before. Look at this:

I am very excited about what opportunities the new hardware brings the Watch & Listen team.

I will try and get more photos up when I find a better camera. I happened to get lucky with these two.

Tagged:  •  

I have been an employee here at the Open Source Lab for nearly a year now, and can easily say that they have supported me in all of my FOSS endeavors(e.g. OLPC, OpenID). The nurturing environment has been extremely helpful to students, including myself, providing a spring board into the 'real world', helping countless students land jobs with big names like Google, Novell, Mozilla, and IBM.

While the Open Source Lab has been crucial in so many students professional lives, it has also helped some of the biggest open source projects(Linux Kernel, Gentoo, Debian, Drupal, Freenode, Mozilla, and OLPC to name a few) out there become what they are today.

The OSL is hiring a new manager type person to realize the big picture of things, and help continue the excellence of the lab. If you are looking for a great place to work and want to help out the FOSS community please take a look at the job posting.

Cheers!

Tagged:  •    •    •  

Real quick, I have been hacking on the Drupal OpenID module some more. I have some new features committed and working due to multiple requests. The two major features I added are MyOpenID Affiliate support and allowing users to have multiple OpenIDs associated with their account. I still have a bit more testing to do on the latter, but currently it seems to be working great!

Please feel free to pull the code down from git(http://jirwin.net/git/openid.git), and try things out. If you just want to pull the latest package, feel free to grab it at http://jirwin.net/git/index.php?p=DrupalOpenID.git&dl=targz.

Cheers!

Update 1:
It would seem that I have i-names working correctly. If you have one, feel free to try logging in with =name, and let me know how it goes. If you already have an account, just try adding =name to your OpenID list under your account settings. Woot!

Update 2:
As per request, there is now a checkbox in the module settings to skip the user registration part, and just set the username to the OpenID, and attempt to pull an email address from the persona. Enjoy!

So, ever since I made a post about what I had done with the OpenID drupal module, I have been receiving great feedback on how I can make it better. Much of the feedback were actual feature requests for the next version of the module. The main request was to allow every user in the Drupal db to enter an OpenID, allowing all users to authenticate with it. One person told me that if I did this, they would eliminate the default login block all together(a great idea!). The other big request was to pull default account information from the OpenID's persona.

Naturally, I thought these were both great ideas. Being the OpenID geek I am, I would love to do anything to help spread the 'Identity 2.0' love. I waited a couple nights to get my midterms out of the way, and then started to dive into the code. Man o man, I thought I had a good understanding on how Drupal modules worked before. At the end of a 12 hour stint(8pm to 8am), I came out on top with the latest rendition(minus a few bug fixes), which you can find at it's git repository. That link will actually always point to the latest version of the code, which at this point is probably the best idea.

The first thing I decided to tackle was pulling the information from the persona. After talking with Greg during work one day, he had mentioned that he was working on this in his own module for Drupal 4.6. He pointed me towards his blog, where he actually had posted the code to pull information using sreg. This was perfect! After incorporating his little tidbits into the code, I was able to pull information from the persona perfectly. For Greg's module, he chose to pull the full name, and use that in the user's profile. I decided that I wanted to set a users username to their nickname stored in the persona, as oppose to their actual OpenID. This way it would feel more like the rest of the drupal site, and long URLs wouldn't break my theme. I took care of the username and email validation with the following:

  1.    if (user_validate_name($query['nickname']) != NULL){
  2.         drupal_set_message('Username invalid.', 'error');
  3.         header("Location: " . url('openid/get_email'));
  4.         exit(0);
  5.     }
  6.     if (!valid_email_address($query['email'])) {
  7.         drupal_set_message('Email address invalid.', 'error');
  8.         header("Location: " . url('openid/get_email'));
  9.         exit(0);
  10.     }
  11.     if (user_load(array('name' => $query['nickname']))){
  12.         drupal_set_message('Username exists. Please try again', 'error');
  13.         header("Location: " . url('openid/get_email'));
  14.         exit(0);
  15.     }
  16.     if (user_load(array('mail' => $query['email']))){
  17.         drupal_set_message('This email account already exists. Please log in using your existing password and add in your OpenID URL through the My Account option.', 'error');
  18.         header("Location: " . url('openid/get_email'));
  19.         exit(0);
  20.     }

With this code I am essentially trying to load a user from the DB with the given username or email address. If I can, that mean it exists, and we shouldn't try to create a new one(for obvious reasons). I also pulled a little code from Greg's blog again here to validate usernames and email addresses to make sure they are syntactically correct(alpha-numeric, non-empty essentially).

The next step was the biggie, editing a user's profile to allow them to store an OpenID, allowing users to add/change their OpenID on a whim. I started hunting around on the Drupal 5 module API page, looking for a way to edit the user's profile. Unfortunately, I was unable to find any good documentation(examples) on how to do this. Eventually, I stumbled across some source somewhere that showed me how to do this. Personally, I thought this would be a more common use, but it seems that most modules just create new pages or nodes, as oppose to just using the 'My Account' page. I was able to use the following to get it working for me:

  1. switch($op){
  2.           case 'form':
  3.                 if($category == 'account'){
  4.                         return openid_user_form($edit, $user, $category);
  5.                 }
  6.                 break;

I put this start of the switch statement in the hook_user function. Also in this function, I am able to tell when the user updates their profile, deletes their account, or their account is being viewed. Using the switch appropriately, I am able to get every state that a user profile can be in. Perfect. The function that is being called in the above snippet looks like this:

  1. function openid_user_form($edit, $user, $category){
  2.         $row = db_fetch_object(db_query("SELECT openid FROM {openid} WHERE uid = '%d'", $user->uid));
  3.         $form['openid'] = array(
  4.           '#type' => 'fieldset',
  5.           '#collapsible' => FALSE,
  6.           '#collapsed' => FALSE,
  7.           '#weight' => 1,
  8.           );
  9.         $form['openid']['openid'] = array(
  10.           '#type' => 'textfield',
  11.           '#title' => t('OpenID'),
  12.           '#maxlength' => 64,
  13.           '#default_value' => $row->openid,
  14.           '#description' => 'If you have one, enter your OpenID here.',
  15.           );
  16.         return $form;
  17. }

All this does is create the new form item on profile page, and assign the different values. The fieldset type in the first item gives the text field its own little section on the page, and fits in well with the theme.

After getting all of the interface parts to work, I then had to start work on how to save user OpenIDs. My original thoughts(it being 6am by this time), were to just add a field to the existing user table in the database. This is an obvious bad choice, and quickly corrected myself as I was eating a refreshing piece of fruit. I decided that it would be best to just create a new table, with a key relating back to the user id. I was easily able to do this with a install script that Drupal will invoke when the module is installed(uninstall things go here as well). This was nice and simple, and looked like this:

  1. $query1 = db_query("CREATE TABLE {openid} (
  2.                                   uid INT NOT NULL,
  3.                                   openid VARCHAR( 64 ) NOT NULL,
  4.                                   PRIMARY KEY (uid)
  5.                                   )");

With some simple SQL-fu on the hooks that I mentioned before, I was able to save, delete, and view the new field that I saved in the database. Woot!

The last and final part that I needed to add, was instead of using an authorization map to log OpenID users in, I wanted to allow any user to login with the OpenID specified. The big difference with the OpenID method of logging in, is that a user may never specify a password to the drupal site if they use OpenID from the get go. I needed to figure out a way to allow manually log users in, if it was returned to me from the OpenID provider that they had authenticated. Apparently they thought about this, and had a great function for it. Perfect! It looked a little like this:

  1. $row = db_fetch_object(db_query("SELECT * FROM {openid} WHERE openid = '%s'", $openid_url));
  2.         if($row->uid){
  3.             $user = user_load(array( 'uid' => $row->uid ));

This code trys and grab a user from the table that has the OpenID that just authenticated. If it finds it, it trys and loads/logs in the user. Voila! We now have a Drupal authentication module. Woot!

Hopefully this module will help some other people out there. Above all, I really do hope that having a CMS as big as Drupal support OpenID now, it will help push the use of the protocol that much more.

Cheers!

Update:
I just finished adding MyOpenID affiliate support. You will now see a link in the login block allowing users to create an OpenID through MyOpenID. If you go into the admin settings, you can now set an affiliate ID, which will automatically change the create an OpenID link in the login block to be your affiliate page. After users create an OpenID, it will automatically start and log them in to the Drupal site(which will invoke the drupal account creation page naturally). Enjoy!

Update 2:
I just made the git archive public, so it will be a bit easier for others to update their code to my fixes and such. You can clone the archive from http://jirwin.net/git/openid.git. Enjoy!

Tagged:  •    •    •  

A few days ago in CS 419, a fellow student gave a presentation on how to setup Drupal 5, and showed some of its cooler features. After seeing it used in action, I knew that I wanted to move to it, for the sole reason of being able to incorporate my photo gallery into the same theme as my blog. And as you may be able to tell, here it is.

Syndicate content