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 | 5 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...

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";
        }
    }
}