Monthly Archives: 6月 2014

busyboxをAndroid向けにコンパイルする方法

手順下記

1. busyboxソースパッケージを取得:

$ wget -c http://www.busybox.net/downloads/busybox-1.18.1.tar.bz2

$ tar jxvf busybox-1.18.1.tar.bz2

 

2.ARM Toolkitをダウンロード

例. Sourcery G++ Lite 2008q1-126 for ARM GNU /Linux

$ wget -c http://www.codesourcery.com/sgpp/lite/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

note:  using the newest toolchain compile busybox-1.18.1 failed, use this toolchain 4.2.3 compiled ok.

 

3.  busyboxを設定

$ cd busybox-1.18.1

$ make menuconfig

configure busybox as desired, or just

$ make defconfig

 

4. busyboxをコンパイル

$ make CROSS_COMPILE=/yourpath/arm-2008q1/bin/arm-none-linux-gnueabi-  LDFLAGS=”–static” CFLAGS=”–static”

$ file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped

Ubuntu 12.04へJDK6をインストールする方法

手順下記:
$ sudo add-apt-repository “deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse”
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

$ sudo update-alternatives –config java
$ sudo update-java-alternatives -s java-6-sun

Linuxにファイアウォールを無効にする

コマンド:

/etc/init.d/iptables status
/etc/rc.d/init.d/iptables stop

 

 

ポート開放

vim /etc/sysconfig/iptables 

-A RH-Firewall-1-INPUT -m state ——state NEW -m tcp -p tcp ——dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -m state ——state NEW -m tcp -p tcp ——dport 22 -j ACCEPT

Ubuntuにファイアウォールを無効にする

コマンド:

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -P OUTPUT ACCEPT

iptables -F

fedoraにファイアウォールを無効にする

コマンド:

/etc/init.d/iptables stop

 

java言語 java.util.Timerクラスの使い方:定時タスクを実行サンプル

サンプルコード下記:

java.util.Timer タイマースレッド
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class MyTimer {
public static void main(String[] args) {
MyTimer mt = new MyTimer();
System.out.println(mt.getNowTime());
// mt.test2(mt.getNDate(10));
mt.test3(mt.getNDate(5), 1000*3);
}

//指定した遅延時間の後に指定されたタスクを実行
public void test1(int delay) {
new Timer().schedule(new TimerTask(){
public void run() {
System.out.println(getNowTime());
}
}, delay);
}

//指定した時刻に指定されたタスクを実行
public void test2(Date date) {
new Timer().schedule(new TimerTask(){
public void run() {
System.out.println(getNowTime());
}
}, date);
}

//指定されたタスクは指定された時間内に繰り返す実行
public void test3(Date date, int delay) {
new Timer().schedule(new TimerTask() {
public void run() {
System.out.println(getNowTime());
}
}, date, delay);
}

//現在の時刻を取得 文字列形式
public String getNowTime() {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
return sdf.format(new Date(System.currentTimeMillis()));
}

//現在の時刻をより大きい日付を取得
public Date getNDate(int n) {
Calendar rightNow = Calendar.getInstance();
rightNow.add(Calendar.SECOND, n);
return rightNow.getTime();
}
}

javaでjson解析、出力をするツール

1.解析定義のソースコード:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class ToObject {

private static final char cl_s = ‘[‘;
private static final char cl_e = ‘]’;
private static final char cd_s = ‘{‘;
private static final char cd_e = ‘}’;
private static final String Null = “Null”;

private int e = 0;
private String jsonString = null;

public Object toObject(String jsonString) {
this.jsonString = jsonString;
return this.toObject(0);
}
// 路由
private Object toObject(int s) {
char c = this.jsonString.charAt(s);
if (c == cl_s) {
return this.toObjectFromCLS(s + 1);
} else if (c == cd_s) {
return this.toObjectFromCDS(s + 1);
} else {
if (s == 0) {
return ToObject.Null;
}
if (c == ‘”‘) {
return this.toObjectFromString(s);
} else {
return this.toObjectFromSimpleType(s);
}
}
}

// コレクションを分析
private Object toObjectFromCLS(int s) {
List<Object> ret = new ArrayList<Object>();
char c;
int l = jsonString.length();
Object obj;
for (int i = s; i < l; i++) {
c = jsonString.charAt(i);
if (c == ‘ ‘ || c == ‘,’) {
continue;
}
if (c == cl_e) {
e = i;
return ret;
}
obj = this.toObject(i);
if (ToObject.Null.equals(obj)) {
break;
}
ret.add(obj);
i = e;
}
return null;
}

// キーとペアの値を解析
private Object toObjectFromCDS(int s) {
Map<Object, Object> ret = new HashMap<Object, Object>();
char c;
int l = jsonString.length(), step = 0;
Object key = null, value = null, obj;
for (int i = s; i < l; i++) {
c = jsonString.charAt(i);
if (c == ‘ ‘) {
continue;
}
if (c == cd_e) {
e = i;
return ret;
}
if (c == ‘,’) {
step = 0;
key = null;
continue;
}
if (c == ‘:’) {
step = 1;
value = null;
continue;
}
obj = this.toObject(i);
if (ToObject.Null.equals(obj)) {
break;
}
if (step == 0) {
key = obj;
} else if (step == 1) {
value = obj;
ret.put(key, value);
}
i = e;
}
return null;
}

// 文字列の解析
private Object toObjectFromString(int s) {
char c = jsonString.charAt(s);
s++;
StringBuilder ret = new StringBuilder();
for (int i = s; i < jsonString.length(); i++) {
c = jsonString.charAt(i);
if (c == ‘”‘) {
e = i;
return ret.toString();
}
if (c == ‘\”‘) {
ret.append(‘”‘);
continue;
}
if (c == ‘\\’ && jsonString.charAt(i + 1) == ‘\”‘) {
i++;
ret.append(‘\”‘);
continue;
}
ret.append(c);
}
return null;
}

// 基本タイプ
private Object toObjectFromSimpleType(int s) {
final String t = “true”;
final String f = “false”;
final String n = “null”;
final String u = “undefined”;
if (this.isType(s, t)) {
e = s + t.length() – 1;
return true;
}
if (this.isType(s, f)) {
e = s + f.length() – 1;
return false;
}
if (this.isType(s, n)) {
e = s + n.length() – 1;
return null;
}
if (this.isType(s, u)) {
e = s + u.length() – 1;
return null;
}
// 数字
char c = jsonString.charAt(s);
if ((c >= ‘0’ && c <= ‘9’) || c == ‘.’ || c == ‘-‘) {
boolean hasPoint = false;
for (int i = s; i < jsonString.length(); i++) {
c = jsonString.charAt(i);
switch (c) {
case ‘.’:
if (hasPoint)
return null;
hasPoint = true;
break;
case ‘0’:
case ‘1’:
case ‘2’:
case ‘3’:
case ‘4’:
case ‘5’:
case ‘6’:
case ‘7’:
case ‘8’:
case ‘9’:
case ‘-‘:
break;
case ‘F’:
case ‘f’:
e = i;
return Float.parseFloat(jsonString.substring(s, i – s));
case ‘L’:
case ‘l’:
e = i;
if (hasPoint)
return null;
return Long.parseLong(jsonString.substring(s, i – s));
default:
e = i – 1;
if (hasPoint) {
return Double.parseDouble(jsonString
.substring(s, i – s));
} else {
return Integer.parseInt(jsonString.substring(s, i – s));
}
}
}
}
return null;
}

private boolean isType(int s, String type) {
for (int i = 0; i < type.length(); i++) {
if (jsonString.charAt(s + i) != type.charAt(i)) {
return false;
}
}
return true;
}

2.テストコード下記:

public static void main(String[] args) {
String json = “{\”key1\”:\”value1\”,\”key2\”:[\”array1\”,\”array2\”]}”;
Object obj = new ToObject().toObject(json);
Map<Object, Object> map = (Map<Object, Object>)obj;
Set<Object> keys = map.keySet();
Object value = null;
for(Object key : keys) {
value = map.get(key);
System.out.print(“key=” + key);
if (value instanceof List) {
List<Object> array = (List<Object>)value;
System.out.print(“\tvalue=”);
for(Object item : array) {
System.out.print(item);
}
System.out.println();
} else {
System.out.println(“\tvalue=” + value);
}
}
}

 

PHPでソースコードとMySQLをバックアップ用プログラム

1.機能:
プラットフォームのソースコードおよびデータベースをバックアップ

2.bakfile.php

サンプルコード:
<?php
set_time_limit(0);
date_default_timezone_set(‘Asia/Tokyo’);
$dbHost = “localhost”;
$dbUser = “root”;
$dbPass = “startnews24”;
$dbName = “mysql_startnews24”;
$bakDir = ‘D:/bak/’ . date(‘Y-m-d/H-i’) . ‘/’;
$sourceDir = ‘G:/wamp/www/mark/re/App/’;
$errorlog = $bakDir . ‘msg.log’;
if (!file_exists($bakDir) && !mkdir($bakDir, 0777, true)) {
exit (append($errorlog, ‘フォルダを作成できませんでした!’));
}
if (!mysql_connect($dbHost, $dbUser, $dbPass)) {
exit (append($errorlog, ‘データベース接続に失敗した’));
}
if (!mysql_select_db($dbName)) {
exit (append($errorlog, ‘データベース”‘ . $dbName . ‘”存在しません’));
}
if (!file_exists($sourceDir)) {
exit (append($errorlog, ‘ディレクトリ”‘ . $sourceDir . ‘”存在しません’));
}
mysql_query(“set names ‘utf8′”);
$mysql = “set charset utf8;\r\n”;
$q1 = mysql_query(“show tables”);
while ($t = mysql_fetch_array($q1)) {
$table = $t[0];
$q2 = mysql_query(“show create table `$table`”);
$sql = mysql_fetch_array($q2);
$mysql .= $sql[‘Create Table’] . “;\r\n”;
$q3 = mysql_query(“select * from `$table`”);
while ($data = mysql_fetch_assoc($q3)) {
$keys = array_keys($data);
$keys = array_map(‘addslashes’, $keys);
$keys = join(‘`,`’, $keys);
$keys = “`” . $keys . “`”;
$vals = array_values($data);
$vals = array_map(‘addslashes’, $vals);
$vals = join(“‘,'”, $vals);
$vals = “‘” . $vals . “‘”;
$mysql .= “insert into `$table`($keys) values($vals);\r\n”;
}
}

$filename = $bakDir . “db.sql”;
write($filename, $mysql);
append($errorlog, ‘データベースのバックアップを成功した’);
$zip = new ZipArchive();

if ($zip->open($bakDir . ‘source.zip’, ZipArchive::CREATE) === TRUE) {
$files = map($sourceDir);
foreach ($files as $file) {
$dir = str_replace(‘\\’, ‘/’, $sourceDir);
$file = str_replace(‘\\’, ‘/’, $file);
$zip->addFile($file, str_replace($dir, ”, $file));
}
$zip->close();
append($errorlog, ‘ソースのバックアップを成功した’);
}
exit(append($errorlog, ‘バックアップの成功’));

function append($file, $str) {
$str = date(‘Y-m-d H:i:s————————————‘ . PHP_EOL . $str . PHP_EOL);
$fh = fopen($file, ‘a’);
flock($fh, LOCK_EX);
fwrite($fh, $str . PHP_EOL);
fclose($fh);
return $str;
}

function write($file, $str) {
$fp = fopen($file, ‘w’);
flock($fp, LOCK_EX);
fputs($fp, $str);
fclose($fp);
return true;
}

function map($directory) {
$files = array();
if (file_exists($directory) && is_dir($directory)) {
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) {
$files[] = $file->getRealPath();
}
}
return $files;
}

3.バックアッププログラム
@echo off
php.exe G:\bakfile.php
pause

cmdでシャットダウン前のスクリプト処理を遅延させる

ファイル名:

cmdshutdown.sh
サンプルコード:
@ECHO OFF
SETLOCAL EnableExtensions
CALL :ProcDelay 600
ECHO %TIME%
GOTO :EOF

:ProcDelay delayMSec_
SETLOCAL EnableExtensions
FOR /f “tokens=1-4 delims=:. ” %%h IN (“%TIME%”) DO SET start_=%%h%%i%%j%%k
:_procwaitloop
FOR /f “tokens=1-4 delims=:. ” %%h IN (“%TIME%”) DO SET now_=%%h%%i%%j%%k
SET /a diff_=%now_%-%start_%
IF %diff_% LSS %1 GOTO _procwaitloop
ENDLOCAL & GOTO :EOF
:EOF

FlexDataGridデータバインディング

サンプルコード:

[Bindable]
private var egXMLListCollection:XMLListCollection;
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
egXMLListCollection=new XMLListCollection(egXML.TEST);
}
<s:DataGrid id=”TestDataGrid”
width=”100%”
height=”100%”
dataProvider=”{egXMLListCollection}”>
<s:columns>
<s:ArrayList>
<s:GridColumn dataField=”TESTCOLUMN1″
headerText=”列1″>
</s:GridColumn>

<s:GridColumn dataField=”TESTCOLUMN2″
headerText=”列2″>
</s:GridColumn>

<s:GridColumn dataField=”TESTCOLUMN3″
headerText=”列3″>
</s:GridColumn>

<s:GridColumn dataField=”TESTCOLUMN4″
headerText=”列4″>
</s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>