この記事は退職 Advent Calendar 13 日目の記事です。 本日が最終出社となりましたので、入社から退社までを振り返り整理しようと思い、この文章を書いています。
自分語りなので興味ない人はさっさと戻ったほうが良いです。 簡単にまとめると、元々あまり執着ないしやることない、なんか最近クソみたいな社内ポリシーがいっぱい出来て萎える、話の合う人がやめることにしたから会社にいる意味を感じないため辞めるということです。
# 私が考える安全なプログラムを書くために必要なこと | |
今も昔も「入力によって挙動が大幅に変わるAPI」が世の中には多数存在していて、プログラマが本来意図した挙動と異なる動作を引き起こしている。 | |
- ファイルを開こうとしたらコマンドを実行できてしまったり | |
- CSSセレクタを書いてるつもりがHTMLタグを生成してしまったり | |
- SELECT文を発行するつもりがDELETE文を発行できてしまったり | |
こういったときに | |
- 入力値検証をしないと危険になる |
(defun github-url-decompose (file &optional partial) | |
(cond | |
((file-directory-p (expand-file-name ".git" file)) (cons file partial)) | |
((equal "/" file) nil) | |
(t (github-url-decompose (directory-file-name (file-name-directory file)) | |
(if partial | |
(concat (file-name-nondirectory file) "/" partial) | |
(file-name-nondirectory file)))))) | |
(defun github-url-get-origin (dir) |
#!/bin/bash | |
foo=${1:-hoge} | |
echo $foo #$1がなかったらhogeをデフォルト値としてfooに代入する | |
#var自身にデフォルト値としてhogeを代入としたいので以下のように書きたい | |
${var:=hoge} #このままでは、hogeが展開されてしまって、hogeなんてコマンドはないとシェル怒られる | |
echo "1:$var" | |
var= |
Capybara.register_driver :chrome do |app| | |
Capybara::Selenium::Driver.new(app, | |
browser: :chrome, | |
desired_capabilities: { | |
"chromeOptions" => { | |
"args" => %w{ window-size=1024,768 } | |
} | |
} | |
) | |
end |
#!/usr/bin/env ruby | |
require 'pit' | |
require 'octokit' | |
org_name = ARGV[0] | |
unless org_name | |
abort "Usage #{$0} org_name" | |
end |
Title | |
Tachikoma - Continuous gem dependency updating with pull request | |
Abstract | |
Today you manage gems of Ruby application with Bundler, but you often neglect to update. | |
Whatever gems your application depends on, you can get the most benefit by following cutting-edge. Eventually you have to update them, so if you do it more frequently you'll have less pain. |
spaghetti :: String | |
spaghetti = "gtgtsgipgttptinggipsppaigsesgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieataatppiitgiapsteitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaetottissgggtttaipappgstsptttgtpispattgegstltiappseisapgistaiagteeiptptpisaieisagstapeteietgteiisgtiptstgtstasspeatspptitttatteastsgtptgtasggpniaaeteaisett" | |
neapolitan :: String | |
neapolitan = "neapolitan" | |
solve :: String -> String -> String | |
solve [] _ = "" | |
solve xs [] = xs | |
solve (x:xs) (y:ys) |
#! /usr/bin/env ruby | |
# Pull all directory under current directory, if it's on master, has no local changes, can be pulled fast-forward. | |
def git_repo? | |
`git status`.chomp !~ /Not a git repository/ | |
end | |
def not_changed? | |
`git status -s`.chomp.empty? |