expectって便利だね!

こんにちは、有村です!
寒くなりましたね、冬ですね!!

さて今日は、「expectって便利だね!」がテーマです!
翻訳すると「期待」になりますが…いったい何を期待するんだ……

私の場合、会社のサーバに自宅から繋ごうとする際にシェルを実行するんですけど、それは

みたいな内容で書いていたんですよね。
そうすると、

と毎回パスワードを聞かれる。そして打つ。そう、毎回。

このパスワードはその度に異なるのかというとそうではなく、固定。
つまり、変化するのはIPだけなので、自分で入力するのもIPだけにしたかったんです。

何が起こっているのかと流れを追うと、
1. シェルで接続しようとする
2. 相手が「パスワードはなに?」と聞いてくる
3. パスワードを答える
4. 繋がる
ですね。
2と3は、「聞かれて答える」ということから対話形式と言うそうです。

毎回パスワード打つの面倒やんな〜と愚痴ってたら、「じゃあこれあげる」と素敵なシェルをいただきました!
それは…

というもの!

先ほどのシェルとの違いは、
・パスワードが定数になってる
expectっていうのが出てきた!
が大きいと思います!

spawnは、expect内で使える「プロセスの生成」です。
SSH接続のプロセスを開始するよ〜と言ってるんですね!

で、上に出てきたexpectが今回のポイントで、こいつは「マシンからの応答(対話)を読み取ってくれるやつ」です!

は、ダブルクォートで囲まれた部分を自動対話処理するよということ。
また、

では、「passwordを聞かれる」という対話の読み取りが期待されているんですね!

sendは、文字列を送信するコマンド。
つまり、「パスワードくれくれ」に対して、「これやで〜」と自動的に答えを返してくれているんです!

interactは、対話の終了。もうおしまいということ。

ほぉ〜!聞かれることが既に分かっているなら、expectを活用したほうが断然便利ですね!
私の場合はパスワードだけだからよかったものの、もっと複雑なことをやろうとすると、
「何回対話させんねん」ってくらい打ち込む項目が増えたりしそうですし…

それでは、きょうはこのへんで。

シェルコマンドでファイル名を取得したい!

こんばんは。有村です。
最近は前にも増して仕事がスムーズに進まないことが悩みです。分からないことが多すぎるので。
なので今日は気分を変えて〜疲労感を全面に出した喋り方で記事を書いてみま〜す。

さてさて〜今日ひっかかったことはこちら〜。
シェルコマンドを使ってファイル一覧を取得したい
でも取得にはちゃんと条件があるんですよ〜。
・特定の文字列と前方一致したファイルだけが対象。
・パスはいらない。
・拡張子はいらない。
・つまりファイル名だけが欲しい。
ワガママですね〜。でも多少困難がないと人生つまらないですからね〜。
さらに、今回実現するにあたっては、
・時間がそれなりに限られる
有村はシェルスクリプト書けない。なんとかワンライナーで。
という付加条件も加わっていたのですよね〜。困った〜。

で、早速ですが、どうしたかって答え。

でいけました〜!
私が全部書いたわけじゃないんですけどね。有村無能!!

まず、シェルとかよく分かんね〜ってところからのスタートだったので、ポイントをいくつか〜。
・|(パイプ)は、パイプ前の実行結果をパイプ後のコマンドの入力値にする。Smartyのmodifierと記法や考え方は一緒か。
・basenameは、引数に指定されたパス名から、ファイル名だけを取り出してくれる。findの結果はパスで返ってくるから、こいつでファイル名だけにするということ。でもこいつだけだと、まだ拡張子が残ってる。
・xargsはまだ理解しきれていないけど、上のパイプ前の実行結果一覧を引数にして、パイプ後のコマンドを実行するやつ。
-nはいくつ毎にコマンドへ引数を渡すか、のオプション。つまり上の例だと、basenameの処理は1ファイル毎に実行される。
・sedは置換コマンド。basename処理後のファイル名から、拡張子を取っ払う。正規表現つかえる!便利!けど有村は書けない。

ひとつひとつ読んでいくと、パイプ毎にひとつの処理のまとまりがあって、その結果を使って次の処理を…ってやっていってるんですね〜。
なんだかそれだけ聞くと、書き方は違うけどやってることはJSとか他の言語と変わらんなってなりますね〜。

ワンライナーでやろうとするからややこしくなるんじゃ!シェルスクリプト書けや!と、きびし〜ご意見をいただきましたので、いつか「泣きながらシェルスクリプト書いてみた」的な記事を書く日が来るかも知れませんね〜。
ぼくはつかれたよパトラッシュ

それでは、今日はこのへんで。
おやすみなさい〜。

原則を知る ーDRYー

こんばんは、原田です。

さっき地元の知り合いから電話がきて、地元に帰りたくなりました。はい。

 

 

最近、上司に「どれが良い実装で、どれが悪い実装なのかが分からない」と相談しました。

すると、「原則を知るといい。」という助言を頂きました。

原則  …特別な場合は別として、一般に適用される根本的な法則。

確かに、原則を知ることは、いいコードが分かる導きになるかもしれないと思い、これからちょいちょい原則を書いていこうと思います!!!

 

ではでは、

今日の原則は〜・・・・

DRY

です。

乾燥という意味ではありません。(知らなかったのは私だけですかね?)

DRY(Don’t  Repeat Yourself)

重複を防ぐ考え方。

Single Source of truthとも言うそうです。

 

なぜ重複を防いだ方が良いのか?

重複が多い→変更時に変更箇所が増える→時間がかかる

情報量が多い→明確でない→不一致が生じる可能性がある

という点があるからだそうです。

 

ということで、今後はまとめることができたり、同じような実装が複数ある場合は、関数化したりしてDRYに努めようと思います。

modifierって便利ですね

こんばんは。有村です。

私はWEB制作の際にSmartyも使ったりします。
PHPとかよく分からないゲロゲローな状態でも、いい感じに実装を進められる素晴らしいテンプレートエンジンですよね。(←精進しろ)

Smartyで最近覚えた便利技のひとつに、modifierがあります。
modifierを一言で表すと、「変数を手軽に加工できるヤツ」ですかね…?

以前からmodifierという名前は聞いていましたが、それ何?一体何が便利なの?3行で説明よろ^^
くらいにしか思っていませんでした。
そんな中、いろいろ実装を進めていく中で、「変数の文字を20字以内に丸めたいな…」とか「変数をsha1で暗号化したいな…」とか、変数をアレコレする必要がわんさか出てきてしまったのです。

最近まで、変数を加工したいなと思ったときは、毎回テンプレートで変数をゴリゴリいじるか、これまた毎回PHP側に加工をするための処理を書いていました。
ただこれだと、複数のページや箇所で同様の処理をする必要がある時、同じような処理記述が量産されていくんですよね…。(書き方悪いだけってのもあるんですけど)

ゴミのような記述を量産する私を見かねて先輩が教えてくれたのが、modifierです。
たとえば、「sha1で暗号化するmodifier」を先に用意しておき(仮にmodifier名をedit_sha1とします)、
テンプレートで変数を使う際に

と書きます。
そうすると、modifierによってsha1で暗号化された$hogeがフロントに表示されるのです!ただこれだけ!簡単!

…まあ、これだけの処理なら、PHPで値を渡す段階で一緒にやってもほぼ変わらんと思います。
ただ私が一番便利だなと思ったのが、「先にmodifierさえ用意しておけば、PHPを触らなくてもテンプレートだけで解決できる」という点です。
modifierを使えば、「なんだかよく分からんけどこれを付ければ文字を丸められるらしい」とか、「文字を加工できるらしい」とか、PHPを触れない(触らない)人でも手軽に変数をアレコレすることができますよね。
昨今はデザイナーさんがコーディングも行う会社も増えているので、そういった場合に便利なんじゃないかなーと思います。

今は「何回も使いそうな処理なら、modifierを作ってしまえ!」と考えながら仕事をしています。
でも、バカのひとつ覚えで、ゴミみたいなmodifier量産するな!と怒られないようにバランスも取らないとね…

それでは、今日はこのへんで。

比較演算子と論理演算子

お外は暑いし、オフィスはクーラー寒いし。
この季節は気温差に体が夏バテ…とほほ。

そんな、今日覚えたいのは、比較演算子と論理演算子

基本としては…。
【比較演算子】
> 大きい
>= 大きいか等しい
< 小さい <= 小さいか等しい == 等しい != 等しくない たまに左右がどっちだっけってなるんですよね…。 例) a>1 → aが1より大きい時真(ture)
例) a==1 → aが1の時真(ture)

【論理演算子】
! 否定(NOT) 真ならば偽、偽なら真
&& かつ(AND) 両方が真の時真
|| または(OR) どちらかが真の時真

例)!b → bが真(true)ならば偽(false),bが偽(false)なら真(true)
例)b&&c → bとcが真(true)なら真(true)

あぁ、でもこうやって真とか偽とかって、なってくると逆にこんがりそうっ。

難しく考えすぎず、とりあえず色々使ってみなきゃだな。
演算子、他にもあるんだよね。。。。少しずつ覚えよー(´Д` )