サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
qiita.com/uasi
TL; DR: yarn v1 の場合、 yarn.lock から当該のパッケージのセクションを削除して yarn install すればアップグレードできる。 2021年9月9日追記: yarn v2 以降では yarn up -R パッケージ でアップグレードできるようになった。 困ったこと GitHub にソースコードをホストしているとある npm パッケージにおいて、 GitHub の Security Alerts が fstream < 1.0.12 の脆弱性を報告した。 yarn upgrade fstream で最新バージョンにアップグレードしようとしたが…… $ cd my_npm_pkg $ yarn upgrade fstream yarn upgrade v1.16.0 [1/5] 🔍 Validating package.json... [2/5] 🔍 Res
gem の native extension のビルドがコケる、けどPRを送ったりフォークしたりは面倒くさい、今すぐインストールできればそれでいい、というときはこうする。 cd ~/tmp # gem を取得して展開 gem fetch $gem gem unpack $gem-x.y.z.gem # 適当に修正 cd $gem-x.y.z edit_as_you_want # gem をパッケージングしてインストール gem build $gem.gemspec gem install ./$gem-x.y.z.gem # 後片付け cd .. rm -r $gem-x.y.z{,gem} Bundler でインストールする gem にパッチを当てたいなら、 bundle install の前に上記手順を実行する。 gem のインストール先は gem install -i /path/t
Ruby 2.2.0 で CocoaPods のインストールに失敗した。 cocoapods-0.35.0 が依存する json-1.8.1 の native extension のビルドに失敗するようだ: % gem install cocoapods Building native extensions. This could take a while... ERROR: Error installing cocoapods: ERROR: Failed to build gem native extension. (略) compiling generator.c In file included from generator.c:1: ./../fbuffer/fbuffer.h:175:47: error: too few arguments provided to functi
TL;DR 突然ですがクイズです。「追跡ブランチ (tracking branch)」という言葉の使い方で正しいのはどれだと思いますか? origin/master はリモートリポジトリの master を追跡する追跡ブランチである origin/master はローカルの master に追跡される追跡ブランチである ローカルの master は origin/master を追跡する追跡ブランチである 現在の正解は多分3番です。過去には1番でした。 分からなかった方、分かったけど他人に「追跡ブランチ」と言って伝わるか不安な方。大丈夫です。正確な用語1で言い換えることにしましょう。 origin/master はリモートリポジトリの master を追跡するリモート追跡ブランチ (remote-tracking branch)である origin/master はローカルの master
概要 どのブランチが新しくてどれが古いのか分からなくなることが多々あるので分かるようにするやつを書いた。 git branch-activity でローカルブランチ名と更新日時を新しい順に表示する。リモートブランチを表示するなら -r オプションをつける。ローカルとリモート両方表示するなら -a。ようするに git branch のオプションと同じ。 現在のブランチは緑、リモートブランチは赤、その他のローカルブランチは白で表示する。これも git branch に合わせてある。 インストール curl -o /usr/local/bin/git-branch-activity https://gist.githubusercontent.com/uasi/ec9978d793df35184b33/raw/git-branch-activity.sh chmod +x /usr/local/
git commit --fixup が何かについてはgit commit --fixup とは何か - 詩と創作・思索のひろばを読んでもらうとして、 fixup を適用したいコミットをいちいち git log で調べるのが面倒なのでインタラクティブに選べるようにした。 以下のスクリプトをパスの通ったディレクトリに置くと git fixup が使えるようになる。適当な変更を git add して git fixup を実行すると、その変更を fixup として適用したいコミットを peco や fzf で選べる。 #!/bin/bash FILTER=${FILTER:-peco} MAX_LOG_COUNT=${MAX_LOG_COUNT:-30} if git diff --cached --quiet; then commits="No staged changes. Use git
トークンを利用した認証・認可 API を実装するとき Authorization: Bearer ヘッダを使っていいのか調べたAPIOAuthWeb TL;DR HTTP でトークンを利用した認証・認可をする手法として RFC 6750 がある OAuth に限らず、トークンを利用して認証・認可する機構の一部として Authorization: Bearer ヘッダを使うことができる 使い方について詳しくはこの記事の下のほうに書いた 要求 トークンを利用した認証・認可機構を持つ API を作りたい クライアントがトークンを HTTP リクエストに含めて送信し、サーバはトークンを検証してリソースへのアクセスを許可したい Authorization: Bearer トークン ヘッダでトークンを送る API あるよね、ああいうやつ 疑問 Authorization: Bearer ヘッダは OA
Phoenix のコントローラでは render(conn, "index.html", foos: foos) のように render/3 を呼ぶことでビューをレンダリングすることができる。もろもろの事情があって、この処理の途中にフックして引数の値を書き換えてみたいと思った。 というわけで、コントローラで render/3 を呼んだら何がどうなって HTML がレンダリングされるのか追いかけてみた。 ネタバレ:この記事を読んで得られること この記事では、生成されたコードで使われているもののどこで定義されているか分からない関数から始まって、マクロで生成された関数定義に辿り着くまでを順を追って書いていきます。マクロを駆使した Elixir のコードにおいて、関数がどこで定義されているかを探す方法や考え方のヒントを得られる……はずです。分かりづらい箇所があればお気軽にコメントをください。 準備
&str を String に変換する主なやりかたを紹介する。性能の差は皆無に近いのでどれを使ってもいい。ただし "str".into() は使いどころがやや異なる。 "str".to_string() std::string::ToString トレイトに従って str が間接的に1実装するメソッド。他の言語にも同名もしくは似た名前のメソッドがあるため、多くの人がまず使うのはこれであろうと思われる。このメソッドは String::from() にインライン化される。2 "str".to_owned() std::borrowed::ToOwned トレイト3に従って str が実装するメソッド。 "str".to_string() より1文字短いのが利点といえば利点。 String::from("str") std::convert::From<T> トレイトに従って String が実
use Plug.Builder したモジュール内で plug :atom, [optional args] と書くことで、モジュールに他の plug を組み込むことができる。 マクロを駆使して実装された plug の中身がどうなっているのか、 Plug.Builder を再実装しながら追ってみることにした。 マクロの参考資料 Elixir Docs - Kernel Getting Started - Macros MyPlugBuilder の概要 Plug.Builder を丸ごと再実装するのは骨が折れるので、 plug マクロだけを提供するように単純化したモジュール MyPlugBuilder を作ることにする。 MyPlugBuilder は以下のように使う:
#!/bin/bash if [[ -z "$FILTER" ]]; then FILTER=$(git config --global aux.filter) FILTER=${FILTER:-fzf} fi ask_yn() { local msg=$1 local yn while read -r -p "$msg [yN] " yn; do case "$yn" in [Yy]*) return 0 ;; [Nn]*) return 1 ;; "") return 1 ;; esac done } test_repo_is_clean() { local msg msg=$(git -c status.color=always status --short) if [[ $? = 0 && -z "$msg" ]]; then return 0 else printf "\e[31
ghq で取得したリポジトリ全部で git pull --ff-only したり git gc したりできたら嬉しいな、ということで嬉しくなるやつを書いた。 ghq-foreach <git-subcmd> で任意のサブコマンドを各リポジトリに対して実行できる。 -e オプションをつけて ghq-foreach -e <shell-cmd> するとシェルコマンドも使える。 複数行のシェルコマンドなら ghq-foreach -e sh -c 'cmd1; cmd2' となる。 #!/bin/bash # # ghq-foreach - executes git subcmd or shell cmd for each repo managed by ghq # EXEC= QUIET= say() { [[ -n "$QUIET" ]] && return if [[ -t 1 ]]; t
Boot2docker で Docker コンテナにアクセスするとき毎回ポートフォワーディング設定して localhost:12345 とかでアクセスするのめんどくさい、すぐ container-name.dev でアクセスできたら便利だな、と思ったのでそういうのを書いた。 Pow に依存するので Mac 専用。 uasi/boot2docker-powify · GitHub まず適当な名前でコンテナを実行する(ここでは loving_galileo): $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4e983e368f5 dockerfile/ghost:latest "bash /ghost-start" 3 hours ago Up 3 hours 0.0.0.0:2368->2368/tcp
TL;DR: グローバルな gitignore に ,/ を追加して、作業用スクリプトを , ディレクトリに入れると便利。 ,/tmp_script.sh で実行できる。 Git リポジトリの中に一時的に使う作業用スクリプトを置いておきたいことがある。自分だけが使うものなのでコミットはしたくないが、いちいち .git/info/exclude に追加して無視させるのも面倒臭い。 今まで自分は、 tmp_script.sh~ や tmp_script.sh.bak など、グローバルな gitignore で無視されるファイル名にしていたが、これは不要なファイルと間違えて消してしまう危険がある。 ignored.tmp_script.sh は分かりやすいぶん長い。 _tmp_script.sh は悪くないが、コミットすべきファイルにもアンダースコアで始まるものがあって紛らわしい。 そこで、作業
$ rm -r repo override r--r--r-- uasi/staff for repo/.git/objects/48/a35a5fffec3890bb52584a98898aa2b02a719a? ^C ヤバいと思って ^C しても後の祭りだ。一番大事な .git/objects 以下のファイルはリードオンリーなので辛うじて残るが、 .git/HEAD やら .git/config やらは消えてしまっている。 こういう悲しい事件は二度と起こらないようにしよう。ミスによる削除を防ぐには、リードオンリーなファイル .git/! を作ればよい:
2015年10月追記: Heroku の無料プランが改訂されて dyno のアイドル条件が厳しくなり、30分以上アクセスがない dyno はスリープするようになった。また24時間のうち6時間以上はスリープ状態でなければならないルールも加わった。 TL;DR: HEROKU_URL での ping をやめて、 Uptime Robot などのモニタリングサービスを使う。 Hubot には適当に200を返すハンドラを書く。 2014年9月30日ごろから、 Heroku に置いた Hubot のプロセスが起動後しばらくしてアイドル状態に入るようになった。 元々 Heroku の無料プランでは1時間アクセスのない web dyno をアイドルするようになっている。 Hubot にはこの対策が組み込まれていて、環境変数 HEROKU_URL をセットすると、自分に向けて定期的に HTTP リクエスト
NVM のインストール手順は .bashrc や .zshrc に source ~/.nvm/nvm.sh を記述するよう指示している。しかし nvm.sh は比較的複雑なので source に時間がかかり、インタラクティブシェルの起動がわずかに遅くなる。できればこのタイムロスをなくしたい。 nvm.sh の大半を占めるコードは nvm コマンドに関するものであるため、 nvm コマンドを実行するときに初めて nvm.sh をロードするようにしてみる。 # 仮の nvm コマンド nvm() { # まず仮の nvm コマンドを unset unset -f nvm # nvm.sh をロード # ここで本物の nvm コマンドが定義される source "${NVM_DIR:-$HOME/.nvm}/nvm.sh" # 仮の nvm コマンドに渡された引数を本物に受け渡す nvm "$
let sorted = sort(anArray, { (s1: String, s2: String) -> Bool in return s1 < s2 })
(この記事は WWDC 2014 の直後に書かれました。内容は2014年時点のものです。本文中の「Swift」や「iOS 8」は当時まだベータ版だったソフトウェアを指します。) TL;DR WWDC で発表された情報と、一般公開されている Apple のドキュメントに含まれる情報は NDA に抵触しない。よってそれらの範囲で Swift や iOS 8 に関する情報はセーフ。しかしスクリーンショットの公開は不可。 この記事の内容に法的な保証はないので、不安なら Mac (or iOS) Developer Program License Agreement の条項10.1 Information Deemed Apple Confidential を参照のうえ、弁護士に相談すること。 関連リンク:自分の Apple Developer アカウントで同意した契約書の一覧ページ(要ログイン)
注1:以下 bikeshedding です 注2:グローバル定数を避ける必要はないと結論が出ています(下記コメントを参照) Objective-C でよく使われる XXMyClassHogeConstant 式のグローバルな定数を避けるべきか否かについて、別の記事のコメント欄で @oden@github と筆者 @uasi とで議論がありました。記事の本題と外れたために削除したそれらのコメントを、記録のために再掲します。 @oden@github のコメントは通知メールから引用しました。ただし文中の第三者への @ は @... に置き換えました。また、 @uasi のコメントはログが残っていないため、元のコメントの大意を箇条書きにしました。 @oden@github (引用注:元記事の、グローバル変数の定義方法を説明した箇所について)このバージョンでは、定数の説明でグローバル変数を利用して
はじめに このガイドでは、はじめて Zsh を使う人や Zsh の便利な使い方を知らない人に向けて、いくつかの便利な設定と操作方法を紹介します。また、 Zsh についての疑問を素早く解決できるよう、マニュアルの調べ方や他のドキュメントへのリンクも盛り込んであります。 このガイドでカバーしきれていない設定や分かりやすいドキュメントをご存知でしたら、ぜひ編集リクエストやコメントでお知らせください。 設定ファイル ここでは主に普段のキー入力数を大幅に減らせるような設定を紹介します。 .zshrc ~/.zshrc は Zsh のインタラクティブシェル(ユーザーがコマンドを入力する画面)が起動した際に読み込まれる設定ファイルです。 Zsh スクリプトを実行したり、 zsh -c 'command...' でコマンドを実行したりしたときには読み込まれません。このファイルには主に Zsh の操作に関す
@interface CookieClicker @property (nonatomic) NSTimer *timer; // 一定間隔でクリックイベントを発行するタイマー @property (nonatomic) id eventMonitor; // Esc キー押下イベントを監視するモニター @end @implementation CookieClicker // マウスカーソルの位置を1秒間に50クリックする - (IBAction)bakeMoreCookies:(id)sender { // タイマーが稼働中なら何もしない if (self.timer) return; // Esc キーの監視を開始する:押されたらタイマーを止める self.eventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NS
あるライブラリのオレオレ podspec を書いたがなんらかの理由で公開できない、または公開が面倒な場合は、 podspec をローカルに置いて Podfile から参照することができる: ### ディレクトリ構成の例 # FooProject/ # Podfile # Specs/ # BarLib/ # 0.0.1/ # BarLib.podspec # Source Files... ### Podfile pod 'BarLib', podspec: 'Specs/BarLib/0.0.1/BarLib.podspec' pod メソッドの :podspec オプションに、ローカルの podspec のパス(絶対パスまたは Podfile からの相対パス)を指定すればいい。上記のディレクトリ構成は CocoaPods の標準に従っているが、このとおりでなくても構わない。 Regis
ブロックの外で定義された変数をブロック内で使うとき、その変数はブロック内に strong 参照でキャプチャされる。場合によってはこれが循環参照を引き起こすことがある: // self が block を strong 参照→ block が self をキャプチャ(strong 参照) self.aStrongProperty = ^{ NSLog(@"self = %@", self); };
追記:ビルドスクリプトにパッチを当てたバージョンの rmagick を使う方法もある→rmagick を最近の環境でもインストール出来るようにする方法 この記事で想定するバージョン: imagemagick: 6.8.0-10 rmagick: 2.13.1 参考にしたページ: http://stackoverflow.com/a/14097234/454997 Homebrew で imagemagick をインストールし、 gem install rmagick すると以下のエラーが出る。 Building native extensions. This could take a while... ERROR: Error installing rmagick: ERROR: Failed to build gem native extension. /Users/uasi/.rben
+[NSURL fileURLWithPath:] は、 +[NSURL URLWithString:] と違って path に含まれる URL 特殊文字をエスケープする(?→%3Fなど)。またそれが返す NSURL オブジェクトは -isFileURL が真になっていて、 -URLByAppendingPathComponent: などの引数も同様にエスケープする。File URL にパラメータ文字列(例:?key=value)を含めるには、次ように +[NSURL URLWithString:relativeToURL:] を使う: // こうする NSURL *fileURL = [NSURL fileURLWithPath:path]; NSURL *URLWithParam = [NSURL URLWithString:@"?key=value" relativeToURL:fi
社内やオープンソースのプロジェクトに並行して参加していると、gitconfig の user.name や user.email をリポジトリごとに切り替えたくなることがある。リポジトリを作るたびに git config user.name "My Name" すればいいのだが、 user.name が存在しないか空文字列だと環境変数 NAME の値を暗黙的に使う仕様になっているため、設定をうっかり忘れてしまうとなかなか気づけない。名前やメールアドレスを間違えたまま何度もコミットしてしまうと修正が厄介である。 Git 2.8以上 最近の Git で設定忘れを未然に防ぐには git config --global user.useConfigOnly true を実行する。これを設定するとユーザー情報について環境変数を暗黙に参照することがなくなる。グローバルな gitconfig で use
配列の添字が0または1から始まることを日本では「0オリジン」「1オリジン」と言うが、どうやらこれは和製英語らしい。一般的に英語ではそれぞれ zero-based, one-based と言う。 「添字が0から始まるインデックス方式」は "zero-based indexing"、「1から始まる添字を使った文字列アクセス」は "one-based string access" となる。 追記:zero-origin も使われているようだ。 zero-based index の検索結果、約170万件 zero-origin index の検索結果、約3万件 Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read ba
あるファイルに大量のコンフリクトが発生し解決が面倒なとき、パッチを使ってファイルに1コミットずつ変更を適用する方法を示す。この方法のメリットは: ファイルへの変更を1コミットずつ適用・コンフリクト解決することができる それぞれのコミットを適用する前に、コミットをパッチファイルの形で編集できる 注目するファイル以外への変更をいったん無視し、そのファイルに関係する変更に集中できる の3点である。複数コミットの変更が混ざった大量のコンフリクトマーカーを手作業で消すような状況に陥ったとき、この方法を使えばいくぶんかは楽にマージ作業を進められる。 概要 マージ中に特定のファイルに大量のコンフリクトが起きたら、マージを中止する。一時作業用ブランチを作り、そのファイルに1コミットずつパッチを当てて編集する。パッチを当て終わったらマージをやり直し、コンフリクト解決作業中に、コンフリクトしたファイルを一時作
次のページ
このページを最初にブックマークしてみませんか?
『@uasiのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く