株も歩けば犬に当たる

ブラックSlerで働くSEが株やPythonや思ったことについて書いています。

リクルートのTalk APIをubuntuとpythonで使ってみた

リクルートAPIを公開したので使ってみる

今日、こんなハッカソンに参加してきました。(会社以外のエンジニアと交流するのは久々で楽しかったです)

www.xn--78j2ayab5gxloexbxg1q.com

機械学習 × ハッカソンで、機械学習を使ったWebアプリをチームで作るのですが、機械学習を一から構築するのも大変なのでAPI使ったらいいですよーってな感じでリクルートAPIGoogleAPIのURLがサイトに貼っつけてありました。

私のチームではAPIは使用しなかったのですが、せっかくなのでハッカソンが終わった後に使ってみることにしました。

ちょっとだけチャットボットに興味があったので、選んだのはリクルートTalk API

リクルートのサイト。

a3rt.recruit-tech.co.jp

Github

github.com

使い方がなんせ簡単

APIkeyというのをサイトで取得する必要がありますが、それを含めてもとっても簡単でした。

使い方は、Talk APIのあるサーバにPOSTでメッセージ付きのリクエストを送ると、レスポンスにメッセージの返信付きで返ってきます。

curlコマンドで、メソッドはPOST形式、そして、POSTの中身にapikeyと、queryというパラメーター名で送りたいメッセージを送信します。

#リクエスト
curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう"

#レスポンス
{"status": 0, "message": "ok", "results": [{"perplexity": 0.07743213382788067, "reply": "\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059"}]}

!!??。

レスポンスのメッセージの返信はreplyに格納されているはずですが、そこがなぜか文字コード。笑

見た感じASCIIコードですが、いちおうチェック。

#text.txtにレスポンスを出力。
curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう" > text.txt

#何のエンコード方式かチェック
file text.txt

チェックした結果、やっぱりASCII。

エラーの9割は文字コードとはよく言ったものです。

replyをUTF-8に変換するのが手っ取り早そう。

レスポンスはjson形式なので、pythonで開いてUTF-8に変換するかってな感じでコードを書きました。

#text.jsonにレスポンスを出力。(json形式)
curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAA" -F "query=おはよう" > text.json

#text.jsonを開く
import json
f = open("text.json")
data = json.load(f)
f.close()
print(data)

#この時点でprintしてみると...
{'message': 'ok', 'results': [{'reply': 'おはようございます', 'perplexity': 0.07743213382788067}], 'status': 0}

??。

あれ?まだASCIIからUTF-8に変換してないのに、replyが見れる...

きっと、python自体がUTF-8で動くからかな。


ここまでやって、なんかlinuxのコマンドでリクエスト送って、pythonで開くの面倒だなぁ、pythonで全部書いちゃうかとか思っていたら、なんとpythonライブラリで提供されていることが判明したので、そちらも掲載します。

pythontalk APIを使ってみる

pipで入ります。

pip install pya3rt

さっそくコードを書きます。

import pya3rt
apikey = "AAAAAAAAAAAAAAAAAAAAAA"
client = pya3rt.TalkClient(apikey)
print(client.talk("おはよう"))

#{'message': 'ok', 'results': [{'reply': 'おはようございます', 'perplexity': 0.07743213382788067}], 'status': 0}

print(client.talk("ギャンブル大好き"))
#{'message': 'ok', 'results': [{'reply': '良さそうですね', 'perplexity': 2.592985171811111}], 'status': 0}
>>> 

おはようにはおはようございますを。

ギャンブル大好きには良さそうですねを。

ハッカソンで使えばよかったなと思えるほど、使い方は簡単でした。

まとめ

チャット形式ってすごく良いUIだと個人的に思っているので、いずれ自分が作っているwebアプリにもチャット機能を追加したいなぁなんて思っていますが、きっとまだまだ先のことでしょう。

以上終わり!

HTTPリクエストの改ざんをBurp Suiteでやってみた

目次

セキュリティについて少し勉強しました

浅い知識なので、メモ程度です。

今日の記事でやることを軽くまとめると、自分のはてなブログの通信を傍受して、改ざんしてみようというものです。

こんな記事を投稿して、それを途中で改ざんして。

f:id:doz13189:20170602221738p:plain

こうなります。

f:id:doz13189:20170602221838p:plain

htmlのbodyを改ざんしました。

(記事の内容に「ほげほげほげ」と投稿されるはずが、「あなたのリクエストを改ざんしました」となっています)

これが他人のものだと不正アクセス禁止法に抵触します。

ということで本題へ。

リクエストとレスポンス

簡単な言葉のおさらいをすると...

  • リクエスト:クライアント(自分のPCなど)からサーバーに送る通信
  • レスポンス:サーバーからクライアントに返ってくる通信

今日はリクエストの内容を改ざんしてみます。

攻撃の分類で言うと、HTTPヘッダインジェクションなんかが近いと思います。(今回はヘッダではなくボディを改ざんしています)

使用するツール

Burp SuiteというHTTPプロキシを使用します。

portswigger.net

このツールでHTTP通信を閲覧、改ざんをすることができます。

脆弱性診断で広く使われるツールで、他の有名なツールにfiddlerなどがあげられます。


重要なポイントとして、これはHTTP通信なら改ざん可能というところです。

HTTPS通信の改ざんは行えません。(基本的には)

HTTPSSSLを使用して、通信内容を暗号化しているので、通信内容は見ることはできません。

また、サーバー証明書も持っていないので復号化もできませんし、しても改ざんが検知されます。


逆にHTTPは、通信は平文です。

なので、通信さえ傍受してしまえば、改ざんが可能というわけです。

HTTP通信を使ってるWebサービスないかなぁ

HTTPSは改ざんはできないので、HTTPを使用しているwebサービスを探していました。

すると、すごく身近にHTTP通信を使用しているWebサービスがありました。

はてなブログです笑


そう言えば、ブラウザのURLのところに鍵マークがありません。(むしろビックリマークがついています)

ということは、記事の更新等も平文で行われているわけですね(驚愕)

HTTP通信を使用しているのは、ECサイトみたいな金銭が発生するWebサービスではないので、そこまで厳格なセキュリティは求められないからでしょうか。

一昔前まえはLINEも平文でメッセージの通信を送っていたようなので、案外そんなもんなのかな。(現在はLINEの通信は暗号化していたはずです)


なので、自分のアカウントで新しい記事をアップロードし、そのアップロードしようとしている通信を改竄してみます。

成功すれば、記事の内容が変わってアップロードされることになります。

改ざんする手順

プロキシサーバーをたてます。

自PC(クライアント)>>>>> プロキシサーバー >>>>>> はてなサーバ

こんな感じに自分PCとはてなサーバーの間にひとつプロキシをはさみます。

このプロキシで、自PCから送られたレスポンスを傍受して、改ざんしてから、はてなサーバーに送りつけます。


Proxy SwitchySharp というChromeのアドオンを追加して、プロキシサーバーを立てます。

こうすることによってBurp Suiteは、立てたプロキシサーバーを通る通信をみることができます。

Proxy SwitchySharpの設定はこんな感じ。

f:id:doz13189:20170602225625p:plain


プロキシサーバーの設定が終わったら、Burp Suiteを開いて、通信をみます。

f:id:doz13189:20170602225757p:plain

HTTP historyにプロキシを通っている通信が表示されます。

Interceptをのタブの Intercept is off をクリックすると、インターセプトが開始されます。

インターセプトとは、一つの通信を傍受して、他の通信をせき止めている状態です。

傍受した通信は、テキストベースなので改竄し放題です。

こんな感じで、HTTP通信を傍受して改竄を行います。

はてなの記事を改ざんしてみる

f:id:doz13189:20170602221738p:plain

適当にほげほげ、と入力して、Burp Suiteのインターセプト機能をオンにしてから公開します。

すると、リクエストをBurp Suiteでキャッチできます。

キャッチしたHTTP通信のheadとbodyを見るとこんな感じ。

title=%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92&body=%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92

一瞬、暗号化されているように見えますが、これはただのエンコードです。

ちなみにURLエンコード

URLでは、日本語などを送信できないのでURLエンコードという方法でエンコードします。

エンコードなので、もちろんデコードが可能です。

エンコードとデコードができるWebサービスもあります。

Web便利ツール/URLエンコード・デコードフォーム/処理完了 - TAG index

ここでデコードすると...

%E3%81%BB%E3%81%92%E3%81%BB%E3%81%92

#デコード結果
ほげほげ

なので、「あなたのリクエストを改ざんしました」という文章をURLエンコードして、傍受した通信のbody部にはっつけます。

body部の編集が終わったら、Burp Suiteで送ります(フォワード)。

すると...

f:id:doz13189:20170602221838p:plain

改ざん完了ということになります。

まとめ

HTTP通信は平文で送っているので、傍受されている危険性を考えなければいけないです。

なので、フリーWiFi(スタバやマクド等)でHTTP通信を行う際は、傍受されているものとしたほうが良いですね。

傍受されても問題ない程度の通信しかおこなっちゃいかんということですね。

以上終わり。

Ubuntu16.04にJAVAの開発環境を整える

おそらく一番手っ取り早い方法で、さっさと環境を整える

手順

  1. JREをインストー
  2. JDKをインストー
  3. 終了

必要最低限を整えて、今日のところは終わります。

JDKJREは一体何?

javaを実行するには、まずコンパイルが必要です。

#javacでコンパイル
javac Java_file.java

このjavacで動くのが、JDKです。(おそらく)

次に、必要なのがコンパイルしたjavaファイルを実行するJREです。

#javaファイルを実行
java Java_file

この2つさえあれば、javaの開発環境はとりあえず整います。

あとは適当なテキストエディタさえあれば、大丈夫。

私はいつも使っているSublime Textで書くことにします。

JREJDKをインストー

JREの略は、Java Runtime Environment。

JDKの略は、Java Development Kit

この2つをインストールします。

#何をインストールするときの儀式をとりあえずします。
sudo apt-get update
sudo apt-get upgrade

#容量に不安があるならこちらも。
sudo apt-get autoremove

そして。

sudo apt-get install default-jre 
sudo apt-get install default-jdk

これでインストールは終わり

Hello Worldしてみよう

適当なディレクトリにHello.javaのファイルを作成。

public class Hello {
	public static void main(String[] args) {
		System.out.println("Hello");
	}
}

これを端末上でコンパイルからの実行。

#コンパイル
javac Hello.java

#実行
java Hello

これでコンパイルも実行エラーもでなければ、Helloと表示されるはず。

まとめ

研修でjavaをやっているので、急遽javaの開発環境を自PCに整える必要がありました。

研修ではeclipsを使用していますが、作業中にあのマウスを離せない感じがなんともストレスなので、普通にテキストエディタを使おうと思い、今回はデフォルトの開発環境を整えました。

Webアプリケーションを作ると、eclipsの便利さなども実感できたのですが、eclipsでやっていると内部の動きがほとんど理解できません。

ちゃんと理解できるまでは、大変ですがテキストエディタで頑張ろうかと。

というか今までpythonでずっとそうだったので、それが続くだけですが。


以上、終わり!

base64でエンコードとデコードをしてみる

少しセキュリティについて勉強を。

作ったwebアプリをherokuからVPSへ移行するにあたって、少しセキュリティの知識が必要になりました。

何とか移行してサーバーにファイアーウォールを設定して、ポートのhttpとhttpsのポートだけをとりあえず開けましたが、他に何をするべきかわかりません。

遠回りにはなるけども、この際、ちょっとセキュリティについて勉強しようかなと。

株系のこともやりたいけれども、少し休憩しています。


ということで今日は簡単なセキュリティの記事です。

base64はとってもシンプルで汎用性抜群のエンコード方式

MIME等のプロトコルでも使用されます。

しかし、あくまでもエンコード方式です。

#base64でエンコードした文字列
Y29ib2wgaXMgZm9zc2lsCg==

人には読めませんが、方式さえ知っていれば(みんな知っている)簡単にデコード可能なので、セキュアに保ちたいならさらにハッシュをかけるなどの対策が必要です。

最もシンプルなbasic認証は、ユーザー名とパスワードをbase64エンコードしていますが、セキュリティを担保しているとは口が避けても言えなさそうです。

ほとんどのブラウザが対応しているため頻繁に使用されていますが。

#ちなみにさっきの文字列をデコードしたら...
cobol is fossil

(ただのエンコード方式なので、デコードできるのは当たり前ですが...)



本来のbase64の目的は、どんな形式のデータでもbase64に変換して送ることができるという部分。(おそらく)

画像でも動画でも。

base64に変換してみる

base64エンコード手順です。(wikiからの引用)

1. 元データ
文字列: "ABCDEFG"
16進表現: 41, 42, 43, 44, 45, 46, 47
2進表現: 0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 0111

2. 6ビットずつに分割
010000 010100 001001 000011 010001 000100 010101 000110 010001 11

3. 2ビット余るので、4ビット分0を追加して6ビットにする
010000 010100 001001 000011 010001 000100 010101 000110 010001 110000

4. 変換表により、4文字ずつ変換
"QUJD", "REVG", "Rw"

5. 2文字余るので、2文字分 = 記号を追加して4文字にする
"QUJD", "REVG", "Rw=="

6. Base64文字列
"QUJDREVGRw=="

Base64 - Wikipedia



base64エンコードするとき
base64 エンコードファイル

base64 encode_file


base64にデコードするとき
base64 -d デコードファイル

base64 -d decode_file

標準入力からbase64エンコード

echo "cobol is fossil" | base64

#出力結果
Y29ib2wgaXMgZm9zc2lsCg==


標準入力からbase64でデコード

echo "Y29ib2wgaXMgZm9zc2lsCg==" | base64 -d

#出力結果
cobol is fossil

以上、終わり

ROT13をPythonで実装してみる

ROT13って何?

ROT13 または ROT-13、rot13 は単換字式暗号(シーザー暗号)の一つである。アルファベットを一文字毎に13文字後のアルファベットに置き換える。Aは Nに、 B は O に置き換えられ、以下同様である。英語の "Rotate by 13 places" の略。ネットワーク上のやりとり(電子掲示板、ネットニューズ、フォーラム等)で冗談の落ち、パズルの解法、ネタばれ情報、不快表現等を隠すのに用いられるアルゴリズムである。実際には暗号というほどのものではないが、ちょっと見に読んでしまうという事態は避けられる。雑誌などでクイズの正解を上下逆さまに印刷するが、それと似たようなものである。

ROT13 - Wikipedia

実装手順

この文字はROT13で暗号化された文字です。

pboby vf sbffvy.

文字にそのまま13は足せないので、一度この文字列をASCIIの数値に変換します。

以下、ASCIIコードの数値と文字の対応表のURL。

文字と数値 | サルにも分かるRSA暗号

112 98 111 98 121 32 118 102 32 115 98 102 102 118 121 46

ASCIIの数値に変換するとこうなります。


文字コードに変換してから、13を足すか引くかの条件を分岐するので、ASCIIの文字コードに変換した時

  • 65〜77であれば、プラス13
  • 78〜90であれば、マイナス13
  • 97〜109であれば、プラス13
  • 110〜123であれば、マイナス13

これで、A〜Z、a〜zの対応付けすることができます。


以下、簡単な対応表です。

A - M 65 - 77
N - Z 78 - 90
a - m 97 - 109
n - z 110 - 123

実装してみる

contents = "pboby vf sbffvy."
process = ""
for script in contents:
	num = ord(script)

	#space or period
	if num == 32 or num == 46:
		ascii_script = chr(num)

	#A - M
	elif num >= 65 and num <= 77:
		ascii_script = chr(num + 13)

	#N - Z
	elif num >= 78 and num <= 90:
		ascii_script = chr(num - 13)

	#a - m
	elif num >= 97 and num <= 109:
		ascii_script = chr(num + 13)

	#n - z
	elif num >= 110 and num <= 123:
		ascii_script = chr(num - 13)

	process += ascii_script

print(process)

このプログラムをじっこうした結果

cobol is fossil.

こうなります。

まとめ

最近は新人研修に勤しむ毎日です。

しかも、なななんとcobolの研修なので楽しくて楽しくてたまりません汗

以上終わり。

seleniumで自動売買 〜SBI証券から自動で株を買ってみる〜

自動売買ってどうやってやるの?

アルゴリズムトレードが昨今流行りではありますが。

残念ながら日本の証券会社は一般向けに株式売買のAPIは公開されていません。

そのため、APIを通してのアルゴリズムによる株の自動売買は現状できません。

FXやビットコインAPIが公開されているので、アルゴリズムで自動売買を行っている人が多いようですが、株式で自動売買をやっている人があまりいないのはここらへんの理由かと思います。

(高頻度取引は東京証券取引所に登録すれば可能なようですが、調べてもあまり情報がでてきません、個人では行えず法人のみっぽいです)

最近、銀行の取引をAPI化して業務提携をする動きが盛んになってきていますが、証券会社が売買等のシステムをAPI化する話はあまり聞きません。

こういった話は国主導で進めるので、明日急にAPI公開なんてことにはならないので、株式売買のAPI公開はいったん諦めましょう。


では、どうやるか。

どうやらseleniumというウェブのUI自動テストツールが使えそうです。

seleniumはクリックや文字入力をプログラムを通して、自動で行えることができるライブラリです。

もともとはシステムのテストを自動化する目的で発展してきたようですが、これを使ってウェブを操作することもできます。

つまり、SBI証券にログインして、株を売買する動きもseleniumで再現できるということです。

seleniumの簡単な使い方の記事

前にyoutubeで「yui」と検索するコードをseleniumで書きました。

doz13189.hatenablog.com

これをちょっと変えるだけで、SBI証券にログインして株を売買するってのはできそうです。

SBI証券にログインして株を買ってみる

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


class PythonOrgSearch(unittest.TestCase):


	def setUp(self):
		
		self.driver = webdriver.Chrome("/home/ubuntu/robo/chromedriver")


	def test_serch_in_python_org(self, signal=1):
		driver = self.driver

		#SBI証券のHP
		driver.get("https://www.sbisec.co.jp/ETGate")

		#SBI証券のログインID
		driver.find_element_by_name("user_id").send_keys("login_id")

		#SBI証券のログインパスワード
		driver.find_element_by_name("user_password").send_keys("login_password")
		driver.find_element_by_name("ACT_login").click()

		driver.find_element_by_xpath('//div[@id="link02M"]/ul/li[2]').click()

		if signal == 1:
			PythonOrgSearch.buy(self)

		elif signal == 0:
			PythonOrgSearch.sell(self)


	def tearDown(self):
		self.driver.close()


	def buy(self):
		print("buy")

		driver = self.driver

		#現物買にチェック
		driver.find_element_by_name("trade_kbn").click()
		
		#銘柄コードを入力
		driver.find_element_by_name("stock_sec_code").send_keys(1305)
		
		#売買株数を入力
		driver.find_element_by_name("input_quantity").send_keys(100)
		
		#価格指定
		driver.find_element_by_xpath('//td[@id="gsn1"]/input').click()

		#預かり区分を指定
		driver.find_element_by_name("hitokutei_trade_kbn").click()
		
		#取引パスワードを入力
		driver.find_element_by_name("trade_pwd").send_keys("trade_password")

		#注文確認画面をクリック
		driver.find_element_by_name("ACT_estimate").click()

		#注文発注
		driver.find_element_by_name("ACT_place").click()


	def sell(self):
		print("sell")

if __name__ == "__main__":
    unittest.main()

HTMLの構造上、find_element_by_nameで要素を取得できない部分はxpathを使いました。

成行か指値か、を選択するところがまさにそれで、仕方がなくxpathを使っています。

SBI証券はHPにJaveScriptを使用していないので、selenium単体で全ての操作を完結させることができました。

selenium自体の使い方はシンプルなので、コードを書くと言ってもHTMLの構造を読むのがメインでした。

このコードを実行すると...

銘柄コード1305の株を100株、成行で買います。

東京証券取引所が開いている時間に実行すると、本当に約定してしまうので夜に実行しましたが、しっかりと注文できました。

seleniumゆえの欠点

上記のコードは単体テストのライブラリをインポートして、全ての操作の開始から終了までの時間を計測しています。

結果的に全ての操作を終えるのに、22秒程度かかります。

インターネットの接続状況によってはもう少しかかる場合もあります。

つまり、注文に時間がかかりすぎです。

1日1回や2回程度ならこの程度のスピードで十分ですが、頻度を上げるには少し実行速度が遅いように思います。

そのため、売買まで20〜30秒程度なら許容できるアルゴリズム取引戦略が必要になります。

デイトレをするには心もとないので、やはりスイングトレードかなぁなんて思っています。


以上終わり。

環境変数パス(PATH)がよくわからいのでunset $PATHしてみた

Linuxを使用している人なら、いや、WindowsでもOS Xでも、環境変数が何たるかをわかっている人なら、このタイトルのヤバさはわかるはずです。

普通に考えたら、絶対にやってはいけないコマンドをうってみました。

そもそもPATHを通すってなんだ?

pythonをインストールしても、pipをインストールしても、PATHを通す作業って必ず、必要です。

しかし、私はめんどくさがりなのでパスを通す必要がある場合は、いつも記事内に貼ってあるPATHをコピペで済ましていました。

export PATH=$PATH:/var/www/html

このコードさえあれば、理解していないくてもとりあえず動くようになるからそれでいいや、と済ましていました。


と、言ってもPATHを通すってことの意味が全くわからないわけではありませんでした。

なんとなく、「PATHを通すこと、どのディレクトリにいても指定のコマンドが実行できるようになる」ぐらいのことは頭でわかっていました。

頭でわかっていても、実際に自分でファイルを作って実行するコードを書いて、環境変数PATHを通すということはやったことなかったので、曖昧な理解にとどまっていました。


わかっていると思っていても、詳細を詰められると実はわかっていないことってたくさんあります。

私にとってPATHを通すは、まさに詳細を詰められると実はわかっていない領域でした。

厳しい環境にあえて身を置く

ということで、まずPATHが通っているということがどれだけありがたいことかを理解するためにPATHを消してみました。

PATHがない世界に身を置くことで、PATHの本質を理解しようとそういう魂胆です。

※もし、Linux初心者の方であれば、絶対に真似しないでください

※私はVPSでこれを実行しています。
※最悪、Linuxが壊れたらインストールし直せばいいか、くらいの軽い気持ちなのでこのコマンドをうてるだけです。
VPSって実験するには本当にいい場所です。

unset $PATH

このコマンドを入力してlsコマンドを入力すると...

#ls

Command 'ls' is available in '/bin/ls'
The command could not be located because '/bin' is not included in the PATH environment variable.
ls: command not found

ウソやろ、ls使えへんやん。

他にもcd、vi、find、cat全部使えへん。

エラーをよく見ると、/bin/lsのディレクトリに行けばlsが実行できると書いてあります。

ということは/bin/lsと打てば、lsコマンドが実行できるはず。

/bin/ls

無事にlsでき、何を打ってもcommand not foundしか返ってきないし、PATHが通っていない世界の厳しさも理解できました。


パス(PATH)の確認と設定方法は? - Pocketstudio.jp Linux Wiki

この後上のURLを見ながら、ちょくちょくlsに環境変数PATHを通したりしていました。

さて元に戻すにはどうしようか

あいにく$PATHのコピーはとっていなかったので、困ったものです。

全てのPATHを自分で通し直すにも、もともと設定してあったPATHもわかりません。


LinuxではPATHはユーザーごとに管理しています。

su user_name

でユーザーを変更すると、環境変数はもっていけません。

逆に環境変数を持って行きたいときは。

su -

と、ハイフンをつけると持っていけます。

なので、rootに切り替えてrootの環境変数をコピーしてしまえばいいか、という結論に至りました。

環境変数を無事元に戻したあたりで...

そもそもlsのソースコードはどんなん?

環境変数を通していて、そもそもlsのソースコードが気になりました。

/bin/lsをcatしても、文字化けして見れなかったで、ググるとこんな記事が。

techblog.yahoo.co.jp

yahoo!japanでは、新人にlsのソースコードを読ませるそう。

コードも短く、ぴったりだそうだ。

4月から新入社員の私は、同い年で同じことをしているのかと思うと、よし自分も読んでみようという気持ちになり、ソースコードを眺めて、そっと画面を閉じた。

また、今度にしよう、思ったより大変そうだ。

そろそろLinuxを使い始めてから、1年ほど経つのですが、私はLinuxの1%も理解していないようです。

今までpythonのプログラムを書くためだけのOSだったので、さしてLinux側をさわることもありませんでした。

しかし、サーバーを立てる等のことをしていると、自然とLinux側の知識も必要となり、今必死に勉強しています。


触り始めるとこれまた面白いもので、時間がどんどん吸い込まれていきます。

こうやって私のゴールデンウィークLinuxいじりに吸い込まれていくことでしょう。

以上、終わり。