ラベル Dev Tips の投稿を表示しています。 すべての投稿を表示
ラベル Dev Tips の投稿を表示しています。 すべての投稿を表示

2019/01/01

標準入力の取扱 input と print - Python3

Goal:Python3での標準入力をハンドリングする。
#1 複数の値が1行に同時に入力された場合、数値として取り込む
入力値 --- 以下の3つの数値を入力したら、int型として取り込む
100 3 123456



(py3) toshi$ python python3-input.py
100 3 123456
output---
a=100
b=3
c=123456


#2 入力行数を最初に入力して、その後、複数行に渡る入力値を、配列として取り込む
入力値 --- 以下のように入力したら、3*3の行列として取り込む
3
1 2 3
4 5 6
7 8 9



(py3) toshi$ python python3-input2.py
3
1 2 3
4 5 6
7 8 9
output---
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

2018/12/16

GCP: IoTデータ分析環境立ち上げ on GCP

Goal:ローカルPCをIoTGateway端末と見立てて、Bigqueryに、気温データをストリーミングインサートする。利用するサービスは、IoT Core --- Pub/Sub --- Dataflow --- Bigquery と連係する。
Gateway側には、データをPushする処理が必要だが、それ以外は、コーディング不要!

How
0. 準備:仮想IoTGateway として、気温/計測時間/デバイスIDを送るプログラムを作成
https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example
をローカルPCにクローンして、Pythonの環境などをセットする。
cloudiot_mqtt_example.py を加工。変更箇所は、以下の通り。


1. Pub/Subのトピックを作成
(1)APIを有効にする
(2)トピックを作成する
トピックとは、メールボックスみたいなもの




2. デバイスをIoT Coreに登録する
(1)APIを有効にする
(2)端末レジストリを作成する
端末レジストリとは、デバイスのグループを作成すること
トピックの選択が必要。1で作成したトピックを選択する。
そうすると、この端末レジストリ内のデバイスから送られてきたメッセージは、そのトピックに投げ込まれる。
(3)端末を作成する(デバイスを登録する)
公開鍵の登録は一旦せずにデバイスを作成する。
公開鍵の種類は、 RS256_X509 とする。


3. 認証鍵の作成と登録
(1)デバイス側で、Google root certificate を取得する
wget https://pki.goog/roots.pem
あるいは、
curl https://pki.goog/roots.pem > roots.pem
で取得する
(2)鍵のペアを作成する
openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes -out rsa_cert.pem -subj "/CN=unused"
(3)公開鍵を、IoT Core のデバイスに貼り付ける
(4)private key は、ローカルマシンに保存

4. サブスクライバーのを登録する
デバイスが、パブリッシャーなので、そのトピックの購読者を登録する。
ここでは、Bigqueryにセンサーの値を書き出すので、エクスポート機能を使う。
登録すると、自動的にCloud DataflowのJobが立ち上がる。
(1)Bigqueryに、データを登録するためのテーブルを登録する

(2)トピックのエクスポート登録を行う





5. テスト実行!!
デバイスを稼働させて、データがBigqueryに流れ込むのを確認する。


$ python iotdemo.py --cloud_region=us-central1 --project_id=iotdemo1 --algorithm=RS256 --private_key_file=rsa_private.pem --registry_id=demo-reg --device_id=iotdemo



Bigquery側は。。。。
成功!!
実に簡単に、分析環境の構築が可能。

2018/05/27

GCP: GAE appcfg.py の使い方

GAEの appcfg.py の使い方。Deploy以外にも使うことがあり、備忘録



2018/02/25

GCP: GAE上にAPI(POST)を作成ーDatastoreの操作(Create) ー Python



  • Goal
    GAE(Google App Engine)上にREST API(メソッドはPOST)を作成する。
    APIが呼び出されたら、GCP(Google Cloud Platform)のDatastoreに新規Entity(レコード)を追加する。言語・環境はPython+flask。
  • case
    名前、点数、教科名をjsonでPOSTしたら、GCPのDatastoreに書き込みして、Keyを返信する。
  • How
    1:開発環境は、以下でセットアップ
      Ubuntu16.4 + Pyenv:Python2.7.13 on GCE
      GCP: Google App Engine上にPython(Flask)アプリを立ち上げる手順

    2:ライブラリのセットアップ
      app.yaml に、flaskの記述を追加
      - name: flask
        version: 0.12

    3:mainプログラム と curl 結果


    4:Datastoreの結果

  • Thanks!

2018/02/24

Docker CE のディレクトリを引っ越しする方法

AWSのEC2 RHEL7.4 にDocker CEをセットアップする手順 の後に、Rootディレクトリを引っ越しする方法


・システム領域のハードディスクを大量に消費するので、別ディレクトリへ引っ越しする
以下の例は、/var/lib/docker から /xxx/mnt/docker/ へ引越し
0.初期設定確認
1.ServiceSTOP
2.ディレクトリを作ってコピー
3.設定変更
4.ServiceStart



2018/02/11

GCP: GAE(Google App Engine)のバージョン別のURL

GAEは、バージョン別に個別のURLをもっている。
なので、同時に複数バージョンを公開してテストできる。
知らなかった。。。

サンプル

https://"バージョン名"-dot-"プロジェクト名".appspot.com/

GCP: Google App Engine上にPython(Flask)アプリを立ち上げる手順



  • Goal
    開発環境も何も無い状態から、GAE(Google App Engine)上にFlaskアプリ(Hello World)を30分以内に立ち上げる。
    GAEは、Standard Environmentなので、Pythonは、2.7
  • How
    1. GCP上に新プロジェクト作成(xxxxx-test−0001) ⇒ 手順割愛
    2. GCP上で、GAEを有効にする。 ⇒ 手順割愛
      初めてのアプリ作成で、Pythonを選ぶ。
      チュートリアルはやらなくて良いので、途中で抜ける。
      1プロジェクトで、1GAEアプリしか持てない。
    3. GCP上に新VMインスタンス(Ubuntu16.4)作成(dev001) ⇒ 手順割愛
      TYPEはMicro(無料マシン)でOK。
      別にローカルマシンがあればそれでもOK。
    4. VM(dev001)の設定 ー 開発環境構築
        4-1. 初期設定 + Pyenv + GAEのSDKの導入
          以下のファイルを実行
       
         ~$ . UbuntuSetupForGAE.sh

        4-2. Localに開発用フォルダの作成とPyenvのセットアップ      
           

    5. Deploy
      localでのテスト。main.pyがあるディレクトリで以下を実行
          $ 
    dev_appserver.py .
     
       Deploy。 main.pyがあるディレクトリで以下を実行する
          $ appcfg.py update --noauth_local_webserver -A "project id" -V "version" .

    6. 確認する。以下のURLにアクセスする。
      
    https://”projectid”.appspot.com
         



  • Notes
    これを使って、LineのBotなどマイクロサービスを立ち上げれる
    main.pyの編集と必要なlibのインストールが必要
  • Thanks!!

  • 2017/10/28

    CSVファイルを読み込んでlist型と辞書型に格納 - Python


    • Goal
      PythonでCSVファイルを読み込んで、List型と辞書型、集合型に格納する
    • How
      CSVモジュールのreaderメソッドを使う

      マスターファイルを作る。 テキストファイル menu.csv
       
      UDON001,500
      UDON0012,700
      SUSHI0123,1200
      TONKATSU001,2000
      RAMEN10,1000

    • Result
      (pytest2.7.13)~/pytest$ python CSVtoListDic.py 
      List
      [['UDON001', '500'], ['UDON0012', '700'], ['SUSHI0123', '1200'], ['TONKATSU001', '2000'], ['RAMEN10', '1000']]
      5
      Dic
      {'TONKATSU001': '2000', 'UDON001': '500', 'RAMEN10': '1000', 'UDON0012': '700', 'SUSHI0123': '1200'}
      5
      Set
      set(['TONKATSU001', 'UDON001', 'SUSHI0123', 'UDON0012', 'RAMEN10'])

      5

    2017/10/22

    GCP: Google App Engineにアプリーケーションをデプロイする方法 ー GAE/Py


    • 備忘メモ
      Google App Engine にデプロイするコマンド
      EC2上のUbuntu16.04からデプロイ
      APP.yamlファイルがあるディレクトリで実行すること


    (pytest2.7.13) ubuntu@ip-10-0-0-253:~/pytest$ appcfg.py update --noauth_local_webserver -A "projectid" -V "version" .←Main.pyがあるディレクトリで流しているので。。。
    • 結果 --- これは何も更新されてないけど

      10:43 AM Application: (was: None); version:  (was: None)
      10:43 AM Host: appengine.google.com
      10:43 AM Starting update of app: , version: 
      10:43 AM Getting current resource limits.
      10:43 AM Scanning files on local disk.
      10:43 AM Scanned 500 files.
      10:43 AM Cloning 896 application files.
      10:43 AM Compilation starting.
      10:43 AM Compilation completed.
      10:43 AM Starting deployment.
      10:43 AM Checking if deployment succeeded.
      10:43 AM Deployment successful.
      10:43 AM Checking if updated app version is serving.
      10:43 AM Completed update of app: , version:

    テキストファイルをRDBのテーブル(イメージは、品番マスターとか)風に使う - Python


    • Goal
      ChatBotが受信したテキストメッセージと、テキストファイル(CSV)をマッチングさせる。テキストファイルのままで、品番マスタの用に使って参照させる。
    • 準備
      マスターファイルを作る
      テキストファイル menu.csv
       
      UDON001,500
      UDON0012,700
      SUSHI0123,1200
      TONKATSU001,2000
      RAMEN10,1000
    • How
      1. unicodedata を使って、ひらがな・カタカナ・漢字判定と、全角・半角変換する
      2. lineでテキストファイルから1行取得して、比較を繰り返す
      3. 先頭からで一致したら抜き出す

    • 結果

      (pytest2.7.13) ubuntu@ip-10-0-0-253:~/pytest$ python testmatch.py
      UDON001,500
    • Thanks!!
      以下、参考にさせて頂きました。
      http://minus9d.hatenablog.com/entry/2015/07/16/231608


    2017/01/12

    .bash コマンドインデックス

    .bash のコマンド集

    1. which bash - bash の種類を確認
       #/bin/bash
       #この結果をスクリプトの一行目に表示す
       #!/bin/bash
    2. cd - フォルダの変更
    3. ls - フォルダの中身を表示
    4. rm - ファイル、フォルダの削除
    5. cp - ファイルのコピー
    6. mv - ファイルの移動
    7. mkdir - ディレクトリを作成
    8. pwd - 現在のフォルダパスを表示
    9. chmod - ファイル・ディレクトリのアクセス権限変更
    10. tee - 標準出力+ファイル出力の同時出力
    11. awk - 文字列コントロール/編集
    12. xargs - 
    標準入力から生成したコマンドラインを実行する

    タスクマネージャをリモートデスクトップ上で起動

    - Issue
      リモートデスクトップ接続中Ctrl+Alt+Deleteでタスクマネージャを起動できない。

     (知らずにしょーもない時間を潰す…)

    - 対策
      1. Ctrl+Shift+Esc
      2. Run taskmgr
         Windows key + R -> taskmgr
      3. タクスバー上で右クリックする



    - Thanks!
      
      How-to Geek - Six ways to open the windows task manager  

    2016/09/25

    1.他のテーブルとのマッチングのやりかた(1列文字列から1行テーブルへ変換)

    目次に戻る
    APEXでのCHECKBOX(チェックボックス)の取扱

    1.他のテーブル(名称マスター)とのマッチングのやりかた
     (1列文字列から1行テーブルへ変換、その後マッチングしてまた1行文字列に戻す)


     Goal ‐ 以下のように、チェックボックスの返り値とマスターをマッチングをする
     #SQLサンプル
      COLUMN FOODS を FUNCTION T_GET_NAME に渡して、名称リストを取得

     #FUNCTION T_GET_NAME のSQL

     
     #解説 - コロン(:)区切りのテキストを1行テーブルへ変換するSQL






    2016/09/24

    CHECKBOX(チェックボックス)のハンドリング - 目次 - APEX


    APEX上でのCHECKBOX(チェックボックス)のハンドリング方法


    Table of contents
     
    1.他のテーブルとのマッチングのやりかた

      (1列文字列から1行テーブルへ変換)
     2.検索する/フィルターをかける


    Background

     APEXでチェックボックスを使う、コロン(:)区切りの文字列で値が帰ってくる。
     それをどう扱うのか?というメモ...

     (例)




    2016/06/26

    オブジェクトの名称はすべて小文字にしておくこと - Postgresql

    "Postgresqlでは、オブジェクト(テーブル名、カラム名)の名称はすべて小文字にすること"
    -理由

     DB内には、大文字・小文字で区別して登録される
     SQL内では、"(ダブルクォーテーション)で囲まれているとそのままの文字列だが、
     囲まれていないと小文字に変換される(らしい)
     結果、アンマッチがおきる


    --------------------------------------------------------
    testdb=> \d iris
                    Table "public.iris"
        Column     |         Type          | Modifiers 
    ---------------+-----------------------+-----------
     Id            | integer               | not null
     SepalLengthCm | numeric(15,2)         | 
     SepalWidthCm  | numeric(15,2)         | 
     PetalLengthCm | numeric(15,2)         | 
     PetalWidthCm  | numeric(15,2)         | 
     Species       | character varying(20) | 
    Indexes:
        "iris_pkey" PRIMARY KEY, btree ("Id")

    testdb=> select * from iris where SepalLengthCm > 5.0; -> ダメ
    ERROR:  列"sepallengthcm"は存在しません
    LINE 1: select * from iris where SepalLengthCm > 5.0;
                                     ^
    HINT:  Perhaps you meant to reference the column "iris.SepalLengthCm".
    testdb=> select * from iris where "iris.SepalLengthCm" > 5.0;->ダメ
    ERROR:  列"iris.SepalLengthCm"は存在しません
    LINE 1: select * from iris where "iris.SepalLengthCm" > 5.0;
                                     ^
    testdb=> select * from iris where "SepalLengthCm" > 5.0; -> OK
    testdb=> select * from iris where iris."SepalLengthCm" > 5.0; -> OK

    testdb=> 

    雑多な1行コマンド&SQLメモ - Postgresql

    メモ for Postgresql

    ‐Postgresql編




    2016/06/14

    buffer overflow. Use SET command to reduce ARRAYSIZE or increase MAXDATA.

    • 状況
      SQL*PLUS でSQL実行時に、エラーメッセージ”buffer overflow. Use SET command to reduce ARRAYSIZE or increase MAXDATA.”が表示される。

      環境 ー 古いんです (^^;

      SQL*Plus: Release 3.3.4.0.0 - Production on Mon Jun 13 10:56:36 2016

      Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.
      Connected to:
      Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
      With the Partitioning option
      JServer Release 8.1.7.4.0 - Production

      SQL> select * from v$version;
      BANNER
      ----------------------------------------------------------------Oracle8i Enterprise Edition Release 8.1.7.4.0 - ProductionPL/SQL Release 8.1.7.4.0 - ProductionCORE    8.1.7.0.0       ProductionTNS for Solaris: Version 8.1.7.4.0 - ProductionNLSRTL Version 3.4.1.0.0 - Production

    • Solution

      SQL> SET ARRAYSIZE 1

      上記を実行の上、SQLを実行する。

    2016/06/09

    Data set サンプル - Kaggle

    サンプル作成用のデータは、以下から取得

    Kaggle - https://www.kaggle.com/


    1. TITANIC - タイタニック号の乗客名簿

    2. IRIS - アヤメのデータ

    2016/04/28

    SQL serverからOracleへのデータ移行時の文字列ハンドリング

    SQL Server からOracleDBへのデータ移行時に、改行、TAB、"(ダブルクォーテーション)のハンドリングのサンプル

    1.NTEXT型から、VARCHAR型へ変換
    2.改行(Carriage Return) は、スペースへ変換
    3."(ダブルクォーテーション) は、 シングルクォーテーションに変換


    そのあと、文字列カラムを"(ダブルクォーテーション)区切りで出力し、OracleDBへロードする
    • Source