zshでhistoryに実行時間も残す方法

bashだとHISTTIMEFORMAT="[%F %T] "とか~/.bashrcに書いておけばログに実行した日時も残しておけるんだけどzshだとHISTTIMEFORMATがないらしいので方法を調べてみた。 設定しなくてOK デフォルトで使えるようになってるらしい $ history -E 1 2.12.2013 14:19 history -E $ history -i 1 2013-12-02 14:19 history -E $ history -D 1 0:00 history -E 2 0:00 history -i だけでOK。 参考 https://unix.stackexchange.com/questions/103398/datetime-stamp-when-running-history-command-in-zsh-shell

2017-10-18 · 鉄

HUGOに移行するためにWordpressのSocial ButtonsのHTMLを削除する

WordpressからHUGOに移行する時にTwitterやFacebookなどのソーシャルボタンが本文にハードコーディングされてたので強引に削除しました。 特定の行以降を全て削除するという力技なので間違って想定外のものが消えないか気をつけましょう。 # pry > require 'nokogiri' Pathname.glob('posts/*.md').each{|f| text = f.read.gsub(/<div class='wp_social_bookmarking_light'>.*/m,''); f.write(text)}

2017-08-05 · ironsand

Net::HTTPを使ってリモートにあるサーバーの最終更新日を取得

更新されてる時だけファイルをダウンロードしたいときなどに使う目的で。 uri = URI('http://example.com/foo.xls') Net::HTTP.get_response(uri)['last-modified'] "Mon, 08 May 2017 01:34:46 GMT"

2017-05-08 · 鉄

Rubyの配列から添字を使って複数の値をピックアップする

foo = [1,2,3,4,5] foo.values_at(2,4) #=> 3, 5 いつも忘れるので自分が忘れた時に検索ですぐ引っかかるようなタイトルにしてます。

2016-05-02 · 鉄

OpenVPNの設定ファイルの文法チェック

sudo service openvpn startがコケる時に設定ファイルのどこが間違ってるのか確認する方法。 openvpn --config /etc/openvpn/server.conf で文法チェックができます。こういうの各サービスで個別にあるんじゃなくて統一の方法欲しいなあ。

2016-04-25 · 鉄

iptables覚書

よく忘れるので *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] ## 確立済みの通信はOK -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## Ping を通す -A INPUT -p icmp -j ACCEPT ## 自ホストからの通信はOK -A INPUT -i lo -j ACCEPT ## SSH -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT ## HTTP, HTTPS -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT COMMIT

2016-04-20 · 鉄

複数のカラムの値が重複するオブジェクトのIDを取得する

複数カラムの値が重複してるオブジェクトの情報を取るために posts = Post.select(:title, :user_id, :date).group(:title, :user_id, :date).having("count(*) > 1").all とするとこんな感じのidがnilの配列が返ってくるので :id => nil, :user_id => 1345, :title => 'foo', :date => Tue, 01 Sep 2015 posts.each do |post| duplicated_posts = Post.where(user_id: post.user_id, title: post.title, date: post.date) # なんか処理する end な感じで適当に処理しましょう。 追記 こちらのほうがスッキリ書けますね。 posts.each do |post| duplicated_posts = Post.where(post.attributes.except('id')) # なんか処理する end

2016-03-30 · 鉄

File.write みたいに File.append も使いたい

File.write(filename, text)でファイルに書き込みできるの便利ですよね。 でも、File.appendは用意されてないのでFile.open(filename, 'a'){|f| f.write(text)}のように書かなきゃいけません。めんどくさい。 なのでめんどくさくないように定義しましょう。やっぱり既存クラスのメソッド拡張ができるRubyはいいですね。 class File def self.append(filename, text) File.open(filename, 'a'){|f| f.write(text)} end end

2016-03-28 · 鉄

Hashのキーをリネームする

Hashのキーをリネームしたかったけどデフォルトのメソッドはないようなので書いた class Hash def rename_key(old:, new:) return unless has_key?(old) return if has_key?(new) self[new] = self.delete(old) self end end 使い方 h = {a: 1, b: 2} { :a => 1, :b => 2 } [92] pry(main)> h.rename_key(old: :a, new: :c) { :b => 2, :c => 1 } 変更前のキーが存在しない時と、変更後のキーが存在する時は何もしない。 実際の入れ替え処理はself[new] = self.delete(old)だけで終わってます。 参考 http://kmckelvin.com/blog/2014/06/renaming-items-in-a-ruby-hash

2016-02-15 · 鉄

sox を 無音部分のある音声を分断

音声つき単語帳の単語と例文とかを切り出してランダム出題する形にしたかったのでまずsoxを使って無音部分で音声を分割しました。 $ sox in.wav out.wav silence 1 0.3 0.1% 1 0.3 0.1% : newfile : restart これでout001.wavなどのように連番でファイルが保存されます。初めの0.3が音声の前の部分の無音の長さで、後ろの0.3が音声の後に続く無音部分の長さです。 参考 [sox fails to split files – Stack Overflow][1]

2015-11-24 · 鉄