• the_category()に見るカテゴリーとタグの使い分けについて

    WordPressを使っていて、いつも思うのはカテゴリーとタグの取扱いについてだ。

    カテゴリーは階層を持っており、タグは全て並列に存在する。

    どちらも複数指定して良い気がする。

    ループ内で使う関数は、タグがthe_tags()と複数形であるのに対し、カテゴリーはthe_category()と単数系である。

    これは1記事に対して1カテゴリーしか付けない前提なのではないかと思う。

  • rails new [アプリケーション名]

    rails g controller [コントローラー名]

    rails g model [モデル名]

    rails server

    rake db:migrate

  • pre_get_postsを使う

    add_action( 'pre_get_posts', function( $query ){
        if( $query->is_category() ){
            $query->set("order","ASC");
            $query->set("orderby","title");
        }
    });
    
  • 投稿と固定ページを一緒にするsingular.php

    WordPressの4.3.xから、singular.phpというテンプレートが増えたようだ。
    これはsingle.phpとpage.phpをまとめたテンプレートで、
    single.php、page.phpのいずれか、あるいは両方がなく、singular.phpが存在する場合に読み込まれる。
    投稿と固定ページは同じことが少なく無いので、これは便利なテンプレート。
    なぜ今までなかったのか。

  • io/consoleガーの件

    passengerの設定が終わって、Apache上でRailsが動くようになって、ようやく作業出来るかな、と思い

    $ rails g controller welcome
    1
    ってやったら
    1
    Warning: Running `gem pristine --all` to regenerate your installed gemspecs (and deleting then reinstalling your bundle if you use bundle --path) will improve the startup performance of Spring.
    Running via Spring preloader in process 24655
    /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require': cannot load such file -- io/console (LoadError)
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `block in require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell/basic.rb:2:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `block in require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell/color.rb:1:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell.rb:17:in `shell'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/base.rb:439:in `start'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/generators.rb:157:in `invoke'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/generate.rb:13:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `block in require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:123:in `require_command!'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:130:in `generate_or_destroy'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:50:in `generate'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `block in require'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:274:in `require'
    	from /var/www/html/rails/dev/bin/rails:9:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `block in load'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
    	from /usr/local/share/ruby/gems/2.0/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
    	from /usr/local/share/ruby/site_ruby/2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    	from /usr/local/share/ruby/site_ruby/2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    	from -e:1:in `<main>'
    

    だってよ。

    gem install io-console
    

    io/consoleじゃなくてio-consoleなのは注意。

    Gemfileに

    gem "io-console"
    

    と追記してbundle install

    これで動くようになった。

  • ApacheでRails動かすには一工夫必要だった

    忘れてた。

    $ gem install passenger
    
    $ passenger-install-apache2-module
    

    基本的にはEntreキー押すだけで作業が進むのだが…。

    --------------------------------------------
    
    Installation instructions for required software
    
     * To install Apache 2 development headers:
       Please install it with yum install httpd-devel
    
     * To install Apache Portable Runtime (APR) development headers:
       Please install it with yum install apr-devel
    
     * To install Apache Portable Runtime Utility (APU) development headers:
       Please install it with yum install apr-util-devel
    

    色々足りませんと言われるので指示通りに。

    sudo yum install httpd-devel
    読み込んだプラグイン:priorities, update-motd, upgrade-helper
    依存性の解決をしています
    --> トランザクションの確認を実行しています。
    ---> パッケージ httpd-devel.x86_64 0:2.2.31-1.6.amzn1 を インストール
    --> 依存性の処理をしています: httpd = 2.2.31-1.6.amzn1 のパッケージ: httpd-devel-2.2.31-1.6.amzn1.x86_64
    --> トランザクションの確認を実行しています。
    ---> パッケージ httpd.x86_64 0:2.2.31-1.6.amzn1 を インストール
    --> 依存性の処理をしています: httpd-tools = 2.2.31-1.6.amzn1 のパッケージ: httpd-2.2.31-1.6.amzn1.x86_64
    --> 依存性の処理をしています: apr-util-ldap のパッケージ: httpd-2.2.31-1.6.amzn1.x86_64
    --> トランザクションの確認を実行しています。
    ---> パッケージ apr-util-ldap.x86_64 0:1.4.1-4.17.amzn1 を インストール
    ---> パッケージ httpd-tools.x86_64 0:2.2.31-1.6.amzn1 を インストール
    --> 衝突を処理しています: httpd24-2.4.16-1.63.amzn1.x86_64 は httpd < 2.4.16 と衝突しています
    --> 衝突を処理しています: httpd24-tools-2.4.16-1.63.amzn1.x86_64 は httpd-tools < 2.4.16 と衝突しています
    --> 依存性解決を終了しました。
    エラー: httpd24-tools conflicts with httpd-tools-2.2.31-1.6.amzn1.x86_64
    エラー: httpd24 conflicts with httpd-2.2.31-1.6.amzn1.x86_64
     問題を回避するために --skip-broken を用いることができます。
     これらを試行できます: rpm -Va --nofiles --nodigest
    

    エラー…。

    $ sudo yum remove httpd24-tools
    

    コンフリクトしてるよって言われたので、ドキドキしながら削除。

    $ passenger-install-apache2-module
    

    再挑戦。

    --------------------------------------------
    
    Installation instructions for required software
    
     * To install Apache 2:
       Please install it with yum install httpd
    
     * To install Apache 2 development headers:
       Please install it with yum install httpd-devel
    
     * To install Apache Portable Runtime (APR) development headers:
       Please install it with yum install apr-devel
    
     * To install Apache Portable Runtime Utility (APU) development headers:
       Please install it with yum install apr-util-devel
    

    さっきより注文増えてる…。
    さっきので、本来必要だった依存ファイルが一緒に削除されてしまったっぽい。

    $ sudo yum install httpd
    

    再度インストール。

    $ passenger-install-apache2-module
    

    再々挑戦。

    今度はうまくいった。

    Please edit your Apache configuration file, and add these lines:
    
       LoadModule passenger_module /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.23/buildout/apache2/mod_passenger.so
       <IfModule mod_passenger.c>
         PassengerRoot /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.23
         PassengerDefaultRuby /usr/bin/ruby2.0
       </IfModule>
    

    言われた通りhttpd.confに上記を追記、DocumentRootを任意の場所に修正して、Apache再起動!

    We’re sorry, but something went wrong.
    We’ve been notified about this issue and we’ll take a look at it shortly.

    …おいおい。
    よくわからないが、productionモードだとダメってことらしい。
    別の設定が必要なんだろうが、とりあえず動かしたいのでdevelopmentモードに切り替える。

    これもhttpd.confに追記するようだ。

       <IfModule mod_passenger.c>
         RailsEnv development
         PassengerRoot /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.23
         PassengerDefaultRuby /usr/bin/ruby2.0
       </IfModule>
    

    と追記。

    今度こそとサーバーを再起動すると…

    There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
    

    うるさい。
    原因はnode.jsが入っていないせい?

    AWS EC2上にNodeをインストールする手順まとめを参考にnode.jsインストール。

    まだダメだ。

    エラーメッセージが相変わらず。

    There was an error while trying to load the gem ‘uglifier’. (Bundler::GemRequireError)

    rails s で There was an error while trying to load the gem ‘uglifier’.と言われる解決方法。を参考にGemfileを書き換える

    gem 'therubyracer', platforms: :ruby
    

    コメントアウトされているので、頭の#を取り除き

    $bundle install
    

    でOK。

  • Gem自体のバージョン上げとけカスって言われたので対応

    Railsのインストールが無事完了し、rails newでアプリケーションを作って、
    ようやく作業が出来るな、と思ったら
    最後に「Ruby Gemのバージョン低いんだよカス、最悪でも2.1.0にはしとけクズ」って言われたので対応

    Warning: You're using Rubygems 2.0.14.1 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
    $ sudo gem update --system
    

    これでOK。

  • nokogiri峠を超えたら…

    nokogiriがうんたらかんたらの峠を超えて、
    早速

    $rails new [name]
    

    したら…

    
    /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError)
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell/basic.rb:2:in `<top (required)>'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell/color.rb:1:in `<top (required)>'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/shell.rb:17:in `shell'
    	from /usr/local/share/ruby/gems/2.0/gems/thor-0.19.1/lib/thor/base.rb:439:in `start'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/commands/application.rb:17:in `<top (required)>'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/lib/rails/cli.rb:14:in `<top (required)>'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    	from /usr/local/share/ruby/gems/2.0/gems/railties-4.2.5.1/bin/rails:9:in `<top (required)>'
    	from /usr/local/bin/rails:23:in `load'
    

    だってよ。
    このレベルのエラーなら対処可能。
    io/consoleが無いって言っている。

    gem install io-console
    

    でOK

  • なんかnokogiriの野郎がインストールの妨げをする件の解決方法

    # gem install rails
    

    でRailsをインストールしたら途中で止まってしまった…。

    Fetching: nokogiri-1.6.7.2.gem (100%)
    Building native extensions.  This could take a while...
    ERROR:  Error installing rails:
    	ERROR: Failed to build gem native extension.
    
        /usr/bin/ruby2.0 extconf.rb
    mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h
    
    
    Gem files will remain installed in /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.7.2 for inspection.
    Results logged to /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.7.2/ext/nokogiri/gem_make.out
    

    このnokogiriが何をしているものかもさっぱりわからないのだが、
    この壁を乗り越えないと先に進めない…。

    で、ググった結果。

    sudo yum install ruby-devel ruby19-devel
    

    Qiitaの“mkmf.rb can’t find header files for ruby”の対応にある通りにコマンド実行したら峠を超えられた。

    これで実際のサーバーでの開発環境が出来た。

  • AWS立ち上げてから、とりあえずやっておくことリスト

    $ sudo yum upate
    

    インスタンス立ち上げたらyumでインストールされてるパッケージをアップデートする。
    Run “sudo yum update” to apply all updates.
    と指示されるし。

    $sudo yum install git
    

    gitをインストール。
    Gitのインストール方法を参考にgitインストールします。

    $ sudo su -c "gem install sass"
    

    Sassをインストール。
    公式サイトのSassのインストール方法を参考にSassをインストール

    //Apache,PHP,MySQLのインストール
    $ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
    
    //Apache起動
    $ sudo service httpd start
    
    //システムがブートするたびに Apache ウェブサーバーが起動するように設定
    $sudo chkconfig httpd on
    
    //上記の設定が適用されたか確認
    //2:on 3:on 4:on になっていればOK
    $sudo chkconfig httpd on
    

    LAMP環境を構築。
    こちらも公式のチュートリアル: Amazon Linux への LAMP ウェブサーバーのインストールを参考にインストールします。

    //「www」グループを追加
    $ sudo groupadd www
    
    //ec2-userを「www」グループに追加
    $ sudo usermod -a -G www ec2-user
    
    //「www」グループが出来ているか確認(グループをリスト表示)
    $ groups
    
    // /var/wwwのグループをrootからwwwに変更
    $sudo chown -R root:www /var/www
    
    //ディレクトリのパーミッションを変更
    $sudo chmod 2775 /var/www
    

    ん?4桁あるぞ?千の位の2ってなんだ!?

    今さら聞きづらい「ファイルパーミッション」についてによるとsetgid。
    /var/www/以下で作ったファイルやディレクトリを自動的に共有グループ(ここではwww)のものにする設定らしい。

    $ find /var/www -type d -exec sudo chmod 2775 {} +
    $ find /var/www -type f -exec sudo chmod 0664 {} +
    

    よくわからないけど、/var/www/いかにファイルやディレクトリが出来たらsudo権限で、
    ディレクトリの場合は2775に、ファイルの場合は0664のパーミッションに変更するっぽい。

    gem update
    

    gemもアップデートしておいた方が良いと思う。


    ここからは余談。

    $ sudo yum groupinstall "Development Tools"
    

    開発向けのパッケージをまとめてインストールしてくれる”Development Tools”をインストール。
    これはやってもやらなくてもいい。
    念のため入れておく。

    $ sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel
    
  • 久々にWordPressのテーマいじる

    index.phpとstyle.cssが最小構成単位。
    この2つのファイルがテーマディレクトリにあれば、中身がなくともテーマとして認識される。
    その際のテーマ名はテーマディレクトリ名になる。

    style.cssの冒頭に

    /*
     * Theme Name: テーマ名
     */
    

    のように記述するとテーマ名が変わる。
    その他、テーマの作者などの情報もここで記述するが、割愛。

  • Angular.jsでSPA使ってページ遷移したときスクロールがトップにならない件

    Angular.jsでシングルページアプリケーションを作るとき、
    ページ遷移してもスクロールがトップまで戻らなくて困った。

    解決策としては超簡単。

    <div class="ng-view" autoscroll="true"></div>
    

    上記のようにautoscroll=”true”にするだけ。

    http://stackoverflow.com/questions/21055952/changing-route-doesnt-scroll-to-top-in-the-new-page

  • iScroll.jsで動的に高さが変わる場合のスクロールについて

    なんか、iScroll.jsというライブラリを使ってるサービスについて相談を受けた。

    iScroll.js自体が何をやっているのかもよくわからない…スマフォやタブレットでのスクロールをよしなにしてくれるのだろう…。

    ページ読み込み後に動的に内容を変更、具体的には高さが増す場合において「スクロールが出来ない」といった無いようだった。

    $(function(){
    var myScroll = new iScroll(‘wrapper’);
    });
    

    上記のような記述で初期化している。

    myScroll.refresh();
    

    結論から言うと、上記の関数があるので、該当のイベントの最後に呼び出してあげれば良い。

    ググったらiScroll.js自体に手を加えるなんてのがあって驚愕した。

  • PDOのプレースホルダーおさらい

    久々にPHP使ったら忘れてる忘れてる。

    //プレースホルダー作成
    $query = $pdo->prepare("SELECT * FROM members WHERE id = :member_id");
    
    //値を置き換える
    //$query->bindParam(':member_id',1);のように直接値は入れられない
    $query->bindParam(':member_id',$id);
    $id="1";
    
    $query->execute();
    
    foreach ( $query as $r ){
    print_r( $r );
    }
    

    注意点1:

    まずテーブル名にはプレースホルダーが使えない。

    WHERE句の値など条件の値に使う。

    注意点2:

    bindPram(“:member_id”,1)のように直接値を入れることは出来ない。

    変数を噛ます。

    まぁ、固定されている値ならプレースホルダー使う必要ないもんな。

  • Outlookで受信済みのメールにルールを適用する方法

    Outlook使いにく過ぎて鼻血出そう…。
    Outlookに限らずOffice365はUIがひどいと思う…。

    Outlook(Win&ローカルアプリ版)で受信済みのメールに、新たに追加したルールを適用(過去にさかのぼって適用)する方法。

    「フォルダー」タブで「仕分けルールの実行」

    outlook_filter
  • 外注にお願いするときに指示書に入れておきたい項目

    今回、職場で使った外注がうんこ過ぎたので、指示書に明記しておくことをまとめておく。
    どれも言うまでもないレベルのことだと思うのだけど…。

    ・・
    ・Google WebFont

    レギュレーション

    基本のカラーパレット、フォントサイズ、余白のルールなど

    PSDにガイド

    ガイドが1本も引かれていなかった。

    レイヤーまとめてこい

    作りっぱなしでレイヤーが全部並列、順番もめちゃくちゃ…納品時にはきれいにまとめてこいって話。

    SP版デザインは640pxで作って

    750pxでもいいけど、その場合は640pxのときでも要素がきれいにおさまるデザインに。

    pngは圧縮

    部分的な差し替えとかで、PSDではなくスライスしたpng画像を納品してくるケースがあるが、その場合はtinypngで圧縮して欲しい。

    高解像度画像で横幅、高さが奇数で送ってくるな。

    SP版(Retina)とPC版で同じ横幅で使えるならそれを見越して作って

    例えばSP版で横幅300pxのイメージを挿入するとする。
    これの高解像度版は600pxとなるわけだが、600pxもあればPC版でも十分に使えるレベル。
    SP版とPC版で同じものを使えるなら、そのように作って。
    これは余談。

  • rails generate model モデル名(単数系) name:string ...

    モデルを作成

    rake migrate

    マイグレーションする

    rails dbconsole
    .tables
    
    .schema テーブル名
  • 青天の霹靂を食べてみた。

    2kgで2,500円…一般的なお米の倍近い値段のお米、「晴天の霹靂」を食べてみた。
    冷めても美味いのが特徴らしく、塩むすびにすると良いとか。

    粘りの強い印象。

    個性的な味はしない。
    噛めば噛むほど甘いお米であることは間違いない。

    そして、確かに冷めても美味い。

  • JS、CSSをgithubページに移動した

    現在このブログを運用しているのはhetemlというレンタルサーバー。

    普段使いで使うには高性能でコスパ最強なのだが、Web制作の開発環境としてはちょっと物足りない。

    共有サーバーだから仕方ないのだけど…。

    • CSSをSassで管理したい
    • WordPressの管理画面の「外観→テーマ編集」ではJSファイルが認識されない

    上記2つを解消するために、githubページにアップしたものを読み込む形に変更した。
    githubページはgithubが提供しているホスティング環境。
    AWSのS3に近い。

    http://egoblock.github.io/
    上記がgithubページ。
    「egoblock.github.io」という名前でリポジトリを作ってファイルをアップするだけで使えるようになる。

  • Swiftの配列、連想配列は「辞書」

    //配列
    var list = [1,2,3]
    
    //辞書
    var list2 = ["国語":100,"算数":80,"理科":70]
    list2["国語"] = 78  //配列の中身を上書き
    list2["理科"] = nil //配列から削除
    
  • Swiftのswitchはbreak不要

    var n = 1
    switch n {
        case 0:
            print( "0です" )
        case 1:
            print( "1です" )
        default:
            print( "わかりません" )
    }
    
next