-
先日の記事に引き続き、リモートでシェルスクリプトを実行するのに、今回はFabricを使う話。 FabricについてはFabricをちょっと試してみた話からたまに複数台のサーバーにオペレーションをしたい時に使うようになった。サクッと使うのにとても便利だ。 今回はリモートサーバーにあるシェルスクリプトをFabricで実行する際に、引数を予めfabfileに書いておきたい場合の記述方法を書いておく。 単純にググってみてもなんだかenvの話ばかりであんまりそれっぽいのが出てこず、ちょいと悩んでしまったので。 例えば、下記のようなシェルスクリプトがあったとする。 [code] #!/bin/bash echo $1 $2 [/code] ここの$1と$2をfabfileのタスクで、下記のように書いても良い場合はそれで良いと思う。 [code] def testshell(): run("/bin/bash test.sh HOGE POYO") [/code] ただ、HOGEとPOYOを別のタスクでも使いまわしたいなぁ〜ってことも無きにしもあらずだと思う。 そんな場合は、定数として切り出したいよねとは誰しもが考えると思う。 前述の通り、最初はenvのことばかりでちょっと違うやんって思ってたけど、公式サイトを見直して5回目くらいにちゃんと書かれていた。 結局はenvとおなじなのだけど、下記のように記述することができる。 [code] VAR1=HOGE def testshell(): run("/bin/bash test.sh %s" % VAR1 ) [/code] また、複数書くときは、括弧で閉じてカンマ区切りで連続してかけばOKだった。 [code] VAR1=HOGE VAR2=POYO def testshell(): run("/bin/bash test.sh %s %s" % (VAR1, VAR2)) [/code] これであらかじめ設定しておいた定数を使い回しできるようになった。 また一つFabricが便利だと思った。
-
こんにちは、いなむーです。 Rubyのアクセス制限である、privateとprotectedを試したみたのでそのメモを残しておきます。 参考サイトにさせていただいたサイトはこちら↓ [blogcard url=http://ubiqlog.com/archives/9421] 本来Rubyでは、レシーバーなしでのメソッド呼び出しはできない。 このため、自クラス及びサブクラス内のメソッドの呼び出すためには、selfというレシーバーを用いなければならないのだが、例外的にselfレシーバーだけは省略できる。 この省略形を関数形式と呼んでいる。 private テストコード(1) ここでは、privateに設定したメソッドを、関数形式で呼び出します。 [code] class Sample1 def call1 call_private end def call_private p “private dayo” end private :call_private end s1 = Sample1.new s1.call1 [/code] 実行結果 [code] $ ruby test2.rb “private dayo” [/code] 正しく呼びだされていることがわかります。 テストコード(2) ここでは、privateに設定したメソッドを、レシーバを指定して呼び出します。 [code] class Sample1 def call1 self.call_private end def call_private p “private dayo” end private :call_private end s1 = Sample1.new s1.call1 [/code] 実行結果 [code] $ ruby test2.Created
Mon, 13 Jun 2016 14:59:08 +0000 -
こんにちは、いなむーです。 最近、「カンバン仕事術」を読んだ時に、工数はフィボナッチ数列で出すと良いというのを見かけました。 前職でも、開発の人がフィボナッチ数列で出すと良いという話から工数を算出してみたら、結構良いかもって言ってたのを思い出しました。 具体的な内容はWikipediaを参照すると良いですが、自然界にも日常にも多数存在する数列で、黄金比とも関係があるようです。 名刺とか、タバコ、マンガ本などもこのフィボナッチ数で構成されているようです。 [blogcard url=https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0] 正直数学的なことはあまり得意な方ではなかったのですが、なんとなく、atcoderばかりじゃなくて違うことがしたかったので、Rubyでフィボナッチ数列のアルゴリズムを書いてみることにしました。 雑な感じですがこんな感じ。 [code] F0 = 0 F1 = 1 arr = Array.new arr = [F0, F1] num = 0 while num < 15 arr « arr[-1] + arr[-2] num = num + 1 end puts arr [/code] 結果はこちら。 [code] 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 [/code] ちゃんとフィボナッチ数列になってますね。 単純なアルゴリズムではありますが、なんとなく好きな数列だったの取り上げてみました。 以上。Created
Fri, 03 Jun 2016 14:59:00 +0000 -
こんにちは、いなむーです。 毎度いつものatcoderです。 今回はabc038のaとbを解きました。 早速aの問題。 [blogcard url=http://abc038.contest.atcoder.jp/submissions/748589] コードはこちら。 [code] S = gets.chomp.to_s puts S[-1] == ‘T’ ? ‘YES’ : ‘NO’ [/code] ここでのポイントはStringメソッドを使用しているところです。 S[-1]とすることで最後から1文字目を抽出して、チェックしてます。 次にb問題。 問題はこちら。 [blogcard url=http://abc038.contest.atcoder.jp/tasks/abc038_b] 巨大ディスプレイの話ですね笑 一瞬解像度かな?と思うのですが、1920mmとかでているので、1.92m幅のディスプレイを使っているようなので、会議でもするのでしょうか。 実際に書いたコードはこちら。 [code lang=”ruby”] class ABC038b def setvar array = Array[] STDIN.read.each_line do | var | array « var end @H1, @W1 = array[0].split(‘ ‘).map { | v | v.to_i } @H2, @W2 = array[1].split(‘ ‘).map { | v | v.to_i } endatcoder Created
Tue, 31 May 2016 13:22:36 +0000 -
こんにちは、いなむーです。 いつものatcoderシリーズです。 最近Bも解けるようになってきたので、Bも挑戦するようにしています。 Bでは比較的配列操作などすると、スムーズに解けるイメージがついてきたので、もう少し頑張ってCまでいけたらなぁという所感です。 ということでまずAの問題はこちら。 [blogcard url=http://abc031.contest.atcoder.jp/tasks/abc031_a] そして、書いたコードがこちら。 [code] class ABC031a def inputnum @A, @D = STDIN.gets.split(/ /).map { | var | var.to_i } end def display self.inputnum if @A.between?(1,200) && @D.between?(1,200) @Aup = (@A + 1) * @D @Dup = (@D + 1) * @A end if @Aup > @Dup p @Aup else p @Dup end end end x = ABC031a.new x.display [/code] この問題で良かったのが、上記コードについては特に大きく悩むことなく一発で書けて、atcoderでも100点を取れたことです。 splitでスペース区切りで変数に入れるところや、betweenで範囲を指定するメソッドなど、過去に何度も使用してきているので書くことへの抵抗が減っているのは大きいなと感じます。 そして、B問題はこちら。 [blogcard url=http://abc031.contest.atcoder.jp/tasks/abc031_b] 私が書いたコードはこちら。Created
Mon, 30 May 2016 14:59:11 +0000 -
こんにちは、いなむーです。 最近Rubyを勉強しはじめたのですが、なかなか実際の業務に取り入れるまでに至っていないのが現状です。 そんなことを会社の人たちに話をしていたところ、とても面白そうなサイトをいくつか教えていただいので、私が実際にやってみた4つのサイトをご紹介します。 ドットインストール [blogcard url=http://dotinstall.com/] 動画で勉強できるサイトです。 PHPを勉強した時にもお世話になりました。 大変わかり易く、一つ一つのレッスンが数分程度なので、時間が無くても少しづつ始められます。 実際に入力するようなことが無いので、復習する必要はありそうです。 コードガールこれくしょん [blogcard url=https://paiza.jp/cgc/] ソシャゲ風のサイトです。 記憶を失った主人公と女の子が協力して、コードを書きながら、記憶を取り戻していくという設定です。 最初は四則演算などを繰り返し実施していき、簡単に感じられますが、ガチャなどでコードガールを集めていけるところに面白みを感じます。 体力がなくなるとゲームができなくなるので、その点はソシャゲと同様のシステムです。 Ruby Warrior [blogcard url=https://www.bloc.io/ruby-warrior#/] 8bitゲーム風のサイトです。 各ステージで専用のメソッド(warrior.attack!→攻撃)を使って、敵を倒していきます。 専用のメソッドの使い方が最初はわからないですが、画面上部のヒントとABILITIESを見るとなんとなく進め方がわかってきます。 よく出来ているので、この場合はどう書いたら良いのだろう?という発想が生まれやすいので、考え方の部分が実践的だと思います。 全て英語ですが平易な単語ばかりなので、辞書などで単語の意味をひいていけば理解できるレベルです。 AtCorder [blogcard url=http://abc036.contest.atcoder.jp/] 一問一答形式のサイトです。 初心者向けから、上級者向けの問題があります。 コードを書いて提出すると、テストが自動的に実行されて、テストが通ると合格となります。 ちょっとした問題でも初心者には分からない内容などもあり、最初は戸惑いましたが、合格となると嬉しくなります。 最初理解していなくて、ローカル環境ではうまくいってるのになんで〜というのが何度もあって、結構間違えてしまいました。。 ※Rubyを選択していなかったとか、標準入力でキーボードからの入力のみを考えていて、ファイルから読み込むことを考えていなかったなど。 上記4つのサイトはいずれも無料で利用できるので(有料プランについては未確認ですが)、とにかくRubyを始めてみたいという人にはオススメのサイトばかりです。 ぜひお試しください。 以上。Created
Wed, 04 May 2016 08:00:51 +0000 -
周りの環境により中々Rails環境まで作ったことが無かったのですが、今日開発の方の希望により作ることになり、若干ハマったのでメモします。 環境 CentOS release 6.7 (Final) Apache2.2 Ruby 2.2.4(rbenvで管理) Rails 4.2.5 Rubyのインストール パッケージのインストール # yum install gcc gcc-c++ make autoconf openssl-devel readline-devel mysql-devel wget git # yum install zlib zlib-devel openssl-devel sqlite-devel gcc-c++ glibc-headers libyaml-devel readline readline-devel zlib-devel libffi-devel rbenvのインストール # yum install openssl-devel readline-devel zlib-devel libcurl-devel # cd /usr/local # git clone git://github.com/sstephenson/rbenv.git rbenv Initialized empty Git repository in /usr/local/rbenv/.git/ remote: Counting objects: 2325, done. remote: Total 2325 (delta 0), reused 0 (delta 0), pack-reused 2325Ruby on Rails Created
Mon, 21 Dec 2015 10:38:45 +0000 -
はじめてのプログラミングと言えば、イメージ的にはお問い合わせフォームかと勝手に思い、早速作ってみることにしました。 入力をformで作り、submitでメールを送信させるPHPファイルに渡すという極シンプルなものでしたが、一つ問題が。 完了画面&メール送信PHPファイルにアクセスした段階で、ブラウザを更新すると更新しただけメールが送られてしまいます。 対応方法はいろんな方法があるようですが、最も簡単なPHPのheader関数で処理することにしました。 要はリダイレクトさせる処理なのですが、処理が正常にいったら、完了ページHTMLへリダイレクトさせるというもの。 以下のようにしてあげれば、勝手にリダイレクトしてくれます。 if ($mailsend) { header(“Location:./complete.html”); exit(); } 最後にexit()でエラーが発生した場合にPHPの処理を停止させるのがポイントのようです。 こうゆうとこインフラエンジニアとしてはちゃんと抑えていきたい所ですね。 とりあえず公開する予定の無いお問い合わせフォームはこの程度で良いとして、処理を実行するPHPファイルを攻撃されたら一緒やん?と思っているのですが、どうなんでしょうか。 その辺はセッションを持ったりするとかしないとかっていう話なんかと思うので、またいずれ。 今日はここまで。 おしまい。
-
PHPをいざさわり始めると、あれやりたりけど、どうしたらいんだろう? なんていう疑問がたくさん生まれてきます。 つい最近だと入力フォームの日付入力欄で、HTML5から?かdate入力ができるようになりました。 そしてデフォルト値を「value=””」というオプションで指定することが可能です。 例えば、 <p style="padding-left: 30px;"> <input type="date" name="mondate" value="2015-05-20" title="日付を入力をしてください。" required> </p> こんな感じにで値が決められます。 しかし、日付入力なんか、今日とか近い日付入力したい(させたい)だろうに、決め打ちの場合の用途では困る状況があります。 そんな時みんなどうしているのかなぁとネットで調べてみましたが、基本的すぎるからなのかJavaScriptでやる方法しか見つからず、困りました。 なぜならJavaScriptこそもっと触ったことがなかったからです。 勉強にJavaScriptでやっても良いのですが、日付入力なんかPHPでできるんじゃないかなぁ?と思い、思いつくままに書いてみたら、うまくいったので残しておきます。 <p style="padding-left: 30px;"> <input type="date" name="mondate" value="<?php echo date('Y-m-j');?>" title="日付を入力をしてください。" required> </p> たったこれだけでOKです。 要はvalueにPHPの関数を埋め込んだだけ。 一昔まえはJavaScriptでクライアント側で処理させるのが当たり前だったのかと思いますが、今となってはPHP使えないレンタルサーバーなんて殆どありませんから、PHPでデフォルト値を決められるのはありがたいですね。 以上です。おしまい。 よくわかるPHPの教科書 【PHP7対応版】PHP Created
Wed, 20 May 2015 15:07:11 +0000