君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

module.exportsとは何か、どうもわからなかったので実験してみた〜Node.jsにて外部moduleをrequireする〜

いきさつ 今まで何も考えずに npm install して、 var module = require('module-name'); して使ってきたが、 Node.jsについて知らなさすぎて、 node_moduleディレクトリ配下に格納されているmoduleをみても、 ぜんぜん読めないことに気づいた。 exports.mod…

本番環境にテストデータを入れてしまったときは、deleteではなくtruncateでテーブルからレコードを一掃しよう〜deleteとtruncateの違い〜

いきさつ 社内で使用するシステムの開発が一旦落ち着いたので、 本番環境構築することになった。 といってもすでにテスト環境を構築しているので、 慣れたものである。 種々のインスタンスを立ち上げ、ansible用のユーザを作成し、 playbookの諸々の設定位置…

シェルで文字列を比較したときに、[: =: unary operator expected :というエラーがでる

いきさつ 空行を検出するスクリプトを書いていた 古池や 蛙飛び込む 水の音 をシェルに読み込ませ、空行があったときに 「空行があるよ」というスクリプトを書いた。 ※ 実際の処理を簡略化してます #!/bin/bash while read line do if [ $line = '' ]; then …

1つのファイルを複数のディレクトリにコピーしたい〜UNIXコマンド:xargsとcpについて〜

1つのファイルを複数のディレクトリにコピーしたい dir1, dir2, dir3にfileをコピーしてばらまきたい。 結論 echo dir1 dir2 dir3 | xargs -n 1 cp -v file 読み解いてみる xargs とは 標準出力をコマンドライン引数に変えるコマンド。 今回の例で言えば、e…

社長の家ですき焼きしたら、破壊神シヴァが現れた話。

いきさつ 今年の冬、linuxの資格であるLPICのレベル1を取得した。 資格のレベル自体は大したことないのだけれど、 社長「お祝い何がいい?報酬とは別に、どこかお店つれってったげる」 社長「みんなで高いお店行こー!」 私「それなら」 私「すき焼きやりま…

curlからフォームデータを贈りたい時のオプションについて

curlの使い所 スクリプトから直接URLを叩きたい時 パラメータを変えてたくさんのリクエストを贈りたい時 こんなときはcurlが便利。 フォームデータを投げたいときは-data, -dオプション curl --data form_name=form_value http://www.example.com/ POSTでフ…

盗み聞きしてみた(コンテナ上のnginxプロセスと、ホスト間の通信パケットをtcpdumpでキャプチャしてみた〜CoreOS toolboxを使ってみる〜)

パケットキャプチャとは サーバさんたちがどんなおはなしをしているのか、 ぬすみぎきすることだよ(白目) いきさつ ホスト間とコンテナ上のnginxがどういう通信をしているのか気になった。 普通のサーバへの通信と変わらないのかな。 こういうときは実験だ…

CoreOS toolboxに入れない〜Failed to allocate scope: Unit core-fedora-latest.scope already exists.〜

CoreOS toolbox使ってたらこんなエラーがでた CoreOSでtoolboxコンテナを使い、 Ctrl-wで無理やりコンテナを抜けた。 そしていつものようにtoolboxを起動したら、 $ /usr/bin/toolbox らこんなエラーがでた。 Failed to allocate scope: Unit core-fedora-la…

Dockerでたてたコンテナにtelnet-serverを入れて、telnetでコンテナ間通信ができるようにしてみた

いきさつ networkやセキュリティ、telnetデーモンを叩き起こすxintedの勉強がてらやってみた。 手順 0. 準備 0-1. telnet-server用のコンテナを走らせる $ docker pull centos:centos7 $ docker run --privileged -d --name centos_test centos:centos7 /sbi…

apt-get updateは何を行っているのか調べてみた〜パッケージインデックスファイルとは何か〜

結論 $ apt-get update は、パッケージリストの更新を行う。 具体的に言うと、 /etc/apt/sources.list にかかれているURLから、 パッケージインデックスファイルを引っ張ってきて、 $ cd /var/lib/apt/lists に格納している。 いきさつ 1. Dockerで構築したu…

間違えてリモートにpushしたcommitを元に戻す

Git

手順 1 $ git log して、取り消したいコミットのハッシュをコピー 2 $ git revert ハッシュ して、 コミットを取り消すコミットをする(ややこしい) 3 $ git push origin master remoteにpush まとめ 自分のブランチならいいけど、 他の人も使っているブ…

【ホワイトハッカー入門】サーバの開いているポートとサービスをnmapで特定する。ついでにOS情報も拾ってくる

ホワイトハッカーとは ハッキングの手法を熟知し、それを防御のために使ういいハッカー。 対義語はブラックハットハッカーとかクラッカーとか言われる。 ハッカーの攻撃手法 ハッカーの攻撃手法は、だいたい以下の用な手順になる。 偵察 スキャニング アクセ…

ハッキングがテーマのノベルゲーム「CyberRebeat」に触発されて、CTFの練習問題「Basic is secure?」を解くためにパケットキャプチャを使ってみた【CTF入門】

CyberRebeatとは ハッキングを題材したノベルゲーム。 CyberRebeat -The Fifth Domain of Warfare- 作中、とあるハッカーはこう言います。 "僕らにとって、世界は不安なほどに穴だらけだ"、と。 ボタン一つでネットに繋がっているOA機器が検索でき、 10ド…

Dockerで動かしているubuntuにて、apt-getが動かない

以下の手順でDockerでubuntuを動かした イメージ取得&コンテナ起動 $ docker pull ubuntu $ docker run -d -ti --name ubuntu ubuntu /bin/bash コンテナにはいる(bashプロセスの立ち上げ) docker exec -ti ubuntu /bin/bash apt-getが動かない。。。 $ a…

【メモ】linuxのアーキテクチャを確認する方法

linuxのアーキテクチャを確認する方法 dockerで走らせているubuntuのアーキテクチャがわかんなくなったので、 確認したい。 方法1:unameコマンド $ uname -m x86_64 方法2:環境変数で確認 $ getconf LONG_BIT 64 まとめ 64bitということがわかった。

DockerでMySQLコンテナを起動し、Sequel Proで接続してみる

MySQL、ちょっとだけ試したい時がある 「indexってどうやって貼るんだっけ?」 「外部キー制約ってどういうふうに効いてくるんだっけ?」 「ちょっとSQLの練習がしてみたいなぁ」 というとき、 DBとして残すほどではないけどMySQLを試したいな〜と思います。…

劇的ビフォ◯アフターで学ぶデザインパターン〜facade pattern〜

カレーを作るクラスを考える 玉ねぎきって、 じゃがいもをむいて切って、 カレールーをとかす。 そんな料理を実現するクラス群を作って考えてみます。 before まずはfacade patternを使わずに書いてみます。 ソースコード class Onion { cut() { console.log…

最後の平成を迎えるにあたり、今年の抱負を書いてみる(平成関係ありません)

原則 たーのしー!と思ったことをやる 以上。 何をやるのか LTでウケを狙いに行く ウケたとき楽しかったから。 ブログ記事でウケを狙いに行く 読まれると楽しいから。 karoten512.hatenablog.com karoten512.hatenablog.com こういうのをどんどん書きたい。 …

httpとtcpの違いが(ちょっとだけ)わかった

はじめの認識 httpプロトコルとtcpプロトコルは全然別物だと思ってた。 今の認識 実際別ものだった。 しかも使われるレイヤが違った。 httpにとってtcpはインフラみたいなもの。 httpが上位のレイヤ(アプリケーション層) tcpが下位のレイヤ(トランスポー…

ババァ!ノックしろよッ!ってならないためのlinuxパーミッション入門

思春期あるある 思春期を超えたことがあるみなさんなら 共感していただけると思うのですが、 突然親が部屋に来訪してくるとビビりますよね。 やましいことがあってもなくてもビビりますよね。 今回は、 linuxなら、 親が勝手に部屋に入ってこれなくなるので…

もうPermission deniedなんて怖くない!〜linuxのパーミッションについてかなり丁寧に説明してみる〜

開発中よく目にするエラー Permission denied. 環境構築中、よくこのエラー見ますよね。 よく見る割に「とりあえずsudoで無理やり対応」という雑な対応が多い気がしたので、 まずはパーミッションについて整理してみようと思いました。 前提 そもそも、linux…

rpmコマンドの使い方を整理してみる(LPIC対策)〜yumとの違いも比較してみた〜

rpmとは パッケージ管理システム。 パッケージとは、すごくざっくりいうとwindowsでいう「ソフトウェア」にあたる。 rpmはそれを管理するシステムなので、 linuxに何かパッケージをinstallしたり、 uninstallしたりするときに使用する。 rpmを使用してみる -…

lddコマンドでプログラムが参照している共有ライブラリ一覧を取得する(LPIC対策)〜依存関係とは何か〜

共有ライブラリとは 共有ライブラリとは、 「いろんなプログラムから使えるプログラムの部品」 実際に共有ライブラリをみてみる たとえばvimが使用している共有ライブラリ。 $ ldd /usr/local/bin/vim linux-vdso.so.1 => (0x00007ffcae5e8000) libm.so.6 =>…

エクスペクト・パトローナム!守護霊よ来たれ! くらいわかりやすい呪文「git push origin master」

Gitコマンド、呪文みたいだよね みなさんこんにちは。 git push origin master Git、いきなり使い始めると、 Gitコマンドがただの呪文のように見えますよね。 Gitコマンド使い始めの頃は、 ハリーポッターででてくる浮遊呪文 「ウィンガディアム・レヴィオー…

早とちりプログラマの失敗から学ぶデザインパターン(Factory Method:適用後)

このシリーズについて このシリーズは 後先のことをなにも考えずに実装してしまう『早とちりプログラマ』 と すぐに仕様変更を加える『後出し上司』 のという魅力的な2人から、 デザインパターンの有用さを学んでいこうという素敵な企画です。 (早とちりプ…

早とちりプログラマの失敗から学ぶデザインパターン(Factory Method:適用前)

このシリーズについて このシリーズは 後先のことをなにも考えずに実装してしまう『早とちりプログラマ』 と すぐに仕様変更を加える『後出し上司』 のという魅力的な2人から、 デザインパターンの有用さを学んでいこうという素敵な企画です。 (早とちりプ…

Angular2/4にてbootstrapのmodalウィンドウを開き、閉じた時に親コンポーネントに値を反映させる

Angular2/4を使ってmodalウィンドウを表示する bootstrap標準のmodalウィンドウを、 Angularから開こうと頑張った話です。 bootstrapとAngular以外は使っておりません。 Angular2/4を使ってmodalウィンドウを表示する 0. 準備 0-1. プロジェクトの作成 0-2. …

最近の出来事を元に脚本を書いてみる。その5

はじめに この話はいい感じにフィクションです。 登場人物 わたし(26)…会社員 ボーカル(20代後半) ギター(20代後半) M 時刻は22時を回ったところ。 吉祥寺サンロードは、まるで一方通行になってしまったみたいだ。 人々はみんな、駅の方へ向かって歩いている…

【Git】時よ戻れ!〜RPGゲームの「セーブ」とGitの「commit」の比較から、commitとは何かについて考えてみる〜

commitとは結局なんなのか 結論 commitとは、 どのセーブ地点にも戻ることができる 高機能な「セーブ」 解説 RPGのセーブとGitのcommitを比較してみます。 RPGの「セーブ」 ここに冒険の書v0.1があります。 冒険が進んだので、冒険の書v0.2として保存しよう…

Angular2/4のngOnChangesはオブジェクトプロパティが変わったことを検知しない〜Lifecycle HooksのngOnChages, ngDoCheckの違い〜

ngOnChangesを使って、子に渡したプロパティが変わったことを検知する 親コンポーネント /** app.component.ts */ export class AppComponent { public datas = 1; onClick() { this.datas ++; } } <button (click)="onClick()">押してください</button> <app-child [parentProperty]='datas'></app-child> 子コンポーネント