charity, dev4good, coding »

[2 Jan 2012 | 0 Comments]

I have been to a number of charity coding events over the last few years. Craig Hogan has just asked people for their ideas on how he might run the second Dev4Good event this year, so here my top 6 things I like to get out of these events with my idea on how to implement them.

Why I enjoy these events

  1. Using my imagination on how to solve a problem. I truly love doing this, being given a problem and trying to solve it in a way that using various tools and services that are out there and I know how to use. Sometimes what I think is easy and straight forward is complete magic for non technical people.
  2. Creating a working solution. Actually creating something that adds value to a charities efforts and is actually used. As these events are short the scope of the solution has to be small for it to be successful.
  3. Meet interesting people – The type of person that goes to these events and donate their time are good people. The fact they are there and you are there makes it a pretty high chance you will be ‘liked minded’ with similar interests and a lot to talk about.
  4. Winning a competition – I’m quiet a competitive person and have always enjoyed working towards winning. This is something that PayPal’s charity hack event is very good at, they have different categories and a judging panel which makes it a real competition. They do have great first prizes in the categories which is a bonus BUT I would be very happy just having my name up in lights on the event’s website for bragging rights!
  5. Learning something new – it is not often that you get to mingle with a wide variety of other coders who are willing to share and show you how they work, equally I get a lot of satisfaction showing others new techniques and tools as well.. Getting a good opportunity to cross pollinate this knowledge is fantastic.
  6. Getting the T-Shirt – Getting swag is always a bonus at these events, but usually I have already got all the tools in my tool bag to do my job, I can go out and buy it. However there is one thing that you cannot buy – the Event’s T-Shirt. Long after the event has finished and possibly forgotten about, I often pull on an event T-Shirt and it brings back all the memories in an instant. I love it.

What I would do for my event

Have a large collection of problems or goals from charities (Points 1,2 & 4)

To achieve items 1, 2 and 4 I would try and collect the problems that charities have. Not just a few problems, lots and lots of them no matter how big or how small.

One of the recurring issues I have hear from event organisers is trying to get charities to engage with the event. To solve this I would partner up with organisation that deal with lots of charities, like JustGiving.com, and ask them to question the charities about ‘what is your pain’. It might be they need to be able to bulk e-mail, better analytics on their website, needing to raise more awareness of their brand, who knows. I believe by making the only effort by the charities to describe ‘their pain’ means it will only take then a few minutes of their time and a few sentences to submit an idea. There is no expectation on their half they will get anything and if they do they will be really happy.

Now we have a large pot of problems we can put them up on a “Problem Board” at the event and just let people pick the ones they would like to do. No direction about technology or implementation will be given (other than competition categories if they want to win a prize), leaving the developer to use their imagination (Point 1 solved). They might even create some working solutions (Point 2 solved) and then you can judge who created solutions that fit the different categories to have some winners (Point 3 solved).

Learn something new and getting the T-Shirt (Points 3, 5 & 6)

If possible have a social event the night before coding starts, hand out the T-Shirts, put up the “Problem Board” and let people meet and discuss how they might do things over a few beers and food in the evening. This should really help people meet each other in a relaxed environment which is the best thinking happen. It would be nice to have a way to identify what skills other people have. Name badges with skillset and twitter / linkedin details would be useful to solve this.

I would also had a period of de-brief and reflection after the event. It can be a full on experience with little sleep and lots of effort and emotion going in. People love to talk about how it went for them afterwards. I know my wife will never properly appreciate what I’ve been doing so having an opportunity to talk to people that went through it with me afterwards is really great. GiveCamp had a hog roast and a couple of hours of down time before the presentations which was perfect and really enjoyable.

In Summary

Every event I’ve been to has it’s own character and charm. Letting me use my imagination to add value and meet new people makes it very enjoyable for me. I have really enjoyed every event I’ve been to and you never know, perhaps some of these ideas might be adopted by Craig for this years Dev4Good!

charity, Windows Phone 7, programming, paypal, WP7, hacking »

[23 Sep 2010 | 3 Comments]

So I went to Charity Hack and as promised have put together a video of the event.

The Event

It was a great event (again) with the standard of apps even better than last year. John Lunn has done a write up of the event with videos of all the winning hacks.

There is also a great write up by Ben Matthews about all 18 entries which is well worth a read to get a overall feel of the event. http://benrmatthews.posterous.com/28520434

There is also a great photo stream here of the event: http://www.flickr.com/photos/martin_88/with/5004083392/

Our App

We created a Windows Phone 7 app which used a number of API’s provided by JustGiving and PayPal to collect the donations from users. We only had a limited time to learn what the development tools for Windows Phone 7 could do but it was really easy to pickup and get something doing pretty complex api calls in a very short time. It does an number of restful web service calls in the background which was made even easier with the http://restsharp.org/ library. We were really pleased with the outcome so please enjoy the video!

charity »

[14 Sep 2010 | 1 Comments]

I’ve just made a short 7min video blog about the results of the questionnaire I put out to help be shape what the app I create at Charity Hack will do. I hope people find it interesting!

C#, charity, hacking, paypal »

[22 Sep 2009 | 4 Comments]

I signed up for this Paypal event 5 weeks ago when I first saw it on Twitter - CharityHack. I thought it was going to be a couple of days of workshops where Paypal show developers how to use their new Adaptive Payments API…. how wrong was I!

The penny only dropped [more] about what the event was really going to be like last Thursday morning, 2 days before the event. I was reading their website and reading the “What to bring” section and it included a sleeping bag, I had never been to a workshop like this before.

See PayPals lets talk page for a more detailed run down (plus a video which I get a couple of seconds in!)

The event was in fact an opportunity for Paypal, JustGiving and MissionFish to talk to developers about their new APIs then us developers were given 24hours to create an application that could raise money for charity (preferably using the APIs we had been told about).

The idea I came up with in the hour after the penny dropped was to create an application that local volunteers can log their expenses when doing charity work on a website. The charity that they work for would then approve the expenses and they become visible to the public to pay on the charities behalf. If at the end of the month the expense had not been paid then the charity would have to settle up as they are obliged to do.

A member of the public would be able to donate with just a few easy steps:

  1. Search for volunteers in their area with a postcode / radius search
  2. Select the volunteers they want to pay
  3. Click “Donate” and make a single payment to the charity for the amount.

 

Using the new Paypal adaptive payment API it is possible to split the donation behind the scenes and distribute it to the individual volunteers automatically, which is really cool. This is called a “Chained Payment”.

Our team name –

Redbull and Coffee

redbull-can cup-of-coffee

I teamed up with one of the only other .Net developers in the room of over 100. His name was Lee Mallon and immediately struck up a great working relationship. Lee has a great idea as well around allowing skilled professionals to donate their time to charity, however after discussing it further we felt that idea was just too big for a 24hour effort.

The Paypal venue was great and the Paypal team kept everyone very well fed and watered through the 24hours. There were lots of ideas being developed and a really nice feel to the whole event. Lee and myself were on a roll and before we knew it we had spent 16hours straight working on the application and it sort of worked! Other attendees were also hard at work, the LovePie team had even resorted to getting their sweatbands out.


Created with flickr slideshow.

Lee and I then spent another 7 hours making it look sort of presentable and testing that it all worked. After 23hours and 30mins we had finished out “Local Volunteers” charity application! We were very very chuffed.

CH09-Finished

 

I must state again how great the Paypal team where. The had flown their key personnel over from the American who were on hand through the night to help when we had questions and even helped me debug a rather tricky error which turned out to be a copy and paste error by me :s (sorry Rob – it was 2.30am). There were also techies from JustGiving and MissionFish on hand as well.

After 24hours all the teams were invited to present what they had achieved in the previous 24hours. There were many ideas which can be found on the Charity Hack wiki. I got a particular buzz when Musaab At-Taras, the Director of PayPal Platform commented that we had done “a really great job”.

There was one team that had worked on a particularly good idea, called CharityFrag, which I feel will have great appeal to a largely untapped community by charities. It was a mod for a First Person Shooter game. Players pledged money to charity before entering the game and picked their own charity. When they killed someone in game they took some of that persons money for their charity, equally when they were killed some of their money went to their opponents charity. This was all fed to a website keeping a real-time tracking on who had donated what charities – it is a truly great idea I hope their prize of a trip for San Fran to attend the Paypal conference there is the springboard required to get this idea into a production quality solution.

Lee and I were told we came a close second and got a special mention for our effort, which means a lot. Talking to Lee afterwards we both agreed that the best team had won.

So my hacking weekend cherry is broken and I would strongly recommend developers should seek out and got to these sort of events – it is a great social event and you can learn lots of new skills. My goal is to do one every 6 months.

I also plan to get our Local Volunteers application live in the next 3 weeks and hope that it will be a useful tool for raising money.

ASP.net, charity, DevExpress »

[21 Jan 2009 | 0 Comments]

This is my ASP.net webform:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddPortfolioEvidenceControl.ascx.cs" Inherits="MyApplication.Web.RegisteredUsers.Portfolios.AddPortfolioEvidenceControl" %>
<%@ Register Assembly="DevExpress.Web.v8.2, Version=8.2.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1"
    Namespace="DevExpress.Web.ASPxCallback" TagPrefix="dxcb" %>
<%@ Register Assembly="DevExpress.Web.ASPxEditors.v8.2, Version=8.2.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1"
    Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dxe" %>
<%@ Register Assembly="DevExpress.Web.v8.2, Version=8.2.3.0, Culture=neutral, PublicKeyToken=9b171c9fd64da1d1"
    Namespace="DevExpress.Web.ASPxUploadControl" TagPrefix="dxuc" %>
<%@ Reference VirtualPath="~/Default.master" %>
    
<dxcb:ASPxCallback ID="CallbackComplete" ClientInstanceName="Callback1" runat="server" OnCallback="CallbackComplete_Callback">
    <ClientSideEvents CallbackComplete="function(s, e) {uplImage.UploadFile();}" />
</dxcb:ASPxCallback>

<table>
<tr>
<td>Description:</td>
<td>
    <dxe:ASPxTextBox ID="txtEvidenceName2" runat="server" Width="400px">
    </dxe:ASPxTextBox>
</td>
</tr>
<tr>
<td>Valid From:</td>
<td>
<dxe:ASPxDateEdit ID="dtpValidFrom" runat="server" ClientInstanceName="dtpValidFrom" />
    
</td>
</tr>
<tr>
<td>Valid To:</td>
    
<td>
<dxe:ASPxDateEdit ID="dtpValidTo" runat="server" ClientInstanceName="dtpValidTo" />
</td>
</tr>
<tr>
<td>File:</td>
<td>
<dxuc:ASPxUploadControl ID="uplImage" runat="server" ClientInstanceName="uplImage"
    Size="35" OnFileUploadComplete="uplImage_FileUploadComplete"> 
    
    <ClientSideEvents FileUploadComplete="function(s, e) {refreshTabControl(); }"  />
    
</dxuc:ASPxUploadControl>


</td>
</tr>
<tr>
<td colspan="2">
<dxe:ASPxButton ID="btnUpload" runat="server" AutoPostBack="False" Text="Upload" 
        ClientInstanceName="btnUpload" Width="100px">
    <ClientSideEvents Click="function(s, e) { Callback1.PerformCallback(); }" />
</dxe:ASPxButton>
</td>
</tr>
</table>

 

This is my code behind:

 
using System;
using System.Drawing;
using DevExpress.Web.ASPxUploadControl;
using System.Web.UI;
using MyApplication.DAL.EntityClasses;

namespace MyApplication.Web.RegisteredUsers.Portfolios
{
    public partial class AddPortfolioEvidenceControl : MyAppUserControlBase
    {

        protected void CallbackComplete_Callback(object source, DevExpress.Web.ASPxCallback.CallbackEventArgs e)
        {
            PortfolioEvidenceBaseEntity evidence = new PortfolioEvidenceBaseEntity();
            evidence.Name = txtEvidenceName2.Text;
            evidence.ValidFrom = dtpValidFrom.Date;
            evidence.ValidTo = dtpValidTo.Date;
            
            Session["newUploadedEvidence"] = evidence;
            
        }

        protected void uplImage_FileUploadComplete(object sender, FileUploadCompleteEventArgs e)
        {
            e.CallbackData = SavePostedFile();
        }

        protected string SavePostedFile()
        {
            if (uplImage.IsValid && uplImage.HasFile)
            {

                PortfolioEvidenceBaseEntity evidence = (PortfolioEvidenceBaseEntity)Session["newUploadedEvidence"];
                

                try
                {
                   string resFileName = MapPath(UploadDirectory) + uplImage.fileName;
                   evidence.FileName =  resFileName;
                   evidence.FileType = uplImage.PostedFile.ContentType;
                   uplImage.SaveAs(evidence.FileType);
                }
                catch
                {
                    Session.Remove("newUploadedEvidence");
                    return "There was an error uploading file";
                }

                Session.Remove("newUploadedEvidence");
                evidence.Save();
                SelectedPortfolioItem.PorfolioEvedenceId = evidence.Id;
                SelectedPortfolioItem.Save();

                return "Completed";
                
            }
            return "No valid file found";
        }
    }
}