2012/01/31

[Linux] ファイルの所有者の変更とパーミッションの変更


メモメモ

chown ユーザー名 ファイル名

chmod 777 ファイル名

この777とか644とかってなんて名前なんだろう?

正確にしらべたいなら↓こちら
【 chown 】 ファイルやディレクトリの所有者を変更する
【 chmod 】 ファイルやディレクトリのアクセス権を変更する

2012/01/30

「今夜お前とHello,World」ちょい不良モテコード入門 Vol.1


今まで何回か読んだ記事だけど、また見かけたので自分的にまとめ
職業プログラマになって考えた「良いコード」とは?


女豹(ニキータ)に「ベタ」は通用しない

一番自分が問題だと思ったのが「処理のベタ書き」。
コードを改修する時に一番の弊害になるのがコレだと思った。
つまりクラスやメソッドを定義せず、ひたすら処理をずらずら書いていくことだ。
~中略~
仕様を追っていくのが大変
require_onceで外部スクリプトを読み込んで実行している場合いちいち外部スクリプトを開いて読まないと処理の流れが分からず非常に読みづらい
変数のスコープがアホみたいに広いので読み解くのが大変
コードを修正するときの影響範囲がわかりにくい。変な所で相当前に書いた処理が影響してたりする。
単体テストがしにくい


どうすりゃいいのかも書いてくれてる

1.ショボくてもいいから必ず仕様書は残す
ちょいワルモテコード的に要約すると
「ニキータの部屋に意味深な地図を残しておけ」

2.オブジェクト指向を守る
ちょいワルモテコード的に要約すると
「女は男の謎に弱い。プライベートは隠せ!」

さらに…
これだけで以下が実現できる
1.無駄な繰り返しの排除
2.修正による影響範囲の特定
3.関数単位での単体テストが可能になり全体の品質担保がしやすくなる
4.どこで何をしてるかが解りやすくなる


これを守ることで、コードを見ただけで濡れそぼるようなちょい不良プログラマーに一歩近づく。
「今夜、貴方がrequireなの…」
「require_onceになるかもしれないぜ、それでもいいのかい?」
なんて小粋なキャッチボールができる日も遠くないっすわ。

2012/01/27

配色のお勉強


先日とあるサイトのデザインコンペに落ちた。
そのサイトはまだ公開していないし、守秘義務などあるらしく、いまのとこ理由は聞かせてもらえてない。

わからないことを悶々と考えてもしょうがないので、改めて自分のデザイン案を見ると、色々と文句付けたくなった。

一番甘かったなーと思ったのが配色設計。
日数があまりなかったという言い訳で、しっかり考えて設計せずに作業を進めてしまっていたように感じる。

焦って根っこの大事な所をおろそかにして作業を始めてしまうってのはよくある。
手を動かしてる間は進んでるような気がして安心しちゃうんだろうなー。

とりあえず、配色を復習していこう。

ドミナントカラー
・同一色相で作った多色配色
・トーンの幅が広いとより色相が統一されていることが強調される
・色のイメージがそのまま配色のイメージになる
・赤系の同一色相で揃えて刺激的なイメージなど

ドミナントトーン
・同一のトーンで作った多色配色
・トーンのイメージがそのまま配色のイメージになる
・「ストロングトーン」で揃えた力強い配色、「ペールトーン」で揃えた柔らかい配色など

トーン オン トーン
・同じ色相でトーンに差をつけた配色
・統一感がある
・青のトーン違いで配色するなど

トーン イン トーン
・同じトーンで色相に差をつけた配色
・色相に幅があるのでにぎやかな印象になりそう

トライアド
・色相環上の正三角形の配色
・以前正三角形じゃないとだめだった言われたな…。正三角形に近い三角形だと安定しないのか?

use_trans_sidとuse_cookiesとuse_only_cookiesの設定


どういう場合はURLにセッションIDが付加されるのか、ブラウザでCookieをONにした場合とOFFにした場合で調べてみた。


「 URLに付加しないし、Cookieも使わない!」
use_trans_sid: 0
use_cookies: 0
use_only_cookies: 0

cookie on: つかない
cookie off: つかない

当然、両方とも付加されない。

---------------------------

「Cookieは使わずにURLに不可する!」
use_cookies: 0
use_only_cookies: 0
use_trans_sid: 1

cookie on: yes
cookie off: yes

当然、両方とも付加される

---------------------------

「Cookieは使うけどURLには負荷しない!」
use_cookies: 1
use_only_cookies: 0
use_trans_sid: 0

cookie on: no
cookie off: no

付加しない設定なんだから、当然付加されない。
Cookieオフの場合、セッション自体使えないんじゃないか(未確認)
【追記】やっぱり使えんかった

---------------------------

4. URLに孵化するし、Cookieも使う!
use_cookies: 1
use_only_cookies: 0
use_trans_sid: 1

cookie on: no
cookie off: yes

処理が別れた。
Cookieが使える場合はCookieを使い、使えない場合はURLに付加する

---------------------------

「 URLに賦課するし、Cookieも使うけど、Cookieしか見ない!」
use_cookies: 1
use_only_cookies: 1
use_trans_sid: 1

cookie on: no
cookie off: yes

これはちょっと予想外。
Cookieが使えない場合、URLに付加される
URLについたセッションIDが認識されているかは未確認
【追記】cookie OFFだとセッション使えない

---------------------------

「 URLにフカして、Cookieは使わない、でもCookieしか見ない!」
use_cookies: 0
use_only_cookies: 1
use_trans_sid: 1

cookie on: yes
cookie off: yes

矛盾した設定
Cookieが使える場合でもURLに付加された
use_cookiesが0の場合、use_only_cookiesの設定は影響しないようだ
【追記】URLにセッションIDが付加されるんだけど、認識されていない。セッション使えず。

---------------------------

「Cookie使わないけど、Cookieしか見ないし、URLにも鱶しない!」
use_cookies: 0
use_only_cookies: 1
use_trans_sid: 0

cookie on: no
cookie off: no

これも矛盾系
もちろんURLは付加されない

---------------------------

「 Cookieは使うし、Cookieしか見ないし、URLには譜歌しない」
use_cookies: 1
use_only_cookies: 1
use_trans_sid: 0

cookie on: no
cookie off: no

付加されない
use_trans_sidが0の場合は、他の設定に関係なく付加されないようだ

---------------------------




■結果

use_trans_sidが0だとURLにセッションIDは付加されない
use_cookiesが0の場合、use_only_cookiesの設定は影響しない

2012/01/26

Array.prototype.slice.callとcallとapply


あるJavaScriptライブラリのコードを読んでいたらArray.prototype.slice.call(argments)という部分があった。
良く見かけるんだけど、なんだったか忘れてしまうのでメモ。

引数を格納している変数argments。
どんな関数にもある。
引数が複数ある場合は、argmentsの中身も複数になる
で、lengthは取れるんだけど、配列のメソッドは持っていないらしい。
var args = Array.prototype.slice.call(arguments);
これで引数が格納された配列が出来上がる


で、この時使われているcallというメソッドはなに?
これはすべての関数が持っている関数。
関数1.call(引数1, [引数2, 引数3]);
この引数1には関数1の中で使われるthisとして使いたいオブジェクト渡す。
上記の
Array.prototype.slice.call(arguments);
で言うと、Arrayが持ってるsliceメソッドの中で使われているthisは、引数で渡すargumentsってことにしちゃいますってこと。
slice(start, [end])はthisの中の0から数えて、start 番目~ end - 1 番目までの要素を抜き出した配列を返すメソッド。
なのでこの中のthisをargumentsにすり替えた場合、argumentsの中のstart 番目~ end - 1 番目までの要素を抜き出した配列を返してくれる。
startもendも指定しない場合は中身全部ってことになるので、argumentsの要素を全部抜き出した配列が返ってくることになる。

callに関して、すごくわかりやすく説明してくれている方がいたのでそっちを見て
applyとcallの使い方を丁寧に説明してみる


ついでにapplyもメモ
基本的にはcalllと同じ機能。
違うのは第2引数以降をカンマ区切りにするんじゃなくて配列で渡すとこ


参考:
argumentsとArray.prototype.slice.call : JavaScript
applyとcallの使い方を丁寧に説明してみる

文字のアニメーション




コリスでCSSで文字をカーブ状に配置するjQueryのプラグインが紹介されていた
そのプラグインの趣旨とは違うんだけど、デモのアニメーションが気持ちよかった。

デモ
「Animate me」ってリンクを押すとアニメーションします

ストップモーションみたいにややコマ落ちしたようなアニメーション。
少しアナログな感じと有機的な印象の動き

このデモのフォントの感じとたまたま設定したカーブの度合いがそういう風にみせてるのかもしれないけど、こういう印象を与える文字のアニメーションってFLASHでもあまり見たことない気がする。

JavaScriptで文字を1つずつ動かしてると思うので、少しパワーを使ってしまうかもしれないけど、こういった派手すぎないアニメーションならWEBでも使えそう。

参考:

2012/01/23

iScrollを使うとselectタグが動かなくなる


iScrollっていうスマートフォンでposition:fixedを再現できるライブラリがあるんだけど、それを使うと中にあるselectタグが反応しなくなった。

調べてみたら解決済みみたい。
参考:スマートフォンでposition:fixedを再現するiscroll!input問題も解消

この書き方だと画面全体でデフォルトのスクロールができなくなるのかな?
俺の場合はiScrollを使うのはページ内の一部なので、これだと困る。
使うのもとりあえずselectタグだけだった。

なのでスクロール停止機能とイベント伝達停止機能は限定的にした
var myScroll = new iScroll("id名", {
 var target = e.target;
       while(target.nodeType !== 1){
  target = target.parentNode;
 }

 if(target && target.tagName == "SELECT"){
  e.stopPropagation();
 }
});

var iScrollElem = document.getElementById("id名");
iScrollElem.addEventListener("touchmove", function(e){e.preventDefault();});

2012/01/13

[iPhone] プライベートブラウズモードだとストレージが使えない

ユーザーの行動を色々保存しておいて、そのユーザーにあったコンテンツを表示する機能ってのを以前作った。
その機能を作るのにWEBストレージを使ってるんだけど、iPhone Safariのプライベートブラウズ機能をオンにすると、ストレージがうまく使えない。
//取得できない
global.localStorage.getItem("name"); //nullが返ってくる

//登録もできない
global.localStorage.setItem("name", 'Taro');  //例外になる

とりあえずはsafariだけみたい。
プライベートモードかどうかを判定することもできるみたいだけど、将来的にどうなるかわからんのと、絶対に必要な機能というわけではなかったので、プライベートモードの時は上記の機能は使えないようにした。

具体的にはtryで囲っただけ
try{
 global.localStorage.setItem("name", 'Taro');  //例外になる
}catch(e){
 //何もしない
}


参考:[ネット技術]HTML5のストレージ技術とプライベートブラウジング 

2012/01/10

[Raphael] 円を表示 ’& アニメーション

Raphaelを使ってsvgで円形を表示させてみる

1はただ円を表示させただけ。
2は画像切替のアイデア。オンマウスで枠より大きかった円形を枠内に表示させるように小さくアニメーションした。今回は背景色変えてるだけ。

SVGで画像のマスクなんかできるとさらによさそう。
やってみよう
var paper = Raphael(elem, 100, 100);

//円要素を作る。引数は中心のx座標、y座標、半径
var cirlce = paper.circle(50, 50, 40);

//属性追加
circle.attr({
 fill: "white"
});

//マウスオーバーイベント
circle.mouseover(function(){
 //処理
});

//マウスアウトイベント
circle.mouseout(function(){
 //処理
});

[jmeter] 連番にした変数を順番に使用する


設定した連番付きの変数に順番にアクセスしていく方法。
別ファイルなんかに入れてもいいんだけど、共有する場合、人によってそのファイルへのパスが変わってしまうこともありそうなので。jmeterだけで完結させるやり方。

■まずは変数を設定
「ユーザー定義変数」に変数を連番付きで設定
AREA1 >> Hokkaido
AREA2 >> Aomori

AREA47 >> Okinawa

■処理を設定
1.ループコントローラーを設定
ループ回数は今回は47に設定

2. ループコントローラーの中に「カウンタ」を追加
「設定エレメント」-> 「カウンタ」
最大値は今回は前述の47より大きければ何でもいいや。
参照名は「COUNTER」にした。好きな名前でいい。

3. カウンタの後に処理を追加
ここで最初に決めた連番付き変数を順番に取得する。
${__V(AREA${COUNTER})}

__V()の中だと変数名を使用できる。
上記の例だと「AREA」と${COUNTER}を連結した変数名を参照するようになる

vmgファイルってのが添付されてきた


日記を携帯からメール投稿できるシステムでエラーがあった。
メールに添付されてきたファイルで、こちら側で処理するように指定したファイル形式以外のものが添付されてきた場合は処理せずにエラーメールを返していた。

vmgという拡張子のファイルが添付されてきたのでエラーになった。
content-typeは「text/x-vmessage」
検索してみると、携帯のメールを保存すると、そういう拡張子で保存されるらしいってことがわかった。

中身はmultipartになっていて、空の本文とjpgが添付されているような形だった。
恐らく古めの携帯で起こるっぽいし、そもそも何年もやっていて初めて起きたくらい少ないことなので「対応していないファイルです。機種などお聞かせいただければ対応可能かも」という対応で終了。

新しい機種にしても、すごい古い機種にしても…携帯は大変だなー


--add 2012/1/13
どうやら古い携帯からのメールを転送したりするとこういうことになるみたい