Classdroid public beta

Here is the Classdroid apk for public beta. We only have support for primaryblogger and xparena(not a live service) available right now. We are waiting on Moodle V2 to bring moodle support in.

1. Get the Classdroid.apk
2. Read this guide for how to install an .apk
3. Make sure you have a Primaryblogger account & Blog
4. Have fun 🙂

Note:  We still have a lot of GUI tweeking to do but most of the functionality now exists. We will be releasing the source code once beta testing is complete.

Thanks to this guy for the great custom artwork/logo/icon!

Go here for info on classdroid

Ushahidi post tweets to API php example

The below code takes an rss search result from twitter, detects the authors location then posts the information to Ushahidi via the API.

Application I used it inMy School Closures for detecting people who tweet about school closures.  Unfortunately I have to use pipes for the location builder which isn’t elegant as Yahoo Pipes sucks and I wish I never started playing with it.  Feel free to play with the pipe I created to get geo location information from a location name, it is the pipe that has the json_decode.

You will need mysql and a table for the guids (this stops us from spamming twitter for authors we have already located). Make sure you change the configuration settings and create a table in mysql.

The method is simple, the code isn’t pretty and will require polishing but here it is:

<pre>
<?php
//CONFIGURE THE SETTINGS BELOW
//twitter settings
$twitterusername = "mytwitteraccount";
$twitterpassword = "apasswordgoeshere";

//database settings
$host = "databasehostname";
$user = "databaseusername";
$pass = "databasepassword";
$dbname = 'databasename';

// You should create a table called tweetguids in your database
$tablename = "tweetguids";

// Change the below feed to a rss feed similar to below
$rssurl = "http://pipes.yahoo.com/pipes/pipe.run?_id=a9663ebc09e69b9195fb2407fba9f2bc&_render=rss";

// END OF CONFIG

$conn = mysql_connect($host, $user, $pass) or die                      ('Error connecting to mysql');
mysql_select_db($dbname);

ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);

$rss = simplexml_load_file($rssurl) or die("failure");
$count = 0;
foreach ($rss->channel as $chan)
{
$time = $chan->pubDate;
}
foreach ($rss->channel as $chan){$time = $chan->pubDate;}
foreach ($rss->channel->item as $item)
        {
        // only do first 10 records
        if ($count < 10)
                {
                $foundguid=0;
                $guidnew=$item->guid;
                // Check to see if guid exists in db already
                $sql="SELECT * FROM $tablename where guid = \"$guidnew\"";
                $result=mysql_query($sql, $conn);
                while ($row=mysql_fetch_array($result))
                        {
                        $foundguid=1;
                        echo "Foundguid: $foundguid";
                        }
                if($foundguid==1)
                        {
                        echo "We found an alredy existing guid...";
                        }
else
                        {
                        $count = $count + 1;
                        $task="report";
                        $incident_title=$item->title;
                        $guidnew=$item->guid;
                        $incident_title=str_replace(" ","+",$incident_title);
                        $incident_description=$item->description;
                        $incident_description=str_replace(" ","+",$incident_description);
                        $incident_date=date("m/d/Y",$time);
                        $incident_hour=date("H",$time);
                        $incident_minute=date("i",$time);
                        $incident_ampm=date("a",$time);
                        $incident_category="Possible Closure";
                        $location_name="Unknown";
                        $author = $item->author;
                        $author = str_replace(" ","+",$author);
                        $pos = strpos($author,"+");
                        //$author = substr($author,0,$pos);
                        $author = str_ireplace("http://twitter.com/","",$author);
                        $url = "http://$twitterusername:$twitterpassword@api.twitter.com/1/users/lookup.xml?screen_name=$author";
                        //echo $url;
                        $output = simplexml_load_file($url) or die("badauth");
                        foreach ($output->user as $item)
                                {
                                // Get the values out of the XML
                                $location=$item->location;
                                // Clean up the location
                                $location=str_ireplace("-",",",$location);
                                $location=str_ireplace(" ",",",$location);
//                              $location=preg_replace("/[^a-zA-Z0-9\s]/", "", $location);
                                echo "<br/><b>Location content: $location<br/>";
                                // Pass the location to yahoo pipe
                                $location = str_ireplace(" ","",$location);
                                //echo "<br/>Loc: $location";
                                $locationurl = "http://pipes.yahoo.com/pipes/pipe.run?_id=03539616e4cdd62eb15ed26b81e3041e&_render=json&q=$location";

                                 $ch = curl_init();
                                curl_setopt($ch, CURLOPT_URL, $locationurl);
                                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

                                //make the request
                                $json = curl_exec($ch);
                                $arr = (json_decode($json,true));
                                $blah = $arr['value']['items'][0]['name']['loc'];
                                //print_r($blah);
                                $latitude = $blah['lat'];
                                $longitude = $blah['lon'];
                                $location_name = $blah['city'];
                        }

                        $incident_description="Closure reported from twitter";
                        $url = "task=report&incident_title=$incident_title&incident_description=$incident_description&incident_date=$incident_date&incident_hour=$incident_hour&incident_minute=$incident_minu$
                        $posturl = "http://myschoolclosures.com/ushahidi/api";
                        $Curl_Session = curl_init($posturl);
                         curl_setopt ($Curl_Session, CURLOPT_POST, 1);
                         curl_setopt ($Curl_Session, CURLOPT_POSTFIELDS,
                        $url);
                        curl_setopt ($Curl_Session, CURLOPT_FOLLOWLOCATION, 1);
                        curl_exec ($Curl_Session);
                        curl_close ($Curl_Session);
                        //Write to the database
                        $sqlgo="INSERT INTO $tablename VALUES (\"$guidnew\")";
                        $result=mysql_query($sqlgo, $conn);
                }
        }
        //Write anything else to DB just in case anything trails behind
        $sql="INSERT INTO $tablename VALUES (\"$guidnew\")";
        $result=mysql_query($sql, $conn);
        $row=mysql_fetch_array($result);
        //echo "<br/>$sql<br/>";
}
?>

Remote Access without Becta – Dual form authentication?

Since the demise of Becta I have had lots more schools ask me if they can go ahead and remote directly into their school, bypassing our central security exchange.

The answer is still no.  These are the reasons why…

1) Becta’s requirement for dual form authentication was a good idea and is a good idea.  It’s not that we don’t trust you to not give out your username and/or password it’s that even the most seasoned of IT professional can make security errors and by having 2 forms of authentication it would take 2 catastrophic security errors to allow someone to access your schools data.

2) We are considering RSA or usb keys to remove one prompt for username/password

3) We want to try to encourage you to use more web based services and to remote into your data less.  This will allow us to apply more granular security policies and hopefully encourage you to adopt a single sign on mechanism.  Hosted web services should also increase the reliability of access to resources.

If you still want to go ahead and remote straight into your school then I would recommend you do a thorough risk assessment and that the decision is approved by the schools leadership team (I would recommend you do this anyway even if you have dual form authentication).

If you are a technical support manager/engineer trying to make your life easier be aware that if you open up school information to the outside world you may be charged under the data protection act.

Enhanced by Zemanta

Google Games in the classroom

Google‘s recent 100$ million investment in zynga has got the dregs of the internet flapping over Google trying to muscle in on Facebook‘s market share of the social gaming portion of the internet.

Google suck at Social, and probably always will.  This is because even though the line between our work and play is often merged we have to actually pro-actively try to keep the two separate.  Google Me will suck, Google Buzz sucked, Google Wave sucked.  Why?  Because we are human.  Google can’t break/fix that.  My advice:  Launch Google Me, very quietly.

Zynga have maybe 20 games available, yes they are huge on the platforms they run on (facebook/twitter etc) but there are 1500+ educational games available that have nothing to do with Zynga that wont even be affected by Google…  Unless..

The fact is….

Google didn’t invest in Zynga for Zynga’s games.  They invested in Zynga to get the expertise of providing massive web based games to create social networks.  I can see Google going off to places like Armor games, bitbitallion etc. and trying to get them on board.   Let’s face it, Google know how to write a well documented, easy to use API so if they can persuade other vendors to monetize their content and improve their games by using Google then why not?  (See Adsense/Adwords).

I wrote an abstract piece on this and began building an open platform that is similar to Xbox Live.  I called it XPArena and it is very private closed beta.  I’m still working on it.

So how does this affect education?

The way I see it Google have enough capital available in Zynga to create an open platform for social game integration.  This platform would operate in a similar way to XPArena or XBox Live, allowing pupils to share educational games, show off their high scores, compete with friends, collaborative with friends.  Teachers could review pupils work and assess their progress.  Google could potentially also work on a recommendation engine that recommends games based on what a pupil likes to learn by playing.

How can Google make this work? Google should create a platform, not a service.  Allowing third parties to leverage their technology and keeping the Google Brand away from the learner/consumer.  PLEASE Google don’t tie this platform into Google Me or Wave etc..

Some questions/answers

Will you need a Google account to play a vast array of online games in the future? No.

Will you need a Google account to share your gaming experience on Zynga games in the future? Yes.

Are Zynga making any education games? No.  But if you look hard enough you can find SOME educational value in the odd game.

Will Google use Google Checkout for Zynga games? Yes.

Will Google remove Zynga games from Facebook when they launch Me? No.  It would damage Zynga’s revenue stream too much and would see a flurry of angry farmville players switch from Google to Bing for search.

Will Google place their own Ads on Zynga games in that annoying way they do? Yes.  Even if you are paying you will see ads.

Will it suck if Google just invest without any outward reaching goals? Yes.  If they focus purely on social networks it will be a waste of money.

Is the internet crying out for a good social gaming platform that is away from main stream social networks? Yes!

Did Google purchase Zynga to make their shareholders happy? No.  They are already happy, see the index.

Do I want a job at Google Games? Sure if they can afford me 😉

6.1 awesome things HDMI on a cell phone could bring to the classroom

With the notice that HDMI is probably being replaced with 5PlayTM just as mobile phones just beginning supporting it what could the potential uses be of HDMI in a classroom?  HDMI is usually the cable that goes from a laptop to the projector.  Essentially HDMI in a mobile phone means you can hook it up to a projector or large screen.

1. Share work from mobile with others via large classroom display

2. Truly turn the cell phone into a teaching tool by embedding it in the fabric of a classroom

3. A great presentation tool

4. An abundance of easy to access interactive apps/games

5. Unfiltered internet connectivity (This has its pros and cons)

*6. Charge phone via cable (HDBaseT can provide power)

Could this mean an RJ45 connector in every desk to charge pupils handheld devices and give them access to both network and media/presentation resources?

Check out the comparison chart below to see what is possible over HDBaseT

I reckon there will be a large market/demand in HDBaseT 1.0 to micro USB adapters mostly because the RJ-45 connector (seen right) is too chunky to fit into a phone.

If you know a company that makes a RJ45 -> Micro USB adapter for Network / Video connectivity then invest now.

Enhanced by Zemanta