build.gradle(module:app)

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "jp.hoge.anew"
        minSdkVersion 15
        targetSdkVersion 26
        resConfigs "ja", "xxhdpi"
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            ext.enableCrashlytics = false
        }
    }
    aaptOptions {
        cruncherEnabled false
    }
}

少し早くなった印象。

layout fileを表示する

studioアップロードしてここまでに1日かかった。。

iOS・Androidの開発の完成・納品の流れまでがいまいちイメージわかないので、Cacooでワイヤーを書いて、up workで依頼して流れをつかむことにした。

ああああ、なるほど!
API, frameworks, dependency injection libraries, databaseなどが項目としてあるのね!

Frame workはAGL、Angular、Appcelerator Titanium、Corona SDK、Framework7、Intel XDK
DBはCouchbase, LevelDB, Realm, SQLiteか。SQLite以外は使ったことない。やばいな、これ。

Android版もpostします。

うわ、android・iOS開発している人たちって、フルスタック+インフラも当然+なんでもできます系ばっかりだな。しかも、大量に。
しかも、皆さんストアーのアプリのリンクがポートフォリオなんだ。
それがスタンダードか、完全にマーケットのモノサシ誤ってた。。カスじゃん、俺。

しかし、5年以上のexperienceの人の作品中心にインストールしたけど、クオリティ高いし凄いっすわ。
完全に自分のレベルの低さ加減がわかりました。終わってる。
つくっていくしかないけど、これ追いつく・近づくのに1年くらいかかるかもしれんな~。。。GW終わりってのに、きっついな~

show line number

shift + shiftでsearch

show line number on or off で行番号の表示非表示を設定

app -> manifests -> androidManifest.xml

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

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

基本的には
layout activity_main.xml -> MainActivity 必要に応じてAndroidManifest.xml

vagrant->azureでwebappを作っていく

azure CLIにてplanをつくって、webappをcreate

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name boj-zh --runtime "PHP|7.0" --deployment-local-git

local

[vagrant@localhost azure]$ git init
[vagrant@localhost azure]$ git add *
[vagrant@localhost azure]$ git commit -m "initial commit"

[vagrant@localhost azure]$ git remote add azure https://name@boj-zh.scm.azurewebsites.net/boj-zh.git
[vagrant@localhost azure]$ git push azure master
Password for 'https://name@boj-zh.scm.azurewebsites.net':

azureに載りました。わーいわーい
若干気になるのは、ローカル(vagrant)と、azure(上)だと翻訳のされ方が違う。。何故?気になるな。

もうちょっとやりたいところだが、、、さーアプリやろう!!
Let’s Go!


iOSもやりますが、まずはandroidから。
welcome back!

最新の日銀金融政策を中国語で自動表示する

最新バージョンだけなら、難なくいけますね。


$text = $titles[0]."<br><br>";

foreach(glob("file/".$y."/{*.txt}",GLOB_BRACE) as $file){
    if(is_file($file)){
        $files[] = htmlspecialchars($file);
    }
}
// var_dump($files);

	$file = fopen($files[0], "r");
	if($file){
		while ($line = fgets($file)){
			$text .= $line;
		}
	}
	fclose($file);

	

	$key = '';

	$host = "https://api.cognitive.microsofttranslator.com";
	$path = "/translate?api-version=3.0";
	$params = "&to=zh";

	if(!function_exists('com_create_guid')){
		function com_create_guid(){
			return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
			mt_rand(0, 0xffff), mt_rand(0, 0xffff),
			mt_rand(0, 0xffff),
			mt_rand(0, 0x0fff) | 0x4000,
			mt_rand(0, 0x3fff) | 0x8000,
			mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
		}
	}

	function Translate ($host, $path, $key, $params, $content) {
	    $headers = "Content-type: application/json\r\n" .
	        "Content-length: " . strlen($content) . "\r\n" .
	        "Ocp-Apim-Subscription-Key: $key\r\n" .
	        "X-ClientTraceId: " . com_create_guid() . "\r\n";
	    $options = array (
	        'http' => array (
	            'header' => $headers,
	            'method' => 'POST',
	            'content' => $content
	        )
	    );
	    $context  = stream_context_create($options);
	    $result = file_get_contents ($host . $path . $params, false, $context);
	    return $result;
	}

	$requestBody = array (
	    array (
	        'Text' => $text,
	    ),
	);
	$content = json_encode($requestBody);
	$result = Translate($host, $path, $key, $params, $content);

	$json = json_decode($result);
	$newtext =  $json[0]->translations[0]->text;

	echo $newtext; 

ガンガンいきたいところだが、アプリ(android・iOS)のタスクがかなり重いので、translatorはひとまずこれをazureに載せるところまでとしたい。

preg_replaceのワイルドカード

.*を使います。

$text = "当面の金融政策運営について [PDF 195KB]";
echo preg_replace("/\[PDF.*\]/","", $text);

[PDF 195KB]が非表示となりました。

前)

後)

ディレクトリ配下のファイル名を取得

$y = "2017";
foreach(glob("file/".$y."/{*.txt}",GLOB_BRACE) as $file){
    if(is_file($file)){
        $files[] = htmlspecialchars($file);
    }
}
var_dump($files);

array(8) { [0]=> string(19) “file/2017/boj.0.txt” [1]=> string(19) “file/2017/boj.1.txt” [2]=> string(19) “file/2017/boj.2.txt” [3]=> string(19) “file/2017/boj.3.txt” [4]=> string(19) “file/2017/boj.4.txt” [5]=> string(19) “file/2017/boj.5.txt” [6]=> string(19) “file/2017/boj.6.txt” [7]=> string(19) “file/2017/boj.7.txt” }

しかしforeachでfunction Translateを回すと、 Cannot redeclareとなる。

 Cannot redeclare Translate() (previously declared in /home/vagrant/translator/test.php:40) in /home/vagrant/translator/test.php on line 40

これは困った。

phpファイルからlinuxコマンドを実行

exec('ls', $out, $ret);
print_r($out);

pdftotextの場合は、これでOK

exec('pdftotext boj.pdf boj2.txt');

ではこうするとどうでしょう?
コードがやや冗長になってしまいましたが、file_put_contentsしたpdfをpdftotextしてpdfだけunlinkします。

$i=0;
foreach($urls as $value){
    $pass = "file/".$y."/".$i.".pdf";
    $data = file_get_contents($value);
    file_put_contents($pass, $data);
    exec("pdftotext ".$pass." file/".$y."/boj.".$i.".txt");
    unlink($pass);
    $i++;
}

テキストファイルだけになってますね。

viewをどうするか?
タイトルを取得して、listで表示したい。

日銀pdf->txtに変換したファイルを中国語に翻訳

まず、xpdfでつくったテキストファイルを1行ずつ読み込みます。

$file = fopen("boj.txt", "r");

if($file){
	while ($line = fgets($file)){
		echo $line;
	}
}

fclose($file);

good job!

while文で$txt .= $line; として、変数に入れていき、
これをazureで中国語に翻訳します。

<?php

$file = fopen("boj.txt", "r");

if($file){
	while ($line = fgets($file)){
		$text .= $line;
	}
}

fclose($file);

$key = 'hogehoge';

$host = "https://api.cognitive.microsofttranslator.com";
$path = "/translate?api-version=3.0";
$params = "&to=zh";

if(!function_exists('com_create_guid')){
	function com_create_guid(){
		return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
		mt_rand(0, 0xffff), mt_rand(0, 0xffff),
		mt_rand(0, 0xffff),
		mt_rand(0, 0x0fff) | 0x4000,
		mt_rand(0, 0x3fff) | 0x8000,
		mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff));
	}
}

function Translate ($host, $path, $key, $params, $content) {
    $headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";
    $options = array (
        'http' => array (
            'header' => $headers,
            'method' => 'POST',
            'content' => $content
        )
    );
    $context  = stream_context_create($options);
    $result = file_get_contents ($host . $path . $params, false, $context);
    return $result;
}

$requestBody = array (
    array (
        'Text' => $text,
    ),
);
$content = json_encode($requestBody);
$result = Translate($host, $path, $key, $params, $content);

$json = json_decode($result);
$newtext =  $json[0]->translations[0]->text;
?>
<div id="text1">
    <?php echo $newtext; ?>
</div>

あれ、これなんかヤベーことになってないか?大丈夫か?

2018年4月27日日本货币政策银行近期1。 日本银行今日决定在政策委员会货币政策会议上作出以下决定。 [1] (1) 短和长率操作 (屈服曲线控制) (倾向于 8) 金融市场调整政策, 直到下个货币政策会议如下。 短期利率: 0.1% 的负利率适用于日本银行支票账户的政策利率平衡。 长期利率: 购买长期的日本国债, 以确保10年期的日本国债将保持在零的百分比。 采购金额应管理, 以实现利率经营政策, 以近似目前的购买速度 (约80兆日元每年)。 (2) 资产购买政策 (一致) 购买非长期政府债券的资产如下。 对于① etf 和 J-房地产投资基金, 该行购买其持有量以相当于每年约6日元和大约900亿日元的速度增长。 ② CP 等, 以及债券等, 分别为2.2 日元左右, 以维持约3.2 日元的平衡。 2。 日本央行将继续 “以短期业务进行定量和定性的货币宽松政策”, 以实现2% 的 “价格稳定目标”, 并稳定地维持它。 货币基础的扩张政策应继续下去, 直到 CPI (不包括新鲜食品) 的实际价值以稳定的方式增加到2%。 今后, 我们将对必要的政策作出调整, 以便根据经济、价格和财政状况保持 “价格稳定目标” 的势头 (注 2)。 1以上 (注 1): 黑田、Amemiya、尚志 Wakatabe、原田、Funo、樱井、马赛、铃木等会员。 相反: 片冈。 片冈考虑到2020财年的风险因素, 如消费税上调和美国经济衰退, 最好是进一步加强货币宽松政策, 并适当购买长期国债, 以进一步降低10年来的广泛的政府债券利率。 非常。 (2) 片冈委员会须指明 “价格稳定指标” 的时间, 并从加强超调型承诺的角度出发, 在因国内因素而延迟完成时, 采取额外的纾缓措施是适当的。 这是不必要的, 写在文本中。 2 (参考) 时间–4月26日 (星期四) 14:00-15:21 4月27日 (星期五) 9:00 ~ 11:56 出席委员会-主席黑田东彦 (总督) 正义 Amemiya (副省长) 尚志 Wakatabe 昌原田 Yukitoshi, 马赛孝子, 正诚铃木 (副总裁) 片冈, 4月27日, 财政部内阁办公室出席。 (Funo) 除上述外, 4月26日, 财政部和武务部 (让凯布), 押川内阁办公室主任 (14:00 ~ 15:21) (14:00 ~ 15:22), Kihara Shingai 财政部副部长 (9:00 ~ 11:32, 11:39 ~ 11:56) 内阁办公室副部长 (9:00 ~ 11:32, 11:39-11:56), 货币政策的日期和时间 -4月27日 (星期五) 12:03 经济活动和价格展望 (全文包括背景说明)–4月28日 (星期六) 14:00–主要意见–5月10日 (星期四) 8:50 预定分钟