Tuesday, October 27, 2015

Python Access Java Through JNIus


Can python access java library or class?, yes it's possible. There are some project to do this, the popular one is PyJNIus and this project under Kyvi project https://github.com/kivy/pyjnius.

How it's work? PyJnius wrap java using JNI call so python can call it, don't worry if you don't know about it. Me to :-)

To install PyJNIus, we need to install
  1.  Java JDK installed (OpenJDK will do)
  2.  Python 3.4 (In this case I use 3.4 version)
  3.  Setup JAVA_HOME environment
  4.  Setup JRE_HOME environment

After install python, we need to install cython, use pip or easy install. In this case I use pip.
$ sudo pip install cython
After cython installed, then install PyJNIus through  php or easy install. In this case I use pip
$ sudo pip install PyJnius
After PyJnius installed then try import jnius from python, and let learn little thing about calling java from python.

On linux should be no problem when importing jnius,
Python 3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from jnius import autoclass
>>> 
But on OSX we sometime meet this error when import jnius
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/barry/anaconda/envs/ovation-testing/lib/python2.7/site-packages/ovation/__init__.py", line 8, in <module>
    from jnius import autoclass, cast, JavaException
  File "/Users/barry/anaconda/envs/ovation-testing/lib/python2.7/site-packages/jnius/__init__.py", line 12, in <module>
    from .jnius import *
ImportError: dlopen(/Users/barry/anaconda/envs/ovation-testing/lib/python2.7/site-packages/jnius/jnius.so, 2): Library not loaded: @rpath/libjvm.dylib
  Referenced from: /Users/barry/anaconda/envs/ovation-testing/lib/python2.7/site-packages/jnius/jnius.so
  Reason: image not found
If you found that problem, you need to add this to .profile in your home file, and add this line then restart your terminal then try again to import jnius.
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(/usr/libexec/java_home)/jre/lib/server
now you can import jnius on python interpreter.

On windows, I have no luck to install PyJnius through pip or easy install using MinGW as compiler. But I still struggling with it :-(.

now let's test to access some java library
Python 3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import jnius
>>> from jnius import autoclass
>>> Stack = autoclass('java.util.Stack')
>>> stack = Stack()
>>> stack.push('hello')
'hello'
>>> stack.push('world')
'world'
>>> stack.pop()
'world'
>>> stack.pop()
'hello'
>>> System = autoclass('java.lang.System')
>>> System.out.println('Hello World')
Hello World
for more learning stuff you can refer to:
http://pyjnius.readthedocs.org/en/latest/
http://kivy.org/planet/2012/08/pyjnius-accessing-java-classes-from-python/

with this project, it's possible to develop android app using python. To create android package we can use http://python-for-android.readthedocs.org/en/latest/

Sunday, October 25, 2015

How to make android emulator run faster?

Android emulator running too slow? this is main problem when develop android application :-). I always trying to find other solution rather than using original google android emulator.

After do some googling and learn little about virtualization technology, I got little knowledge how to run android emulator using intel virtualization technology (VT) this feature must be activated through BIOS.

We need to access bios and activate intel virtualization technology, keep in mind that not all processor and motherboard support intel virtualization technology. But if intel virtualization technology exist in your bios setting you can use it to run android emulator using x86 image.

If your processor and motherboard support intel virtualization technology install haxm through android sdk manager


But if your computer doesn't support inter haxm don't worry just skip haxm installation step, then go to android sdk installation folder and goto extra/intel/Hardware_Accelerated_Execution_Manager then install using silent_install.bat must be using command prompt with administrator mode:
D:\SDK\android-sdk-windows\extras\intel\Hardware_Accelerated_Execution_Manager>silent_install.bat -m 512
-m parameter is memory will be used by haxm manager, don't use memory more than 1024MB, after installation succes you will get message in command prompt will return success message.

Next step install image x86 both, x86 image system and x86 google api image system.


Then setup your android virtual device (AVD), setup using one of x86 image system, don't forget to Use GPU Host


That's it, and let you got fast android emulation.

Tuesday, October 20, 2015

Python LinkedIn REST API Implementation

LinkedIn using OAuth Version 2.0 it's different process compare with OAuth Version 1.0. Newer version is more easy to implement we don't really need to create parameter with oauth_ prefix and generate signature on client side, for more information about oauth version 2.0 we can refer to official oauth page http://oauth.net/2/.

All request should use https protocol and redirect url must be accessible if not we can't get code for generate access token. The step is simple just 2 step only.

1. Generate grant access url, from here we will redirected to our redirect url and we will get code for authorization code
2. Generate access token using that code with POST method and we will get token access with specific time expired

We can use that token access to call API to provider. Token access will expired in specified time and we need to renew access token with both step.

You can grab pyLinkedinAPI from my github repository https://github.com/amru-rosyada/pyLinkedinAPI

Please if you use it, don't forget to give us feedback. Next project I will try to implement Facebook, G+, Instagram and Flickr as far as I have little time to make it :D

Python Tumblr REST API Implementation

In previous post I was implement python twitter API, today I will talk something about tumblr API implementation.

I guess twitter, tumblr, linkedin and yahoo used same oauth method and api implementation. I use pyTwitterAPI base code to implement tumblr rest API and still work but with little additional parameter.

Tumblr is yahoo like API implementation as we know tumblr was acquired by yahoo :-) so if it's worked with tumblr, it's also will work with yahoo API :D

The main different with twitter API call is tumblr add api_key parameter which is consumer key. So if I want to call tumblr rest API, I must pass api_key=MY_CONSUMER_KEY in api url.

ex:
http://api.tumblr.com/v2/blog/scipsy.tumblr.com/info?api_key=fuiKNFp9vQFvjLNvx4sUwti4Yb5yGutBN4Xh10LXZhhRKjWlV4

Most of tumblr api call need base hostname as parameter. For example my tumblr domain is http://xyzmind.tumblr.com, so I need to call it with http://api.tumblr.com/v2/blog/xyzmind.blogspot.com/info?api_key=fuiKNFp9vQFvjLNvx4sUwti4Yb5yGutBN4Xh10LXZhhRKjWlV4. It's also work with tumblr custom domain :D

You can grab my python tumblr API implementation from my github repository https://github.com/amru-rosyada/pyTumblrAPI

Let me know if something wrong, may you want to contribute with my project.

Python Twitter REST API Implementation

Before read this article maybe you need to read my previous article http://walkinsmile.blogspot.com/2015/04/python-oauth-implementation-its-not.html

I already wrote some codes in a day to implement wrapper for twitter REST API (OAuth V1.0 and REST API V1.1), this code will simplify process to call twitter REST API from python code.

It's not that complex and not that hard and just little code to help other developer if they need to simplify twitter REST API call.

I use python version 3.4 :-), you may need some modifications and tuning to run this code on older python, especially older than version 3.

You can grab my code on my github repository free to use, modify and redistribute https://github.com/amru-rosyada/pyTwitterAPI

Understanding python decorator in easy way

I still have enough energy to write something on my blog :D after one week trip to Jakarta for some work reason. I am so tired but I want to write and share something about python decorator before I sleep :-).

Lets see how python function work,

Code 1:
def myfunc(a):
    print(a)

decorator = myfunc
decorator('It\'s Works')
Output 1:
It's Works

Code 2:
def myfunc(*args):
    print(args)

decorator = myfunc
decorator('It\'s', 'Works', 'Yeah', 'Must be ok')
Output 2:
("It's", 'Works', 'Yeah', 'Must be ok')

Code 3:
def myfunc(**kwargs):
     print(kwargs)

decorator = myfunc
decorator(a=1, b=2, c=3)
Output 3:
{'a':1, 'b':2, 'c':3}

Inner Function
Inner function is function inside function or we can call it nested function. Look at code bellow:
def myfunc(a):
    def inner_myfunc():
        print(a)

    return a

decorator = myfunc
decorator('inner myfunc')
Output should be:
'inner myfunc'
from the code we can se that, argument or parameter a is accessible from inner function.

I have some question why I always wrote decorator = myfunc? I just want to show python function can be assigned to var as alias or pointer.

@some_decorator
def myfunc():
    return a

it's mean:
myfunc = some_decorator(myfunc)

Lets try to the real code with decorator implementation:

# define logger function
# we will this for as decorator
def logger(func):
    def inner(*args, **kwargs): #1
        print "Arguments were: %s, %s" % (args, kwargs)
        return func(*args, **kwargs) #2
       
    return inner

# use the decorator
@logger
def myfunc1(x, y=1):
    return x * y

# use the decorator
@logger
def myfunc2():
    return 2

After define function now try to call myfunc1 and myfunc2:

# call function
myfunc1(5, 4)

# output should be
Arguments were: (5, 4), {}
20

# call function
myfunc1(1)

# output should be
Arguments were: (1,), {}
1

# call function
myfunc2()

# output should be
Arguments were: (), {}
2

If you need more explanation you can comment this post, just comment and I will try to answer :-).

Let Sleep.....

Python OAuth implementation it's not that hard!

Did you know about OAuth ? I will explain about OAuth from some resources,

Wikipedia: http://en.wikipedia.org/wiki/OAuth
OAuth is an open standard for authorization. OAuth provides client applications a 'secure delegated access' to server resources on behalf of a resource owner. It specifies a process for resource owners to authorize third-party access to their server resources without sharing their credentials. Designed specifically to work with Hypertext Transfer Protocol (HTTP), OAuth essentially allows access tokens to be issued to third-party clients by an authorization server, with the approval of the resource owner, or end-user. The client then uses the access token to access the protected resources hosted by the resource server. OAuth is commonly used as a way for web surfers to log into third party web sites using their Microsoft, Google, Facebook or Twitter accounts, without worrying about their access credentials being compromised.

If you want to know more about OAuth standard you can refer to http://oauth.net/

In this post I will use Python version 3.4,

Something you need to know about OAouth implementation:
  1. Know about REST API from service provider like twitter, facebook, google, tumblr, yahoo etc. They have different method when request using oauth. some provider using POST only or GET only or both.
  2. Know about OAuth standard at least you have read it
  3. Know about term which is used by OAuth like oauth_callback, oauth_nonce, oauth_consumer_key, oauth_consumer_secret, oauth_token, oauth_token_secret, oauth_timestamp, oauth_signature, oauth_signature_method and oauth_version
  4. that's it
OAuth using CONSUMER_KEY and CONSUMER_SECRET to generate token, then this token will be use to access API from service provider.

How to request POST and GET using Python ?

I want to share about HTTP request using python, HTTP request can be done using POST or GET method. The main different between POST and GET is on HTTP header, POST method need Content-Type: application/x-www-form-urlencoded definition when sending data.

If you want to know about HTTP header you can refer to wiki page http://en.wikipedia.org/wiki/List_of_HTTP_header_fields or W3 page http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html.

But I will not talk about HTTP Protocol standard in this post, I only will share about how to request POST and GET using python (I use python version 3.4).

POST Method:
# import url Request to create request object
from urllib.request import Request

# import urlopen to send request to web site
from urllib.request import urlopen

# for post request need define Content-Type : application/x-www-form-urlencoded on http header
header = {'Content-Type':'application/x-www-form-urlencoded'}

# create request object
# data query need to encode to byte, it is save to use standart ISO-8859-1
req = Request('http://localhost:8888/p/authenticate/google', 'firstname=amru&lastname=rosyada'.encode('ISO-8859-1'), header)

# send post request
post_response = urlopen(req)

GET Method:
GET code snippet is same with POST but without application/x-www-form-urlencoded on http header data parameter should be None of left it blank.
# import url Request to create request object
from urllib.request import Request

# import urlopen to send request to web site
from urllib.request import urlopen

# create request object
# data query need to encode to byte, it is save to use standart ISO-8859-1
req = Request('http://localhost:8888/p/authenticate/google?firstname=amru&lastname=rosyada', None)

# send post request
get_response = urlopen(req)
Thanks :D

Python in a Minute

Today I will share about how to learn python in a minute, in this post I will use python version 3 only and discuss about python keyword, using python module, python mode, basic syntax, operator, function, python data type and class.

This post is not deep concept, but about basic concept before we start deep learning into python.

Python is easy programming language to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.

Learning python is not hard because it's "human language" :-) it's mean that python language is more readable, portable, clean, easy to develop and easy to extends.

Ok lets start don't wasting time :D.

Python Mode
Python have two mode which is interpreter mode and scripting mode, we don't need to compile the code because compilation process to byte code will be handled by python interpreter.

You need to install python interpreter before you can start using python, can be downloaded from here python.org. Choose the right one for you distribution OS.

Interpreter mode can be access from terminal emulator in linux and mac or cmd in windows. Most linux distro include python interpreter on each their distribution.

From terminal emulator or cmd you simply type python you will get in to python interpreter depend on your system.
Python 3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
With interpreter method you can use it as calculator like sum, div, mod etc
Python 3.4.3 (default, Mar 10 2015, 14:53:35)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>> 3*3
9
>>> 3**4
81
>>> 6%2
0
>>>

Setup Python on windows platform

Hello guys, today I will share how to setup and install python on windows platform. Before installation process you need to download python installer for windows platform at https://www.python.org/downloads/windows/ I recommended to download python 3 latest version.

If you already finished download, run installer by double click your python installer and follow the wizzard :-).


No more Python 2.8

I use python for my daily programming stuff and I am so happy I can use it in my daily programming stuff, Python language it so beautiful, effective and clean.

Why it's beautiful? because it's easy to learn, easy to implement, easy to extends (we can extends python using C or C++). It's good programming language for people who want to learn basic programming concepts. But don't forget to have deep concept in C programming language :D, C is important thing and one thing you need to know about python it made from C.

Why it's effective? python syntax and idiom is well mature. We can create complicated stuff with python using few lines of code. Python built in method is complete you don't really need third party library if you not use it on specific purpose.

Why it's clean? Python functions have no explicit begin or end, and no curly braces to mark where the function code starts and stops. The only delimiter is a colon (:) and the indentation of the code itself. Python block of code is separate with indentation not curly braces so it clean and you will always got clean code structure.

But python 2.7 is the last python 2 development and will not supported in the future python release, because python development team decided to support python 3 version only. Don't worry python 3.4 is best python version ever, you can convert code from python 2.7 to python 3. :-) smart.