Saturday, January 24, 2015

Google Summer of Code Reunion 2014


This post is long overdue. I've pretty much given up blogging lately. This however needs to be written because of the amazing event that it is about!:)

In late October last year I had the amazing opportunity to participate at the Google Summer of Code 10 year reunion at San Jose, California. I was one of the past 10000+ GSoC students who randomly won the lottery to the event. Also, I was fortunate enough to be in the US (in New York) around the same time for a work related training. Big thank you to our company VP Developer Evangelists in New York, Brian Carelli for enabling me to attend this event. Thanks to him I was able to take a short flight (5hrs) from New York to San Jose on 23rd October 2014 to attend the biggest and most awesomest tech meetup/conference I have ever attended! Sorry if I am inventing adjectives here!:D

The conference was held at the Marriot Hotel in San Jose, California. I was quite overwhelmed by the conference gathering. There were about 500 participants from all over the world. Developers from some of the awesomest (I am using this word too much here!!) open source products in the world, from Google (they were the hosts after all) to VLC to Wikipedia. Products that make everyones day to day life so much easier and more fun. There were also developers from smaller projects/products that were just as exciting. I cannot list it all here because the list was that extensive. All I can say is that it was the largest gathering of open source developers you can imagine (500 is a lot!).

I met so many interesting people at the conference. There were fresh grads and even undergrads. My roommate was an undergrad at UCBerkley and one the youngest participants at the conference. There were university professors and PhD students. I really enjoy meeting people from diverse backgrounds and cultures. It's always so inspiring. I suppose the most inspiring person at the conference was Linus Torvalds, who was the guest of honor at the conference opening ceremony. I was secretly hoping Larry Page or Sergey Brin would show up. I am a little too young to idolize Linus. The other guest for the opening ceremony was Peter Norvig (Director of research at Google) and pretty much one of the biggest names when it comes to AI. All these big names aside, for me the best meetup at the conference was meeting my GSoC 2010 project mentor KaiRo (Robert Kaiser) from the Mozilla foundation. He had also won the lottery for the event and he even did a session at the conference on test automation. KaiRo said that I was his only GSoC student. I suppose I demotivated him a bit from mentorship since I didn't carry forward with the development team after the GSoC project ended. I regret that I could not continue due to various other obligations. However I hope he will decide to take up GSoC mentorship again because he was an excellent mentor and he has such a wide knowledge in programming and technology in general that any student would be lucky to learn from him:) I know I learnt a lot from the project I did! I am posting the picture I took with him at the conference here, I hope he won't mind:)




There were so many exciting sessions at the reunion 'Unconference' that I would probably need another blog post to cover it all. I hope I get around to blogging all that someday soon because I know it is going to help me out with my work as well. Oh, and the other great thing about the conference was that we got to visit The Google HQ. Unfortunately it was a Sunday so we didn't see many employees but it was still great to see the massive expanse of the Googleplex and take pics with the cool android statues and we even had one of the most energetic Googlers and conference organizers, Stephanie Taylor give us a guided tour!:)




All in all the GSoC 10 Year Reunion conference was an amazing event and I am so happy to have participated. I am posting a pic of one of my favorite conference moments of all here. My Google Glass moment. One of the developers at the conference was kind enough to lend his glass for me to try out. I usually hate glasses but surprisingly I loved Google Glass! Not enough to spend a crazy amount of money and buy one but perhaps 5 years from now when glass is just as commonplace as an iPhone, I just might!:)












Sunday, August 10, 2014

Running Kura on Raspberry Pi over Equinox and Concierge

Given below are screenshots of the Kura web console running on my RPi device. It gives a comparison of Kura running over Equinox vs Concierge.

My RPi configuration:

RPi Model B
RAM 512MB
Memory 4GB (SanDisk Ultra 30MB/s)
Raspbian OS

Initial memory usage is ~195MB


Kura over Equinox ~300MB


Kura over Concierge ~330MB



Saturday, August 9, 2014

Running kura web console on RaspberryPi over Concierge

So I finally managed to get the web console up and running over Concierge! I had to include some equinox dependencies to get the kura services running over concierge. I got a lot of help from the Concierge developer community. Thanks Jan S. Rellermeyer, Tim Verbelen and Jochen Hiller!


Below is the console output when running start_kura.sh script

---------------------------------------------------------
  Framework started in 118.902 seconds.
---------------------------------------------------------


Concierge> bundles
Bundles:
[ 0] (active) org.eclipse.concierge
[ 1] (active) Concierge Shell
[ 2] (resolved) Apache Log4j
[ 3] (resolved) Apache Extras Companion™ for Apache log4j™.
[ 4] (active) slf4j-api
[ 5] (resolved) slf4j-log4j12
[ 6] (active) org.eclipse.concierge.service.xmlparser
[ 7] (active) OSGi Release 4.2.0 Services
[ 8] (active) Supplemental Equinox Functionality
[ 9] (active) Equinox Util Bundle
[10] (active) Configuration Admin
[11] (active) org.eclipse.concierge.extension.permission
[12] (active) Common Eclipse Runtime
[13] (active) Extension Registry Support
[14] (active) Event Admin
[15] (active) Meta Type
[16] (active) Eclipse Preferences Mechanism
[17] (active) Declarative Services
[18] (active) Servlet API Bundle
[19] (active) Jetty :: Utilities
[20] (active) Jetty :: IO Utility
[21] (active) Jetty :: Http Utility
[22] (active) Jetty :: Continuation
[23] (active) Jetty :: Server Core
[24] (active) Jetty :: Security
[25] (active) Jetty :: Servlet Handling
[26] (active) Http Services Servlet
[27] (active) Jetty Http Service
[28] (active) javax.usb API from javax-usb
[29] (active) bundle.name
[30] (active) osgi.cmpn
[31] (active) IO Connector Service
[32] (active) Eclipse Paho MQTT Client
[33] (active) HSQLDB
[34] (active) Apache ServiceMix :: Bundles :: protobuf-java
[35] (active) Commons IO
[36] (active) Apache Commons Net
[37] (active) javax.usb Common from javax-usb
[38] (active) Apache Commons FileUpload
[39] (active) User
[40] (active) org.eclipse.kura.api
[41] (active) org.eclipse.kura.core
[42] (active) org.eclipse.kura.core.cloud
[43] (active) org.eclipse.kura.core.comm
[44] (active) org.eclipse.kura.core.configuration
[45] (active) org.eclipse.kura.core.crypto
[46] (active) org.eclipse.kura.deployment.agent
[47] (active) org.eclipse.kura.core.deployment
[48] (active) org.eclipse.kura.core.net
[49] (active) org.eclipse.kura.linux.clock
[50] (active) org.eclipse.kura.linux.command
[51] (active) org.eclipse.kura.linux.net
[52] (active) org.eclipse.kura.linux.position
[53] (active) org.eclipse.kura.linux.usb
[54] (active) org.eclipse.kura.linux.watchdog
[55] (active) org.eclipse.kura.net.admin
[56] (active) org.eclipse.kura.web


Concierge> services
Services:
Concierge System Bundle
    [Service 1] [org.osgi.service.resolver.Resolver]
[org.eclipse.concierge.service.xmlparser-1.0.0.201407191653]
    [Service 2] [javax.xml.parsers.SAXParserFactory]
    [Service 3] [javax.xml.parsers.DocumentBuilderFactory]
[org.eclipse.equinox.util-1.0.500.v20130404-1337]
    [Service 4] [org.eclipse.equinox.internal.util.threadpool.ThreadPoolManager, org.eclipse.equinox.internal.util.threadpool.ThreadPoolFactory]
    [Service 5] [org.eclipse.equinox.internal.util.timer.Timer]
[org.eclipse.equinox.cm-1.0.400.v20120522-1841]
    [Service 6] [org.osgi.service.cm.ConfigurationListener]
    [Service 7] [org.osgi.service.cm.ConfigurationAdmin]
[org.eclipse.equinox.common-3.6.100.v20120522-1841]
    [Service 8] [org.eclipse.osgi.service.urlconversion.URLConverter]
    [Service 9] [org.eclipse.core.runtime.IAdapterManager]
    [Service 10] [org.osgi.service.url.URLStreamHandlerService]
[org.eclipse.equinox.registry-3.5.200.v20120522-1841]
    [Service 11] [org.eclipse.core.runtime.IExtensionRegistry]
    [Service 12] [org.eclipse.osgi.framework.console.CommandProvider]
[org.eclipse.equinox.event-1.2.200.v20120522-2049]
    [Service 13] [org.osgi.service.event.EventAdmin]
    [Service 18] [org.osgi.service.event.EventAdmin]
[org.eclipse.equinox.metatype-1.2.0.v20120522-1841]
    [Service 14] [org.osgi.service.metatype.MetaTypeService, org.eclipse.equinox.metatype.EquinoxMetaTypeService]
[org.eclipse.equinox.preferences-3.5.0.v20120522-1841]
    [Service 15] [org.eclipse.core.runtime.preferences.IPreferencesService]
    [Service 16] [org.osgi.service.prefs.PreferencesService]
[org.eclipse.equinox.ds-1.4.0.v20120522-1841]
    [Service 17] [org.osgi.service.cm.ConfigurationListener]
    [Service 19] [org.eclipse.osgi.framework.console.CommandProvider]
    [Service 20] [org.apache.felix.scr.ScrService]
[org.eclipse.equinox.http.servlet-1.1.300.v20120522-1841]
    [Service 21] [org.osgi.service.http.HttpService, org.eclipse.equinox.http.servlet.ExtendedHttpService]
[org.eclipse.equinox.http.jetty-3.0.0.v20120522-1841]
    [Service 22] [org.osgi.service.cm.ManagedServiceFactory]
[org.eclipse.equinox.io-1.0.400.v20120522-2049]
    [Service 23] [org.osgi.service.io.ConnectorService]
[org.eclipse.kura.core-0.2.0.201408091943]
    [Service 24] [org.eclipse.kura.system.SystemAdminService]
    [Service 31] [org.eclipse.kura.system.SystemService]
    [Service 32] [org.eclipse.kura.db.DbService]
    [Service 35] [org.eclipse.kura.ssl.SslManagerService]
    [Service 36] [org.eclipse.kura.data.DataTransportService, org.eclipse.kura.ssl.SslServiceListener]
    [Service 37] [org.eclipse.kura.configuration.ConfigurableComponent, org.eclipse.kura.data.DataTransportListener, org.eclipse.kura.data.DataService]
[org.eclipse.kura.core.cloud-0.2.0.201408091943]
    [Service 38] [org.eclipse.kura.cloud.CloudCallService, org.eclipse.kura.data.DataServiceListener]
    [Service 39] [org.osgi.service.event.EventHandler]
    [Service 40] [org.eclipse.kura.cloud.CloudService, org.eclipse.kura.data.DataServiceListener, org.eclipse.kura.configuration.ConfigurableComponent, org.eclipse.kura.cloud.CloudPayloadProtoBufEncoder, org.eclipse.kura.cloud.CloudPayloadProtoBufDecoder]
[org.eclipse.kura.core.comm-0.2.0.201408091943]
    [Service 25] [org.osgi.service.io.ConnectionFactory]
[org.eclipse.kura.core.configuration-0.2.0.201408091943]
    [Service 33] [org.osgi.service.cm.ConfigurationListener]
    [Service 34] [org.eclipse.kura.configuration.ConfigurationService]
[org.eclipse.kura.core.crypto-0.2.0.201408091943]
    [Service 26] [org.eclipse.kura.crypto.CryptoService]
[org.eclipse.kura.linux.clock-0.2.0.201408091943]
    [Service 41] [org.eclipse.kura.clock.ClockService]
[org.eclipse.kura.linux.command-0.2.0.201408091943]
    [Service 27] [org.eclipse.kura.command.CommandService]
[org.eclipse.kura.linux.net-0.2.0.201408091943]
    [Service 29] [org.osgi.service.event.EventHandler]
    [Service 30] [org.eclipse.kura.net.NetworkService]
[org.eclipse.kura.linux.position-0.2.0.201408091943]
    [Service 42] [org.osgi.service.event.EventHandler]
    [Service 43] [org.eclipse.kura.position.PositionService, org.osgi.service.event.EventHandler]
[org.eclipse.kura.linux.usb-0.2.0.201408091943]
    [Service 28] [org.eclipse.kura.usb.UsbService]
[org.eclipse.kura.linux.watchdog-0.2.0.201408091943]
    [Service 44] [org.eclipse.kura.watchdog.WatchdogService]


Concierge> DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.position.PositionService' is used 2 time(s), object = org.eclipse.kura.linux.position.PositionServiceImpl@1d0440
DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.net.NetworkService' is used 4 time(s), object = org.eclipse.kura.linux.net.NetworkServiceImpl@1bf724e
DEBUG 17 ServiceReg.getService(): service 'org.eclipse.kura.system.SystemAdminService' is used 3 time(s), object = org.eclipse.kura.core.system.SystemAdminServiceImpl@65a4ba


Concierge>     

Saturday, August 2, 2014

Debugging OSGi Declarative Services

Figuring out why the declarative services in your osgi application haven't resolved can be a bit tricky sometimes. If you are using the equinox ds implementation you can use the built in debug mode to figure out the underlying issues.

Simply set the below properties

equinox.ds.debug=true
equinox.ds.print=true

Since I am running equinox ds over concierge I specify these properties as,

-Dequinox.ds.debug=true
-Dequinox.ds.print=true

in the concierge init.xargs launch configuration file.

References:

http://eclipse.dzone.com/articles/dependencies-and-services-osgi
http://hwellmann.blogspot.com/2009/04/getting-started-with-osgi-declarative.html