Android Studio 2.0: new features


Android Studio 2.1 is required to try out new features and APIs of the Android N developer preview including the new Jack compiler and Java 8 language support. It also includes performance improvements to Instant Run, and a number of bug fixes and stability improvements.

Android Studio 2.1 is now available to download through the Stable release channel.

Find out more about Android Studio 2.1 feature here: http://goo.gl/dE76Li

Learn more about Android Studio with Android Tool Time with Reto Meier: https://goo.gl/mAitOr

Subscribe to the Android Developers channel at http://goo.gl/GEh1ds

Instant run

  • Not all code changes are supported by instant Run currently.

accelerated build and deployment

  • overall build steps
    1. dx
    2. proguard
    3. AAPT
    4. Deploy and Install
  • improve building time
    • Quadratic dx merger algorithm
    • shrinking in proguard is improved
    • improving AAPT packaging times

Next-generation emulator

To improve deploy times, we improved the ADB push-pull protocol, making it very fast to deploy to an emulator, which seems like a really good reason to improve the emulator UX and make it really.

Basically, emulator is running on typical dev hardware is faster than using a physical Android device.

How they improved performance of emulator
hardware optimization.
- SMP support for host multi-core
- OPtimized GPU & CPU performance
- Improve IO speeds
they completely rebuilt the emulator UI.

New features
1. toolbar to enable actions
2. supprot for deploying APKs through drag and drop
3. rescale the emulator frame by dragging a corner
4. modify device hardware changes like GPS
- cellular network conditions
- battery state
- incoming phone calls or texts

GPU Profiler

  • we can record and replay the entire GPU stream frame by frame.
  • It allows us to insepct the GPU state at each stage and help us understand what caused each specific rendering outcome.

Built on IntelliJ 15

We can use all good things supported by IntelliJ15.


PyCharm을 우분투 14.04설치 하는 방법


https://launchpad.net/~mystic-mirage/+archive/ubuntu/pycharm


There’s a PPA repository for Ubuntu based users that contains both professional (30-day free trial) and community version of PyCharm packages. So far, Ubuntu 15.04, Ubuntu 14.04, Ubuntu 12.04 and their derivatives are supported.


1. To add the PPA, open terminal from the Dash, Launcher, or via Ctrl+Alt+T shortcut keys. When it opens, run command:


sudo add-apt-repository ppa:mystic-mirage/pycharm


2. After adding the PPA, update system package cache and install the IDE via Synaptic Package Manager. Or just run below commands one by one in terminal:


sudo apt-get update

sudo apt-get install pycharm


You may replace last command via sudo apt-get install pycharm-community to install the community version which is free.


3. How to run


pycharm-community


4. Remove Pyharm


# for community edtion

sudo apt-get remove pycharm-community


# for professional version

sudo apt-get remove pycharm


Afterward, use the command below to remove the PPA from the source list:


sudo add-apt-repository --remove ppa:mystic-mirage/pycharm



(기록 보관용) IPython 및 Jupyter를 Window에 설치 및 설정

새로운 버전 Jupyter가 나왔으므로 이것을 사용하자.

IPython Notebook

기존 IPython Notebook 설치명령어는 아래와 같다.
debian 명령어와, pip 둘중 아무거나 하나를 쓰면 된다.

apt-get install ipython-notebook
pip install ipython[notebook]

실행 명령어

ipython notebook

참고사이트: http://opentechschool.github.io/python-data-intro/core/notebook.html

Jupyter와 IPython window에 설치

Window에서 쉽게 IPython을 설치하는 방법은 Anaconda를 이용하는 방법이다.
해당 설치파일을 받아서 install하면 Python 필수 package들과 Jupyter가 모두 설치 된다.

설치하면 자동으로 환경 변수 및 모든게 설정 된다.
아래와 같이 CMD창에 입력하면, IPython console과 Jupyter가 모두 실행되는 것을 볼 수 있다.

IPython Notebook을 Window에서 원격 서버로 설정하는 방법

C:\Users\justin>ipython profile create myipythonserver
[ProfileCreate] Generating default config file: u'C:\\Users\\justin\\.ipython\\p
rofile_myipythonserver\\ipython_config.py'
[ProfileCreate] Generating default config file: u'C:\\Users\\justin\\.ipython\\p
rofile_myipythonserver\\ipython_kernel_config.py'

윈도우에서 c:\Users\username.ipython 폴더에 profile_myipythonserver 폴더가 생성되었음을 알 수 있다. (profile을 삭제하려면 해당 폴더를 삭제하면 된다.) 이 폴더 아래의 파일 ipython_notebook_config.py를 열어 내용을 다음과 같이 수정한다. (주의 python은 대소문자 구별있음)

c=get_config()

c.NotebookApp.ip = 'localhost'                    # 외부접속을 허용하고싶다면 접속가능한 IP리스트
c.NotebookApp.pylab = 'disabled' 'inline'            # 그래프 코드를 창안에서 실행
c.NotebookApp.port = 8888                                 # 원하는 포트번호로 변경
c.NotebookApp.open_browser = True False         # 웹브라우저

웹서버를 통해 외부에서 ipython notebook을 이용할 것이라면 비밀번호 설정이 필요하다.
cmd창에서 ipython에 접속하여 비밀번호를 생성한다

c:\>ipython
... 
In [1]:from IPython.lib import passwd
In [2]:passwd()
Enter password:
Verify password:
Out [2]: 'sha1:~~~~~'
In [3]:exit

참고사이트: 
http://durst.tistory.com/242
https://ipython.org/ipython-doc/3/config/intro.html


DeepMind's AlphaGo

Whatever the outcome may be, the winner will be humanity. said Schmidt.

Teachning computers to master Go has been kind of a holy grail for artifical intelligence scientists.
There are more possible configurations of the board than there are atoms in the universe, siad Demis Hassabis, CEO of Google DeepMind, which developed AlphaGo.

"Go is the most profound game that mankind has ever devised," Hassabis said. "Go is a game primarily about intuition and feel rather than brute calculation, which is what makes it so hard for computers to play well."

CNN 원문
http://money.cnn.com/2016/03/09/technology/google-deepmind-go/index.html


파일 및 이미지 전송 Android 에서 JSP Tomcat6 on uBuntu Server


Multipart는 이미지 전송에 특화된 것이다.
requset 개념과 httpPost 객체 개념이 혼합된 것이다.

1. 안드로이드

MultipartEntity라는 객체를 이용하게 된다. 이 객체는 파일 형식으로 데이터를 보내게 된다.

multipart를 사용하면 쉽게 문자열과 파일들을 묶어서 한번에 전송 할 수 있다.
하지만 안드로이드에서 기본적으로 지원하는 HttpClient에서는 Multipart가 지원되지 않는다.
따라서 Multipart를 사용하기 위해서는 Apache HttpComponents에서 받아야 한다.
하지만 최신 버전 4.5.*는 안드로이드 에서 동작하지 않는다.

필자는 4.3.1을 사용 한다.
httpclienthttpcorehttpmine이 세개가 핵심이다.

해당 코드를 사용해서 구현한 App은 NetworkUsage이다.
하지만, Android 2.3.3에서는 정상적으로 동작 하지만, 5.0에서는 오류가 발생 한다.

코드분석

String sdcard = Environment.getExternalStorageDirectory().getPath();                    
// 파일을 서버로 보내는 부분
try {
    HttpClient client = new DefaultHttpClient(); // httpClient 생성
    String url = "서버주소/실행.jsp";
    HttpPost post = new HttpPost(url); // httpPost 생성

    // FileBody 객체를 이용해서 파일을 받아옴
    File glee = new File(sdcard+"/glee.jpg"); // file 객체 생성
    FileBody bin = new FileBody(glee); // FileBody 생성           

    MultipartEntity multipart = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

    multipart.addPart("images", bin); //실제 파일을 multipart에 넣는다.

    post.setEntity(multipart); // Multipart를 post 형식에 담음
    client.execute(post);   // post 형식의 데이터를 서버로 전달

Deplicate된 것을 사용하지 않고 Builder를 이용하는 방법
4.3이상의 httpmine을 사용할경우 Builder를 사용하라고 지시하게 되어 있다.

@Override
protected String doInBackground(String... params) {
    String sdcard = Environment.getExternalStorageDirectory().getPath();

    // 파일을 서버로 보내는 부분
    HttpClient client = new DefaultHttpClient();    
    HttpPost post = new HttpPost(url);

    File glee = new File(sdcard+"/my.db");  
    FileBody bin = new FileBody(glee);  

    MultipartEntityBuilder meb = MultipartEntityBuilder.create();
    meb.setCharset(Charset.forName("UTF-8"));
    meb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    meb.addPart("database", bin);
    HttpEntity entity = meb.build();

    post.setEntity(entity);

    try {
        HttpResponse reponse = client.execute(post);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // post 형식의 데이터를 서버로 전달

    return "SUCCESS";
}

2. Tomcat6 Server (JSP)

클라이언트에서 파일을 서버에 업로드 하기위한 <form>태그는 아래와 같은 형식을 따라야 한다.

<form action="???.jsp" method="post" enctype="multipart/form-data">

method는 반드시 POST 방식
전송할 데이터의 인코딩 방식은 multipart/form-data
GET 방식의 경우 URL에 데이터를 삽입하는 방식으로 255개의 문자만 전송이 가능하므로 파일 전송에는 적합하지 않다.

enctype의 경우에도 Default 값은 urlencoded방식을 사용하게 된다. 하지만 파일의 경우 ASCII파일 뿐만 아니라 이진 파일의 내용도 전송해야 하므로 multipart/form-data방식으로 인코딩 하고 <input>태그에서 type 속성을 file로 지정해서 전송 해야 한다.

파일 업로드 : <input type="file" name="upload"><br>
<input type="submit" value="업로드">

파일업로드 구현시에는 아래의 방법을 많이 사용한다. 가장 쉬운 방법이기 때문이다.
JSP에서 MultipartRequest를 사용하기 위해서는
com.oreilly.servlet을 import 해야 한다.

Download Link
필자는 cos-26Dec2008.zip를 다운 받았다.

설치방법

/var/lib/tomcat6/webapps/ROOT/AppRating

/WebContent/WEB-INF/lib

cos-26Dec2008.zip압축 해제후 cos.jar 파일을 lib위치로 이동 시킨다.

소스코드

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@page
    import="com.oreilly.servlet.MultipartRequest,com.oreilly.servlet.multipart.DefaultFileRenamePolicy,java.util.*,java.io.*"%>
<%
    //주의사항. 파일저장 정확한 경로아래에 폴더가 만들어져 있어야한다.
    //폼에서 넘길때 enctype="multipart/form-data"

    //정확한경로의 설정및 확인방법은 다음과같으며...
    String realFolder = ""; //파일경로를 알아보기위한 임시변수를 하나 만들고,
    String saveFolder = "filestorage"; //파일저장 폴더명을 설정한 뒤에...
    String encType = "euc-kr"; //인코딩방식도 함께 설정한 뒤,
    int maxSize = 100 * 1024 * 1024; //파일 최대용량까지 지정해주자.(현재 100메가)
    ServletContext context = getServletContext();
    realFolder = context.getRealPath(saveFolder);
    System.out.println("the realpath is : " + realFolder); // file path

    File dir = new File(realFolder); // 디렉토리 위치 지정
    if (!dir.exists()) { // 디렉토리가 존재하지 않으면
        dir.mkdirs(); // 디렉토리 생성.!
    }
    // print current time
    Date today = new Date();
    System.out.println(today);

    try {
        //멀티파트생성과 동시에 파일은 저장이 되고...
        MultipartRequest multi = null;
        multi = new MultipartRequest(request, realFolder, maxSize,
                encType, new DefaultFileRenamePolicy());
        //이 시점을기해 파일은 이미 저장이 되었다.

        //폼에서 넘어왔던파일 파라메터들을 가져오려면 이렇게.
        Enumeration params = multi.getParameterNames();

        //그리고 가져온 파라메터를 꺼내는 방법...
        while (params.hasMoreElements()) {
            String name = (String) params.nextElement();//파라메터이름을 가져온뒤
            String value = multi.getParameter(name);//이름을 이용해  값을가져온다
            System.out.println(name + " = " + value);
            application.log(name + " = " + value); // logManager
        }

        //이번엔 파일과 관련된 파라메터를 가져온다.
        Enumeration files = multi.getFileNames();

        //이번엔 파일관련 파라메터를 꺼내본다...
        while (files.hasMoreElements()) {
            String name = (String) files.nextElement();//파라메터이름을 가져온뒤
            String filename = multi.getFilesystemName(name);//이름을 이용해 저장된 파일이름을 가져온다.
            String original = multi.getOriginalFileName(name);//이름을이용해 본래 파일이름도 가져온다.
            String type = multi.getContentType(name);//파일타입도 가져올수있다.
            File f = multi.getFile(name);//파일 용량을 알아보기위해서는 이렇게...
            System.out.println("Parameter Name: " + name);
            System.out.println("Real File Name: " + original);
            System.out.println("Saved File Name: " + filename);
            System.out.println("File Type: " + type);
            if (f != null) {
                System.out.println("File Size: " + f.length());
            }

            System.out.println("-------------------------------");

        }
    } catch (IOException ioe) {
        System.out.println(ioe);
    } catch (Exception ex) {
        System.out.println(ex);
    }
%>

결론

Apache HTTPClient 방법은 Android에서 정식으로 지원하는 방법이 아니므로 버전과 환경에 너무 민감하다.
권장하고있는 HttpURLConnection 방법으로 구현하는게 맞는것 같다.
하지만 Stream 처리를 해야하므로 아무래도 좀더 코드양도 많고 귀찮기는 하다.

참고사이트

http://derveljunit.tistory.com/5
http://derveljunit.tistory.com/entry/JSP%EC%97%90%EC%84%9C-DB-%EC%97%B0%EA%B2%B0-%EB%B0%A9%EB%B2%95
http://blog.hansune.com/289
http://yoongi.tistory.com/87


JSP 로그 생성 방법 Eclipse tomcat 6 uBuntu 11.04 (미완성)


application.log()를 사용해도 로그파일이 생성되지 않는다.
이클립스에서는 사용자가 임의로 로그를 생성할 수 있는 라이브러리 2종과 실행환경 옵션이 빠졌기 때문이다.

이클립스에서 실행한 톰켓이 아니라, 로컬에 따로 설치된 독립 톰캣의 경우 로그가 잘 출력 된다.

Consol output을 이용하는 방법

Run Configurations -> Common -> check file -> write path for saving logfile -> check append option

이것과 함께 
system.out.println()을 사용하면 메시지를 consol에 나오게 하며 이것은 자동으로 
위 설정에 의해서 파일에 기록 되어 진다.

사용법

System.out.println("Debugging message");

이클립스로 JSP 개발시 log 메시지 출력하기

1. 사용자 로그 파일을 생성하는데 필요한 라이브러리 다운
라이브러리 이름: Apache log4j
사용된 버전: 1.2.17
다운로드 링크

라이비러리 이름: commons-logging-1.*bin.tar.gz
다운로드 링크

2. 압출풀고 *.jar 파일을 lib 디렉터리로 이동
압축을 해제한다음 각각의 디렉터리에서
commons-logging-1.2.jar과 log4j-1.2.17.jar파일을
현재 이클립스에서 작업하고 있는 디렉터리에서
WEB-INF->lib에다가 두개의 .jar파일을 복사한다.

/다운로드/apache-log4j-1.2/log4j-1.2.jar
/다운로드/commons-logging-1.2/commons-logging-1.2.jar
/이클립스워크스페이스/WEB-INF/lib/log4j-1.2.jar
/이클립스워크스페이스/WEB-INF/lib/commons-logging-1.2.jar

3. 톰켓 실행시 추가한 라이브러리를 사용하도록 옵션을 추가

Run Configurations-> Arguments -> VM argumensts

아래의 설정을 보면 홈디렉토리는 Tomcat6가 설치된 경로로 잡혀있지만,
설정과 관련된 base디렉토리는 Eclipse에서 자체적으로 plugin을 관리하는 임시파일 디렉터리에 저장되는 것을 알 수 있다.

즉, 톰켓 자체는 현재 설치된 버전을 사용하지만, 
설정 값들은 이클립스에서 독자적으로 관리한다는 뜻이 된다.
따라서 톰켓 자체의 설정 값을 변경해도 Eclipse로 톰켓을 실행하면 해당 설정이 전혀 반영이 안되는 것이다.
어쩌면 충돌을 막기위한 당연한 조치일 것이다.

-Dcatalina.base="/var/lib/tomcat6/webapps/ROOT/.metadata/.plugins/org.eclipse.wst.server.core/tmp0" 

-Dcatalina.home="/usr/share/tomcat6" 

-Dwtp.deploy="/var/lib/tomcat6/webapps/ROOT/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps" 

-Djava.endorsed.dirs="/usr/share/tomcat6/endorsed" 

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 

-Djava.util.logging.config.file="/root/tomcat6Log(Eclipse)/logging.properties"

참고 사이트

http://blog.mezeet.com/2015/01/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EB%A1%9C-jsp-%EA%B0%9C%EB%B0%9C%EC%8B%9C-log-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0/

디버깅 JSP 방법: http://www.tutorialspoint.com/jsp/jsp_debugging.htm


Android Plot Libraries


정식 API로는 그래프를 그려주는 기능은 없다.
기존의 open-source project를 살펴 보자.

크게 Client-side libraries와 web기반의 Google Charts로 나뉜다.

Client-side libraries
Pros
● Open source
● Self-contained
● Easy to integrate
Cons
● Limited features
● Older platform
versions
● Look & feel
● Customization hard
● Lack of support

Google Charts
Pros
● Feature rich
● Simple API
● Customizable
● Responsive design
● Interactive
Cons
● Network connection
● Load time
● Backward
compatibility

MPAndroidChart

가장 최근까지 활발히 업데이트 되는 프로젝트이다.
그래프도 나름 이쁘다.
MyphoneandMe에서 사용함

https://github.com/PhilJay/MPAndroidChart

GrapView

NotifyME에서 사용하는것
https://github.com/jjoe64/GraphView
http://www.android-graphview.org/

Google Charts

Hello Pizza Chart
https://github.com/ecgreb/hello-pizza-chart


'Computer Science > Android Application' 카테고리의 다른 글

이벤트 (Event)  (0) 2017.08.04
Gradle  (0) 2016.06.03
Android wear app  (0) 2015.08.25
Android Studio 자동 import 기능  (0) 2015.07.15
Android Wear 개발환경 구축  (0) 2015.07.15

Nexus 5x bootloader unlock, TWRP recovery, decrypt, and Rooting


marshmallow android (6.0)이 업데이트 되면서 
Nexus 5x의 rooting이 이전들의 reference phone과 다르게 좀 새로운 것들이 포함된다.
이유는 SELinux의 전격 도입에 따른 문제 같다.
항상 Android는 Security 부분에서 많은 학계 논문들이 출간 되었는데 그동안 부분적으로 체택한 걱에 반해서 이번 버전에서는 전격적으로 모두 도입한것 같다. 따라서 여러번 해본 Rooting이지만 조금은 오랜만에 자세히 다뤄 본다.

현재까지 출시된 Nexus 5x version

bullhead" for Nexus 5X
6.0.0 (MDA89E)
6.0.0 (MDB08I)
6.0.0 (MDB08L
6.0.0 (MDB08M)
6.0.1 (MMB29K)
6.0.1 (MMB29P)

rooting 순서

Prerequisites

  1. Nexus 5x usb drives installation
  2. ADB and Fastboot installation
  3. USB debugging mode enable > Go to Settings > About device. Locate build no. and tap on it 7-8 times or until you get toast notification saying you’re now a developer’

Bootloader OEM Unlock

Enable OEM Unlock in developer options
go to Seetings > Developer Options -> Enable OEM Unlock

adb reboot bootloader

Bootloader로 reboot 된다. 그러면 아래의 두 메시지를 볼 수 있다.
SECURE BOOT - enabled
DEVICE STATE - locked

root@jemin-virtual-machine:~# fastboot oem unlock
...
OKAY [  8.031s]
finished. total time: 8.031s

DEVICE STATE - unlocked
boot loader unlcok을 하면, your softweare can't be checked for corruption. 이라는 메시지가 나오게 된다. unlock을 했으므로 보안에 취약한 것은 어쩔수 없다.

Flash modified bootloader image

이부분이 기존과 다른데 수정된 boot loader image를 올리지 않으면 루팅을 할 수 없게 된다.
자신의 build number에 맞춰서 다운 받는다.
boot image: http://forum.xda-developers.com/showpost.php?p=63781454&postcount=143

공식사이트: http://forum.xda-developers.com/apps/supersu/wip-android-6-0-marshmellow-t3219344

# fastboot flash boot boot.img 
target reported max download size of 536870912 bytes
sending 'boot' (11472 KB)...
OKAY [  1.506s]
writing 'boot'...
OKAY [  0.199s]
finished. total time: 1.705s

decrypt 확인
Setting -> Security -> Encrpt phon
팝업창으로 해당폰을 encrypt하라고 나온다면 정상적으로 decrypt된 것이다.
이제 SuperSU를 recovery 모드에서 찾을 수 있다.
이것이 안되면 Recovery mode에서 SuperSU.zip 파일이 보이지 않으니 반드시 이부분을 확인 해야 한다.

어째서 Modified boot.img를 flash 해야하는지에 대한 이유가 이 부분이다.

TWRP recovery mode 설치

공식사이트: https://twrp.me/devices/lgnexus5x.html
사용된 버전: twrp-2.8.7.0-bullhead.img

# adb reboot bootloader
# fastboot flash recovery twrp-2.8.7.0-bullhead.img
target reported max download size of 536870912 bytes
sending 'recovery' (16240 KB)...
OKAY [  2.084s]
writing 'recovery'...
OKAY [  0.264s]
finished. total time: 2.348s

WIPE
Wipe -> Format Data -> enter "yes" in the form
reboot -> do not install

swipe to factory reset의 경우 default 기능으로 user data from the phone, including your installed apps, cache, and dalvik cache를 초기화 한다. 하지만, This will not effect the internal or SD card storage area of your phone, meaning your documents, downloads, pictures, music, videos and other files will stay safe.
위에 언급한 부분까지 모두 wipe 하고 싶다면, Format Data를 사용 한다.

SuperSU

공식 사이트: http://forum.xda-developers.com/showthread.php?t=1538053
버전 변화 정보: http://forum.xda-developers.com/showpost.php?p=23427824&postcount=3
How-To SU: http://su.chainfire.eu/

SuperSU 2.66 beta 버전을 sdcard로 이동 시킴.
USB typeC 이므로 위에서 data transfer로 설정을 해줘야 SDCard가 인식 된다.

adb push BETA-SuperSU-v2.66-20160103015024.zip /sdcard/
975 KB/s (4272471 bytes in 4.275s)

결과

최종적으로 root checker basic app을 다운받아 확인해보면 아래와 같이 루팅이 성공한 것을 알 수 있다.

encrypt도 decrypt 되었으므로 성능 degradation 사라졌다.
Congratulations!

기타 자료

Recovery Mode

2014년만 해도 ClockworkMod (a.k.a CWM)이 거의 대부분 사용하는 custom recovery 모드 였다.

CWM recovery

최근, TeamWin Recovery Project(aka TWRP)에 의해서 완벽한 touch based custom recovery가 구현 되어졌다. 초반에는 단지 Nexus 계열의 장치만을 지원 하다가 최근에 들어서는 셀수 없이 많은 smartphone을 지원하기 시작 했다.

공식사이트: https://twrp.me/devices/lgnexus5x.html

TWRP recovery

Reference

YouTube: https://www.youtube.com/watch?v=mUq1xdJ-7-E#t=143
How to Root: http://forum.xda-developers.com/nexus-5x/general/guide-how-to-install-custom-recovery-t3231143
How To guide For Beginners: http://forum.xda-developers.com/nexus-5x/general/guides-how-to-guides-beginners-t3206930


smali/baksmali 수준의 코드 수정

smali/baksmali는 An assembler/disassembler for Android's dex format의 약자이다.
DEX 바이너리를 사람이 읽을 수 있도록 쉽게 표현한 것이다.

Dex (Dalvik Executable)

Toast Smali Code 추가 방법

HelloWorld.java

Toast toast = Toast.makeText(getApplicationContext(), "Toast Test");
toast.show();

HelloWorld.Smali

invoke-virtual {p0}, Lcom/test/helloworld/HelloWorldActivity;->getApplicationContext()Landroid/content/Context;
move-result-object v1
const-string v2, "Toast Test"
const/4 v3, 0x0
invoke-static {v1, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v1
invoke-virtual {v1}, Landroid/widget/Toast;->show()V

smali code를 설명하면 다음과 같다. 우선 line 1은 자신의 activity 이름과 맞춰서 변경을 해야 한다.

문법 정리

java 코드

package com.atest;

import android.app.Activity;
import android.os.Bundle;

public class AtestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

smali 코드

.class public Lcom/atest/AtestActivity;
.super Landroid/app/Activity;
.source "AtestActivity.java"

# direct methods
.method public constructor <init>()V
    .locals 0

    .prologue
    .line 7
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method

# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
    .locals 1
    .parameter "savedInstanceState"

    .prologue
    .line 11
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 12
    const/high16 v0, 0x7f03

    invoke-virtual {p0, v0}, Lcom/atest/AtestActivity;->setContentView(I)V

    .line 13
    return-void
.end method

class -> super
Object는 L이라 이름 붙음
.source는 파일 명이다.

Class Body는 .method로 시작해서 .end method로 끝난다.
invoke-virtual {v1}, Landroid/widget/Toast;->show()V에서 V는 마지막 return type void를 의미한다.
.locals는 method 내부에서 사용하는 resiter의 수를 의미한다. (v0,v1,v2..vn)
.parameter는 매개변ㅅ로 받아온 변수명이다.

.prologue로 body가 시작하는데 사용되는 opcode들은 
(http://netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html)에서 자세하게 확인할 수 있다.

.line xx는 java소스의 라인을 가리키므로 디버깅시 확인할 수 있다.

주로 함수 호출시 invoke-kind가 사용되는데 virtual, static, super등이 있다.
p0은 클래스 인스턴스를 가리키고 이후 value가 매개변수에 해당된다. 
메소드 명 뒤 괄호 안에 매개변수의 type을 지정하는데, primitive type의 경우 약어를 넣고 그 외의 type은 패키지명을 포함하여 지정한다.

관련 사이트

Smali: https://github.com/JesusFreke/smali
Smali TypesMethods and Fields: https://github.com/JesusFreke/smali/wiki/TypesMethodsAndFields

Dalvik bytecode format: https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
APKTool을 통한 Smali 분석: http://strawberryit.tistory.com/142


Android app data backup and restore

데이터를 백업한다음 rooted phone에 올려서 구조를 분석 할때 좋다.

방법

adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|nosystem] [<packages...>]
# [-f <file>] 부분은 백업 데이터를 저장할 파일명입니다.
# [-apk|-noapk] 부분은 apk 파일, 즉 어플리케이션 설치 파일도 같이 백업할 것인가 설정하는 부분입니다.
# 설치 파일도 백업해놓으면 나중에 복원하면 해당 어플이 같이 설치가 됩니다.
# [-shared|-noshared] 는 sd 카드를 포함시킬 것인지 여부입니다.
# [<packages...>] 는 패키지의 이름입니다.

사용하는 명령어 구조

adb backup -apk -f backup.ad packageName

복원 방법

adb restore backup.ad


넥서스5 리눅스 환경에서 루팅하기 (Nexus 5 Rooting(루팅) in Ubuntu)


Unlock Bootloader

adb reboot bootloader
fastboot oem unlock

Flash Root

download: CF-Auto_Root
이미 다운 받았으므로: ~/Android_Platform/Nexus5에 존재한다.

unzip CF-Auto-Root-hammerhead-hammerhead-nexus5.zip
cd image/
sudo fastboot boot CF-Auto-Root-hammerhead-hammerhead-nexus5.img

install 화면에 SuperSU가 있으면 설치 성공이다.


How to build a real lightsaber


lightsaber는 아주 멋진 무기이다. 그것으로 싸우는 모습은 굉장히 elegant하다.
이것은 아주 좋은 무기일 뿐만이나라 laser blasts를 방어하는 shield의 역할을 한다.

그렇다면 왜? 우리는 이러한 lightsaber들을 real life에 도입하지 않는 것인가?
우리의 phsicist들은 충분히 똑똑하며, 최소한 big fan들이 있기 때문에 만들어 낸다면 매우 큰 파급력을 가질 것이다.

분명한 것은 lightsaber를 만들기 위해서는 방향성을 가지는 light를 이용해야 한다는 것이다. 이것은 다른말로
laser를 의미하며 laser기술은 많은 도약을 이뤄 왔지만 여전히 이러한 것들을 만들기에는 멀기만 하다.
왜 그런지 알아보자.

첫 번째 challegne
크기의 문제이다. 그것을 검으로 만들기에는 현재의 기술은 많은 공간을 필요로 한다.
lazer 를 생성하는 것은 강한 자연적인 경향을 가지고 있기 때문에 그것을 작은 포인트 수준으로 집약하기에는
어려움이 크다.

한가지 방법은 검의 끝에만 살짝 lazer를 나오게 할 수 있다. 하지만 엄청난 지원 장치들을 둘러매고 단지 그 작은 lazer날만을
들고 서있다면 그것이 실제 전장에서 상대를 압도할 수 있을것이라 생각하는 사람은 아무도 없다.

아래와 같은 크기로 압축하기란 쉽지 않다.

두 번쨰 challenge
어떤 물체를 slice 해버릴 정도로 lazer를 방출 하기위해서는 막대한 power를 필요로 한다.
Welding laser(용접기)는 실제로 industry에서 사용된다. 하지만 이것들은 수 킬로 와트 수준의 전력(power)를 요구한다.
이러한 막대한 에너지를 lightsaber의 작은 hilt(손잡이)에 담는것은 매우 어렵다.
추가적으로, cooling mechanisms도 필요하다. 왜냐하면 이러한 막대한 에너지 방출로 당신의 손이 녹아내리길 원하지 않는다면 말이다.

세 번째 challenge
가장 근원적인 문제로써 두개의 lightsaber들이 calsh를 할 수 없다는 것이다. 
두개의 lightsaber는 간단하게 서로를 통과하며 어떠한 상호작용도 할 수 없다.
더나아가 laser 방향 초점은 매우 날카로워서 그것을 직접적으로 볼수는 없다. 정확하게 해당 축으로 시선을 일치하지 않는이상.
따라서 laser들을 보기위해서는 smoke 또는 안개가 절대적으로 필요하다.
스모그의 입자들은 공기중으로 흐터져있기 때문에 그러한 입자들과 laser light이 반응하여 눈으로 볼 수 있는 하나의 beam을 형성할 수 있게 된다.

하지만 전혀 희망이 없는것은 아니다. laser 기술에 lightsaber가 기반한다면 현실적으로 해결해야할 많은 문제가 있는것은 사실이다. 대안으로써 plasma를 이용하는 방법이 있다. 효과적인 어떠한 뜨거운 gas로써 그것은 전자와 핵으로 나눠진다.
이것은 백만 화씨 까지 달성된다.

재밌는 것은 이러한 plasma는 가스에 따라서 서로다른 색을 발산 하다는 것이다.
하지만 이것또한 가스의 저장과 각 플라즈마끼리의 상호작용이 문제가 된다.


JSON: JavaScript Object Notiation


자료형과 문법

JSON의 기본 자료형은 다음과 같다.

  • 문자
  • 참/거짓
  • 배열: 순서가 있는 리스트이며, []로 나타내며, 요소는 쉼표로 구분
  • 객체: 순서가 없는 이름/값 쌍의 집합이다.
  • null: 빈값을 의미한다.

문자열

항상 큰 따음표(")로 묶어야 하며, 그 안에는 유니코드 문자들이 나열된다.
역슬래시는 제어문자를 표현하기 위해 사용됨.

배열

배열은 대괄호[]로 나타낸다. 배열의 각 요소는 기본 자료형이거나 배열, 객체이다. 각 요소들은 쉼표(,)로 구별된다. 각 요소가 나타나는 순서에 의미가 있다.

장점

JSON은 텍스트로 이루어져 있으므로, 사람과 기계 모두 읽고 쓰기 쉽다.
프로그래밍 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체를 교환하기에 좋다.
자바스크립트의 문법을 채용했기 때문에, 자바스크립트에서 eval 명령으로 곧바로 사용할 수 있다. 이런 특성은 자바스크립트를 자주 사용하는 웹 환경에서 유리하다. 그러나 실질적으로 eval 명령을 사용하면 외부에서 악성 코드가 유입될 수 있다. 모질라 파이어폭스 3.5, 인터넷 익스플로러 8, 오페라 10.5, 사파리, 구글 크롬 등 대부분의 최신 웹 브라우저는 JSON 전용 파서 기능을 내장하고 있으므로 이런 기능을 사용하는 것이 더 안전할 뿐만 아니라 빠른 방법이다.

참고사이트

위키피디아
JSON


Data Science를 위한 Python package 꾸러미들


설치방법은 크게 두가지이다.

Ubuntu packages

  • Ipython: 인터렉트 python kernel
  • numpy: 수치배열 연산
  • Scipy: 과학 공학 계산에 필요한 툴박스
  • Matplotlib: 매트랩 스타일의 plot 생성
  • pands: R과 같은 statistical package (통계)
  • sympy: 심볼릭연산. 즉 도함수를 쉽게 그릴 수 있다.
  • scikit-learn: machine learning package 이다. (deep learning은 아직없음 tensorflow 설치법 참조)
sudo apt-get install ipython 
sudo apt-get install python-numpy 
sudo apt-get install python-scipy 
sudo apt-get install python-matplotlib 
sudo apt-get install python-pandas 
sudo apt-get install python-sympy 

pip를 이용한 설치 (python 2.7)

pip의 장점은 virtualenv를 사용할 수 있다는 것이다.
apt-get의 경우 system-wide로 영향을 미치게 된다.

Prerequisite:

sudo apt-get install build-essential gfortran libatlas-base-dev python-pip python-dev
sudo pip install --upgrade pip
sudo pip install numpy
sudo pip install scipy
sudo pip install matplotlib 
sudo pip install pandas 
sudo pip install sympy 
sudo pip install -U scikit-learn


2015의 스마트 기기들 (gadgets)


2015년에 핫 이슈 gadets들을 다뤄 본다.
단, CNN 기사들중에서 내가 관심 있는 것들만 추렸다.
원기사에서는 36개를 언급한다.

Google EKG smartwatch (no price yet)

Google's experimental watch can help doctors remotely monitor patients' health. The connected wristband can take a person's electrocardiogram (or EKG) and assess environmental stressors, including light and noise levels.


Microsoft HoloLens, $3,000

Microsoft has developed goggles that offer an augmented -- or "mixed" -- reality experience. Unlike Facebook's Oculus Rift, which completely blocks out the outside world to fully immerse the wearer in another reality, HoloLens keeps one foot (and both eyes) firmly planted in the real world. The lenses of the goggles are transparent, your view of the space around you only selectively blocked by digital images that can mingle with real objects. It's currently only available for software developers.




Python 설치법, 환경설정, IDE 설정


python 설치방법 -기본



Python 2.7 버전 설치

sudo apt-get install python


수동 설치 (비추천)

#download using the following command:
cd ~/Downloads/
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz

#Extract and go to the directory:
tar -xvf Python-2.7.9.tgz
cd Python-2.7.9

#Now, install using the command you just tried:
./configure
make
sudo make install


우분투에서 python3을 default로 잡지 않은 이유는 다음과 같다.

1) 우분투는 python 2.x의 스크립트를 많이 이용하고 있다.

2) python 2와 python3은 서로를 완전히 보완하지 못한다. 버전간의 충돌이 있다.

3) python 2.7은 지속적으로 bugfix가 되며, 2020년까지는 지원을 해준다고 한다.

4) 대부분의 python script는 명시적으로 #!/usr/bin.env python 이라고만 명시하는데, 만약 /usr/bin/python을 python3으로 변경 한다면, #/usr/bin/env python2라고 명시한 스크립트를 제외하고는 python2에서만 동작하는 스크립트가 문제가 생기게 된다.




python 설치방법 - Virtualenv 




Python VirtuaEnv


Virtualenv is a tool to reate isolated Python environment
만약 서로다른 version app이 서로다른 version의 python library를 사용하다면 그것은 하나의 컴퓨터 환경에서는 지원해 주기 어렵게 된다.
``/usr/lib/python2.7/site-packages``
라이브러리만 업데이트할경우 떄떄로 응용프로그램이 망가진다.
때때로 global “site-packages”에다가 package를 설치하고 싶지 않을 수도 있다.
모든 경우에 대해서 virtualenv는 도움을 줄 수 있다. 이것은 어떠한 독립적인 하나의 installation environment를 생성 한다.

좀 더 장점에대해서 알고싶으면 blog를 참조하자.

설치방법
# On Linux:
$ sudo apt-get install python-pip python-dev python-virtualenv
#활성화 방법
source (설치경로)/bin/activate #일반적인 경우
source ./tensorflow/bin/activate #나의 경우
#비활성화 방법
deactivate


IDE 설정 - PyDev (Eclipse)


필자는 PyDev를 사용한다.

하지만 다른 IDE가 궁금하다면 10 Best Python IDE for Developers를 읽어보자.


필자가 PyDev를 선택한 이유는 간단하다. Eclipse 기반의 Plugin으로써 Eclipse의 개발 경험을 그대로 활용할 수 있기 때문이다.

그리고 commercial IDE는 사용하고 싶지 않기 때문이다.


설치방법

Help -> Install New Software -> Add

Name: Pydev and Pydev Extensions

Location: http://pydev.org/updates







Google의 오픈소스 머신러닝 시스템, TensorFlow


2015.11.9일 구글이 자시들의 Machine Learning Platform TensorFlow를 공개 했다.




공식 사이트: http://tensorflow.org/

GitHub: https://github.com/tensorflow/tensorflow

ResearchBlog: http://googleresearch.blogspot.kr/


이것은 구글이 2011년부터 내부에서 사용해오던 DeepLearning Infrastructure인 "DistBelief"의 후속 버전이다.


DistBelief는 지금까지 음성인식, 지메일 스팸 방지, 유튜브 동영상 썸네일 제작, 유트부 영상에서 고양이 인식 등의 딥러닝을 적용한 구글의 서비스와 연구에 사용된 것이다.


이번에 공개된 TensorFlow는 이러한 DistBelief의 성능과 사용편의성을 개선한 2세대 머신 러닝 시스템이라고 할 수 있다.




GoogleResearch - TensorFlow, Google's latest machine learning system, open sourced for everyone.


작성자: Jeff Dean (Senior Google Fellow) and Rajat Monga (Technical Lead)


2011년 부터 사용된 DistBelief 구글의 DeepLearning 플랫폼은 Find "cat", speech recognition, Google Photos, Large Scale Visual Recognition Challegne in 2014, and automated image captioning 그리고 DeepDread 에서 성공적인 결과를 보였다.


하지만, DistBelief는 너무나 Google의 내부 구조와 결집되어 있기 때문에 그동안 공개하기가 어려웠다.


2015.11.9일 구글은 마침내 2세대 머신러닝 시스템인 TensorFlow를 공개한다. 이것은 그동안의 단점을 모두 보완 했으며, flexible, portable, easy to use, and completely open source이다.

또한 구글의 Technical report에 따르면 TensorFlow는 특정 BanchMark에 대해서 2배 가량 DistBreief보다 빠르다고 한다.


이제 non-learning tool과 learning too로 양분화 대며, 모든 non-learning tool들은 점차 대체될 것이다.

바야흐로 새로운 시대가 열렸다.



TensorFlow의 특징


일단은 구글이 사용하는 버전과 다르게 단일 컴퓨터에서 다중 GPU를 지원하여 동작하는것 같다.

Jeff Dean의 말에 따르면 이것은 기존의 Deep Learning library인 Torch, Caffe, Theano의 장점을 가져온 것이라고 한다.

즉, Torch와 Theano 처럼 research idea를 구현하기 쉽고 Caffe처럼 실제 product에 구현하기 쉽게 만든것이 Tensorflow이라는 것이다.


참고문헌: http://www.wired.com/2015/11/google-open-sources-its-artificial-intelligence-engine/





'Computer Science > IT Issue' 카테고리의 다른 글

광선검(lightsaber)는 어떻게 만들 것인가?  (0) 2015.12.13
2015의 스마트 기기들 (gadgets)  (0) 2015.11.26
No, you can't have it all  (0) 2015.10.23
Sensing Emotions (Affective Computing)  (0) 2015.10.22
Google Alphabet  (0) 2015.08.12

No, you can't have it all


Technology는 언제나 사람들에게 선택할 기회를 주었다.

불은 인류에게 추운 날씨에서도 생존할 수 있는 선택의 기회를

전등은 밤에도 책을 읽을 수 있는 선택의 기회를

마약은 우리에게 스트레스로 부터 자유를 얻으며, 스스로의 삶을 망가뜨릴 선택의 기회를 주었다.


마지막으로 디지털 technology는 우리에게 동시에 하나 이상의 일을 할 수 있는 능력의 기회를 주었다. 최소한 그렇다고 느낄 수 잇게 했다.


Anne-Marie Slaugther의 새로운 책 "Unfinished Business: Women, Men, Work, Family"에서 그녀는 디지털 기술을 고려하지는 않고 있다.

하지만 멀티테스킹의 정신을 여자 남자의 관점에서 이야기 하고 있다. 즉 여자는 우선적으로 그들의 career와 family 사이에서 저글링하는 상황에 놓여 있다는 것이다.


이론적으로 50:50으로 나눠서 일을 하면 된다고 생각하지만 그것은 약간은 비현실적이다.

결국, 남자가 여자가 누가 현실을 위해서 헌신을 해야하는지에 대한 관념은 모두 버릴 필요가 있다.


슬프게도 여성들은 부모로써의 역할의 필요성에  봉착함으로써 그들의 커리어를 포기하게 된다.

Sheryl Sandberg는 그러한 의미에서 여성 leader의 힘이다. 그녀는 보모나 가정부 튜터 교사를 고용하기는 하지만 여전히 커리어를 지키고 있기 때문이다.


기술의 옹호자는들은 말한다. 우리는 기술을 통해서 멀티테스킹을 가능하게 한다고.

운전중에 이메일을 보내며, 트윗을 콘서트를 보면서 하며, 숙제를 스냅챗을 하면서 하게 된다.

하지만 이러한 현상들은 가짜 impression으로 규졍한다. 이것은 그렇게 보일뿐 실제로 효율이 매우 떨어지기 떄문이다.


즉 , 지금까지 보았던 모든 멀티 테스킹은 낮은 효과를 가져온다. 아무리 단일 작업으로 볼떄 멀티 테스킹을 통해서 하나 하나는 더 낮은 작업 시간만으로도 그것을 끝마쳤다고 할지라도 그것의 내부를 들여다 볼경우

그것은 더 낮은 정확도와 더 낮은 깊이를 가진다는 것이다.

우리는 낮음과 늦음을 구별할 필요가 있다.


기사에서 테크놀로지에서 종사하는 10명의 여성 리더는 다음과 같다.

사진은 각각 순서대로이다.


  • Susan Wojcicki, executive of YouTube
  • Sheryl Sandberg, Facebook's chief operating officer
  • Marissa Mayer, Yahoo chief Executive
  • Ursula Burns, Xerox (intern으로 1980년에 시작)
  • Cher Wang, co-founder and chairwoman of HTC cooperation
  • Virginia M. Rometty, Chief executive officer and chairwoman of IBM
  • Meg Whitman, president and chief executive officer of Hewlett-Packard ( previously the head of eBay)
  • Safra Catz, executive at Oracle Corporation
  • Sandy Carter, IBM's wordwide general manager
  • Angela Ahrendts, Chief executive of Burberry for many years.



Sensing Emotions (Affective Computing)


해당 기사는 ACM Communications Magazine에 2015년 9월에 실린 내용이다.

http://dx.doi.org/10.1145/2800498


"How computer systems detect the internal emotional states of users"라는 내용으로 2장 정도의 글을 담고 있다.


30명의 사람들로 구성된 인원이 슈퍼볼을 보고 있고, 이때의 그들의 얼굴 표정의 변화를 카메라가 인지하고 있다.

어떠한 광고가 지루한지 그러한 것들을 카메라를 이용한 얼굴 변화 인식을 통해서 알 수 있다.


그들이 amused, ambivalent, surprised 되는 각각의 양상을 현재 스크린에서 재생되는 영상과 매칭 시켜서 분석 할 수 있는 것이다.

이것을 바로 광고의 효과에 적용할 수 있다.

다들 아시다 시피 슈퍼볼 경기 앞에 들어가는 광고는 천문학 적인 금액을 지출하기 때문이다.


감정 인식의 활용은 광고의 효과를 인지하기 위해서 사용 한다 (market research)

온라인 학습 시스템에서는 언제 학생들이 성장하는지를 관찰한다.

healthcare 응용프로그램에서는 새로운 의약품에 대해서 우울증 환자들이 어떻게 반응 하는지를 다룬다.

home assistance robot들은 노인들의 감정 상태에 따라서 적절히 반응 할 수 있다.


이러한 위의 것들을 처리하는 컴퓨팅을 "affective computing"이라는 용어로서 1990년에 만들어 졌다. MIT 교수 Rosalind Picad에 의해서 단어가 생성됨.


(신조어) 분위기나 감정과 관련된 신체적 특성을 감지하기 위해 생체인식 센서를 사용하는 컴퓨터 기술. 분위기 및 감정의 컴퓨터 시뮬레이션


Focusing on Faces


사람의 vocal into nations, gestures, facial expression, 그리고 posture를 통해서 그 사람이 

engaged인지, distracted인지, annoyed인지를 알아 낼 수 있다.


사실이러한 것을 위해서 직접적인 사람의 해동변롸를 관찰하게 되는 것이 "affective computing"에서는 일반적인 것이다.

전통적으로 이렇게 사람의 얼굴과 몸동작을 관찰하는 방법을 많이 썻다.

하짐 입술의 떨림 같은것은 수염 때문에 알아내기 어렵고

입술, 눈, 코 입 과 같은 단일 부위에 대한 작용을 연결해서 감정으로 연결 시키는것은 사전에 심리 상태와 각 얼굴 부위별 반응에 따른 모델을 필요로 한다. 







Generating Quality Data


많은 이미지를 분석하기 위해서 컨설턴트가 동원 된다.

그다음 시스템을 지도학습 해야한다. 즉 어떤게 joy가 그렇지 않은지를 알려준다.

이때 joy에 관한 이미지를 사전에 사람이 분류해서 100,000 정도를 알려주게 된다.


각각의 이미지의 밝기를 비교하기도 한다.

그다음 각각의 statistical pattern recognition을 이용해서 어떤 사진이 joy 처럼 보이는지를 찾아내게 된다.

이제는 statistical pattern recognition는 "Deep learning"의 부분으로 이동 되었이며 이것이 훨신 powerful 하다고 한다. 




Deep Learning


계측적인 러닝 모델이다.


일단 픽셀에서 부터 일정한 패턴을 찾아서 군집하게 된다.

이것은 마치 어린아이가 자동차를 보았을때 그것이 무엇인지는 모르지만 하나의 영역이 생기고

앞으로 자동차와 비슷한 물건을 보면 처음본 이미지와 계속해서 연결되는 뇌의 구조를 모방하는 방식이다.


그리고 이러한 자동차의 모서리를 인지하고 그것의 모양을 각각의 차원으로 분할해서 저장한다.

따라서 어린아이는 자동차를 실제로 보던 TV를 통해서 2D 영상으로보던 모두 자동차로 인지하게 된다.




Applications and Multimodal Approaches


가장중요한 부분은 응용일것이다.


여전히 광고쪽이나 마케팅 쪽에서 그 효과를 측정할 수 있는 강력한 수단은 존재하지 않고 있다.


pain management for children. 아이들은 자신의 고통을 정확하게 설명하지 못한다. 하지만 이것을 통해서 진실을 알아낼 수 있다고 한다.

아이들의 pain level을 측정하는 수단이다.


physiological input: facial expressions, gestures, voice, 이러한 것들이 분명한 cue가 된다.




Conclusion


하지만 이러한 모든 방법은 사람의 집단주의에서 발생하는 감정의 숨김이라는 벽에 부닥치며

복잡한 이간의 감정을 예측하는것은 매우 어려운 일로 남아있다. 단순히 사람의 visual information만 가지고 판단할경우 잘못된 결과를 추출할 가능성이 매우 높게 된다.

철학자 스피노자가 말하길 인간의 감정은 48개라 한다. 이렇게 복잡한 감정을 컴퓨터가 이해하기란 애초부터 불가능 한것은 아닐까.

현재 컴퓨터 과학에서의 감정 인지는 걸음마 수준인것 같다.




Further Reading


Picard, R.W.

Affective Computing, The MIT Press, 2000.

Calvo, R.A., D’Mello, S.K., Gratch, J.,and Kappas, A. (Eds.)

The Oxford Handbook of Affective Computing, Oxford University Press, 2015.

Bartlett, M., Littlewort, G., Frank, M., and Lee, K.

Automated Detection of Deceptive Facial Expressions of Pain, Current Biology, 2014.

Narayanan, S., et. al.

Analysis of Emotion Recognition Using Facial Expressions, Speech and Multimodal Information, Proceedings of the International Conference on Multimodal Interfaces, 2004.

Emotient

https://vimeo.com/67741811











갤럭시 S3 루팅 하기


다운로드

https://drive.google.com/file/d/0B4pme20nXq8laGxlT2RMMFF0Z0E/view?usp=sharing



1) 삼성 통합 드라이버 설치


2) 스마트폰을 다운로드 모드로 진입하기

종료후 

볼룸 하 + 전원 + 홈

경고창이 뜨면 계속 진행


3) Odin 프로그램 실행 하고

연결이 정상적이면 파란색이기 그것이면 그대로 진행


PDA 눌러서 각자 통신사에 맞는 auto-root 파일 임포트

스타트 눌러서 시작


최종적으로 PASS 뜨고 재부팅 대면 성공

스마트폰에 superSU 있으면 성공




Battery Historian 2.0 사용 방법


Google I/O 2015에서 battery historian 2.0으로 개선된 것이 공개 되었다.

기존의 1.0은 python만 설치하면 동작 했었지만 2.0은 설치방법과 사용방법이 그것보다는 약간 더 복잡한 상황이다.

이것에 대해서 다루도록 한다.


GiHub 주소: Battery-Historian



Battery Historian 2.0에서의  사용방법



<요구사항>

android 5.0 이상

android API 21+

2.0에 오면서 go와 javascript를 이용해서 다시 작성 되었다.


<Go Download>

download (다른 운영체제)

Linux: go1.5.linux-amd64.tar.gz


tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz

export PATH=$PATH:/usr/local/go/bin

또는 profile에 추가.



<Workspace 생성> - 필수적으로 해야함 -

#디렉터리 생성

$HOME은 나의경우 /root 이다.

mkdir $HOME/go-worksapce/goCode

#GOPATH 설정

export GOPATH=$HOME/work

#GOBIN 설정

export GOBIN=$GOPATH/bin



< install Go support for Protocol Buffers by running go get>

# Grab the code from the repository and install the proto package.

$ go get -u github.com/golang/protobuf/proto

$ go get -u github.com/golang/protobuf/protoc-gen-go

#이것을 설치하면, $GOBIN으로 설정한 곳에 설치가 된다. 따라서 이것을 하기전에 $GOBIN의 PATH 설정을 필수 이다.



실행 결과로 bin과 pkg에 각각의 파일들이 생성 된다. 핵심은 해당 디렉터리는 $GOPATH로 설정한 곳이라는 것이다.




<download the battery historian 2.0 code>

$ go get -u github.com/google/battery-historian

$ cd $GOPATH/src/github.com/google/battery-historian




<Compile Javascript files using the Closure compiler>

$ bash setup.sh





<Run Historian on your machine (make sure PATH contains GOBIN)

$ go run cmd/battery-historian/battery-historian.go [--port <default:9999>]

주의: $GOPATH/src/github.com/google/battery-historian 항상 이곳에서 실행 해야 한다.

#그다음 웹브라우저로 실행 한다.

http://localhost:9999





<프로파일링 로그 생성>

# bugreport 파일은 dumpsys, dumpstate, locat 파일을 모두 포함 한다.

$ adb bugreport > bugreport.txt

# 로그를 초기화 한다.

$ adb shell dumpsys batterystats --reset


#full wake lock을 활성화 시키고 싶으면 아래의 옵션을 활성화 시킨다.

$ adb shell dumpsys batterystats --enable full-wake-history






이전 version에서의 사용 방법 (Summary)


> adb kill-server

> adb devices

> adb shell dumpsys batterystats --reset


<disconnect and play with app>...<reconnect> (연결 되면 배터리 충전 되므로 이러한 방법을 사용 함).


>adb devices

>adb shell dumpsys batterystats > batterystats.txt

> python historian.py batterystats.txt > batterystats.html




Android wear app


환경설정


emulator


adb -d forward tcp:5601 tcp:5601


real device


Host: disconnected

Target: connected


adb forward tcp:4444 localabstract:/adb-hub

adb connect localhost:4444


Host: connected

Target: connected




Create a Project


mobile app과

wear app이 동시에 설치 되게 된다.


WatchViewStub을 이용해서 "Hello World"가 화면에 표시되어 진다.

WatchViewStub은 one of the UI widget으로 wearable support library로써 제공 된다.


appropriate module을 build.gradle 안에다가 넣어서 처리 해야 한다.


Notification

android v4 support library가 wearable을 위해서 화장된 것이다.

API level 20이라고 하면 처리가 가능하다.



Wearable Data Layer

watch와 smartphone이 서로 동기화 되어지기 위해서 Data Layer가 사용 된다.

이것을 위해서는 the latest version of Google Play services가 중요 하다


Wearable UI support library

비공식적인 UI 라이브러리를 말한다.



여기서는 단순히 Layout을 디자인 하는 정도 수준이다.



Sending and Syncing Data


이러한 data layer를 이용해서 Google Play service단에서 communication channel을 이용해서 상호 동기화를 수행 한다.


Data Items

어떠한 스토리지로써 hanheld와 wearable 사이에서 데이터를 동기화 시켜주기 위한 것이다.


Messages

MessageAPI로써 이것은 RPC를 위한 좋은 도구이다.

스마트폰의 media player와 같은 것들을 pause, resume 하는 등의 작업으로써 이용할 수 있다.


또한 단방향 통신 매커니즘으로도 좋다.

실행 결과는 둘사이의 연결 상태에 의존 한다.



Asset

image와 같은 데이터 전송을 위한 것이며,

이것을 이요할 경우 자동적으로 bluetooth power 소모를 줄여주며,

large asset들을 자동으로 cahcing 하여 re-transmission을 줄여 준다.



WearableListenerService (for services)

이것을 상속받아서 확장 함으로써 data layer에서의 중요한 이벤트들을 알아낼수 있다.

필요할때 binding 하고 필요 없을때 unbinding을 하면 된다.



DataListener (for foreground activities)

사용자가 해당 앱을 foregorund에만 사용 중일 때만 이벤트를 읽어 오는 기능을 한다



Channel

채널을 이용해서 큰 데이터 아이템을 전송 할 ㅅ 있다.

음악 파일, 영화와 같은 것이다.

이것을 handheld to wearable로 전송하게 된다.



아래와 같이 직접 싱크를 맞추던가 Cloud Node를 이용해서 싱크를 맞추게 된다.

결국 핵심은 여러 장치들이 모두 동기화 되어진다는 것이다.







































'Computer Science > Android Application' 카테고리의 다른 글

Gradle  (0) 2016.06.03
Android Plot Libraries  (0) 2016.01.22
Android Studio 자동 import 기능  (0) 2015.07.15
Android Wear 개발환경 구축  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29

Google Alphabet




Alphabet = umbrella company


세르게이, 레리페이지는 이 회사의 CEO가 되었다.


Alphabet will operate as the parent company for a number of smaller companies, 


Other departments spinning off into their own sub-companies including 

research focused Life Sciences (Google contact lenses), 

the Google X lab (driverless cars, Google Glass, drone delivery), 

Calico (increasing longevity), and 

the company's robotics division. 


Google Ventures and Google Capital will also become independent Alphabet companies.



Nets -> Tony Fadell

Sidewalk Labs -> Dan Doctoroff

Calico -> Arthur Levinson

YouTube -> Susan Wojcicki

Google X -> Brin


Google의 CEO는 세번째로 sundar pichai가 그 자리에 올랐다.

Pichai의 나이는 43이다. 인도에서 태어 났다.

IIT를 졸업하고 대학원으로 Stanford Univ.에서 공부 했다. 거기서 석사학위를 받았다.


2004년에 처음 구글에 입사했고, 2008년에 Chrome을 출시하면서 이미 인터넷 브라우저 시장은 끝났다고 생각했지만, 그 판도를 뒤짚어 버렸다. IE와 Firefox가 자리잡고 있던 브라우저 시장을 석권 했다.


크롬은 그렇다고 가장 많이 쓰는 브라우저는 아니다.

하지만 크롬은 하나의 OS로써 크롬북과 같은 형태로 많은 학교에서 사용 하고 있다.


2013년에 크롬 사업부와 android 사업부를 통합하면서 앤디루빈이 회사를 떠나고

Pichai는 Senior vice president의 자리에 올랐다.


그리고 올해 그는 마침네 구글의 세번쨰 CEO 자리에 올랐다.

외국이며 젊은 나이에 그 자리에 올랐다는것으로 이것은 매우 이례적이며 인도인들에게 큰 자긍심이 될수 있다.

오랜 세월전 그는 단순이 수줍고 예의바른 학생일 뿐이었다.


그의 가능성을 기대해보자.




The history of Facebook.


Facebook은 10년이상 변화해 왔던 기업이다. 그것은 2014년 2월 4일 Mark Zuckerberg (오른쪽 사진) Dustin Moskovitz 그리고 3명의 하버드 기숙사 classmate들에 의해서 탄생된 것이다. 시작은 어색했지만, 그것은 현재 14억 사용자를 보유하고 있는 지상 최대의 Social Network Service 이다.


이러한 Facebook의 변천사를 함께 가보자.





In 2004, Facebook launches


하버드 학생들간의 연결 방법으로써 처음으로 "thefacebook"이라는 이름으로 그것은 처음 세상에 알려지게 된다.

social networking 사이트는 이것을 시작으로 컴림비아, 스탠포드, 예일 대학으로 각각 매달 퍼져 나갔다. 마침내12월이 되서 "thefacebook"은 가입자 100만이 넘어가는 상황에 이르렀다.





In 2005, Students spread the word


해당 사이트는 아이비리그를 넘어서 800개 이상의 대학을 포함하게 된다. 이때가 2005년 5월이다. 그리고 공식적인 이름을 "Thefacebook"에서 그냥 "Facebook"으로 8월에 변경하게 된다. 그리고 9월에 일반 고등학생들도 Facebook에 가입 할 수 있도록 허용 했다.





In 2006, Meet the News Feed


2006년까지 만 13세 이상이면 누구나 Facebook에 가입이 가능하도록 했다. 같은 해에 Facebook은 the News Feed를 소개 했다. 이것은 자신의 소셜 네트웍안에서의 새로운 업데이트나 사진 같은 것들을 하이라이트해서 보여주는 기능이다.

하지만, 이것을 기점으로 Facebook 유저들은 많은 요청을 하기 시작했다. 다시 예전으로 돌아가고자 희망하는 사용자가 적지 않았다.

그들은 대부분 이렇게 말했다 "I don't need to know everything about EVERYONE".





In 2007, Another new design


2007년 사월 Facebook은 그것의 디자인을 대대적으로 변경 했다. 

왼쪽 바에다가는 포토 노트 그룹 이벤트 같은것들을 위치 시켰고 친구, 네트워크 등은 최상위 inbox 안으로 이동 시켰다.

오월에 Facebook은 플랫폼을 launch 했다. 이것은 개발자들에게 third-party app을 개발할 수 있도록 한다. 이러한 앱들은 추후에 사용자들의 데이터를 과도하게 남용함으로써 또다른 문제를 야기 시키게 된다. 200년 말 Facebook은 광고를 출시하게 되고 이것은 몇몇 사용자들 다시 MySpace 같은 플랫폼으로 돌아가게 하는 결과를 낳는다.





In 2008, New profile pages





In 2009, The 'Like' button






In 2010, Growing privacy concerns

In 2010, Facebook adds 'check-ins'

Foursqaure와 같은 위치기반 체크인 서비스를 출시 한다.

In 2011, Photos, Photos everywhere

In 2011, Facebook Messenger

In 2012, Hello, Timeline

In 2013, Going mobile

2013년 후반기에 12억 사용자중 9억명의 사용자가 Facebook을 smartphone 또는 Tablet으로 접속하게 된다.

Facebook은 처음 web-first product 였지만, 이제는 이러한 사용 방식을 고려해볼 때 Mobile 기반의 기능이 강화되어야 함을 알 수 있다.

In 2013, Hashtags

In 2015, Embedded Facebook videos



아래의 그림은 2013년에 Facebook에서 나타낸 세계의 맵이다. 보면 China와 아프리카를 제외하고 대부분이 연결 되어 있음을 알 수 있다.

하지만 소셜 네트웍은 이미 포화 상태이며 변덕이 심한 젊은층이 어떻게 변화할지는 아무도 예상 할 수 없다.

이러한 요소를 빛추워 봤을 때 그렇게 낙관적이지 많은 않다.







Ubuntu 14.04에서 VMware Unity Mode 활성화


VMware Unity mode는 매우 좋은 기능이다.

이것을 Ubuntu 14.04에서도 활성화 시키는 방법에 대해서 다루도록 하겠다.


GNOME Flashback/Fallback 


위 버전을 기본으로 한다. 

Ubuntu 14.04는 Unity 환경이므로 이것을 Fallback으로 변경 해야 한다 (관련글 참조)


원래는 Classic gnome을 VMware가 지원 하므로 자동으로 되야 하는데 뭔가 차이가 있어서 안된다고 한다.


diff /usr/bin/vmware-xdg-detect-de \

     $HOME/vmware-tools-distrib/lib/bin32/vmware-xdg-detect-de

58,60d57

< DE=gnome

< xdgDE=gnome


그래서 첨부 파일을 해당 경로에 덮어씌워 줘야 한다.

위 파일은 txt 파일이므로 적절히 확장자를 제거한 후 "/usr/bin/"로 이동 시키자.



그다음 재부팅을 하면 정상적으로 Unity mode가 동작하는 것을 볼 수 있다.




아래는 표는 VMware가 Unity mode를 지원하는 GUI 환경들을 정리한 것이다.


Testing Result of Desktop Environment for VMWare Unity Mode on Ubuntu 14.04 (Trusty)
Desktop EnvironmentDisplay Name in Login ScreenVMWare Unity Mode Works?
Ubuntu UnityUbuntu DefaultNo
GNOME 3GNOMENo
GNOME 3GNOME Flashback (Compwiz)No
GNOME 3GNOME Flashback (Metacity)Yes (See the note on Gnome above and
download vmware-xdg-detect-de)
XfceXfceYes
XfceXUbuntuYes
LXDELXDEYes
LXDELUbuntuYes
MateMateYes (See the note on Mate above and
download vmware-xdg-detect-de)
AwesomeAwesomeNo




참고 자료



[1] Ubuntu 14.04 (Trusty) and VMware Unity Mode



Ubuntu 14.04 이전 GUI로 변경 / VMware Unity 활성화



10.04의 버전을 사용 하다가 갑자기 14.04로 변경하면 너무 확 바뀌어 버린 GUI 때문에 적응이 쉽지 않다.

가장 치명적인 단점은 VMware 11 버전 까지도 Unity mode를 Ubuntu 14.04에서는 지원하지 않는 다는 것이다.


Guest OS로써 Ubuntu를 사용하는 필자로썬 답답한 상황이다.



Classic Gnome 으로 돌아가자!



sudo apt-get update 

sudo apt-get install gnome-session-flashback



GUI 변경 방법은


1) Logout


2) 발바닥 클릭


3) Metacity 클릭


compiz 와 metacity의 차이점


compiz는 3D 콤포넌트를 지원하고 metacity는 2D로 구성된다고 한다.

하지만, metacity만 VMware Unity가 지원 되므로 이것을 선택 하자.



Auto-Login 재설정


Classic gnome을 설치하고도 문제점은 auto-login시 Default 설정이 바뀌지 않아서 예전 GUI 환경으로 들어간다는 것이다. 

Default 환경을 수정해 주자.


기본적으로 Auto-login은 lightdm을 사용한다고 가정 한다.


sudo vi /etc/lightdm/lightdm.conf


user-session="원하는 환경"


각각의 종류

For unity-2d the session file is called ubuntu-2d.desktop

For gnome-classic the session file is called gnome-classic.desktop

For gnome-classic (no effects) aka gnome-fallback the session file is called gnome-fallback.desktop

For unity-3d the session file is called ubuntu.desktop

For Lubuntu the session file is called Lubuntu.desktop

For LXDE the session file is called LXDE.desktop


우리 같은경우 gnome classic 이므로, 아래 두개중 하나로 추가 하면 된다.

user-session=gnome-classic

user-session=gnome-flashback


최정 설정 결과



최종적으로 재부팅 하면 정상적으로 classic gnome으로 auto-login 되는것을 볼 수 있다.



더 알아보기: Classic gnome 재설치를 통해서 Ubuntu 14.04에서 VMware Unity Mode 사용하기 




참고 자료


[1] How to install the gnome classic Desktop in Ubuntu 14.04

[2] How do I change the default session for when using auto-logins?




Android Studio 자동 import 기능


단축키: Optimize imports CTRL + ALT + O

File -> Settings -> Editor -> General -> Auto Import -> Java and make the following changes:




이 두기능을 체크하면 자동으로 import가 진행 됨.



'Computer Science > Android Application' 카테고리의 다른 글

Android Plot Libraries  (0) 2016.01.22
Android wear app  (0) 2015.08.25
Android Wear 개발환경 구축  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29
Android Studio 특징 및 단축키  (0) 2015.05.24

Ubuntu keyboard shortcuts (단축키)  변경


search -> keyboard -> shortcuts



Android Wear 개발환경 구축


Smart-Phone과 연결하기


아래명령어를 통해서 Watch Emulator와 연결 시켜 준다.


USB connection을 Phone과 Desktop이 연결되지 않고도 Watch Emulator와 연결하고 싶다면,

아래와 같이phone의 adb daemon port를 설정 한다음 연결 한다.


$ adb tcpip 5555

$ adb connect IP주소:5555

$ adb -s IP주소:5555 forward tcp:5601 tcp:5601



Watch Emulator는 그룸 모양의 icon이 사라지게 된다.




스마트폰에서 Notification을 발생 시킨다. 




정상적으로 Watch emulator로 전달 되는것을 볼 수 있다.








'Computer Science > Android Application' 카테고리의 다른 글

Android wear app  (0) 2015.08.25
Android Studio 자동 import 기능  (0) 2015.07.15
Notifications API Guide  (0) 2015.06.29
Android Studio 특징 및 단축키  (0) 2015.05.24
다중 스크린 사이즈를 지원하는 방법  (0) 2014.10.27

Samba 이용한 공유 디렉터리 만들기


samba 관련 패키지들을 설치

sudo apt-get install samba system-config-samba gksu -y





+ Recent posts