Friday, May 29, 2015

Android Studio 1.3 Release

Android Studio 1.3 Release
Link ->

Android Studio 1.3 <Preview 2>
Windows: (266 MB)
Mac: (265 MB)
Linux: (264 MB)

Use /usr/libexec/java_home -v 1.7 command on a Mac's terminal shell to figure out where is your java 1.7 home directory

Need JDK7 for Mac OSX here, if not already installed

Gradle Offline mode is here
See here for building apk files
app/build.gradle    Select all
apply plugin: 'android' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.mycompany.PeamonCalculator" minSdkVersion 8 targetSdkVersion 16 versionCode 1 versionName "1.0" archivesBaseName = "PeamonCalculator" + versionName } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } }

This is another build.gradle for building and linking native_app_glue static library in ndk (ugly but works in pre Android Studio 1.3)
app/build.gradle    Select all
apply plugin: 'android' def ndkFolder = file(plugins.getPlugin('').sdkHandler.getNdkFolder()).absolutePath android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.beginndkgamecode.hellodroid" minSdkVersion 8 targetSdkVersion 20 versionCode 1 versionName "1.0" archivesBaseName = "HELLODRIOD" + versionName ndk { abiFilters "x86, armeabi-v7a, armeabi" moduleName "hellodroid" cFlags "-I"+ndkFolder+"/sources/android/native_app_glue" ldLibs "EGL", "GLESv2", "android", "log", file(projectDir).absolutePath+"/libs/local/\$(TARGET_ARCH_ABI)/libandroid_native_app_glue.a" } } // call regular ndk-build script task staticLibBuild(type: Exec, description: 'Build Static Library files') { // for windows: commandLine ndkFolder+'/ndk-build.cmd', commandLine ndkFolder+'/ndk-build', 'APP_BUILD_SCRIPT='+ndkFolder+'/sources/android/native_app_glue/', 'NDK_APPLICATION_MK='+file(projectDir).absolutePath+'/src/main/jni/', 'NDK_PROJECT_PATH='+ndkFolder, 'NDK_OUT='+file(projectDir).absolutePath+'/libs' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn staticLibBuild } task cleanLibDir(type: Delete) { delete 'libs' } clean.dependsOn cleanLibDir productFlavors { x86 { ndk { abiFilters "x86" versionCode 2 } } armv7 { ndk { abiFilters "armeabi-v7a" versionCode 2 } } arm { ndk { abiFilters "armeabi" versionCode 2 } } } buildTypes { debug { minifyEnabled false zipAlignEnabled true jniDebuggable true renderscriptDebuggable true } release { minifyEnabled false zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } }

C/C++ Debugging is very limited in the first few previews of Android Studio 1.3, so logging might be helpful in C/CC source files like this below.
main.cpp    Select all
#include <android/log.h> ... #define ALOG(...) ((void)__android_log_print(ANDROID_LOG_INFO, __FILE__, __VA_ARGS__)) ... ALOG("This message came from C at line %d.", __LINE__);

For the source code of HelloDroid and PeamonCalculator, please see here and here.

Want to change to the awesome dark background theme. It is here

Android Studio 1.3 Release & 1.4 Preview using gradle-experimental

app/build.gradle (Module)   Select all
apply plugin: '' model { android { compileSdkVersion = 23 buildToolsVersion = "23.0.0" defaultConfig.with { applicationId = "com.beginndkgamecode.hellodroid" minSdkVersion.apiLevel = 8 targetSdkVersion.apiLevel = 23 versionCode = 1 versionName = "1.0" archivesBaseName = "HELLODRIOD_" + versionName } } android.ndk { moduleName = "hellodroid" /* * Other ndk flags configurable here are * cppFlags += "-fno-rtti" * cppFlags += "-fno-exceptions" * ldLibs = ["android", "log"] * stl = "system" */ cppFlags += "-I${file("src/main/jni/native_app_glue")}".toString() ldLibs += ["android", "log", "EGL", "GLESv2"] } android.buildTypes { release { minifyEnabled = false proguardFiles += file('proguard-rules.txt') } debug { ndk.with { debuggable = true } } } android.productFlavors { // for detailed abiFilter descriptions, refer to "Supported ABIs" @ // create("arm") { ndk.abiFilters += "armeabi" } create("arm7") { ndk.abiFilters += "armeabi-v7a" } create("arm8") { ndk.abiFilters += "arm64-v8a" } create("x86") { ndk.abiFilters += "x86" } create("x86-64") { ndk.abiFilters += "x86_64" } // To include all cpu architectures, leaves abiFilters empty create("all") } }

app/build.gradle (Project)   Select all
// build.gradle // Classpath for the plugin is instead of // The current version is 0.2.0. // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath '' } } allprojects { repositories { jcenter() } }

./gradle/wrapper/    Select all
#The new plugin supports only gradle-2.5. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://

Monday, April 27, 2015

RQuantLib 0.4 example

R version 3.1
dependencies ‘Rcpp’, ‘rgl’, ‘zoo’, ‘RUnit’
bond1.R  Select all
#Simple call with a flat curve require(RQuantLib) bond <- list(faceAmount=100, settlementDays=1, issueDate=as.Date("2014-11-30"), redemption=100)
scheduleparams <- list(effectiveDate=as.Date("2014-11-30"), maturityDate=as.Date("2018-11-30"), period=2, calendar="UnitedStates", businessDayConvention = 4, terminationDateConvention=4, dateGeneration=1, endOfMonth=1, dayCounter = 'Thirty360')
coupon.rate <- c(0.02875)
params <- list(tradeDate=as.Date('2014-2-15'), settleDate=as.Date('2014-2-19'), dt=.25, interpWhat="discount", interpHow="loglinear")
discountCurve.flat <- DiscountCurve(params, list(flat=0.05))
FixedRateBond(bond=bond, rates=coupon.rate, schedule=scheduleparams, calc=list(dayCounter='ActualActual.ISMA',compounding='Compounded', freq='Annual', durationType='Modified'),discountCurve=discountCurve.flat)

FixedRateBondPriceByYield( settlementDays=1, yield=0.05127, faceAmount=100, effectiveDate=as.Date("2014-11-30"), maturityDate=as.Date("2018-11-30"), period=2, calendar="UnitedStates", rates=c(0.05), dayCounter=2, businessDayConvention=4, compound=0, redemption=100, issueDate=as.Date("2014-11-30"))

FixedRateBondYield( settlementDays=1, price=99.54593, faceAmount=100, effectiveDate=as.Date("2014-11-30"), maturityDate=as.Date("2018-11-30"), period=2, calendar="UnitedStates", rates=c(0.05), dayCounter=2, businessDayConvention=4, compound=0, redemption=100, issueDate=as.Date("2014-11-30"))

calendar ->
dayCounter ->
compounding ->
freq ->
duration ->

Bond Utilities
matchBDC(bdc = c("Following", "ModifiedFollowing", "Preceding", "ModifiedPreceding", "Unadjusted"))
matchCompounding(cp = c("Simple", "Compounded", "Continuous", "SimpleThenCompounded"))
matchDayCounter(daycounter = c("Actual360", "ActualFixed", "ActualActual", "Business252", "OneDayCounter", "SimpleDayCounter", "Thirty360", "Actual365NoLeap", "ActualActual.ISMA", "ActualActual.Bond", "ActualActual.ISDA", "ActualActual.Historical", "ActualActual.AFB", "ActualActual.Euro"))
matchDateGen(dg = c("Backward", "Forward", "Zero", "ThirdWednesday", "Twentieth", "TwentiethIMM"))
matchFrequency(freq = c("NoFrequency","Once", "Annual", "Semiannual", "EveryFourthMonth", "Quarterly", "Bimonthly", "EveryFourthWeek", "Biweekly", "Weekly", "Daily"))

For Mac OSX, only 0.3.12 is available and quantlib-config should in in your path and executable

/usr/local/bin/quantlib-config  Select all
#!/bin/sh prefix=/usr/local exec_prefix=${prefix} exec_prefix_set=no usage="\ Usage: quantlib-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo 1.4.1 ;; --cflags) echo -I${prefix}/include -I/usr/local/include ;; --libs) echo -L${exec_prefix}/lib -L/usr/local/lib -lQuantLib ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done

Friday, December 19, 2014

Microsoft Office for Android Tablets Preview

Minimum Requirements:
ARM based Android Tablet having more than 7" screen, 1GB RAM and running KitKat (4.4.x).
Please note that Lollipop/Android 5 are not supported in this preview program.

To get started, please follow these steps:
1) If you have not installed, pls follow below instructions to install
a) Become tester by visiting following links –
b) Wait for 10 minutes to 2 hours as Google play takes time to replicate permissions, then click below mentioned links and follow the download links to install apps using Google play store

Word Preview

Excel Preview

PowerPoint Preview

2) If you are getting error in updating the apps, pls uninstall the older version and install.
To install, visit –

Saturday, November 22, 2014

Android Studio RC1

To install Android Studio manually:
Windows: (235 MB)
Mac: (234 MB)
Linux: (233 MB)

Saturday, November 15, 2014

How to compile C++ Game for Andorid NDK using Mac Terminal and Ant

This is a walkthrough of building C++ application with Android ndk and ant without using Eclipse IDE

1. Download the latest Android SDK from

and install Java SDK SE from Oracle say jdk-7u71-macosx-x64.dmg
2. Download Android NDK from say

3. Install apache ant

Please take note that for Mac OSX Mavericks, ant is no longer in Mac, just download a binary distribution of Ant from . and unzip/untar it, and add its bin directory to PATH.

4. Use Mac Terminal and add path to the above three installation folders
e.g. export PATH=${PATH}:~/android-sdk-macosx/tools:~/android-sdk-macosx/platform-tools:~/android-ndk-r9d:~/apache-ant-1.9.4/bin

5. Use Terminal command android sdk and android avd to update the sdk (install sdk of minimum of API-15 (Android 4.0.x) and create a new avd)

If you use Intel HAX for fast virt mode in emulator, please set Use Host GPU to on.

6. Download some C++ game source code e.g. here . Just download the Source Code from the book website and extract say
If you want to support multiple platforms add this APP_ABI in HelloDroid/jni/
APP_PLATFORM := android-16
APP_ABI := armeabi armeabi-v7a x86

7. ndk-build
cd ~/Download/HelloDroid
ndk-build clean && ndk-build

list target (assume sdk installed already in step 5 above)
android list target

update project with target 1 (assume target id 1 is already created with API-16 in step 5 above)
android update project -n com.beginndkgamecode.hellodroid -t 1 -p .

list avd (assume "NokiaX" is created in step 5 above)
android list avd

8. start emulator
emulator -avd NokiaX -scale 0.5 &

debug build
ant clean && ant debug

install apk to emulator
ant debug install

(1) use ant uninstall if need to remove
(2) use Control-fn-F12 to rotate the emulator in Mac
(3) the generated apk file is bin/com.beginndkgamecode.hellodroid-debug.apk
(4) add android:icon to AndroidManifest.xml like this to add a default icon.
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" ...

Sunday, October 19, 2014

How to run Android 5.0 samples in Android Studio

(1) Install Android 5.0 and Android SDK Build-tools to 21.0.1 using the latest Android Studio

(2) Download the samples from github
say from
and use Import Project in Android Studio

(3) Install HAXM if you run emulator in Windows
After you download it make sure you run the setup located in:

If you get the error "VT not supported" during the installation disable Hyper-V on windows features. You can execute this command as administrator dism.exe /Online /Disable-Feature:Microsoft-Hyper-V. You will also need "Virtualization Technology" to be enabled on your BIOS.

If you are using Mac OSX 10.10 Yosemite, run this (to allow ALL UNSIGNED KEXT to be loaded)
sudo nvram boot-args="kext-dev-mode=1"
and reboot before installing the package in

(4) setup AVD like below
Choose Intel Atom X86 and with Ram 768M (for Windows). You can use 2G for Mac

(5)change build.gradle file compileSdkVersion to 21 and buildToolsVersion to "21.0.1"
and also change AndroidManifest.xml file android:minSdkVersion= to "13"

Tuesday, October 7, 2014

CSS Selector in Chrome (Part 2) Apple On-line Store for iPhone 6

Apple On-line Store for iPhone 6 URL for HK is here

The selection flow and the CSS Selector code are listed as below

(1) Choose a model:
AOS/availability    Select all
<div id="group-1"> <div id="Item1" class="step"> <div class="selection"> <div class="small-size-buttons enabled"> <fieldset> <legend class="size-selection-header"> <h2 class="fwl"><span class="section-number step1"><span class="a11y">1</span>>/span> <span class="section-heading">Choose a model:</span> </h2> </legend> <div class="selection-buttons"> <div class="item "> <input type="radio" value="4_7inch" id="Item14_7inch" name="dimensionScreensize" class="a11y"> <label for="Item14_7inch"> <div class="details"> <div class="label"> <div class="size-label">iPhone 6 <span>4.7-inch display</span> </div> <div class="price"> <span itemtype="" itemprop="offers" itemscope="itemscope"> <meta itemprop="priceCurrency" content="HKD"> <span itemprop="price">From <span>HK$5,588</span></span> </span> </div> </div> </div> </label> </div> <div class="item "> <input type="radio" value="5_5inch" id="Item15_5inch" name="dimensionScreensize" class="a11y" checked=""> <label for="Item15_5inch"> <div class="details"> <div class="label"> <div class="size-label">iPhone 6 Plus <span>5.5-inch display</span> </div> <div class="price"> <span itemtype="" itemprop="offers" itemscope="itemscope"> <meta itemprop="priceCurrency" content="HKD"> <span itemprop="price">From <span>HK$6,388</span></span> </span> </div> </div> </div> </label> </div> </div> </fieldset> </div> </div> </div>
$("group-1 #Item1 div.selection-buttons div.item").eq(0).find("input").click();
where 0=iPhone 6; 1=iPhone 6 Plus

(2) Choose color:
$("group-1 #Item2 div.selection-buttons div.item").eq(0).find("input").click();
where 0=Silver; 1=Gold; 2=Space-Grey

(3) Choose storage:
$("group-1 #Item3 div.selection-buttons div.item").eq(0).find("input").click();
where 0=16GB; 1=64GB; 2=128GB

(4) Product Summary and Availability:
$("primary .product-title").text() + " " + $("actiontray .customer_commit_display").text();

(5) Enable Select button:
AOS/availability    Select all
<div id="actiontray" class="actiontray"> <ul class="purchase-info"> <li class="specials"></li> <li class="shipping"> Available to ship<b>:</b><br> <span class="customer_commit_display">Currently unavailable</span> <span class="freeshipping promo-text">Free Shipping</span> </li> <li> <span class="price"> <span class="current_price"> <span itemscope="itemscope" itemprop="offers" itemtype=""> <meta itemprop="priceCurrency" content="HKD"> <span itemprop="price"> HK$7,188 </span> </span> </span> </span> <span class="financing"></span> </li> <li class="add-to-cart"> <button class="button disabled" type="button" disabled="disabled"><span>Select</span></button> </li> <li class="shipping-lead"></li> </ul> </div>
$("actiontray .add-to-cart .button")[0].classList.remove("disabled"); $("actiontray .add-to-cart .button").removeAttr("disabled"); $("actiontray .add-to-cart .button")[0].classList.add("transactional");
note: Chrome supports HTML5 Technique for changing classes

Monitoring program see