かなで技術日誌

プログラミングやエンジニアリング周りについて

主なアウトプットはScrapboxObsidianにまとめてます。

9月進捗

  • 仕事

慣れてきたかと思ったけど辛みが増してきました。
アーキテクチャが全然分からず、バグでハマることが多くなって期日に遅れてしまった。
自分のスキル不足は否定出来ないし、もうちょっとC#もプライベートで使わないといけないかなと思ったりはするけど(でもC#やるならGoかScala勉強するでしょ)、タスクの割り振りや管理ってPMのスコープだし、それで進捗を詰められるのはどうなのかとも思ったり。
休日もストレスで常時腹痛が。
あとExcelとWordはもう使いたくないです。

  • PyConJP2018

行ってきました。
webアプリケーションの技術とかDjango REST APIのページネーションのBest Practiceとかかなり勉強になりました。
一人だったので一日目のパーティは行けなかったのですが、来年は誰かと行けるようになりたいなと・・・
またGoの話題を聞くことが多く、勢いをかなり感じました。
GoはFizzBuzzぐらいですが、どこかで本腰入れて勉強したいと思います。

  • プログラミング

vue.jsをちょっと使ってみました。
簡単に書けて、vuesaxというUIフレームワーク(?)も良さげ。
時間があればNuxt.jsも触りたいけどなかなか・・・

あと今後の独学の進め方を考えるようになり、
・Pull Requestをする
個人開発でもPull Request→Mergeをするようにして、あたかもチーム開発をしているかのようにした方がいいのではと思ったり。
業務はSVNなのでGitの経験値を積むとい意味でもいいかもしれない。
・プロジェクト管理ツールを使う
ExcelWBSとかまあweb系の企業ではしないので、自分で開発するのにも導入しました。
Trelloですが今の所いい感じです。
・個人サービスをデプロイする。
転職するためのポートフォリオとして。
あと普通にDjangoAPIの勉強になるのでいい感じです。

8月

かなり放置してしまった

  • 仕事

某R社の子会社に転職し、SESとしてSIerでお仕事しています。
一ヶ月ほど入ってみて思うこととして、
ほとんどのドキュメントがexcel
新卒の子のスキルがあれ(前にいたスクールにいた人の方が、体感倍近くスキル高そう)
仕様が辛い(特にDBに至っては正規化という概念が存在しない)
(直属の)上司がその時の気分により対応が変わるため面倒

そうは言っても、今はどこも転職できる気もしないため、何かしらの成果を目に見える形にしないといけないなと・・・

  • プログラミング

querysetやrestframeworkあたりをやった。
android studioを入れてKotlinでちょっと遊んだ。
今作っているアプリのクライアント側を何で書くか考えて、AngularJSならちょっと書けるけど、わざわざtsのAngularあるのにjsは。。。となり、学習コストが低め(らしい)のVue.jsにしようと思った。
そろそろプログラミング始めて一年経ちそうなのに、何もサービスデプロイしていないのはヤバいので、今月のうちに簡単なものでも作る。

  • その他

働く細胞とISLAND追いついた。
ISLANDは名前だけ知ってたけど、会社は知らなかったので調べるとグリザイアと同じFrontwingだった。でも全年齢対象なのね。
凛音かわいいよ凛音。
働く細胞癌細胞の回がとても良かった。

7月上期

だいぶ放置してしまった

 

ニート期間の話

数学

 これをやってたけど、他に色々やっていて最小二乗法までしかできなかった

これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

 

 

ニュートン法は分かったけど共役勾配法がいまいち分からない

ラグランジュ未定乗数法はミクロ経済学で使ったので大丈夫

線形計画法は勉強したことがあるから、あとは動的計画法

 

 

C#

EntityFrameworkCoreを使ってみた

スキャフォールディングもあるし.NET Frameworkは使いやすい

ただfor macだとwindowsと仕様がちょっと違ってめんどくさいので、VMwindows環境作ってそこで開発するのがいい気がする(気がするだけ)

 

Angular

チュートリアルを最低限やったけど分かるような分からないような~

今後あまりフロントは触らない(システム開発なので)のでそこそこでやる

 

 

Django

なんか作ろうとしては途中で投げ出してしまうのが多いので、需要とかデプロイ後とか考えず作ろうと思いました

作ったら徐々にrest frameworkとかAngularとか使ってよりモダンにしていく

 

 

転職

SESで中小SIerにいます

営業にはweb開発って言ったはずなのに、勝手にここに入れ込まれてしまいお気持ちになっている

入ってきて一週間は経つんですが、未だに一行もコードを書いておらず、ひたすら設計書を書いていて、エンジニアとはなんなのかと思うなど

本当にプログラミングはただの一作業でしかなく、仕様通りに書けばいいという感じです

新卒の子もあまり楽しくなさそう(むしろ毎日辛そう)で、これでプログラミングを楽しくやる方が難しいなと

そもそもあまり家でプログラミングをやらず、やってる勉強は基本情報ぐらいらしいのでtwitterのプログラミングオタクの異常性を再確認することとなった

 

自分は自分で、慣れない設計はまだいいのですが、面談の時には言われていなかったVBの部分を担当することになりました

初見だけど設計書見ながらなんとか理解出来ている

数ヶ月とかならまだいいけど、これが半年とか担当するとなるとなぁと。。。

 

あとこれは個人の感想ですが、CとかJavaから入るとSIerとか古い体質の企業に引き摺られやすくなる気がするので、そういう企業に行きたくないならさっさとRubyPythonやるのがいいのかなと

個人的にも、出来ればVBには触れたくないし、履歴書にも書きたくないし、金輪際SIerには入りたくない

 

あとアイカツはいいぞ

血小板かわいい(はたらく細胞

6月の進捗

6月ブログサボりすぎでは・・・


6月を持って現職を退職しました。
辞めると息巻いていた癖に、いざ辞めるとなると自分の選択は果たして正しかったのか不安になるもので、最後も少し名残惜しくなってしまいました。
7月の中旬から次の社に勤務します。
いきたい所に悉く落ちて、そんなに志望度は高くなかったのですが、今の自分ではこんなものだろうなと謙虚に受け止めて、取り込める技術は取り込んでさっさともっといい環境に移りたいです。

と言うことで2週間ぐらい時間があるので、「これなら分かる最適化数学」をやります。

これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

前提知識として線形代数微積分の基礎的な知識があれば、後は必要に応じてサクッと調べれば進められそうな感じがします。
それなりに知っているものもあるので(ラグランジュ未定乗数法、最小二乗法など)本当に全く分からないのは動的計画法です。
二週間あれば終わるはずなので、他にもAngularやC#を細々とやろうと思います。



あと転職活動での話
品川にある機械学習ベンチャー(?)に行き面接を受けたのですが、予想通り難しいと言われました。
paizaで必須要件を全く満たしていないにも関わらずプラチナスカウトが来て、とりあえず受けてみるかという軽い感じでした。
CEOのおばさん(失礼)が自分の勉強に対する姿勢や意欲は評価してくれて、まだ経験が浅いので、もう少し落ち着いた環境にいればかなり成長できると言ってくれました。(ありがとうございます。)
面接のほとんどは自分のキャリアについてのお話になった。

機械学習もどんどん自動化されていくので、まずはサーバーサイドやインフラ、アーキテクチャーについてしっかりと勉強した上で機械学習をやっていく方がいい。
・自分がどういうキャリア像を歩みたいかを、まだ分からないかもしれないけど、明確になると相手にも伝わりやすくなる。
・自分が立つべき場所を考える。(例えばアルゴリズムは人によって得意/不得意がある)
・英語は大切。
・Courseraをやるべし。
・目の前のことをちゃんとやっていけば、気づいていたら年数以上に成長する。

ちょっと漏れがあるかもしれないけど、こんなところを話した。

落ちましたが、色々自分の迷っていたこともスッキリして良かったです。



データベース

5章まで読んで正規化について勉強しました。
業務でDB設計はやっていなかったので(個人レベルでのアプリならある)あまり意識することは無かったですが、設計に携わっていない段階でも知識として持っているのは十分有用だなと思います。
このほんとは直接関係ないですが、真偽値的な使い方でvarcharの'1'や'0'を使うのがかなり違和感があるのですがどうなんでしょうか。
そもそも整数値ではなく文字列である意味も謎ですが。



アイカツ2nd見終わりました。
前に1期見たときは、いちごちゃんがアメリカに行ってしまったことにどう向き合えばよかったのか分かりませんでした(大袈裟)ですが、割とすぐに戻ってきたため若干拍子抜けしましたが、そんなことがどうでもいい程度に最高でした。
個人的には、いちごちゃんの渡米を見送ったのはいいが、時間が経つにつれていちごロスに耐えられなくなるあおいちゃんとそれに嫉妬してあおいちゃんを攻める蘭ちゃんが見たいのですがどこかにSSとかで無いかな
大空あかりちゃんの成長と努力にただただ涙しか無く、3rdも見ています。



ハースストーン
再開しました。
奇数パラディンは強い
気づいたら契約とか従者がエラッタかけられてウォーロックが減った感じがするのでありがたいです。
あんまり出来る時間がないのと家のwifiポンコツな為回線切れの恐怖と戦いながらですが
これはパラディンに限らないですが、盤面とるかフェイスに向かうかの判断が難しい
パラディンは戦闘でしか盤面に干渉出来ないので、基本は盤面とるのを優先かなと言う感じがある、分からんけど

5月第4週,6月第1週

進捗が(ry

内定をゲットし、次の社が決まりました。
今の社には今週退職することを話す予定です。
別にブラックという訳でもないですが、全体として技術レベルが低そうで仕事が回ってなくて、若い人もいないのであんまり居心地がよくなかったです。
ただ自分でHDMI買って外部ディスプレイ+ノートで開発してたのに、急に新しい人のディスプレイということで取り上げられてしまい(ディスプレイ自体は他にも余りがある)、残っているディスプレイがD-SUBとかのHDMIではないケーブルしか対応しておらず、ノートもそれには対応してないのでこれは駄目だと。。。
あと給料が100万上がります。もうこれだけで十分な転職理由では?

あとはほぼなんでもやらされる(もとい放り投げられる)ので、何かを集中的にやりたいとかだとちょっと微妙。
webのフルスタックなエンジニアになりたいという訳ではないので、そういう意味でも違うかなと思う。
まあそういうフルスタックでやりたい人はスタートアップやベンチャーに入る訳で、誰が好き好んでおっさんしかいないイケてない会社に行きたがるのか。


ということで、これを機に一人暮らしをしようと考えていますが、自動車免許持っていない(取るつもりもない)のとお金が大丈夫かというのが・・・



進捗
これをよく読んでいます。

あとこれも読まないといけないんだけど後回しになってしまっている。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版


退職してから仕事までは統計をやりたいですね。

twitterのアイコンをリプライで変更→Herokuにデプロイ

github.com

OS:Mac OS
Python3.6.5

参考
pythonのコードは
kivantium.hateblo.jp

Herokuへのデプロイは
hwhw.hatenablog.com
Railsだけど、デプロイの説明だけならこちらの方がより丁寧ではある。アプリ作成時に名前を指定しないと勝手によく分からない名前をつけられるので
HerokuにRailsアプリをデプロイする手順

Herokuのコマンドもよく知らなかったので調べました
vdeep.net
ただアプリの削除が上のurlに載っているコマンドだとどうしても出来なくて
simpledancer.hatenablog.com
こっちだと削除出来た


コードに関しては既にほぼ完成されていたので、あとはデプロイと、デプロイするためにちょこちょこコードを修正したぐらいです。

まず
Twitter Application Management
でconsumer keyとconsumer secretを取得します。
Name, Description, Websiteを入力します。
この時Websiteはlocalhostだと取得出来ず、実際にあるurlを入力しないといけないようです。
今回はとりあえずこのブログのurlを入力しました。


次は取得したconsumer keyとconsumer secretを使ってaccess tokenとaccess token secretを以下のコードで取得します。

import tweepy

consumer_key = "CONSUMER_KEY"
consumer_secret = "CONSUMER_SECRET"
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
print("Access:", auth.get_authorization_url())
verifier = input('Verifier:')
auth.get_access_token(verifier)
print("Access Token:", auth.access_token)
print("Access Token Secret:", auth.access_token_secret)

途中で表示されるurlに飛んでPINが表示されるので、それをinputで入力することでaccess tokenとaccess token secretが取得出来ます。

取得したところでリプライから画像を保存するコード

import os
import tweepy
import urllib.request
import datetime


def get_oauth():
    consumer_key = os.environ["CONSUMER_KEY"]
    consumer_secret = os.environ["CONSUMER_SECRET"]
    access_key = os.environ["ACCESS_TOKEN_KEY"]
    access_secret = os.environ["ACCESS_TOKEN_SECRET"]
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    return auth


class StreamListener(tweepy.StreamListener):
    def on_status(self, status):
        if status.in_reply_to_screen_name == 'py_kanade':
            print(status.author.screen_name)
            if 'media' in status.entities:
                medias = status.entities['media']
                m = medias[0]
                media_url = m['media_url']
                try:
                    urllib.request.urlretrieve(media_url, 'icon.jpg')
                except IOError:
                    print("保存に失敗しました")
                now = datetime.datetime.now()
                time = now.strftime("%H:%M:%S")
                message = '@' + status.author.screen_name + ' アイコンを変更しました(' + time + ')'
                try:
                    api.update_profile_image('icon.jpg')
                    api.update_status(status=message, in_reply_to_status_id=status.id)
                except tweepy.error.TweepError as e:
                    print("error response code: " + str(e.response.status))
                    print("error message: " + str(e.response.reason))


auth = get_oauth()
api = tweepy.API(auth)
stream = tweepy.Stream(auth, StreamListener(), secure=True)
stream.userstream()

コードはデプロイ前提になっていますが、普通にローカルで試しに動かすぐらいなら、os.environ["KEY"]のところにAPI keyを書いてもおkです。


ではHerokuにデプロイします。

必要なものは上のpythonファイルの他に
index.py
Procfile
requirements.txt
runtime.txt

が必要になります。

index.pyは、どうもこれが無いといけないぽい。
botをデプロイしている人もこんな感じのダミープログラムを入れているので、今はそういうものだと思っている。

import os
from bottle import route, run

@route("/")
def hello_world():
        return "hello world"

run(host="0.0.0.0", port=int(os.environ.get("PORT",5000)))

Procfileは実際に動かすファイルを指定する

web: python edit_icon.py

vimで作りましょう。

requirements.txtは必要なライブラリをまとめて記述したもの
ターミナルで

pip freeze > requirement.txt

で作成可能

bottle==0.12.13
certifi==2018.4.16
chardet==3.0.4
idna==2.6
oauthlib==2.1.0
PySocks==1.6.8
requests==2.18.4
requests-oauthlib==0.8.0
six==1.11.0
tweepy==3.6.0
urllib3==1.22

runtime.txtはpythonのバージョンを記述します。

python-3.6.5

Herokuは3.6.5に対応してないというのを(5月初めぐらいの書き込み)を見ましたが、とりあえず動いてはいます。

これらを準備して、デプロイに取り掛かります。

ここで、もしGitHubにpushするのであれば、GitHubに上げてからの方が楽でした。
HerokuはGitHubリポジトリに接続してAutomatic deployができるのですが、今回は知らなかったためHerokuにデプロイして→GitHubにpush→Herokuに接続というめんどくさいことをしました。


なおHerokuへデプロイするために、twitterAPIキーをプログラムに直接書くのはセキュリティの観点から望ましくないので、Herokuで環境変数に設定する必要があります。

heroku config:set CONSUMER_KEY=XXX CONSUMER_SECRET=XXX ACCESS_TOKEN_KEY=XXX ACCESS_TOKEN_SECRET=XXX

XXXのところに取得したkeyを入力してください。クォーテーションは不要です。
後から環境変数を確認できるコマンドもあるけど忘れた。。。

試しにローカルで動かしてみます

heroku run python edit_icon.py




こんな感じで無事アイコンが変更されました。
やっぱり兼元灯里ちゃんは可愛いです。(知らない人は「のーぶるわーくす」で検索)

ただ、ここで一つ問題としてHerokuは10分ごとにしか起動しないようで、そうなるとこれをデプロイした意味とは・・・
もっと短い時間感覚でデプロイするにはどうしたらいいんでしょうか。。。
AWSとかでできるのか分からないですが、真に自動化出来ている訳では無いので、引き続き調べてみたいと思います。

5月第3週

特に進捗が無いまま終わってしまう。。。


仕事
相変わらずフロントエンドおよびJavaScriptが多いがあまり楽しいかというと。。。
今までdellのデスクトップを使っていたのだけど、急に「こっちの方が良いから使って」と言われ、msiのノートパソコンに変更になった。
OSは(何故か)変わらずwindows7でいつ発売されたものか調べたら8年ぐらい前だった・・・
それもそのはず、電源を入れて、Visual Studioを起動して作業ができるようになるまで10分かかった。
ノートだけで開発は流石にという感じで、デスクトップで使っていた外部モニターを使おうと思ったら会社にHDMIケーブルが無かったため自分で賈うことに()

業務もただ仕事を放り投げられているような感じで、体系的に勉強できていなくて付け焼き刃感が否めない。
Angularも使ってはいるけど、本当に使っているだけという状態。

上司はOJTと言っているけど、ただ仕事を投げているのをtrainingとは言わないからな???

転職の機運が高まってきた


環境構築
macbook proを購入したので、こっちでの環境構築が多かったです。
あとは普段使いのキーボードを購入

前の2000円しないlogicoolと比べて圧倒的に良い(logicoolをディスっている訳では無い)
ただ、今commandとoptionを入れ替えて
left command => left option
left option => left command
right option => right command
に変更しているんですが、それ以外のショートカットは元のcommandキー(現在optionキーになっているはず)になっており、なんか気持ち悪い。
一応そう言うものだと思って今どうにかやっているが、これはなんなのだろうか。

Homebrewをinstallしpythonpostgresqlをinstallしていました。
あとpostgresqlはpg commanderを使っています。
herokuのデータベースにも接続できるのがいいんだとか。(pgadminはどうなんだろう)


勉強
Djangoを再開しました。
github.com

今のところうまく一覧表示されていないので、後で直さなきゃ。。。
とはいえ4時間ぐらいでコピペとはいえここまで作り込めるのは流石です。
SQL一行も書かないのもすごい。
twitter認証とかマイページ機能、ふぁぼ的な機能があるといいなと思います。
なので勉強したAngularも使って行けるといいな。

ちょうどタイムリーにDjango Congress JPで認証処理についてやっていたみたいで、見ましたがあんまりよく分かっていない・・・
nwpct1.hatenablog.com


これとは関係ないけど、ブロックチェーンを勉強したらもっと面白いものが作れるような気はする。


progateでHTML&CSSとSass、途中になっていたSQLをやりました。
CSSを使っていいのは小学生までだよね〜」と言われそうなのでやってみましたが、CSSよりも使いやすかったです。
業務ではCSSなのですが、かなりダラダラと長くなってしまってあまりよろしく無い。(そもそも誰も弊社誰もSass使ってない疑惑がありますが。。。)
正直CSSとか使わないでさっさとSassから入った方がいいと思う。
やっぱり変数とか関数は大切なんですよ。

paizaでやっとBランクになりました。
Aランクまで行けばかなり良さげな企業が並ぶのですが、Bランクでもpaizaでの転職なら及第点と言ったところだと思います。
新しい言語に触れてみたい(候補:C++, Go, Rust, Kotlin)という思いはありますが、まずはPythonC#JavaScriptを上達させることが先かなぁ。
JavcaScriptはできればあまり使いたく無いのでTypeScriptも勉強する必要があるのですが・・・

後これすごい