2015年2月18日 星期三

Python play a video file

Ref:http://www.thecodingforums.com/threads/python-help-sending-a-play-command-to-quicktime-or-playing-amovie-in-python.702701/

1.
import subprocess
subprocess.Popen(["open", "path/to/the/movie.file"])

2. Quicktimeplayer can not auto play
refhttp://www.defaults-write.com/quicktime-player-x-enable-auto-play-feature/#.VOWJ6bCUf6Y

defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 1

Disable autoplay

defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen 0


Android tcp client (Send data from client and get server response) - II

This example show the interactive action between server and client.
1. tcpserver : Add print c.recv(1024) before send response in server side as follows
#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   print c.recv(1024)
   c.send('Thank you for connecting')
   c.close()                # Close the connection  

2. tcpclient: Add send data before get response from server side.
Socket socket = null;

            try {
                socket = new Socket(dstAddress, dstPort);

                ByteArrayOutputStream byteArrayOutputStream =
                        new ByteArrayOutputStream(1024);
                byte[] buffer = new byte[1024];

                int bytesRead;
                DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());
                DOS.writeUTF("手機送出訊息");
                InputStream inputStream = socket.getInputStream();

    /*
     * notice:
     * inputStream.read() will block if no data return
     */
                while ((bytesRead = inputStream.read(buffer)) != -1){
                    byteArrayOutputStream.write(buffer, 0, bytesRead);
                    response += byteArrayOutputStream.toString("UTF-8");
                }

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "UnknownHostException: " + e.toString();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "IOException: " + e.toString();
            }finally{
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }

Android tcp client

Ref:http://android-er.blogspot.tw/2014/02/android-sercerclient-example-client.html
1. Macbook pro/Android Studio
2. Server :
   http://csjoublog.blogspot.tw/2015/02/python-test-for-sever-and-client.html
3. Android client building procedure
3-1 Create a new project
3-2 Copy xml block and paste into the RealativeLayout tag of activivty_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context=".MainActivity" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:autoLink="web"
            android:text="http://android-er.blogspot.com/"
            android:textStyle="bold" />
        <EditText
            android:id="@+id/address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="dstAddress" />
        <EditText
            android:id="@+id/port"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="dstPort" />
        <Button
            android:id="@+id/connect"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Connect..."/>
        <Button
            android:id="@+id/clear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Clear"/>
        <TextView
            android:id="@+id/response"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</RelativeLayout>
3-3 Copy java code into Mainactivity.java
package com.example.csjou.androidclient2;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView textResponse;
    EditText editTextAddress, editTextPort;
    Button buttonConnect, buttonClear;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextAddress = (EditText)findViewById(R.id.address);
        editTextPort = (EditText)findViewById(R.id.port);
        buttonConnect = (Button)findViewById(R.id.connect);
        buttonClear = (Button)findViewById(R.id.clear);
        textResponse = (TextView)findViewById(R.id.response);

        buttonConnect.setOnClickListener(buttonConnectOnClickListener);

        buttonClear.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                textResponse.setText("");
            }});
    }

    OnClickListener buttonConnectOnClickListener =
            new OnClickListener(){

                @Override
                public void onClick(View arg0) {
                    MyClientTask myClientTask = new MyClientTask(
                            editTextAddress.getText().toString(),
                            Integer.parseInt(editTextPort.getText().toString()));
                    myClientTask.execute();
                }};

    public class MyClientTask extends AsyncTask<Void, Void, Void> {

        String dstAddress;
        int dstPort;
        String response = "";

        MyClientTask(String addr, int port){
            dstAddress = addr;
            dstPort = port;
        }

        @Override
        protected Void doInBackground(Void... arg0) {

            Socket socket = null;

            try {
                socket = new Socket(dstAddress, dstPort);

                ByteArrayOutputStream byteArrayOutputStream =
                        new ByteArrayOutputStream(1024);
                byte[] buffer = new byte[1024];

                int bytesRead;
                InputStream inputStream = socket.getInputStream();

    /*
     * notice:
     * inputStream.read() will block if no data return
     */
                while ((bytesRead = inputStream.read(buffer)) != -1){
                    byteArrayOutputStream.write(buffer, 0, bytesRead);
                    response += byteArrayOutputStream.toString("UTF-8");
                }

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "UnknownHostException: " + e.toString();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                response = "IOException: " + e.toString();
            }finally{
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            textResponse.setText(response);
            super.onPostExecute(result);
        }

    }

}
3-4 Add internet permission into AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.csjou.androidclient2" >
<uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
4. Run server
5. Run emulator OK.

6. Run Zenfone 6 OK.

2015年2月16日 星期一

Python test for sever and client

Ref:http://www.tutorialspoint.com/python/python_networking.htm

1. Macbook Pro (2014 mid, iOS 10.9.5)
2. Edit: Sublime
3. server.py
#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection
4. Client.py
#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done
Test 2:
ASUS X450J (Windows 10 Preview)
Python26
2-1. Server:
#!/usr/bin/python           # This is server.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   print c.recv(1024)
   c.send('Thank you for connecting')
   c.close()                # Close the connection   
2-2 Client:
#!/usr/bin/python           # This is client.py file

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.

s.connect((host, port))
s.send('Hello Server.')
print s.recv(1024)
s.close                     # Close the socket when done




Mac 檢視 Android Studio SDK Sample code

Ref : https://helpx.adobe.com/x-productkb/global/access-hidden-user-library-files.html
In the Finder, choose Go > Go To Folder.
2. In the Go To Folder dialog, type ~/Library

3. Click Go
4. Change to Android/SDK/Samples

Zenfone 5 USB Files Tra

Ref:  http://www.sogi.com.tw/mobile/articles/6228312-ASUS+PCLink+%26+iTools+v2_0_34+%E7%AE%A1%E7%90%86%E8%BB%9F%E9%AB%94
1.ZenFon 5 A500CG如果找不到USB偵錯 ,請至 設定 > 關於 > 軟體資訊 > "版本號碼" 點擊(三次)多下 ,就會出現 "開發人員選項".
2. The physical device shows in android studio 

3.



2015年2月15日 星期日

http://www.asus.com/tw/support/FAQ/1007851/

Ref: http://www.asus.com/tw/support/FAQ/1007851/
1安裝Android檔案傳輸程式(支援Mac OS X10.5或更高版本)
2. 可透過它在Mac和Android裝置間瀏覽及傳輸文件(支援Android3.0或更高版本)
3. 



2015年2月8日 星期日

Android Studio -Tutorial (Copy file into the sdcard of emulator)

Ref: 
1. https://diptimayapatra.wordpress.com/2013/07/04/copying-a-file-to-sd-card-image-using-adb-exe-for-android-emulator/
2. http://stackoverflow.com/questions/2083709/android-emulator-sdcard-push-error-read-only-file-system


1. Start Emulator.
2. Run command mode by administrator privileges
3. Change platform-tools directory (user as csjou)
C:\WINDOWS\system32>cd C:\Users\csjou\AppData\Local\Android\sdk\platform-tools
4. Follow Ref1 step fails to push file into sdcard.
C:\Users\csjou\AppData\Local\Android\sdk\platform-tools>adb push "C:\Users\csjou
\Pictures\HWUIC.jpg" /sdcard/
failed to copy 'C:\Users\csjou\Pictures\HWUIC.jpg' to '/sdcard//HWUIC.jpg': Read
-only file system
5. Change sdcard read-only status (Follow the command as red characters)
C:\Users\csjou\AppData\Local\Android\sdk\platform-tools>adb shell
root@generic_x86:/ # cd sdcard
cd sdcard
root@generic_x86:/sdcard # ls
ls
root@generic_x86:/sdcard # su
su
root@generic_x86:/storage/sdcard # mount -o rw,remount rootfs /
mount -o rw,remount rootfs /
root@generic_x86:/storage/sdcard # chmod 777 /mnt/sdcard
chmod 777 /mnt/sdcard
root@generic_x86:/storage/sdcard # exit
exit
root@generic_x86:/sdcard # exit
exit
6. 
C:\Users\csjou\AppData\Local\Android\sdk\platform-tools>adb push "C:\Users\csjou
\Pictures\HWUIC.jpg" /sdcard/
1388 KB/s (31311 bytes in 0.022s)

2015年2月6日 星期五

Mac Set $JAVA_HOME

Ref:http://liberalsprouts.blogspot.tw/2012/12/how-to-install-jdk-7-and-set-up.html
1. 確認設定
echo $PATH
echo $JAVA_HOME
2. vim .profile (原沒有此檔案,新建)
CSdeMacBook-Pro:~ csjou$ vim .profile
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/contents/Home;
export JAVA_HOME;
PATH=$PATH:$JAVA_HOME;
export PATH;
3. 重新載入

 su -l <user>
輸入密碼
4. echo $JAVA_HOME   OK!