MariaDBを使おう

MariaDBは、MySQL派生のオープンソースな関係データベース管理システム(RDBMS)
MariaDBの開発は、MySQLのオリジナルコードの作者でMySQL ABの創設者でもあるMichael “Monty” Wideniusにより、 現在オラクルによって所有されているMySQLをフォークして立ち上げられたプロジェクトにより行われている。
→ なんか凄いことになってるな。

リポジトリを設定する前に、バージョンを見てみる。
http://yum.mariadb.org/
10.3.4/ 2018-Jan-18 03:44:00 – Directory
10.3.5/ 2018-Feb-26 10:23:25 – Directory
10.3.6/ 2018-Feb-26 10:23:25 – Directory
10.3.7/ 2018-May-24 14:45:12 – Directory
10.3.8/ 2018-Jul-02 18:33:23 – Directory
10.3.9/ 2018-Aug-15 14:40:45 – Directory

おう、10.3.9が最新のようだ。

レポジトリを作る
sudo vi /etc/yum.repos.d/mariadb.repo
10.3.9で入れる。

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3.9/centos6-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1

maria dbを入れていきます。
sudo yum install MariaDB-devel MariaDB-client MariaDB-server

なんかすげーエラー出てきた。
とりあえず優先順位は然程高くないので放置

40X系、50X系のエラー処理

エラー処理について纏めます。100~300番台は正常処理。問題なし。
– 100番台=リクエスト情報処理中
– 200番台=リクエスト処理成功
– 300番台=リダイレクト処理

400 – 不正リクエスト
> ブラウザ(クライアント)から送信したリクエストに不正があり、うまく処理できないときにでるエラー
ほとんどの場合、ユーザ側のブラウザなどに問題がある可能性が高い

401 – 認証エラー
> ベーシック認証やDigest認証など、パスワードがかかっているWebサイトに対し、パスワードが間違っていた場合などに出るエラー
ユーザ権限が無い場合やID/パスワードの入力ミス時に表示される

403 – アクセス禁止
> Webサイト管理者の意向により、第3者のアクセスが禁止されているときに表示されるエラー

404 – NotFound
> ページが削除されていたり、URLが変更されてページが見れなくなっているときに表示されるエラー

500 – サーバーの内部エラー
> プログラムに問題があるときや、パーミッション設定にミスがあるときに表示されるエラー

503 – サーバー過負荷
> サーバーの過負荷状態で一時的にWebページが表示できないときに起こるエラー

40X系はまとめたいけど、404ページ作っているところの方が多いのかな、
amazon

facebookはログインページにリダイレクト

youtube ああ、いいね♪ youtubeが一番スマートな気がする

docomo たぶんおっさんが作ってんだろーなーって感じの404

google そうだよね、やっぱり。Good!

ということで、結論、40X系のトレンドはシンプルなデザイン&遊び心を入れたキャラクターを挿入!
検索サービスがある場合は、formも入れる。

404

503

メンテ中

あ、メンテ中はヘッダー表示を変えたい。まーlaravelが先だ。

Brabio

WBS、ガントチャートにbrabioというツールを使ってみます。

なんだこれ、ガント作成が超絶楽だ。

s3からphpでファイルをローカルにダウンロード

引き続き、aws sdkを読み込みます。

require_once('vendor/autoload.php');

$s3client = new Aws\S3\S3Client([
	'credentials' => [
		'key' => '',
		'secret' => ''
	],
	'region' => 'ap-northeast-1',
	'version' => 'latest',
]);

$result = $s3client->getObject([
	'Bucket' => 'hoge',
	'Key' => 'article.csv',
	'SaveAs' => 'article.csv',
]);

なに、こんなに簡単なのか。。。。。。
続いて、csvからmysql! gogogo!

データベースオブジェクトの命名規則

対象は
– テーブル名
– カラム
– インデックス

1.全般 大文字を利用しない
× DOCUMENT
× Document
〇 document

2.複数単語の連携はスネークケース
× tableName
× TableName
× tablename
〇 table_name

3. 略名は利用しない
× start_dt
× maker_cd
〇 start_date
〇 maker_code

4. テーブル名は複数形
× document
〇 documents
× category
〇 categories

5. 複数x複数
× usercategories
× user_categories
〇 users_categories

6. カラム
id, created_at, updated_atは必須

7. 他のテーブルとジョインするカラムはテーブル名(単数)_id
〇 category_id

8. 時間を表すカラムは受動態_on、受動態_at
〇 created_at
〇 crosed_on

なるほど、これは非常に勉強になる。
ありがたや、ありがたや!

Amazon Kinesis

動画とデータストリームをリアルタイムで容易に収集、処理、分析 Amazon Kinesis は、リアルタイムのストリーミングデータを容易に収集、処理、分析できるため、タイムリーな洞察を得て、新しい情報に迅速に対応することができる。

  • Generate streaming data containing stock quote information
  • Send the data to an Amazon Kinesis Firehose delivery stream
  • Amazon Kinesis Firehose will then call an AWS Lambda function to transform the data
  • Amazon Kinesis Firehose will then collect the data into batches and send the batches to an Amazon Elasticsearch service cluster
  • You will use Kibana to visualize the streaming data stored in the Elasticsearch cluster
  • Amazon Kinesis Firehose is a fully managed service that delivers real-time streaming data to destinations such as Amazon Simple Storage Service (Amazon S3), Amazon Elasticsearch Service and Amazon Redshift. With Firehose, you do not need to write any applications or manage any resources. You configure your data producers to send data to Firehose and it automatically delivers the data to the specified destination.

    letの変数は重複させない

    @IBAction func getGoo(_ sender: Any) {
            let results1 = ["Image1","Image2","Image3"]
            let random1 = arc4random_uniform(UInt32(results1.count))
    
            let image1 = UIImage(named: results1[Int(random1)])
            imageView.image = image1
        }
        
    
        @IBAction func getChoki(_ sender: Any) {
            let results2 = ["Image1","Image2","Image3"]
            let random2 = arc4random_uniform(UInt32(results2.count))
            
            let image2 = UIImage(named: results2[Int(random2)])
            imageView.image = image2
        }
        
        @IBAction func getPa(_ sender: Any) {
            let results3 = ["Image1","Image2","Image3"]
            let random3 = arc4random_uniform(UInt32(results3.count))
            let image3 = UIImage(named: results3[Int(random3)])
            imageView.image = image3
        }
    

    let result, let randomを3回書くと、うまく表示されません。varだったら行けるのかもしれませんが。

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

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

    
    $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に載せるところまでとしたい。

    ファイル名を取得して表示する

    echo $_SERVER['PHP_SELF'];
    

    1文字目~13文字目をslice

    $fname = $_SERVER['PHP_SELF'];
    echo substr($fname, 1, 12);
    

    ファイルを複製する

    $i = 1;
    $copy = '03-3567-000'.$i.'.php';
    copy('03-3567-0003.php', $copy);
    

    03-3567-0001.php の中身のコードも、03-3567-0003.phpと同じものになっています。

    ファイルを複数複製する

    for($i = 0; $i < 10; $i++){
    	$copy = '03-3567-000'.$i.'.php';
    	if(!file_exists($copy)){
    	copy('03-3567-0003.php', $copy);	
    	}
    }
    

    これ、何百万のphpファイルと何百万のmysqlレコードをつくるのか!?

    weather mapのデータをDBに格納する

    テーブル名はcakeを使うので、複数形にします。

    create table weather.marunouchis(
    	id int unsigned auto_increment primary key,
    	forecast varchar(255),
    	main varchar(255),
    	description varchar(255),
    	temp float,
    	humidity int,
    	cloud int,
    	speed float,
    	created datetime default null
    );
    

    PDO::PARAM_INTは、floatやdoubleはないとのこと。指定しないとstrになる。

    $now = date("Y-m-d H:i:s");
    $i = 0;
    foreach($main as $value){
        $stmt->bindParam(':forecast', $time[$i], PDO::PARAM_STR);
        $stmt->bindParam(':main', $value, PDO::PARAM_STR);
        $stmt->bindParam(':description', $description[$i], PDO::PARAM_STR);
        $stmt->bindParam(':temp', $temp[$i], PDO::PARAM_STR);
        $stmt->bindParam(':humidity', $humidity[$i], PDO::PARAM_INT);
        $stmt->bindParam(':cloud', $cloud[$i], PDO::PARAM_INT);
        $stmt->bindParam(':speed', $speed[$i], PDO::PARAM_INT);
        $stmt->bindParam(':created', $now, PDO::PARAM_STR);
        $stmt->execute();
        $i++;
    }
    

    入っていますね。