タグ

ブックマーク / blog.mah-lab.com (16)

  • インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365

    Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ

    インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365
  • 目の前にある問題から目を背けない〜レガシーコード改善勉強会で得たもの〜 | mah365

    先日9/27に「納品のない受託開発を支える レガシーコードを作らない仕組み」というテーマでレガシーコード改善勉強会にてお話をさせていただきました。 お話したスライド レガシーコード改善勉強会、と銘打たれている場所で話すにしては、レガシーコードへの直接的な対処法についてお話している内容ではないので、見る人によっては期待とズレてしまっていたかも知れません。 ただスライドで述べている通り、実際にレガシーコード化してしまうとシステムへの変更に多大なコストがかかってしまいます。更にシステムへの変更という観点ではアプリのコードだけでなくインフラの構成自体も問題になることがあり、個々のシステムの総体を含めてレガシー化させることなく継続的に保守を行うためには、どんな観点で対策を考える必要があるのか?というのが話の趣旨でした。 そもそもレガシーコードを改善できたとしても、レガシーコードが生まれる仕組みがある

    目の前にある問題から目を背けない〜レガシーコード改善勉強会で得たもの〜 | mah365
  • 「コードレビューをする」という成長の機会 | mah365

    「何かコードレビューについて、良いネタないですかね」と社内で振ってみたところ、「最近コードレビューされる側の記事を書いているみたいだけど、視点を変えて、する側の視点で考えてみては?」というアドバイスをいただきました。なるほど。 コードレビューをすることによる成長 「コードレビューをすると、いろんな発見があるよね」という話。なるほど、確かに言われてみれば、いつもいろんな発見がある気がする。他の人からもらう指摘も確かに勉強になるけれども、いざコードレビューするというときにもいろんな勉強をさせてもらっている。 例えば「うーん、読みづらいな・・・」と思うとき。何で読みづらいと思うのか? 自分のコードではどうなのか? どうすれば読みやすくなるのか? なんてことを逡巡したりする。 読みづらい、というのは単にコードが汚いというわけではなくて、コードレビュー時のチェックポイントをチェックする上で、権限周り

    「コードレビューをする」という成長の機会 | mah365
  • 実はみんな何をつくろうか迷ってる? | mah365

    tenten0213
    tenten0213 2014/08/01
    作りたいものが思い浮かばなかったから、社内システムを使いやすくするツール作ったってLTしたばっかだ。
  • ionicの画面をGUIで開発できるツールが出るらしい | mah365

    ionicの画面をGUIで開発できるionic Creatorというツールが出るようです。 どんなの? こんな画面のツールになるようです。 使用感としてはいわゆるGUIで画面を開発できるツールと似たようなものになるのでしょうか。GUIで作成した画面はCordovaのプロジェクトとして吐き出しを行うことができようです。モックアップ&プロトタイピングとうたっているように、モックアップした画面から即座に開発に入れるようになると、かなり良さそうです。 XcodeのStoryboardと異なる点は、Cordovaを使用しているためにAndroid向けにもビルドできることであり、モックアップの段階からマルチプラットフォームで動作確認しながら進められる&技術的にもAngularJSなのでつぶしの利く技術であることから、かなり流行って欲しいフレームワークですねー。あんまり身の回りで使っている話を聞かないの

    ionicの画面をGUIで開発できるツールが出るらしい | mah365
    tenten0213
    tenten0213 2014/07/22
    ちまちま触ってるあいだにどんどん進化してくな…
  • 全件取得したら重すぎて死んでしまうようなAPIの返り値を絞り込んで取得したい(Lazy Enumratorの話) | mah365

    Ruby2.0以上の話です。 ときにActiveRecord::Relationが便利なのは、実際にto_aされるまでSQLが発行されないことですよね。SQLが発行されるまではいろいろな条件をインスタンス内に保持しておいてくれます。全件取得してインスタンス化してから絞り込む、なんてしていたら死んでしまいますからね。これ、無限に要素がある配列から特定条件の要素のみ10個取り出したい、というときでも似たようなことできませんかね? Enumerable#lazyを使えばできるよ redditのWhats you’re favorite ruby trick or quirk that most people don’t know about.というスレでも話題になっていたのですが、例えば API経由でとあるサイトの記事が取得できるとする。 記事はすっごくたくさんある。全部取得とかしたら死ねる

    全件取得したら重すぎて死んでしまうようなAPIの返り値を絞り込んで取得したい(Lazy Enumratorの話) | mah365
  • モバイルアプリ向けUIフレームワークionicを学べるサイトが公式にできていた | mah365

    過去にionicというモバイルアプリ向けUIフレームワークを紹介する記事を書いたのですが、そんなionicを学べるサイトが公式にできていました:Learn ionic おさらい:ionicとは? ionicとはAngularJSに最適化されたモバイルアプリ向けのUIフレームワークです。 Cordova(PhoneGap) AngularJS Sass というスタックで構成されており、はじめからCordovaで動かすことを念頭に置かれているため、モバイルアプリをつくるのに適したフレームワークです。 ドキュメントが大変充実しているのも特徴の一つです。前回ご紹介してからもコツコツと改良が続けられており、Cordovaベースでモバイルアプリをつくるなら、ionicは当に選択肢の一つになるなー、という感じです。 Learn ionic そんなionicですが、公式で学習サイトが用意されました。Le

    モバイルアプリ向けUIフレームワークionicを学べるサイトが公式にできていた | mah365
  • opening-iterm-nothing-to-switch-desktop

    iTermをご愛用のみなさま、こんにちは! MacOSX Lion以降になって複数デスクトップを使っていると、Cmd + TabでiTermを開こうとしたときにデスクトップをいちいちアニメーションで移動しやがるのがうざったいなと思うことはありませんか? 僕は思います。 特にRubyMineを使っていると、かのVisorのように、上からひょいっとターミナルが出てきてくれたら便利だなと思うことが多々あります。Terminal.appは正直使いづらいので、iTermでそれを実現したいなー。そんな訳で設定してみました。 上からひょいっと現れるiTermの設定 プロファイルの設定画面でWindowタブからSettings for New Windowsの設定を変更します。 Styleを「Top of Screen」に Spaceを「All Spaces」に Rowsの値はウィンドウの縦の大きさに連動

    opening-iterm-nothing-to-switch-desktop
    tenten0213
    tenten0213 2014/04/23
    地味に便利な気がする!
  • deviseのafter_sign_in_path_forをHashで華麗に書く | mah365

    Hash Selector Patternという記事を読んでいたら、コメントにdeviseのafter_sign_in_path_forをHashで華麗に書いてあるコードがあって、「おおっ」と思ったのでした。というわけで今日はRubyの話。 こんなコード ユーザーのタイプに応じてログイン後のページを変える場合、大体こんな感じのif分岐になると思います(もしくはcase文とか)。 def after_sign_in_path_for(resource) if resource.kind_of?(AdminUser) admin_dashboard_path elsif resource.kind_of?(Customer) customer_root_path elsif resource.kind_of?(Staff) staff_root_path elsif resource.kind

    deviseのafter_sign_in_path_forをHashで華麗に書く | mah365
  • RubyのGemの作り方をまとめた本が出るらしい。これはありそうでなかったのでは。 | mah365

    RubyのGem、結構カジュアルに作っているし、カジュアルに使ったりもしているけれども、作り方をまとめたって、なかったよなーという印象です。 Learn to Build a Ruby Gem この、Learn to Build a Ruby GemはそんなRubyのGemの作り方をまとめたです。 目次がなかなかすごい。 Introduction Structure Testing Code Release Versioning Changelog Responsibility Loading Command-line Utilities Configuration Patterns Rails Hooks Rails View Helpers Rails Controller Includes Rails Model Includes Rails Rake Tasks Rails

    RubyのGemの作り方をまとめた本が出るらしい。これはありそうでなかったのでは。 | mah365
  • イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365

    社内の8割方の人間を敵に回すタイトルです。RubyMineを使いはじめてから、かれこれ1年が経ちますが、もうRubyMine無しではRuby on Rails使えません。それぐらいに便利なので、そろそろちゃんとご紹介しようと思うのです。 ちなみに僕は、 vimEmacs → Sublime Text → RubyMine(今ココ!) という感じにエディタを渡り歩いています。 6になって、最強が更に最強になった つい先日、RubyMineがメジャーバージョンアップして6になりました。これにより以下の機能が加わり、より最強になりました。 IDEの中でターミナルを開けるように Zeusを標準で扱えるように(どうせならSpringもサポートして欲しかったけど・・・) 「今までできなかったのかよ!」とツッコミを受けかねない機能追加なのですが、いちいちウィンドウを切り替えてターミナル叩きながらコ

    イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365
  • はじめてオブジェクト指向を「なるほど、そういうものなのね」と思ったときの説明 | mah365

    中学生ぐらいからプログラミングはしていたのですが、長らくオブジェクト指向というのがよく分かっていない時期がありました。 MFCでプログラミングしたりするためには理解できていなければならないものだったのですが、もののを読んでも「Animalクラスを継承したDuckクラスのインスタンスがガーガー鳴く・・・で?」という感じで、全く要領を得られませんでした。 GUIプログラミングを覚える定番課題「電卓」 Webアプリケーションの作り方を覚える定番がECサイトであるように、GUIのアプリ(ネイティブアプリと言った方がいい?)の作り方を覚える定番は電卓だと思います。むやみやたらとボタンも多いし、地味に機能が多いですからね。 こんな感じの電卓。M+とかM-といった機能を入れ始めると、いきなり難易度が高まり始める。 ここから作っていくとすれば、単純にボタンでクリックイベント(OnClickとか)をハンド

    はじめてオブジェクト指向を「なるほど、そういうものなのね」と思ったときの説明 | mah365
  • 久しぶりにCordova(PhoneGap)を触っているけれども、あらゆる動作が簡単なコマンドラインで実行できるおかげで本当に使いやすくなった | mah365

    昔Cordova(PhoneGap)を試していた時は、今よりも大分使いにくいものだったという印象がある。 新しいプロジェクトを作るときも、~/dev_tools/phonegap-2.2.0/lib/ios/bin/create ...みたいな感じで各デバイスのライブラリパスから同じ名前のコマンドを実行させる形だったので、「え、これ、マルチプラットフォームとかどうやるのよ」と、ユーザーを相当悩ませる感じの仕組みだった。 そのためか、PhoneGap BuildやMonacaというビルドツールが大変便利で、むしろこういうビルドツールがないとやってられない状況にあったと思う。 (知らない人向けに)Cordova(PhoneGap)とは HTML+JavaScriptでiOSやAndroidといったスマートフォン向けのアプリを開発するためのライブラリ。歴史は長く、2012年代にかなりいろんなサイ

    久しぶりにCordova(PhoneGap)を触っているけれども、あらゆる動作が簡単なコマンドラインで実行できるおかげで本当に使いやすくなった | mah365
  • 「あああ、せっかく書いた内容が消えちゃった><」を防ぐjQueryプラグイン、Garlic.js | mah365

    「ブラウザ上で長い返信を書いていたのに、目を話した隙にiPhoneがスリープモードになっていて、スリープモード解除してブラウザを見ようとしたら、なぜか勝手に再読み込みされて返信内容が消えてしまった・・・( ˘ω˘)」なんてことはありませんか? 僕はたまにあります。 こんな事故が起こらないようにするのもWebサービスとしてのおもてなしかも知れません。そんなおもてなしを簡単に実現できるのがGarlic.jsです。 対応ブラウザ IE8+, Chrome 4+, FF 4+, Safari 4+, Opera 11+ 使い方 jQueryと一緒に読み込む 書いている内容の保存はlocalStorageにされます。なので、IE6または7に対応する場合は上記のコードのようにlocalstorageshim.jsを読み込んで、localStorageをエミュレートする必要があります。ただこの場合、UR

    「あああ、せっかく書いた内容が消えちゃった><」を防ぐjQueryプラグイン、Garlic.js | mah365
  • AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは | mah365

    HOMEソフトウェア開発AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSはあくまでクライアントサイドのフレームワークなので、サーバサイドをどうしようかなーと悩むことがあると思います。Railsが得意ならRailsに組み込むのもいいんですが、Railsはビューヘルパーが異様に充実しているので、Rails上でAngularJSのコードを書いてるとRailsの良いところが10%も生かせてない気がして辛い気持ちになってきます。うーん、どうしよう。 そんな風に悩んだらYeomanのgeneratorであるgener

    AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは | mah365
  • モバイルアプリ向けUIフレームワークionicがSassで作られている&AngularJSに最適化されていて俺得すぎる | mah365

    HTML5でモバイルアプリを作るなら、UIはionicで決まりなのでは!と思えるぐらい良いライブラリです。AngularJS&Sass派の人はぜひ使ってみてはいかがでしょうか。 はじめからAngularJSで使うことを念頭に置かれているのが良い はじめからAngularJSで使うことを念頭に置かれているので、モバイルアプリで当たり前に使う機能をAngularJSから簡単に操作できるように、ionic-angular.jsというライブラリが用意されています。 ナビゲーション(Views and Navigation) テーブルビュー(List) タブバー(Tab Bar) スライドメニュー(Slide Menu) などなど、一通りの機能がAngularJSから操作できるようになっています。 設計方針もCocoa Touchっぽくしているとのことで、iOSネイティブで開発していた人にもとっつき

    モバイルアプリ向けUIフレームワークionicがSassで作られている&AngularJSに最適化されていて俺得すぎる | mah365
    tenten0213
    tenten0213 2014/01/30
    最近Angularさわってるから使ってみよ
  • 1