Category Archives: featured

These will appear in the top featured slider

Archiving Old Dynamic Websites

Archiver is a web based application written in Java using the Spring Framework. Its main use is to produce static versions of websites which are no longer updated with new content. This is important for many reasons; firstly, dynamic sites will typically target specific software dependencies.  As time passes certain dependencies will no longer receive patches, posing a security risk, or updates, meaning it may no longer function with the latest operating systems and code environments. This is almost always a problem for system administrators who sometimes end up maintaining software that can be tens of years old on outdated systems. Archiver offers an easy means of creating a static versions of of these dynamic sites that can deployed simply to a standard web server, typically, but not limited to, Apache.

 

Websites will run using different software; some will be written in plain HTML and CSS whilst others will run on CMS or WIKI platforms such as WordPress, MediaWiki or Drupal. Each of these methods will provide a slightly different way of performing some tasks, writing certain elements in HTML/CSS etc and laying out structure. After analysing the problem it was clear that we would need to target specific software in order to provide a high quality solution. For this reason, the ‘Strategy’ design pattern was chosen.

In this case an interface and super implementation provided a default set of methods for dealing with the processing of individual web elements written to work in the majority of cases. It can be thought of as standard web behavior. Subclasses of this Strategy were provided to account for software differences.

We currently support the following strategies -:

  • Basic (Static websites for migration)
  • Drupal
  • Media Wiki
  • WordPress

One of the main tasks which Archiver performs is to make any links which appear in HTML, CSS or JavaScript files relative to the homepage of the website so they are not absolute links. The JSoup plugin for Java was especially useful in this case as it allows the detection of a specified tag in the HTML file. JSoup also uses a Jquery type syntax to select the different elements from the HTML e.g. “#” is used to select an ID and “.” is used to select a class. JSoup also allows invalid HTML which is useful doesn’t prevent a site from being fully archived if there are mistakes in the markup. For the CSS and JavaScript, Regex was used to create expressions in the specified format for a CSS or JavaScript link, this could then be used to find and change the links. Alongside making links relative, Archiver also adds each link which it finds to the list of files to be added into the archive folder. After archiving recursively a zip file is served up to the user.

While existing solutions are available none of them provide the comprehensive rewriting capabilities of Archiver. All the user has to do is point the webapp at a site, choose a strategy and deploy the resulting zip.

Archiver also produces a README file which provides details of all the files which have been included in the archive and lists any errors such as missing pages.

Code is available from https://bitbucket.org/ukolnisc/archiver/src

While this is working code it has not received sufficient testing which is obviously vital for this type of project. With that in mind we would love to hear your feedback.

 

Some are more NoSQL than others

I’m no SQL Expert

Over the past few years I have had my fair share of tricky data management opportunities. There was the financial transaction database that had no keys or indexes and had to be pieced back together by getting old source code releases, finding the bugs and reversing the incorrect values. There was the GB’s of web log records that needed cross referencing and finally, analysing free text marketing responses for patterns.

This was all a warm up for my current opportunity. With this task I have all the issues at once. I have the scale, with 22 million odd items. I know it’s not enormous for 2012, but it is far from easily manageable. I have the lack of consistent relationships and the final piece of the puzzle lack of data quality.

What I wouldn’t give for a nice enumeration of types, something concrete to go on. Take dates for example. For decades it has been the norm to store dates in ISO format, or at least something that can be converted back and forth. If I am really lucky I get ISO dates, a lot of the time I get something that isn’t defined but recognisable and can convert to ISO from, for example, ‘moon cycles since equinox format’ ™. Often though, I get user typed input, not from the same person and not even the same system. Entering dates like “about the middle of last year” is guaranteed to anger even your most friendly neighbourhood developer.

Taken individually it isn’t that big a deal. However producing results in reasonable web- response speeds for 22 million records, grouping by, counting and cross referencing on thousands of possible groups on standard hardware is eluding me. If you can make them dance this way I would love to hear from you.

NoSQL Hype vs. Substance

I’m sure I am not the only one who has trouble keeping up with the latest and newest technology releases. There are lots of exciting new cool apps and services that I don’t really have the time to investigate due to the sheer quantity. Sometimes I just don’t have the patience to coax a demo app out of the latest beta release, constantly cross referencing against error messages. Finally, my least favourite, there is the kind of technology forced along by big business marketing.

Data storage is huge business, particularly the other side of the Atlantic. There are vast sums of money at stake and even corporate survival can depend on the success or failure of given products. I’m no Commie, I don’t mind this in principal, but the amount of positioning, media attention and misinformation that then surrounds the products makes it very hard to separate the hype and the substance.

A couple of weeks ago I was deliberating, remembering all the great things I have heard about NoSQL. Maybe the NoSQL people have a point and now I have a solid use case where my RDBMS is not suiting me. Up until this point I had discounted alternatives to my RDBMS on the grounds that any storage solution was moving bits around on a disc and that the same rules applied. Like all performance computing it is a game of caching. Keep indexes in memory and look to disc as little as possible. Indexes and disc space usage are always going to be more or less equal leaving any performance improvements to the implementation, hardware and possibly some new algorithms. RDBMS design was based on set theory and predicate logic, or to put it another way, Maths. Very little has changed to satisfy my scepticism with regards the speed and scale increases promised by NoSQL movement. Even the idea that there is seen to be a movement worries me. I mean, it’s hardly suffrage, anti-war or civil rights is it?

Some are more NoSQL than others

Up until now I have been talking about NoSQL as a single entity. Of course this is just one of the misleading factors. For some reason, lots of substantially different technologies have been lumped under one umbrella. Maybe the daunting numbers necessitated this; maybe it was because it was felt they could survive better as a combined opponent to RDBMS. The majority of them share some common themes but thinking of them as a single entity is particularly unhelpful. In fact several of the so called NoSQL solutions have more in common with your SQL RDBMS than each other. Two of these notable exceptions are CouchDB and Neo4 which offer ACID compliance.

From Wikipedia the generally accepted types of NoSQL solution are -:

Document store, graph, Key-value store, multivalue, object, RDF, tabular and tuples

Having read a few articles about the various NoSQL solutions, it seems that each author had decided to group them up and talk about the groups in some way, for each offering possible scenarios where each are useful. So far it has been easy to pick holes in every one of the lists, in some cases because they are out of date but mostly because even in these sub types the feature sets can still be very different. For this reason I shall approach this from a slightly different angle. Firstly I shall talk about common themes to most (but not all) of the NoSQL solutions, then follow up with a few types of software and which specific NoSQL products would be useful.

Speed and ACID

Earlier I mentioned that I couldn’t really see how you can develop a significantly faster comparable version of a storage solution. In the case of the majority of the NoSQL products, the main selling point is horizontal scalability. To put it another way, it is easier to deploy over lots of load balanced clusters giving the performance gains. DBRMS’s do not scale as easily in this manner.

The reason for this is that all good RDBMS’s are at least approaching ACID compliance. In essence, this is your guarantee that data you store is consistent and will be there when you want it. With ACID comes the concept of transactions which are important for many real world tasks, and without them bank transfers would vanish, nuclear missiles would launch. The locking required does not work as easily over RDBMS clusters due to the inevitable latency.

Having said that there are many cases where this isn’t important. You could maintain the consistency at the application level. It gets increasingly harder to maintain with increasing system complexity but it is far from impossible. Alternatively read only data sources are a good candidate or maybe you just don’t care. If the odd ‘Like’ or +1 goes missing the sun will still rise the next day. In addition I should probably point out that most people tend to agree that NoSQL means ‘Not Only SQL’. For reasons discussed, in most cases it would represent part of a given solution. A fast NoSQL solution would work well as a client facing readable resource to a large complex dataset.

NoSchema

A relaxed or in some cases entirely non-existent schema is another selling point. This for me is the key difference. So many times my model has altered slightly and various null checks have crept into my code. You can easily see how in some cases a very relaxed schema would be a nice thing to have.

Commodity computing

Computing as a commodity has been a big driver behind many of these products. It isn’t hard to see the value of being able to easily spin up a few more database clusters over the Christmas busy period with little fuss. This is a key feature of how the horizontal scalability can be a massively appealing part of these solutions. Taking this further some products have an emphasis on distribution. For example you could have a country or regional presence in a datacentre where for example UK residents are served by one cluster/shard and Australian by another. Maybe you can offload your Black Friday North American rush to your Pacific Rim cluster where it is 2am.

UC1: Online Store/CMS/Blog

If you though there were a lot of NoSQL options then you are in for treat when you start looking for a CMS. It seems that every developer, has at some point, started coding their own CMS. It isn’t hard to see that document stores are particularly suited to this task. Almost the entire focus is around the document. Taking a real world example, MongoDB and Etsy demonstrate a nice scenario for this use case. On Etsy you have various sellers all over the globe creating product pages. Some might have shipping restrictions, photos, size guides, linked products or any number of combinations. With MongoDB and a relaxed schema, a product page could be a single document with just the relevant categories embedded. I am willing to bet they don’t use it for their payment systems though.

UC2: Caching

Memcached is probably the most common and famous example of caching in the NoSQL world*. Notoriously thousands of memchached nodes allow us all to keep up with the interesting happenings on Facebook. These are typically used in front of a backing data store and provide most recently used hash based caching and runs entirely from RAM. I think they key here is understanding that it can be used as part of a massive infrastructure rather than being something particularly revolutionary.

If you aren’t Facebook or similar and thinking of adding one memchached box to the font a box or two, you might be better off exploring other routes first.

*Other k-v stores are available.

UC3: Development

A relaxed and adaptable schema during software development has obvious benefits.

UC4: Graph Data

The most interesting type of solution in my opinion is the Graph database and oddly this seems to be the direction that receives the least attention. I have had a number of problems where I needed to view data from various angles at different times and the relational approach just didn’t work. I was constantly creating temporary tables of underlying data from different directions which became hard to maintain. Expressed as a graph I can see that it could be far easier to work with. Again the concept of data as a graph is hardly new but I am about to trial Neo4j as a solution to my current problem so I shall report back with my findings.

UC5: Analytics

The likes of Hadoop MapReduce can be suited to analytics. Typically reporting makes it into the code at a much later stage and can be easily forgotten. I have seen many systems spending most of their cycles calculating the nightly sales reports with increasingly complicated SQL queries over their perfectly normalised data sets. Aggregating, result summarisation and general querying can be guaranteed with real time performance. Google, despite trying to replace it, are using a version of this behind the scenes to provide your search results. It clearly scales.

I’m no NoSQL Expert

It is a point worth labouring, that the key is in picking the right tool for your data. Slightly less obviously it is about how you need to reference that data, not only today but in the future.

Experiences

Being a developer I had itchy keyboard fingers and didn’t quite get around to researching thoroughly before I trialled MongoDB. Seemingly it was a good match for my data with a relaxed schema but there probably isn’t a worse match for my need to referencing the data. Lesson learnt until the next time. Had I not experimented though I would not have had the joy of expressing my MapReduce functions inside a Mongo query using JavaScript. Whose idea was that?

I am still evaluating Hadoop, the pinup for NoSQL. I think there is a lot of potential here for MapReduce in my batch operations, a clear fit, but there is considerable set-up overhead. The Hadoop umbrella has also become quite sizeable in its own regard so I expect there is some more value in this area. Neo4j is also looking very promising. It is a Graph based ACID database and as such stands out. Relationships are treated, according to the documentation, as first class citizens so I am taking a look at this next. My only concern is how it performs with ad-hoc queries. Failing all this I will go back to multi pass batch processing on my RDBMS with plenty of caching for good measure. It’s not elegant, but it works.

Detecting motion: DLP-TILT 2-axis accelerometer

Using an accelerometer to assess musculoskeletal stresses

Accelerometers are helpful for characterising device usage and detecting the mode of use. Most of these devices have an internal accelerometer, but it is convenient for our purposes to use an external device (requires less programming and does not require a jailbroken device).

Setup

In order to use this device, you must first set up the serial port with a line like the following:

stty -F /dev/ttyUSB0 raw ispeed 38400 ospeed 38400 cs8 -ignpar -cstopb -echo

Code

The code probably won’t tell you all that much, but here’s one way to make your life much easier: assuming you’re running this on Linux, set your device ID as /dev/dlptilt, then change the line ‘/dev/ttyUSB0’ to read ‘/dev/dlptilt’ in the code before compiling.

#include
#include
#include
#include
#include
#include
#include
#include 

#define BAUDRATE B38400
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1         //POSIX compliant source
#define FALSE 0
#define TRUE 1
#define DEBUG 0

volatile int STOP=FALSE;

void signal_handler_IO (int status);    //definition of signal handler
int wait_flag=TRUE;                     //TRUE while no signal received
char devicename[80];
long Baud_Rate = 38400;         // default Baud Rate (110 through 38400)
long BAUD;                      // derived baud rate from command line
long DATABITS;
long STOPBITS;
long PARITYON;
long PARITY;
int Data_Bits = 8;              // Number of data bits
int Stop_Bits = 1;              // Number of stop bits
int Parity = 0;                 // Parity as follows:
                  // 00 = NONE, 01 = Odd, 02 = Even, 03 = Mark, 04 = Space
int Format = 4;
FILE *input;
FILE *output;
int status;

main(int Parm_Count, char *Parms[])
{

   int fd, tty, c, res, i, error;
   char In1, Key;
   struct termios oldtio, newtio;
   struct termios oldkey, newkey;
   struct sigaction saio;
   char buf[255];
   char message[90];

   // set device name here
   strcpy(devicename,"/dev/ttyUSB0"); 

   newkey.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
   newkey.c_iflag = IGNPAR;
   newkey.c_oflag = 0;
   newkey.c_lflag = 0;
   newkey.c_cc[VMIN]=1;
   newkey.c_cc[VTIME]=0;
   BAUD=38400;
   DATABITS=CS8;
   STOPBITS=CSTOPB;
   PARITYON=0;
   PARITY=0;
   fd = open(devicename, O_RDWR | O_NOCTTY | O_NONBLOCK);
   if (fd < 0)
   {
   	perror(devicename);
   	exit(-1);
   }

   saio.sa_handler = signal_handler_IO;
   sigemptyset(&saio.sa_mask);
   saio.sa_flags = 0;
   saio.sa_restorer = NULL;
   sigaction(SIGIO,&saio,NULL);

   fcntl(fd, F_SETOWN, getpid());
   fcntl(fd, F_SETFL, FASYNC);

   tcgetattr(fd,&oldtio);
   newtio.c_cflag = BAUD | CRTSCTS | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD;
   newtio.c_iflag = IGNPAR;
   newtio.c_oflag = 0;
   newtio.c_lflag = 0;
   newtio.c_cc[VMIN]=1;
   newtio.c_cc[VTIME]=0;
   tcflush(fd, TCIFLUSH);
   tcsetattr(fd,TCSANOW,&newtio);
   write(fd,"T",1);
   while (STOP==FALSE) {
       status=1;
       if (status==1) // so redundant...
		{
	if(DEBUG){
   		write(fd,"P",1);
		printf("Printed Pn");
	} else {
		// 7 - single a d conversion to host on current settings
		// z 3 bytes (both channels x and y of accelerometer)
		// s - 7 bytes (all 7 channels)
		// 8 - streaming a/d conversion data using current settings
   		write(fd,"z",1);
	}
	} 

         if (wait_flag==FALSE)  //if output is available
	{
		res = read(fd,buf,255);
		if (res>0)
		{

			// Print serial output
			for (i=0; i

CSS3 – Better Late Than Never

CSS 1/2

Back in the year 2000, we, and by that I mean anyone who wrote web-pages, were bungling around with CSS. I was being told tables were evil, I need to separate code (content) and style and that CSS was the answer to my prayers. While the second was clearly something to aim for, it became obvious that CSS at the time wasn’t really capable of helping me achieve this. Don’t get me wrong, it was a step in the right direction and rightfully consigned laying out sites in tables as a thing of the past. We were encouraged to lay elements out as divs and most of the time it was possible to get at least most of the way into true separation between style and code, for static sites at least.

Dynamic Sites

One problem I repeatedly encountered was when rendering out lists of elements of undetermined size into a tabular style. Maybe I wanted odd elements as a different colour, or my boss might come in and want the last element in cornflower blue to match his Tuesday tie. It was mostly possible but was a pain and tied the code into the visuals in several places.

CSS3 to the rescue

Finally eleven years later CSS3 comes to the rescue with some fancy new selectors (there were a few in CSS2). Here are some good ones I have used already.

This will add ‘>>’ at the end of any external links automatically. Repeat for https if required.

a[href^="http://"]:not([href*="www.domain.com"]):after { 
    content: " >>"; 
}

This will highlight any links that open in a new window.

a[target^="_blank"] { 
    color:#855; 
}

 

It also allows you to write code that is almost (other than the class name) completely detached from the visuals. This lays out divs in columns of three.

/*Loop in your language of choice*/ {
Content
}
.splitThird {height: auto; clear: both; }

.splitThird div:nth-child(3n+1) {
    float:left; width: 33%; clear:left; margin-bottom: 20px;
}

.splitThird div:nth-child(3n+2) {
    float: left; width: 33%; clear: none;
}

.splitThird div:nth-child(3n+3){
    float: right; width: 33%;
}

Social media sites in China

Introduction

When we talk about social media sites, we tend to focus on a number of well-known examples – Facebook, YouTube, and so forth. Yet there are many international social media sites of all kinds. This post is written by Jenny Luo, who is studying Electrical Power Engineering at Bath and works part-time at UKOLN. In it, she looks at some examples of social media sites in China, compares them to other popular sites, and collects together information about the sites’ APIs.

— Emma

 

Social network sites (similar to Facebook)

1. renren

Renren means “people and people”. Renren is very similar to Facebook, not only in terms of function but also in terms of interface. You need to register on this website first ,then you can add somebody else as your  friends. You can upload some photos, write diaries, share videos, add some comments or delete some comments.There are also some online games. Anyway, it’s almost the same as Facebook. But, in my opinion British tend to share more pictures than the Chinese do.

Link: www.renren.com
API: http://www.programmableweb.com/api/renren
Description: This is an open platform based on OpenSocial

2. douban

Douban means “watercress”. On this website you will feel free to comment on any  books, films, and music. You can find others’ recommendations about books, films and music. Everything shown on your douban webpage can be chosen by yourself. For example, if you are a mother the website will recommend you some recipes. Unlike Renren, which is mainly used by college students, this website focuses on all kinds of people, they will help you find friends from what you like, then you can find more things you like from them. It has more than 5,000,0000 users now.

Link: www.douban.com
API: http://www.douban.com/service/apidoc/reference/
Description: The weblink given above is the instruction of API utilisation. The Douban API follows the Atom and GData principles. When addition or deletion operations are used, OAuth certification would be required. Then, there are also lots of instructions about how to use the API to acquire different information.

3. kaixin001

The website’s name means ‘having fun’. It was set up in 2008. Till now, it has about 110 million registered users. This website mainly focuses on the urban white collar. This website has 3 main functions, such as ‘basic tools’, ‘social games’, and ‘other applications’. For example, in ‘other applications’ you can get a weather forecast, a service for buying tickets online, and many other practical applications.

Link: http://www.kaixin001.com/
API: http://wenku.baidu.com/view/671f256e1eb91a37f1115c5a.html
Description: The link given above is the instruction of  kaixinoo1 API. This API support java, PHP, NET and a variety of kinds of programming language. Kaixin API uses a REST connection. All the Kaixin open platforms are achieved by using HTTP POST to send requests to http://rest.kaixinoo1.com/api/rest.php The following instructions are about Users API, Friends API, actions API and so on.

Blogging (similar to Blogger)

1. Sina Webblog

‘Sina’ is not a a Chinese word, I asked baidu about why it got this name, and it says that it means China in Latin. Sina Webblog is the most popular and also mainstream blogging service in China. It includes amusement celebrities’ blogs, intellectual celebrities’ blogs, sensibility blogs, and common people blogs.

Link: http://blog.sina.com.cn/
API: http://blog.csdn.net/用户名/services/metablogapi.aspx
Description: The link above is found in a message board. It seems that till now sina blog haven’t provided public access to their API. The Chinese character in the link above means user name.

2. SoHu Webblog

‘So’ means ‘ searching’  ‘Hu’ means ‘ ‘fox’. So the name means ‘search a fox’. It’s similar to the sina’s but not as popular as the one above.

Link: http://blog.sohu.com/
API: http://ow.blog.sohu.com/guide#11
Description: Sohu open widget(SOW) is proposed by sohu company, which is based on the UWA (Universal Widget API) principle, applied on many platform’s Widget standards. A brief introduction about SOW follows. Firstly, it’s based on a standard Widget principle — the UWA principle. Secondly, everyone can use this to develop their own Widget, and share it to multiple net friends, adding to their sohu blog for utilisation. Then there are loads of information about how to apply.

Microblogging services (similar to Twitter)

1. Sina Microblogging

Sina Microblogging is very similar to twitter.You can also call it ‘one sentence’ blogging. Users can send messages from mobile phones’ SMS messaging functions, WAP, Internet, or MMS.You can send what you hear, see, and think immediately. Your friends can also see what you sent immediately and add some comments. It has the most users of all Chinese microblogging services, and public celebrity is its character.Sina microblogging invite stars and celebrities to be users and will authenticate them. After authentication,a ‘character “V”‘ will be added after their names to distinguish them from common users.

Link: http://weibo.com/
API: http://open.weibo.com/wiki/API%E6%96%87%E6%A1%A3_V2#.E5.BE.AE.E5.8D.9A
Description: The link above is a introduction to the sina microblog API. This documentation contains detailed information about the reading and writing of Microblog, users, comments, relationships, accounts, topics, searching, registration, and so on. Some of them are signed by a red Chinese character, which means this is high class permission, and can only be used by making an application.

2. SoHu microblogging.

It’s very similar to the one above, but not as popular as the above.

Link: http://t.sohu.com/
API: http://open.t.sohu.com/en/%E9%A6%96%E9%A1%B5
Description: This link above is instructions for how to use the sohu API. They give some English labels.

Instant Messaging (similar to MSN)

1. QQ

This name means cute because its symbol is a little penguin.This software support online chatting, video chatting, sending documents, sharing documents, qq email, Netdisk. You can also join some groups which are built by the qq users. For instance,if you like yoga, you can join a yoga group, and you can chat with the people in this group. It’s the most widely used chatting software in China.

Link: www.qq.com
API: http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91Qzone_OAuth2.0%E7%AE%80%E4%BB%8B
Description: The link above has these contents. 1, a brief introduction to qq zone OAuth 2.0. 2,The procedures involved in using qq zone OAuth2.0. Step1: How to acquire access-token, qqzone. OAuth 2.0 provide different log-in checking and authorization procedures for website, mobile application and desktop. Now they provide 2 ways to acquire an access token. 1.server-side mode. 2. client side-mode. The two modes  only have differences in acquiring an access-token, but work similarly in the following steps of acquiring an  openid and invoking the API. Step 2: Using access-token to get the corresponding openid. Step 3 : using openAPI to get resources. You can also get specific information about API  from the following link given http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91API%E6%96%87%E6%A1%A3

2. MSN

No more introduction, but not as popular as qq in China

Link:http://cn.msn.com/
API: http://dev.live.com/messenger/

Video Sharing (for example, YouTube)

1. YOUKU

This name means ‘you are so cool’. A very popular video sharing website in China, founded in 2006. In 2007, it launched an activity called ‘LOMO is everywhere’, and turned out to be very successful. It’s also a website which gathers lots and lots of people who like to share their videos.

Link: www.youku.com
API: http://dev.youku.com/
Description: The weblink describes the basic functions of youku’s open API. They are: uploading videos, getting users’ related data, broadcasting which includes designing your own player’s appearance. Their characteristics are XML or JSON format data, and using Javascript client-side to directly insert youku videos without having to add anything on the server-side. Youku API is only open to partners, so a partner ID must be applied for first.

2. Tudou

Its name means ‘potato’. You can upload, download, and share videos through this website.

Link: www.tudou.com
API: http://api.tudou.com/wiki/index.php/%E9%A6%96%E9%A1%B5
Description: The link given is a tudou open platform document. Every developer can use a tudou account to login to the open platform and apply for a APP. Every APP has a limited amount of interface requirements. The interface includes functions that require user authorization, and others for which user authorization is not needed.

Photo sites (similar to Flicker)

1. babidou

‘Babidou’ I don’t know its meaning actually. But I think this name sounds good in Chinese and may mean ‘some interesting beans’.  Babidou internet photo album Internet Save centre was founded in 2005. Babidou specially serves Internet business. Almost all its photos are from taobao, yiqu, paipai, some large Internet shopping Websites. It has a strong documents management system, and a humanistic operator interface. Very easy and convenient to use and totally free.

Link: www.babidou.com
API: N/A.
Description: N/A.

2. bababian

‘bababian’ means ‘change’. This website imitates flicker.It has two subsites, one is for Internet shops, the other is for individual photo albums.

Link: www.bababian.com
API: http://www.bababian.com/api/api.htm
Description: This is the open platform link of bababian, but a bababian account is needed to see more detailed information.

Social bookmarking services (for example Addthis, or Delicious)

1. jia This
‘jia’ means add in Chinese. Its function is as same as its name. It provides these functions: website link collection, website sharing, and website link sending as well. Users can share everything they want to share to many popular social website by using this tool.
Link: www.jiathis.com
API: http://www.jiathis.com/help/html/share-with-jiathis-api
Description:The link gives a standard jiathis API interface, which make the implementation easier.This link, http://www.jiathis.com/send/?webid=shareID&url=$siteUrl&title=$siteTitle&uid=$uid is the standard form, share ID can be gleaned by a ID list. $siteUrl means the weblink that you want to share, $siteTitle means the shared website title which can also be defined by yourself. $uid(非必须) is used for data statistics. Four examples are also given.

2. bshare.cn

bshare is also a social sharing web2.0 button tool.

Link: www.bshare.cn/index
API: http://www.bshare.cn/api
Description: The link above gives detailed information about the API. It’s an open platform.

3. Baidu share

This is almost as same as the tools above.

link: http://share.baidu.com/
API: http://open.baidu.com/
Description: The link given above is the website of baidu open platform where you can find the APIs of different baidu applications, such as baidu share, baidu map, baidu encyclopedia.http://share.baidu.com/get-codes. This link is the specific code of baidu share, and also the instructions for use. You can copy and paste the code given and put it in any position within the webpage between <body> and </body>.

Online Trade (for example, ebay)

1. taobao

‘Taobao’ means ‘finding treasure’ in Chinese. Taobao is the biggest online retailer in Asia Pacific.It was funded by alibaba enterprise in 2003.Its business include c2c( person to person) and B2C( Business to person). By 2008, its registed member is more than 98million and represented about 80% of China on line trade, and its turnover reached 41.3billion yuan.

Link: www.taobao.com
API: http://open.taobao.com/doc/api_list.htm?id=102
Description:The link given above is an API list of taobao.It has API of users , products, businesses and so on.You can click on what  you need to get more detailed information.

Deal of the day (for example: Groupon)

1. meituan

Meituan means ‘Shopping happily in group’. This group shopping website is funded by the same company that funded Renren. Meituan reccomends you a qualified life service everyday. Its recommendation must be of excellent quality and reasonable value.

Link: www.meituan.com
API:http://www.meituan.com/help/api
Description:The weblink given is meituan API. You can get cities API,and also the daily deals API.

A general overview of lots of Chinese social media sites, including many not covered here, can be found at: http://www.bshare.cn/share. English speakers might prefer to read it through Google Translate (Click here for a translation).

CC image by Dainis Matisons

Project Sunflower: Usability Study

As part of our eBook usability study, this part deals with studying the devices from the eBook reader point of view. All three devices,  Apple iPad 2, Amazon Kindle DX and Motorola XOOM have eBook reading capabilities, with Kindle being a dedicated eBook reader.  The aim of the study was to analyse the ease with which a user can perform a particular task on each device, the user-friendliness of the UI and the eBook reading experience the device has to offer. Two studies were devised for the purpose of our research. One study aims at understanding the user experience the devices have to offer in general, and the second study aims at understanding the eBook reading experience.

Internet access was enabled for all devices for the purpose of the study, as connecting to the internet is not part of the eBook reading activity.

Study 1

The study was implemented in two phases, the difference being the instructions given to the user.

Phase 1

In this phase, the devices were connected to the internet, and the users were asked to download and open an eBook on the respective device. They were not told about specific apps that were needed to render eBooks, and were given no specifics whatsoever. The users were not given any instructions so as to get a firsthand view of where they try to get the eBooks from, whether they even know about the requirement of specific apps to render eBooks on the devices and of any other OS specific functions.

This study helped evaluate whether prior experience with the OS played a significant role in understanding OS specific requirements such as apps, the app stores the devices used, and the place to get eBooks from.

Phase 2

In this phase, the users were given more specific instructions about the applications that they would have to download to be able to read eBooks in the ePub format. This test helped answer questions such as, did the user know where to get the application, which application to get, did they have trouble installing the application, how to download eBooks on the device, and so on.

This study gave a very clear understanding about the intuitiveness of the UI, the difficulty or ease in performing tasks, and whether previous experience with either similar devices or the operating system played a part in performing the given task.

Study 2

This study was devised to evaluate the eBook reading experience each of the devices had to offer. The participants of the study gave feedback on the overall device design from point of view of an eBook reader, the user-friendliness of the user interface from the eBook reading point of view, and inputs on the in-book settings the devices allowed the users to change.

In this study, the users were asked to inspect two areas of the eBook reader or eBook reading app. First, the overall readability of eBooks was tested by asking the users to read a book for ten minutes on the device. The eBooks were rendered at default settings. This part of the test was to get feedback on the eBook reading experience the device offers. For the next part of the test, the users were asked to find and change the settings they wished to change when reading, and also inspect the settings the device offered. For this part of the study, each user was given five minutes. This dedicated time to change settings allowed the users to find all or most settings the software offered, and identify settings the software lacks or are unnecessary.

Cc image by Astragony

A Brief Introduction to eBooks and eReading

eBooks have been around for almost 4 decades now. The earliest eBooks were those in Project Gutenberg, the oldest digital library, founded in 1971.  eBooks and eReaders have gained a lot of popularity in the last decade or so. A large of people are increasingly moving towards eBooks to satisfy their literary needs.

eBooks

For those who have heard of eBooks but don’t really know what they are, an eBook stands for electronic book. These eBooks can be read on computers or other electronic devices. For starters, if I were to ask how would you carry your favourite books, each around 1000 pages on an international flight which you may or may not want to read again, what would you do? Yes, you do have to carry your clothes and other essentials too. In such a case, chances are, you’ll leave the books at home. eBooks were created to solve this exact problem. eBooks are mainly for portability and providing convenient and fast access to books, with newer devices supporting news, magazines and internet surfing. eBooks come with various memory options ranging from limited internal memory allowing you to store around 200 books to ones with an expandable memory of up to 64GB allowing you to store as many as 50,000 eBooks. A huge number of eBooks are currently sold by publishers all over the world.

Some of the oldest written scripts (Cuneiform script) date back to the 30th century B.C. Our ancestors drew paintings and symbols on clay and stone for very many years. We then evolved from writing on clay to writing on papyrus (made from the pith of the Papyrus plant) and other materials, eventually coming to the invention of paper which was superseded by digital information. We have come a long way from reading pictures and writings off stone and clay that can last for ages, to reading books, magazines and novels on small hand-held devices that can be erased by the touch of a button, but if not can stay for just as long. These handheld devices are capable of automatically updating news and other necessary information within a few seconds of the information becoming available.

eBook Readers

There are a large number of eBook readers currently available in the market. These eBook readers differ from each other in a number of ways such as the underlying operating system, hardware capabilities, available screen real estate, display technology and others. These eBook readers are capable of rendering different types of eBook formats; ePub, PDF, mobi, txt and azw being some of the most widely used. Due to the large number of eBook readers available, deciding which one to go for is not an easy task. Especially when some of them cost around £500. Making an informed decision by reviewing each and every device can take hours on end, seldom giving fruitful results and making it a matter of personal preference. All the devices have rights and wrongs, pros and cons, winning features and well, some not-so-good features.

ePub Format

The ePub format has gained popularity among eBook makers as it is designed for re-flowable (content presentation adapts to the output device) and re-sizable content . A large number of readers are capable of rendering the ePub format in a variety of form factors. These include traditional PCs and laptops, tablet PCs, Android and iPad devices, eInk devices in several configurations ranging from ‘paperback-size’ to A4-equivalent, mobile telephones and MP3 players, and so forth.

CC Image by Rodrigo Galindez