読者です 読者をやめる 読者になる 読者になる

へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

gitのコミットメッセージを、コミットするときに考えるのがつらいので、そもそも作業前にメッセージを考えて作ることにした話

Git

ぼくのかんがえ

  • ( ^o^) 良いコミットメッセージ書くぞ
  • ( ˘⊖˘) 。o(まてよ、そもそもどうしてファイルを編集したあとにコミットメッセージを考えないといけないんだ?)
  • |documentation| ┗(☋` )┓三
  • ( ◠‿◠ )☛ そこに気付いたか…… 貴様には実装してもらおう
  • ▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂ うわああああああああ

作業のワークフローはこんな感じ

f:id:haruharu1:20161117010952p:plain

べんりかもしれない

やったこと

Gitのhooksをつかったりしてみた

ソース

github.com

インストール方法

makeでインストールできるはず
デフォルトは/usr/local/binに入るようになってるので、気に入らない人はMakefile見てかえてください

おまけ

テスト書いてないのでバグがあったらごめんなさい。PR待ってます

チケットみたいな感じで作れるので嬉しいのと、自分が何やってるか明確にできるので嬉しい
ゴミコミットみたいなのが減ってるので、個人的につくってよかったかなと思っている

持論

  • 作業がかなり明確で短い場合は、最後にコミットメッセージを考える方が楽(自分の頭の中で「どういう作業してどうなったか」を絶えず考えておけるので)
  • 試行錯誤系のものについては、作業はあくまでも指針だから明確に決まっているわけではない。なので「とりあえずコレやる」だけ書いて、書いたものと若干違う作業が出たらコミットメッセージを変えてコミットすれば、コミットごとにタスクがしっかり分解されて、コミットメッセージもあんまり考えなくてよくなる。試行錯誤の様子がコミットメッセージに現れるが、それはそれでよいのではないか
  • 「コミットメッセージをあとで書く」ようにしていると、気が付かないうちに別の作業もしてしまい、あとでいろいろ混ざったコミットになるが、これの場合最初に「コレをやる」と決めてるので、あんまり混ざらない

GenymotionからVagrantに接続する

Vagrant Genymotion Android adb

VagrantにGenymotionから接続したかったので探した
qiita.com
okamuuu.hatenablog.com

そもそもadbのことを全然知らないので、adbについてググる
f:id:haruharu1:20161031122900p:plain
adbとはAndroid Debug Bridgeと呼ばれるやつで、AndroidとホストOSを接続していろんなことやってくれるツールのことだったらしい。
知らなかった。

コマンドの例として、
adb pullっていうのは、Android側からホストOSにファイルを持ってくる
adb pushはその逆
adb shellはAndroidにログインする

すごい便利なツールだ……

リファレンス

www.droidviews.com

解決

$ adb pull /system/etc/hosts
4 KB/s (25 bytes in 0.005s)
$ ls hosts
hosts
$ cat hosts
127.0.0.1                   localhost
$ vim hosts

f:id:haruharu1:20161031122315p:plain
ここのアドレスはぼくの環境がこれなだけなので、このアドレスでつながらないのは知らん。

push。なんとなく予想してたけど案の定Read-onlyになってるのでWriteもできるようになんとかする

$ adb push hosts /system/etc/hosts
failed to copy 'hosts' to '/system/etc/hosts': Read-only file system
14 KB/s (53 bytes in 0.003s)
$ adb shell
root@vbox86p:/ # mount -o remount,rw /system
root@vbox86p:/ # exit
$ adb push hosts /system/etc/hosts
12 KB/s (53 bytes in 0.004s)

こんな感じで接続先のURLも変えてあげる
f:id:haruharu1:20161031122938p:plain

つながった(`・ω・´)!!!!

Djangoで"You can't specify target table 'core_user' for update in FROM clause"がでた

Django
>>> user_ids = User.objects.filter(username__contains='kuroneko').values_list('id', flat=True)
>>> users = User.objects.filter(id__in=user_ids)
>>> users.update(is_active=True)
...
...
...
  File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorvalue
  File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/MySQLdb/cursors.py", line 217, in execute
    res = self._query(query)
  File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/MySQLdb/cursors.py", line 378, in _query
    rowcount = self._do_query(q)
  File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/MySQLdb/cursors.py", line 341, in _do_query
    db.query(q)
  File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/MySQLdb/connections.py", line 280, in query
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1093, "You can't specify target table 'core_user' for update in FROM clause")

Solve

>>> user_ids = User.objects.filter(username__contains='kuroneko').values_list('id', flat=True)
>>> user_ids = list(user_ids)
>>> users = User.objects.filter(id__in=user_ids)
>>> users.update(is_active=True)

クエリがそんなに頭よくなかった感じ。

oh-my-zshでgit管理してるディレクトリに行くとlsとかcdするだけで異様に遅くなる問題

Mac OS X oh-my-zsh
function git_prompt_info() {
  echo "I'm a copy&paste programmer :) "
}

~/.zshrcに追記する

副作用

✔とか✗とかがでなくなる(ここのをやろうとして遅くなってるので)

追記

function git_prompt_info() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_CLEAN$ZSH_THEME_GIT_PROMPT_SUFFIX"
}


git_prompt_infoで返るやつが、git status的なやつ(くわしくはしらぬ)を呼ばなければいいので別になんでもいい

Windowsとか全然知らない初心者だけど、Bash on Windows入れて環境構築してみた

Windows Ubuntu

なぜWindows使うのか

Macが壊れる
→修理に出す(1週間)
→なおってない
→修理に出す←いまここ

そうだ! Windowsを使ってみよう!

bash.exeを実行するまで

なにはともあれここから。
Bash on Windowsな生活を送るためにはbash.exeを実行する必要がある。

とりあえずWindows Updateする。
Update後にアニバーサリーアップデートを入れる。このアップデートの中にbash.exeが入っている
How to get the Windows 10 Anniversary Update | Windows Experience Blog

アップデート後に、cmd.exeを立ち上げ、bashと打つと、bashがインストールされる(`・ω・´)
やったね!
Bash on Ubuntu on Windows - Installation Guide


おわり・・・ではなかった。
長く険しい戦いがいま、はじまる。

Ubuntuのレポジトリが古すぎるので新しくする

Bash on Windowsのレポジトリはtrusty(14.04)
現在の最新はyakkety(16.10)なのだが、ぼくはxenial(16.04)で入れた。ロングタームリリースだし・・・

f:id:haruharu1:20161017201302p:plain

この後、sudo apt-get update
upgradeは時間かかるのでぼくは下記のやつがぜんぶ終わってからやった

参考:
Configuration

日本語がひどいのをなんとかする

ターミナルエミュレータがcmd.exeだと、bashの中に入ったときに日本語が打てない → しんどい
別のターミナルエミュレータをインストールしてみることに

この記事を参考に
Bash on Windows + cmderでまともなターミナルを獲得する(tmuxに関する追記有り) - Qiita
cmder.exeとかいうのを入れてみよう!
と思ったのだが、vimで日本語がずれたので却下

msys2とかいうものが便利らしいということを知る。
でもそもそもmsys2とかMinGWとかCygwinとかminttyとかよくわからなかったので調べる
このへんとか見てみた
MSYS2で快適なターミナル生活 - Qiita

MinGWっていうのは、GNUのツールたちのことで、msys2はシェル
minttyはターミナルエミュレータで、Cygwinはターミナルエミュレータ+シェルみたいな感じだと理解した(違ったらおしえてください)

いい感じの記事を公開してくださっていたので、これのとおりにブリッジ的なソフトをインストールする
Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。

書いてあることをそのまままとめると

msys2側でfrontendディレクトリに行き、makeコマンドでビルド
bash.exeでbackendディレクトリに行き、makeコマンドでビルド

ビルドするために必要なmakeやg++は最初から入っていないのであらかじめ、
msys2では
pacman install make gcc
(うろおぼえ)

bash.exeでは
sudo apt-get install make g++
しておく

あとはショートカットを作って
C:\msys64\usr\bin\mintty.exe -t "Bash on Ubuntu on Windows" -e c:/msys64/dev/wslbridge/out/wslbridge.exe

みたいな感じにする。

c:/msys64/dev/下においてるけど、別にここでビルドしなくてもいい

こうすると、日本語が普通に使える。ありがとう!ありがとう!
f:id:haruharu1:20161017201504p:plain
f:id:haruharu1:20161017201550p:plain
f:id:haruharu1:20161017201629p:plain

vimクリップボードwindows側と共有できない問題をなんとかする

いろんな方法があるらしいのだが、Xmingをインストールすることで解決した
How to copy text from vim to system clipboard? · Issue #892 · Microsoft/BashOnWindows · GitHub

試してないけど、デフォルトのvimクリップボードフラグがオフになっているので
sudo apt-get install vim-gtkして、クリップボードおっけーのやつをつかった

ちゃんと、export DISPLAY=:0を.bashrcとかに書くことを忘れないこと(忘れた)

Vagrantインストールできない問題をなんとかする

結論からいうとVirtualBoxがインストールできないのでインストールできない。
VirtualBoxが、カーネルの深いところまで探っているらしく、それWindowsで再現できないYo!とのこと。
Can't find kernel headers for 3.4.0 · Issue #549 · Microsoft/BashOnWindows · GitHub


なのでwindowsvagrantBash on Windows上で使うことにした。
cbwinとかいう神ツールがあった。
GitHub - xilun/cbwin: Launch Windows programs from "Bash on Ubuntu on Windows" (WSL)

outbash.exeを実行すると、cmd.exe上でbashが立ち上がり、なんか内部でなんかのポートを使ってなんやかんやするとこができるらしい。
ディレクトリが/mnt/c以下で、wrun notepadとか打つと、Windowsアプリを立ち上げることができーる

outbash.exeってやったあと、OUTBASH_PORTとかいう環境変数ができているので、そのポート番号があれば、他のターミナルでも同じようにwrun notepadとかできて便利
くわしくはcbwinのドキュメント読んでください

f:id:haruharu1:20161017202548p:plain
f:id:haruharu1:20161017202641p:plain

毎回これ設定するのめんどくさいから、楽にしようと思ってcbwinのソースを見て、まぁとりあえずあとで考えることにした。

ついでにzshも入れてる

Ubuntuっぽい!!!

おわりに

ひとまずこれでまともに開発できるんじゃないかなと思っている
Windowsがんばるぞ!

追記

Ansibleでぶじ死亡した(´・ω・`)
Macがなおったので今はMacを使っている

Windows10でディスプレイを縦・横、自在に回転するショートカットキー

Windows

Ctrl + Alt + ↑ で通常のモニタ
Ctrl + Alt + ← で左に90度回転した状態
Ctrl + Alt + → で右に90度回転した状態
Ctrl + Alt + ↓ で反転

タッチして操作できるモニタだと何かと便利。

Macのトラックパッドより快適だ

http://answers.microsoft.com/en-us/windows/forum/windows_vista-desktop/change-screen-angle/13baa3e6-3bc8-47a6-afcc-9dc42ecc4191

人に教える用にJavaScriptでExcelもどきもどきを作った

JavaScript

概要

「for文とか配列とか、なんのために使うの?」っていう
プログラミング初心者の人に教える用に、行・列追加とSUM関数(2個だけで1回限り…)だけのExcelの最低限の機能を作ってみた。
実用性は皆無です。

実用性とかではなくて
『for文とかいろいろ学習させられて、CSSで色とかも変えれるけど、具体的にどうすればそれっぽいアプリが作れるようになるかが見えない』人に
『for文とか配列とかはこんな感じで使われるよ』とか『関数分けてつくってね』っていうのを知ってもらうためにつくったやつ

人に教える用なのでフレームワークやライブラリは使ってないです。

こんなかんじ

f:id:haruharu1:20160922113902p:plainf:id:haruharu1:20160922113906p:plainf:id:haruharu1:20160922113909p:plainf:id:haruharu1:20160922120049p:plain

ソースについて

github.com

excel.js

本体。200行ちょっと(なんか嫌な感じがするので、ところどころ最適化できると思う)
(個人的に設計ミスした感があってあんまり好きじゃない)

意味ごとに関数を分割するとあとで拡張や修正がしやすい
f:id:haruharu1:20160922120852p:plain
f:id:haruharu1:20160922121130p:plain
f:id:haruharu1:20160922121453p:plain
f:id:haruharu1:20160922123238p:plain

excel.html

デフォルトの値が書いてある。
初期値を変えられる。増やしたり減らす場合は、js側のbodyArraysも変更する。

excel.css

雑につくったCSS。まだ最適化できる。

バグとか仕様とかに関して

バグはたぶんいっぱいありますがクリティカルな場所は大丈夫なので放置の方向で。

「行挿入や行削除はないの?」「AVERAGE関数は?」「色つける機能はよ」
「シートは?」「保存できないの?」「インポートはどうするの?」
「コピペしたいんだけど」
とか言うのはやめてほしいです。