Ubuntu 13.04 Desktop をインストールしてみた

ということで、6年くらい前に買った、
3年くらい放置してたXPノートPCにUbuntuを入れてみました。

ターゲット

Lenovo 3000 n200
CPU Core2Duo T9300(オリジナルはT7100)
RAM 4GB(オリジナルは512MB)
HDD 500GB(オリジナルは120GB?)
※そんな感じのちょっと強化されたマシンです。

キャプ

Screenshot_from_2013-10-13 03:02:12

小学生並の感想

  • メイン画面のUIが分かり辛い
  • 全体的なUIはWindowsとMacをごちゃ混ぜにした感じ
  • ソフトウェアセンターが結構いけてる
  • 普通にサクサク動く。
  • Windowsからの移行はあまり違和感なくいけそう
  • 現代的な動画フォーマットもデフォで再生できる(HW的な限界が先にくる)
  • 日本語入力はあまり頭よくない(当マシンで記事入力中)
  • Fnキーもタッチパッドもいい感じに動作してて素晴らしい

開発もちょっとやってみたいですが、
vi使うなら意味ないし、IDE使うのも結局同じなので…うーむ。。

外部リンク

http://www.ubuntu.com/download/desktop

素のjavascriptでセレクトのフィルタリングを行う実装

イベントトリガーはテキトーですが、こんな感じ。

<script>
var original = new Array();
function filterSelect(obj) {
 // fword → filtered wordの略な
 var fword = obj.value;
 var sel = document.getElementById("target");
 if (original.length == 0) {
  for (var i=0; i < sel.options.length; i++) {
   original[sel.options[i].value] = sel.options[i].text;
  }
 }
 // remove options
 sel.length = null;
 // create new options
 for (var key in original) {
  if (original[key].indexOf(fword) >= 0) {
   var newOpt = document.createElement( "option" );
   newOpt.value = key;
   var optTxt = document.createTextNode( original[key] );
   newOpt.appendChild( optTxt );
   sel.appendChild( newOpt );
  }
 }
}
</script>
<input type="text" onkeyup="filterSelect(this)">
<select id="target">
<option value="1">abcde</option>
<option value="2">cdefg</option>
<option value="3">fghij</option>
<option value="4">jklmn</option>
<option value="5">lmnopq</option>
<option value="6">acfjl</option>
</select>

[CakePHP2]CakePHP 2.3.X を 2.4.1にアップグレードしてみた

※今のところテスト環境のみで実施。

まずマイグレーションガイドを読む

CakePHP 2.4 is a fully API compatible upgrade from 2.3. This page outlines the changes and improvements made in 2.4.
CakePHPの2.4は2.3から完全にAPI互換のアップグレードです。このページには、2.4での変更と改善の概要を説明します。
2.4 Migration Guide

ってことで、そのままアップグレードできるらしい。。

テスト環境でlibの置き換えでアップグレード成功。
とりあえず、以下は簡単にチェックした。

  • 画面のチェック
  • DBのupdate
  • メール送信
  • Console Shellの実行

#今後詳細なテストが大変だけど

とはいえ

ConsoleShell is now deprecated.
ConsoleShellは非推奨になった

こんなことがさらっと書いてあるのが非常にあれですが、
非推奨なだけでまだ使えるので大丈夫です。
#動作確認済み。

Unveil.jsというlazy-loadの軽量版のソースを読んでみる。

前置き

てことで、情報も多く、画像遅延読み込みに有用なlazy-load
そして、今回紹介するのが、Unveil
Unveil⇒単語になじみがないですが、un-veil→ベールを取るってまんまの意味ですね。

設置方法

まずは、以下の2点のjavascriptを読み込む

  • JQuery.js
  • Unveil.js

で、イメージタグにアンベールを設定しておく。

$(document).ready(function() {
  $("img").unveil();
});

で、HTML内ののイメージタグは、
srcにダミー表示の画像(くるくる回る画像など)を、
data-srcに遅延表示したい(実際に表示したい)画像を設定。

<img src="bg.png" data-src="img1.jpg" />

ソースを読もう!

ソース内にコメント書いときます

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
;(function($) {
 
  $.fn.unveil = function(threshold, callback) {
 
    var $w = $(window),
        // 閾値の設定をチェック
        th = threshold || 0,
        // 画面のピクセル密度を判定して、高密度の場合はソースの切り替えが可能
        retina = window.devicePixelRatio > 1,
        attrib = retina? "data-src-retina" : "data-src",
        images = this,
        loaded;
 
    this.one("unveil", function() {
      //data-src(-retina)からsrcに上書き⇒画像表示
      var source = this.getAttribute(attrib);
      source = source || this.getAttribute("data-src");
      if (source) {
        this.setAttribute("src", source);
        if (typeof callback === "function") callback.call(this);
      }
    });
 
    function unveil() {
      var inview = images.filter(function() {
        var $e = $(this),
            wt = $w.scrollTop(), //画面に表示されてるトップの座標
            wb = wt + $w.height(), //画面に表示されてるボトムの座標
            et = $e.offset().top, //画像のトップの座標
            eb = et + $e.height(); //画像のボトムの座標
 
        /* 画像ボトム >= 画面トップの座標-閾値 && 画像のトップ座標 <= 画面ボトム+閾値
         * という条件が成り立つならtrue
         */
        return eb >= wt - th && et <= wb + th;
      });
 
      loaded = inview.trigger("unveil");
      images = images.not(loaded);
    }
 
    $w.scroll(unveil); // ウインドウのスクロールに対してトリガー
    $w.resize(unveil); // ウインドウのリサイズに対してトリガー
 
    //1回やっとく
    unveil();
 
    return this;
 
  };
 
})(window.jQuery || window.Zepto);

https://github.com/luis-almeida/unveil/blob/master/jquery.unveil.js

閾値の考え方はこんな感じ

HTMLでは、y座標が下にいくほどプラスなので、混乱しますが…
threshold

https://github.com/luis-almeida/unveil

Bootswatch3 がなぜか適用されなかったので対応した

Bootswatchとは

Twitter Bootstrap のデザインをさくっと変更できるテーマ群
Twitter Bootstrap3がリリースされて、Bootswatchも3になってます。
http://getbootstrap.com/
http://bootswatch.com/

適応方法

Easy to Install

Simply download a CSS file and replace the one in Bootstrap. No messing around with hex values.
Twitter Bootstrap

⇒つまり、CSSファイルを上書きすれば万事解決だよって話。

が…

適応されない。

原因

bootstrap-themeを読み込んでいるため。

対応前

1
2
3
  <!-- Bootstrap core CSS -->
  <link rel="stylesheet" href="./css/bootstrap.min.css">
  <link rel="stylesheet" href="./css/bootstrap-theme.min.css">

対応後

1
2
3
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="./css/bootstrap.min.css">
<!--    <link rel="stylesheet" href="./css/bootstrap-theme.min.css"> -->

ってことで、

bootstrap-themeには気をつけろってことで。
おっしゃーしたー

Apacheで謎のパーミッションエラーが出るときのパターン SELinux

ウェブのルートやその直下はアクセスできるのに、さらにサブディレクトリになるとアクセスできなくなるなど。

今回の原因はSELinux
経験上、SELinuxが動いてるといろんな悪さをします。
というか、設定が足りてないだけなんですが。
まともな設定をするつもりがない人はさっさと無効化するのが吉。
ただ、セキュリティ対策はしてください。マジで。

[user@dev proto]$ pwd
/var/www/html/proto
[user@dev proto]$ sudo getenforce
Enforcing
[user@dev proto]$ sudo setenforce 0