Google Summer of Code – Week 4 – 6 & Mid-Term Evaluations

First of all, I’m very delighted that I have passed the GSoC Mid-Term evaluation of my project that’s the most recent development in my GSoC journey.

Right after first 2 weeks, I had my final semester exams scheduled. Thus, I requested my mentor to give me off for my final exams and he granted me leave for 10 days. So, I couldn’t work on anything during 3rd week.

Screenshot of the email that made my day ūüėÄ

passed_gsoc_screenshot

Abstracts Section:

Right after my exams, I resumed my programming. G-Node has now developed a web portal for conferences as well recently and rather than providing me with the JSON files for ‘Abstracts’ my mentor told me about the web portal and it’s RESTful API. So app would communicate with their online server via REST API for fetching the latest data. The major change that reflected here was the new JSON Model for Abstracts Data. They had completely changed the JSON Model for the Abstract. Mentor that’s why asked me to port the app for new model – and an amazing challenge started ūüėÄ

Initially, I started working on old model and started changing it for new model but i wasn’t getting any luck with that. After few time, I decided to go for writing it from scratch and I’m glad i took that decision. I had to change whole DB schema for the new model, DBHelper class,¬†JSON parsing function for making up to the new model. But somehow I got it managed.

schema_diagram

The other problem was: Like in previous version there was option for ‘Next’ & ‘Prev’ navigation of Abstracts – that wasn’t working now. The reason was that for previous model the ID was numeric and¬†auto-increment. So for navigating to the next abstract, all it required was to increment current ID value by 1 and fetch data for that ID. But in new model, the ID has been changed to UUID rather than numeric. But thanks to SQLite, it has functionality of ROWID for each record which is unique and the ROWID is integer & auto-increment. Thus I used ROWID for getting UUID of Next and Previous record like below:

String getCurrentRowIDQuery = "SELECT ROWID FROM ABSTRACT_DETAILS WHERE UUID = '" + currentID + "';";
--currentID is UUID of current abstract

And then incremented or decremented for getting ROWID of next or previous record respectively. After getting the ROWID of required record, the next query that executed was:


String getNextAbstractUUID = "SELECT UUID FROM ABSTRACT_DETAILS WHERE ROWID = " + newRecordRowID + ";";

--newRecordRowID is Row ID of new record to be fetched 

Favorite Abstracts Functionality:

The other feature I worked on during this time was to add functionality for user to ‘Add an Abstract to Favorites’. Because the Conference would be having huge number of Abstracts and user might be interested in few so he/she can now add Abstracts of his/her interest to ‘Favorites’ just by clicking a Star icon in Actionbar.

For maintaining the record of Favorite Abstracts, I added a new Table in Database: ABSTRACT_FAVORITES Рwith 1 column only (UUID). This table maintains UUID of Abstracts that user has favourited. And then in FavouriteAbstract Activity, the SQL Query for getting favorite Abstracts goes like this:


String query = "SELECT UUID AS _id , TOPIC, TITLE, ABSRACT_TEXT, STATE, SORTID, REASONFORTALK, MTIME, TYPE,DOI, COI, ACKNOWLEDGEMENTS FROM ABSTRACT_DETAILS WHERE _id IN (SELECT ABSTRACT_UUID FROM ABSTRACT_FAVORITES);";

--Subquery runs for getting UUIDs of favorite abstracts from ABSTRACT_FAVORITES table.<a href="http://shumailmohyuddin.com/wp-content/uploads/2014/07/abstracts_module_screenshots.jpg">
</a>

 The code for whole Abstracts Module is available on Github.
You can explore it here: https://github.com/shumail92/GCA-Android/tree/master/Conference-v2/src/com/g_node/gca/abstracts

Share your thoughts in comments below. I’ll be looking forward to any suggestions or feedback.

abstracts_module_screenshots

Google Summer of Code – First 2 Weeks

Hello everyone, I know I mentioned in my earlier blog post (that was the first blog post about my Google Summer of Code journey), that I shall be posting details regarding my Google Summer of Code project as it continues. But unfortunately I couldn’t update because of my hectic summers and schedule. But here it is ! An overview of First 2¬†weeks my GSoC.

first_2_week_blog_image

Now coming to the project updates, let’s first have a look of what’s done till now. The first feature I decided to implement was the “NewsRoom” Section – Section where details of recent news/updates, press releases or highlights of the organization will be displayed. Currently, ‘International Neuroinformatics Coodinating Facility’ website www.incf.org has a news section already that they regularly update. Link of their online newsroom section is: www.incf.org/newsroom/¬†. For those news to appear in android app, I had to find some way that can be used as data source from website. After I explored a little, I managed to find RSS Feed for those news/updates at incf.org website. So now I had found the source.

Next task was to integrate that source into mobile app. The approach I used for this purpose is to first download that RSS Feed into mobile and save that file as ‘news.xml‘ and then use android XMLPullParser for parsing RSS Feed ¬†to extract the relevant information i.e. Date of publishing, Title, Text of the update.¬†Besides the extraction of keys from RSS, another challange I had to face was to extract the image from html source embedded with Update Text and display that image thumbnail along the left side of news. For this purpose, I used ‘JAVA HTML Parser Library – jsoup ‘ – It works great like jQuery for extracting DOM elements. Following is the piece of code I used for extracting image:

Document doc = Jsoup.parse(curText);   //curText is the Raw HTML from which image is to be extracted
 Element e = doc.select("img[src]").first();
 if(null != e) {
 String imgUrl = e.attr("src");
 Log.i("incf", "Image URL extracted = " + imgUrl);
 currentRssItem.setImgUrl(imgUrl);  //here it sets the extracted image URI
 }

I also had to do custom ListView implementation because default ListView only supports text. But I wanted to display the each newsfeed item such that each list item is divided into 2 parts Рthe part on left side would be having thumbnail image and part on right side was supposed to have 3 things: News Title, News Text & Publishing Date. The Adapter for Newsfeed ListView is implemented in file NewsAdapter.java

If you want to explore all source code for NewsRoom module that I implemented, that’s available on Github repo of this project. Here is it’s link:¬†https://github.com/shumail92/GCA-Android/tree/master/Conference-v2/src/com/g_node/gca/newsroom

After all these efforts, I managed to finally implement this successfully and move on next module implementation. Following is the preview screenshot fo NewsRoom Module:

newsroom_screenshot

Share your thoughts on this in comments below – I shall be looking forward to any suggestions or feedback :)

Yaaayyy !!! Selected in Google Summer of Code 2014

Hello everyone ! I have been selected as student for Google Summer of Code 2014 (GSoC2014). ¬†This summer I shall be working with International Neuroinformatics Coodinating Facility (INCF). More specifically, i shall be working with INCF’s¬†Germany node – German Neuroinformatics Node.

incf_gsoc_blog_logo

For those who don’t know what Google Summer of Code is : (from GSoC site)

Google Summer of Code is a global program that offers students stipends to write code for open source projects. We have worked with the open source community to identify and fund exciting projects for the upcoming summer.

Project Details: 

My project with INCF focuses android development. There ¬†were many ideas listed on INCF GSoC ideas page but i decided to go for one that involves Android programming¬†because I need to brush up my Android skills and implement whatever i learnt recently in University of Maryland’s online Android¬†course . (I successfully took and passed this course with distinction)

To keep it short, it’s Android App for their annual conference with a lot of features ranging from simple conference schedule, Abstracts detail and information to some advance features like option for taking notes against Abstracts, synchronization with their online server for frequently updating¬†of Data using RESTful API’s, itinerary planner and much more. In coming weeks, i shall be sharing more details on my project and will keep updating about my GSoC experience and details here.

It’s worth mentioning¬†Sir Christian Garbers – my GSoC Mentor and a nice¬†person who helps¬†me whenever I need help, replies to my all emails and clears my doubts and confusion.

About INCF:

International Neuroinformatics Coodinating Facility (INCF) develops collaborative neuroinformatics infrastructure and promotes the sharing of data and computing resources to the international research community. Their  mission is to facilitate the work of neuroscientists around the world, and to catalyze and coordinate the global development of neuroinformatics. More details regarding INCF can be found on their website:  http://www.incf.org/about

Looking forward to a great summer ahead full of learning and ending up with a wiser, more knowledgeable and not to mention, richer iteration of myself Рstarting a journey in  FOSS  (Free and open-source software) Community.