だいぶ前にやったmgramの結果の画像を下書きにアップしていたので、公開しておく。
最後の課金をすると、自分を構成する性格の標準偏差が見れるはずで、「豆腐メンタル」すぎるという結果だった気がする。
だいぶ前にやったmgramの結果の画像を下書きにアップしていたので、公開しておく。
最後の課金をすると、自分を構成する性格の標準偏差が見れるはずで、「豆腐メンタル」すぎるという結果だった気がする。
会社の人から、Rustはすごくいいぞ〜と言われ、O'Reillyから出てるプログラミングRustを読んだりしている。
Rustをインストールしたとき、すごく簡単だったので手順を記しておく。 といっても、以下のコマンド叩くだけ。
curl https://sh.rustup.rs -sSf | sh
すごく簡単なので、すぐにRustを始められるのが良かったと思う。
あとRustをインストールすると、CargoというRustのビルドシステム兼パッケージマネージャが一緒にインストールされるけど、これがいろいろ面倒なことを代わりにやってくれるので、プロジェクトのセットアップに躓くことがなかったのは嬉しい。
案件のどこかで使えるようにしておきたい。
Goならわかるシステムプログラミングって本を読んでて、 一章には、fmt.Println("Hello World")をデバッガーを使ってシステムコールの「見る」と書いてあったので、 素直にGoLandでデバッガーを起動すると以下のようなエラーが出た。
could not launch process: debugserver or lldb-server not found: install XCode's command line tools or lldb-server
解決策としては以下のチェックボックスにチェックを入れれば解決するよ!
Preferences > Build, Execution, Deployment > Debuggerを開いて、 Use native backend にチェックを入れてApplyすればOK!
最近Golangでコマンドラインツールを作りたくて、Golangのサンプルコードとかを動かしていろいろ遊びながら覚えているところなのですが、たまたまEchoサーバーのプログラムがあったので試したのですがすごく簡単にかけますね!
そのとき、リクエストからQuery Stringをどう抜き出すんだろと思って試しに書いてみました。
package main import ( "net/http" "log" "fmt" ) func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe("localhost:8000", nil)) } func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s %s %s\n", r.Method, r.URL, r.Proto) v := r.URL.Query() if v == nil { return } for key, vs := range v { fmt.Fprintf(w, "%s = %s\n", key, vs[0]) } }
r.URL.Query()
で type Values map[string][]string
を受け取ることができるので、rangeでループ回して表示しています。
個別にキーを指定して取得したい場合は以下のようにキーを指定してあげれば取得できるはず
r.URL.Query().Get(キー)
こんにちは。こんばんは。
たまたま、CloudFormationのテンプレートから起動されるEC2のユーザーデータを利用して、インストールしておきたいモジュールがありました。
ユーザーデータには、cloud-init
や シェルスクリプト
で何らかの処理を書くことができるのですが、
テンプレートにはすでにcloud-initの形式で書かれており、シェルスクリプトを書こうとするとエラーとなりユーザーデータで書いた内容は実行されません。
EC2のユーザーデータ内で、cloud-init
と シェルスクリプト
を併用したいけどそんなことができるのかといろいろ調べていくうちに、この記事に行き着きました。
cloud-initでシェルスクリプトとcloud-configを同時に使う
はい、やりたかったことはこれです!!
ってことで、実際に自分でやってみた手順を書いていきたいと思います。
まず、cloud-utils パッケージをインストールしましょう。
$ sudo yum install cloud-utils
※ 上記は、Amazon Linux AMI 2018.03.0 から作成したEC2内で作業をしています。
viを立ち上げてファイルを作成します。
$ vi cloud-config.txt
そして、以下の内容をコピペして保存してください。
#cloud-config packages: - sl runcmd: - echo "HELLO Cloud Config"
viを立ち上げてファイルを作成します。
$ vi shell.txt
そして、以下の内容をコピペして保存してください。
#!/bin/bash -xe touch /home/ec2-user/create-by-shellscript.txt echo "HELLO ShellScript" >> /home/ec2-user/create-by-shellscript.txt
先ほど作成した、cloud-config.txt
と shellscript.txt
を使って、
MIMEマルチパート形式のファイルを作成します。
以下のコマンドを実行してみましょう。
$ write-mime-multipart --output=output.txt cloud-config.txt:text/cloud-config shell.txt:text/x-shellscript
するとカレントディレクトリに、output.txt
が作成されていると思います。
ファイルの内容を確認するとこのように記述されています。
Content-Type: multipart/mixed; boundary="===============2433150631494388583==" MIME-Version: 1.0 --===============2433150631494388583== Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config packages: - sl runcmd: - echo "HELLO Cloud Config" --===============2433150631494388583== Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="shell.txt" #!/bin/bash -xe touch /home/ec2-user/create-by-shellscript.txt echo "HELLO ShellScript" >> /home/ec2-user/create-by-shellscript.txt --===============2433150631494388583==--
このファイルの内容をそのままEC2のユーザーデータにコピペして起動してあげると、 処理が自動で実行されます。
立ち上げたインスタンスにSSHで入って確認してみましょう!
ユーザーデータの内容が実行されたかどうかは、/var/log/cloud-init-output.txt
を見れば確認できます。
$ less /var/log/cloud-init-output.log
: : Existing lock /var/run/yum.pid: another copy is running as pid 2597. Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 38 M RSS (286 MB VSZ) Started: Wed May 16 11:30:54 2018 - 00:00 ago State : Running, pid: 2597 Resolving Dependencies --> Running transaction check ---> Package sl.x86_64 0:5.02-1.6.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: sl x86_64 5.02-1.6.amzn1 amzn-main 13 k Transaction Summary ================================================================================ Install 1 Package Total download size: 13 k Installed size: 15 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : sl-5.02-1.6.amzn1.x86_64 1/1 Verifying : sl-5.02-1.6.amzn1.x86_64 1/1 Installed: sl.x86_64 0:5.02-1.6.amzn1 Complete! Cloud-init v. 0.7.6 running 'modules:final' at Wed, 16 May 2018 11:30:58 +0000. Up 25.17 seconds. HELLO Cloud Config + touch /home/ec2-user/create-by-shellscript.txt + echo 'HELLO ShellScript' Cloud-init v. 0.7.6 finished at Wed, 16 May 2018 11:30:58 +0000. Datasource DataSourceEc2. Up 25.50 seconds
正しくログが吐かれていますね!!
CloudFormationのEC2インスタンスのユーザーデータでも同じことをしたい場合は、 作成したMIMEマルチパート形式のファイルの内容を同じようにコピペしてあげれば動作します。 ただし、JSON形式だとダブルクオテーションで一文一文を囲ってあげないと動作しないと思うのでそこは注意してくださいね。
では!!
今年1月に転職して新しい環境で働き始めていて、そこのプロジェクトではRuby on Railsを使っています。
今までRuby on Railsでサービス等を作った経験があまりがなくRailsを知る必要が出てきて、最近出版された「Ruby on Rails5の上手な使い方」という本を買いました。
この本にはモデルのbelongs_to に以下のようなオプションが書かれていました。
class Customer < ApplicationRecord has_many :orders end class Address < ApplicationRecord belongs_to :customer, optional: true end
この optional: true
ってなんなのか。
結論から言うと、belongs_toの外部キー
のnil
を許可するというものです。
上記のコードであればAddress.customer_id
が外部キーになり、値がセットされていない場合はバリデーションではじかれますが、optional: true
を設定しておくと、外部キーがnilであってもDBに保存できます。
ただDBの設計上、外部キーのnilを許可することが少ない気がするので、あまり使う設定ではないかもしれません。
グーグルの人事として働いている著者が書いた本
グーグルがなぜ、どう動いているかの著者なりの解釈を書いた内容
自由度が高い - 自由裁量権を与えられる
トップダウン、階級制、指揮統制を特徴とする経営モデル - 自由度が低い環境は消えてなくなる
グーグル的アプローチでは、権力と権威をマネジャーから社員へ譲り渡すように意識している。
グーグルのマネジャーが自分の一存では下せない決定の一例
誰を雇うか
誰を解雇するか
ある人の業績をどう評価するか
ある人に関する昇給、ボーナス、株式付与をどれくらいにするか
優れた経営手腕への褒賞を誰に与えるか
コードはどの時点で、ソフトウェア・コードベースに組み込める品質となるか
どうすれば業績が改善するか
グーグルがどんな仕組みで動いているのか、あるいはグーグルでこうした経営手法を選ぶのかを理解するには、グーグルの文化を定義する3つの要素の探求する必要がある。
ミッション
グーグルのミッションは、簡潔で多くのことが話題になっていない
ミッションは事業目標ではなく道徳
透明性
いかなる情報も共有できないと想定するのではなく、あらゆる情報はチームと共有できると想定すること。情報の制限は意識してようやくやるべきことであり、そうするには十分な理由がなければならない。オープンソースにおいては、情報の隠蔽はカウンターカルチャーなのだ。
「社員は我が社の最大の資産」だというなら、オープンを原則としなければならない。
発言権
会社の経営方針について、社員に対して実際の発言の機会を与えることを意味する
グーグルの人事慣行の多くは、社員からの発案によるもの
社員にアイデアを表明する権利を与えることは、質の高い意思決定を促し、組織効率を高める重要な要因
社員に遠慮なく話してもらうと、意思決定の質、チームのパフォーマンス、組織のパフォーマンスに対してプラスの効果がある
議論しやすい環境を作る
人は動機づけでパフォーマンスは変化する
OKR ( Objectives and Key Results: 目標と主要な結果 )
採用に時間をかける
自分より優秀な人物を雇え
賢いというだけで雇ってはならない
あらゆる社員をリクルーターに変えるべく、人材の紹介を依頼すること
最高のネットワークを持つ人々に優秀な人材の確保にもっと時間を割いてもらえるように頼む
積極的に人材を探すための実験を行うこと
最高の人材の注意を引くために、突拍子もないことも恐れずやってみる
あなたは受験者を評価したいだけでないということ。彼らがあなたと恋に落ちるようにしたいのである。受験者に素晴らしい体験をしてもらい、関心事を語ってもらい、人生で最高の1日を過ごしたような気分で帰ってもらいたい。
グーグルで成功するかの4つの明確な属性
一般認識能力
当然ながら、新たな状況に学んで適応できる、頭のよい人材が欲しい
求職者が実生活において困難な問題をどう解決してきたか、どう学ぶか
リーダーシップ
グーグル的であること
愉快なことを楽しむ
ある程度の謙虚さ
きわめて誠実
曖昧さを楽しむ余裕がある
職務関連知識
自己複製する採用マシーンをつくるには?
業績評価のために - 目標を正しく設定する - 同僚のフィードバックを集める - 報酬についての話し合いと人材育成についての話し合いを分ける
福利厚生のプログラムなど
失敗に直面したとき
自由度の高い環境を手に入れるために、チームや職場を変える10のステップ
4つの基本原則にのっとってピープル・オペレーションズを気づいてきた
タイトル通り。
手違いでgit管理下にある大量のファイルを消してしまって元に戻したいときに便利です。
awk を使ってまとめてステータスがdeleteのものを元に戻してあげましょう!
git status -s | awk '/^ D/{print "git checkout "$2}' | sh
Dの部分を、他のステータスの頭文字に変えてあげれば応用できますね!
よく忘れるので残しておく
add_index :users, [:email], :unique => true