コロン区切りで時間のリストが渡されたときに合計する
作業時間の合計とか、簡単に計算する。コロン区切りフォーマットでない行はとばす。
timecalc.py
#!/bin/python
import re
mn_sum=0
with open("timelist.txt", "r") as f:
for line in f:
line=line.strip()
m=re.match(r'([\d\-]+):(\d+)',line)
if m :
hr=int(m.group(1))
mn=int(m.group(2))
if hr<0:
mn=mn*-1
mn_sum += hr*60+mn
hr_sum=mn_sum/60
mn_sum=mn_sum%60
print("%d:%d\n"%(hr_sum,mn_sum))
時間リストサンプル
timelist.txt
0:53
1:21
2:22
-2:40
----
----
-1:05
実行結果
python timecalc.py
0:51
イラストロジックをだいたい解けるプログラム
Slim がバージョンが上がるごとにデブっていく
最初は何にもないルーティングだけのSlimが2019年9月にリリースされたSlim4はかなりいろいろついてる。付加機能は余分な脂肪と言えなくもないが、エラーハンドラとかユニットテストとか、結局作るんでしょといったものがSkeltonで用意されているのはうれしい。
とりあえず、composerでslimをインストールしたら、下記コマンドでskeltonもインストールする
composer create-project slim/slim-skeleton [ProjectName]
現時点ではSlim4に対応した日本語解説はないので、自力で構造を調べる。
src
├── Application
│ ├── Actions
│ │ ├── ActionError.php
│ │ ├── ActionPayload.php
│ │ ├── Action.php
│ │ └── User
│ │ ├── ListUsersAction.php
│ │ ├── UserAction.php
│ │ └── ViewUserAction.php
│ ├── Handlers
│ │ ├── HttpErrorHandler.php
│ │ └── ShutdownHandler.php
│ ├── Middleware
│ │ └── SessionMiddleware.php
│ └── ResponseEmitter
│ └── ResponseEmitter.php
├── Domain
│ ├── DomainException
│ │ ├── DomainException.php
│ │ └── DomainRecordNotFoundException.php
│ └── User
│ ├── UserNotFoundException.php エラー処理
│ ├── User.php
│ └── UserRepository.php
└── Infrastructure
└── Persistence
└── User
└── InMemoryUserRepository.php サンプルのデータ固定配列
app
├── dependencies.php
├── middleware.php セッション管理などをする
├── repositories.php
├── routes.php リクエストルーティングする コマンド追加時に変更する
└── settings.php
public
└── index.php
Skeltonは、ユーザーデータの住所録なので自分のデータを取り扱わせるためにはUserのところを順次いじっていけばいい。まずはInfrastructure以下のデータの持ち方を変える。
routes.php はパラメータなしで呼ばれたときはHello Worldを簡単なhtmlで返す。コマンドを作りたい場合は下のgroup使ってパラメータにより分岐させる。まあ、すっきり。Userの最初の入り口もここになる。
機械学習とかを手早く試したい
機械学習を試しながら覚えようと思っても、実行環境の構築が大変すぎる。特に進化のスピードが速すぎて、1年前の記事とか参考になるどころか依存性地獄にはまり込む罠だったりする。
土日を丸々つぶして環境を構築したらもう力尽きてしまって、本来の目的が何だったか忘れる。
そんな時はGoogleさんのColaboratory。Google Driveで[新規]->[Colaboratory] はいJupyter Notebook 。!でシェルコマンドを実行することができるので、足りないモジュールはpipで入れる。 googleドライブもマウントできるので、データーの入出力も困らない。 Googleさんの手のひらでコロコロしている感じは否めないが、練習だったらもう十分。
参考にしたページ
DES暗号
DESです
import pyDes;
des = pyDes.des('01234567',pyDes.CBC,"\0\0\0\0\0\0\0\0");
print des.encrypt('12345678').encode('hex')
<?php
$key = "01234567";
$str = "12345678";
$iv = hex2bin("0000000000000000");
$encrypt = openssl_encrypt($str,'des-cbc',$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING ,$iv);
$a=bin2hex($encrypt);
print $a;
3DESです
import pyDes
# 2 Key 3 DES ENCODE
data = "12345678"
des = pyDes.des('01234567',pyDes.CBC,"\0\0\0\0\0\0\0\0")
a=des.encrypt(data)
des2 = pyDes.des('76543210',pyDes.CBC,"\0\0\0\0\0\0\0\0")
b=des2.decrypt(a)
des3 = pyDes.des('01234567',pyDes.CBC,"\0\0\0\0\0\0\0\0")
c=des3.encrypt(b)
print c.encode('hex')
# Functional Equivalent 上記を1行で書く
k = pyDes.triple_des("0123456776543210", pyDes.CBC , "\0\0\0\0\0\0\0\0")
d = k.encrypt(data)
print d.encode('hex')
<?php
$key = "0123456776543210";
$str = "12345678";
$iv = hex2bin("0000000000000000");
$encrypt = openssl_encrypt($str,'des-ede-cbc',$key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING ,$iv);
$a=bin2hex($encrypt);
print $a;