それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby

正規表現の\K で1つだけなら後方参照を省略できて便利

\K を使うと、そこまでのマッチ部を省略できる ip -br a からIPv4 を取り出す例 $ ip -br a | grep eth2 eth2 169.254.70.21/16 fe80::4154:6db4:aec3:32f/64 コレを、\k で書くとこうなる。 ip -br a | grep -oP 'eth2\s+\K[\d.]+' つまり、後方参照を使わ…

net-smpt xoauth2 でGmailを使って送信する。

net-smpt xoauth2 でGmailを使って送信する。 GMail はアレコレややこしい。とりあえず、OAuth2に対応させれば、SMTPサーバーを使わせてもらえる。 require 'gmail_xoauth' require "googleauth" require "googleauth/stores/file_token_store" require 'gma…

画像が、白黒かカラーか判定する。(白黒に近いスキャン画像を判定する)

画像がカラーか、白黒かを判別する方法では、偶然にはてな質問の回答を見つけたので、コピペで行っていた。正直言って何がどうなってるのかよくわかってなかった。自宅の書籍や書類を整理するために大量にスキャンしていると、やっぱりこの判定がほしいなと…

ruby bundle のコマンドをメモ

bundle コマンドの使い方 bundle コマンドは apt で入れている前提 apt install ruby-bundler 初期化 フォルダを作る mkdir my-work cd my-work 初期化する bundle init パッケージの追加 bundle add struct bundle add pry パッケージの利用 / ソース作成 …

自分のライブラリをgem にして自分で使う、自作gem install

書いたソースコードをgem にして自分で使いたい。 自分で書いたソースコードを再利用するために gem の仕組みを活用し、再利用する。 目標 自分の git ライブラリを読み込み活用する。 必要なもの 自分のライブラリ bundler ruby 手順 gemspec を作って、git…

年齢を計算する

年齢計算とは、単純だけどちょっと難しいものです。 色々と考えられるけど、判断していいのか困ったのであれこれ考えた。 日数から、年が何回出てるか(365の商)を見る 剰余は無視すればい。 (Date.parse('2022-12-01') - Date.parse('1989-12-02')).to_i/3…

ruby gems をユーザ空間にインストールする

ユーザ空間を使う sudo とかつかってグローバルを汚したくないし、bundler でプロジェクト単位にインストールも不便ってとき。 自分のユーザ空間の環境があるって最高ですよね。 ユーザ空間にgem をインストール gem install --user-install PKG_NAME たとえ…

vscode で WSLの ruby版 を使う。

vscode で WSLの ruby を使う。 vs code をちょっと使おうと思うと、めっちゃめんどくさいのが wsl 経由でコマンドを使うことですね。 vscode のWSL環境内の実行に慣れていれば、大丈夫なはず。 通常であれば、VS CodeをWSL内部環境で起動して終わり。 今回…

Google アカウントをOAuthして、アクセストークンを取得する

gmail を送信するために、OAuthで権限をもらう。 Gmail でSMTPを使うには、OAuth利用が必要になる。 less secure apps ( 安全性の低いアプリ) は非推奨になった。 git clone git@github.com:takuya/ruby-oauth-google-gmail.git bundle install bundle exec…

rubyのpopenでエラー出力や終了コードを取得する話。

ruby の popen に関して。 ruby からIO.popenでプロセスを呼び出すときに、「〇〇」が取れない。というブログがいっぱい見つかって、そうじゃないだろ。という気分になったなったのでメモを残すことにする。 そして、Qiitaなどの記事を丸コピした「いかがで…

ランダムなひらがな文字列を生成する-ruby でひみつの質問

ひみつの質問の回答をジェネレーターで作る (1..10).each do puts (1..20).map{|e| (0x3042+Random.new.rand(0..82)).chr(Encoding::UTF_8)}.join end 実行サンプル ランダムな文字列を生成するのである。 /usr/bin/ruby himitu.rb ふぉゔゃまゅめゅいごなこ…

ruby でGmail(smtp) 経由でメールを送信する。TLS有効化

ruby でメールを送信する ruby からgmail を送信するには、 mail ライブラリだけでも出来るんだけど。 MIMEエンコードされたデータを受け取ってそのまま forward するには、もう少しいい方法がないかなと思って考えていた。 メールリレーの中間に入って、指…

rubyのプロセス起動で、smtpを使わずに、sendmail コマンドでメール送信するとカンタン

ubuntuシステムからメールを送りたい。 メールを送ろうとすると、SMTPをつかって、MIMEでエンコードして SMTP over TLSで接続してとあれこれ手順が必要。 その手順をrubygemでインストールして使い方を調べるのも面倒。 ローカルの postfix にリレーさせる。…

日本語(ローマ字)表記をひらがなにする。

日本語(ローマ字)表記をひらがなにしたい 「shatiku → しゃちく」 にしたい 本日の目的 ローマ字で表現された名前を変換したい。 hatarakusaibou のような名前を ’はたらくさいぼう’のようにひらがな表記に変えたい。 ローマ字を'ひらがな'に変換できれば…

ruby - mecab をインストールするときにエラーが出たのでメモ

mecab - ruby を使いたい 久しぶりにmecab をインストールしようとしたら・・・ bundle add mecab エラーになるんですね。 extconf.rb:12:in ``': No such file or directory - mecab-config mecab は extconf で外部ライブラリ(.h)を参照するので、 mecab…

文字の実体参照と実コードを変換する

文字の実体参照と実コード(文字)を変換する。 sed や nkf でもできる ruby なら出来るんだけど >>> escaped_data = b'\\x50\\x51' >>> escaped_data.decode("unicode_escape") python / nodejsだと、どううやるんだっけ。。。 参考資料 https://stackoverf…

手早くランダムな文字列を作成する

簡単に衝突しないような文字列をつくってファイルを保存するようなことをしたい。 OpenSSLを使えば割と楽 require 'openssl' str = [OpenSSL::Random.random_bytes(12)].pack("m*").delete("\n") puts str ワンライナーで ruby -r openssl -e 'print [OpenSS…

rubyの正規表現とscanでグローバルマッチで後方参照をサボりマッチ箇所を取り出す。

JSとか書いてたら、グローバルマッチをついつい、次のように書いてしまう。 "aa aaa aaaaa".match( /a+/g ) ああ、シンタックスエラー ruby 書くんだったらこう書くっポイ! "aa aaa aaaaa".scan( /a+/ ) #=> ["aa", "aaa", "aaaaa"] ruby でマッチした結果…

SeleniumのWebDriver(chrome)からCookieを取りだしてHTTP::CookieにしたりCurlで再利用する

Selenium のWebDriverからCookieを取り出したら Seleniumで画像をだけを取り出して保存したり、ファイルを取り出すのは不便だよね。 だけど、直接Curlで叩くのもCookieの問題でもっと不便だよね。 そこでSeleniumのCookieをCurlで使える形式やNetscape形式で…

クラス・メソッドをインスタンス内から呼び出す

ruby でクラスに所属するメソッドを呼び出す。 クラスに所属するStaticなメソッドを呼び出したときに、クラス名を直接指定するのは不便だよね。 class A def self.do puts :do end def say A.do # クラス名が・・・ end end a = A.new a.say self で参照する…

クラスの特異メソッドにモジュールのメソッドを取り込む

モジュールのメソッドを、クラスの特異メソッドに取り込む module で定義した、メソッドやローカル変数を、クラスの特異メソッドに取り込む 次のようにすると実現できる。 module S1 def sample puts :sample end end class A class << self include S1 end …

pry のEchoをオフにする

コピペなどでエコーが邪魔なとき _pry_.config.print = proc {} irb の場合は conf.echo = false こうすれば、長いStringのスクロールで死ななくて済む 一時的にオフにして、元に戻すなら _pry_.config._print = _pry_.config.print _pry_.config.print = pr…

Seleniumで印刷(print preview)を経てPDFを保存する方法

Selenium + chromedriverで 印刷プレビューにアクセスするのが面倒くさい Chromeを webdriverでアクセスすると iframe で作られた、印刷プレビューにアクセスするのがとてもめんどくさい。(セキュリティ関連のアレコレの制限をdisableオプションで取っ払え…

rubyのLoggerでログを出力する方法

ruby のロガーについて調べておきました ruby ではログを出すときに Logger が便利です。 require 'logger' logger = Logger.new(STDOUT) 標準出力に出す場合は STDOUT($stdout) 、標準エラー出力に出す場合は STDERR($strerr) を指定する。 ログを出す logg…

ruby で先月の月末を求める

先月の月末を求めるには まず、月初の01日を作ります。 Date.parse(Date.today.strftime('%Y-%m-01')).to_s 今月の1日を作る方法を知ってると後はなんでも応用が効くよね。 次に−1日する (Date.parse(Date.today.strftime('%Y-%m-01'))-1).to_s 簡単でし…

selenium で parital text/ link_text を指定すれば楽ができる!!!!

selenium でリンクの指定が楽になった。 ドキュメントを読んでたら、良いものを見つけた 今までのやり方。 driver.find_element(:xpath, "//a[contains(./text(), 'ログイン')]") driver.find_element(:xpath, "//a[./text()='ログイン']") 今回知ったやり方…

rubyで実行中のユーザー名(id)を取得したい

ruby でスクリプトを実行したのは誰? スクリプトの実行ユーザーを知りたい。root以外で動かされるとパーミッションがあとで面倒なので、root 以外が起動しようとすると拒否したいってことが、わりとあるわけで。 実行ユーザーIDを知るには Process.euid #=>…

rubyのSequelをパパと使うサンプル(select/update/create/delete/unique/constrains)

DB にアクセスするなら Sequel が便利 データベースにアクセスしてデータを扱うには Sequel が便利。ActiveRecordもいいんだけどアレはめんどくさい。 SQLに極めて近い構造で余計なことはなにもなく便利でいい。 インストール gem install sequel DBに接続 D…

RMagick が入らない: gem install rmagick error:Mac OS X/brew に rmagickをインストールする決定版

RMagick を久しぶりに使おうとしたら・・・ インストール gem install rmagick はい、エラー。extconf.rb ってほんと良く詰まるわ 色々調べたら、Rmagick が imagemagick 7 に非対応だった。 brew unlink imagemagick brew install imagemagick@6 brew link …

ruby の ri でgemのドキュメントが見られない

mac OSX の ri がgems パッケージを見てくれない。 ri はgems ファイルを探してくれないので、ri は使えないものだと思ってた。 takuya@~$ ri Sequel Nothing known about Sequel takuya@~$ OSX バンドルの ri が見てくれないだけだった。 takuya@~$ which r…