Archive for the 'Tips' Category

SQL:CASE WHEN

 
PostgreSQLだけというわけじゃなくて、いまのいままで(自分が)知らなかったのがびっくりというネタ。
それは、SQL文での CASE式。昔々、Accessで IIF(三項演算子)は使ったことがあったけど、SQLに IIFがないというのも、これを書こうと思って、ググって知ったくらい。

SELECT name, CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未記入' END as sex
FROM test_tbl

ほかの使い方はこちら「SQL の CASE 式って知ってますか?」参照。

SELECT count(*),
  CASE code WHEN 'M' THEN '男性' WHEN 'F' THEN '女性' ELSE 'オカマ?' END
FROM table1 GROUP BY code;

SELECT
 SUM( CASE WHEN code = 'M' THEN 1 ELSE 0 END ),  -- 男性の人数
 SUM( CASE WHEN code = 'F' THEN 1 ELSE 0 END )   -- 女性の人数
FROM table1;

CONSTRAINT check_salary  -- 平社員は給与が20万円以下という制約の例
 ( CASE WHEN code = '平社員' THEN 
   CASE WHEN salary <= 200000 THEN 1 ELSE 0 END
  ELSE 1 END
 )

UPDATE 商品テーブル  -- 単価1万円以上の商品の販売価格を10%値引きする
 SET 販売価格 = CASE WHEN 単価 >= 100000 THEN 販売価格 * 0.9 ELSE 販売価格 END;

スタイル・チェンジ

obama

「わかっちゃいるけど、止められない」じゃなくて、「わかっていても、できない」ことが多いので、いまさらながら、Life is beautifulの「私のとっておきのプログラミングスタイル」に感化されて、自分なりの指針をまとめておく。

  1. スタードダッシュ重要
    最初の二週間で八割がたの目途をつける。
  2. 仕事を「タスク」に細分化
    「タスク」は、半日から三日ぐらいでできるもの。最初にすべきものほど明確に定義し、後でやるものはある程度曖昧にしておく。
  3. 一日の始めに「今日やるマイクロタスク」のリストを作る
    「マイクロタスク」は、うまく行けば15分ぐらいで、なかなかうまく行かなくても二時間ぐらいで完成できるもの。
    そんなマイクロタスクを数個から十数個並べたリストを書いて、例えば「今日は7つを絶対終える。余裕があったら次の2つもこなす」と自分で宣言する。
  4. マイクロタスクは「割り込み禁止状態」で
    マイクロタスクは「決して他の仕事を間に挟んではできない仕事」と覚悟して、全力疾走でこなすこと。

ということで、自分にプレッシャーを与えるつもりで、Google Docsにタスクリストを公開してみた。もちろん、お客様の名前やプロジェクトの詳細はイニシャルになっている。

mail forwarding loop

 
[postfix-jp: 783] mail forwarding loop
こういうメッセージが Postfixから返ってきたときに疑うべきところ。
 

aliasや.forwardなどが正常なのにPostfixが”mail forwarding loop”を検知することがあります。

具体的には、Delivered-To:ヘッダフィールドが詐称されている場合です。
local(8)デーモンは、配送先のアドレスがすでにDelivered-To:にあるメッセージを”mail forwarding loop”としてbounceします。

だそうです。
 
ついでに、「sendmail の使い方」がわかりやすいです。
NTP で時刻合わせ」はこちらをどうぞ。

HootSuite:複数アカウントの追加

 
Twitterのクライアントとして、高機能で評判の HootSuiteを入れたんですが、2つ目、3つ目のアカウントの追加の仕方に迷ったので、メモ。
手順は次の通り。

  1. 画面左上のフクロウをクリック
  2. 設定 ⇒ SNS
  3. SNSを追加
  4. Twitter プロフィールを追加

Facebookや LinkedInのアカウントの追加もこの画面でやるので、SNSと書いてあるんでしょうが、ボクにはわかりづらかったです。
設定 ⇒ アカウントのあたりでずいぶんウロウロしてしまいました。

リダイレクトまとめ

 
いつもいつもなんだっけとなって、ググることになるので、自分用のメモ。ググるんならココをググれと。

  1. <meta http-equiv="Refresh" content="0; URL=http://hoge.jp/">
    
  2. <script type="text/javascript">
      location.replace('http://hoge.jp/');
    </script>
    
  3. # e .htaccess
    Redirect permanent /index.html http://hoge.jp/index.php
    

自分としてよく使う順に。自分で全部いじれる場合は、headerに metaを入れますね。
ただ、サイト引越しで、301リダイレクトを返してやらないといけない場合は、3の .htaccessが安全確実。
カラーミーのように、headerがいじれない場合は仕方がないので、2の javascriptで。
こんな感じです。

EC-CUBE:新着情報でHTMLタグを有効化

スーパー小っちゃなTipsなので、書くかどうか迷ったのですが、7月はブログ強化月間ですので(今決めました)、この手のことを書かないで何を書くということで書いておきます。
 
EC-CUBEの新着情報に、<a href=”hogehoge.com”>お得な情報</a>みたいなリンクを書こうと思っても、<や>が <、> に変換されてしまってリンクになりません。
危ないことされたら嫌だからというのはわかりますが、コメント欄みたいに誰が書くかわからないならいざ知らず、新着情報って管理画面からしか書けないし、ESCAPEしなくていいんじゃないの?ということです。

# e data/Smarty/templates/default/bloc/news.tpl

<!--{$arrNews[data].news_comment|escape|nl2br}-->
          ↓
<!--{$arrNews[data].news_comment|nl2br}-->

Smartyの escapeをとればいいということですね。
 
ついでにコレも。Smartyで var_dumpみたいなことをやるときはコレ。

<{$array|@debug_print_var}>

カラーミーでのTips

 
お仕事でカラーミーのカスタマイズをやってるんですけど、これがなかなか癖があって面倒というか面白いので、少しメモっておきます。
一番美味しいところからひとつ。商品一覧でページ数を求めるときです。

<!-- $pgnum = floor(($productlist_num - 1) / 12) +1; -->

<{assign var=pgnum value=$productlist_num-1}>
<{assign var=pgnum value=$pgnum/12+1|regex_replace:"/\..*/":""}>

カラーミーは基本 smartyなんですけど、微妙にいろんなところがマスク(使えなく)してあって、使えないんです。
やりたいことは一番上に書いたことですが、そのまま assignしてもエラーになるので、四則演算をバラバラにして、切り捨ては、regex_replaceを使うという裏ワザです。
 
これを使って、[1] [2] [3] [4] みたいなページ・ナビゲータを出すのはこうです。

<{if $sid_name != ""}>
  <{assign var=clink value=$sid_link}>
<{else}>
  <{assign var=clink value=$bid_link}>
<{/if}>
<div class="pagenate">
  <{if $productlist_prev_page != ""}>
    <a href="<{$productlist_prev_page}>"><img src="http://img05.shop-pro.jp/PA01105/188/etc/page_arrow_lt.gif" alt="" /></a>
  <{/if}>
  <{section name=num3 loop=$pgnum}>
    <a class="pbox" href="<{$clink}>&page=<{$smarty.section.num3.iteration}>"><{$smarty.section.num3.iteration}></a>
  <{/section}>
  <{if $productlist_next_page != ""}>
    <a href="<{$productlist_next_page}>"><img src="http://img05.shop-pro.jp/PA01105/188/etc/page_arrow_rt.gif" alt="" /></a>
  <{/if}>
</div>

左右の矢印を出して、間は数字([1] [2] [3]・・・)のリンクです。途中を省略したいときや、いまいるところの前後だけ出す場合はとりあえず考慮してありませんが、できます。
 
二つ目はまた今度。

CrossSlide

 
いつも同じスライドショーだと飽きるので、新しいやつを探してみた。
 
CrossSlide がそれ!
 
普通のフェードと上下左右にパンしながらのフェード(ただし、これは表示エリアより画像が大きくないとエラーになる)、それと Ken Burnsができる。設定も簡単だし使いやすいが、1回で止まる指定はないみたいで、ずっとループするみたい。
この辺をどう考えるかだな。止まってほしい気もするが。(ソース見たらそういう指定が入ってるというオチはありがち)

用紙の拡大比率など

 
幼稚園の広報誌の表紙の制作を依頼されて(うちの財務大臣からロハで)、カラーコピーで簡易印刷するので、その程度のクォリティでいいということだったので、PhotoShopで土曜日しこしこと作業してたんですが、ほぼ完成したところでプリントアウトしてみると、「A4じゃないよ、B5って言ったじゃん!」とのこと。
さて、どうするか?
 
1.B5でレイアウトし直す。・・・ 面倒いからヤダ。
2.B5で印刷する。・・・ フチなしにしてくれ!とのこと。無理だ。
3.B5でA4用紙に印刷。・・・一見よさそうだが、上マージンが足りないらしく却下。1cmくらい上マージンが指定できればいいだけなんだけど。
4.結局、PhotoShopでPNG保存して、それを Wordに貼りつけて、86%縮小して印刷。・・・OK
 
で、必要な用紙サイズをメモっときます。

A判 B判
A4 210×297 B4 257×364
A5 148×210 B5 182×257

 
これだけじゃなんなんで、その間ググったことメモ。
 
PhotoShopで塗りつぶしじゃない円を描く方法
 なんでもっと簡単に円を描く方法を提供しないんだろうかとそっちの方が気になる。
 
PhotoShopでキラキラした星を描く方法
 これは効果的です。使いました。
 
PHPのヒアドキュメント
 よく使うんだけど、ちゃんと覚えてないものの典型。
 
CSSハック一覧 – IE, Firefox, Safariなどなど
 きっとこれが決定版。
 
フレームの右側を折り返さないようにする方法は?
 white-space:nowrap が思い出せなくてね。年だね、もう。

DNSキャッシュクリア

これから、Linux Tipsのことは、Linuxのマスコット「Tux」の画像を使おうっと。(出典はウィキペディア
 
表題の件は、digでドメイン情報を表示するときなど、なかなか書き変わらないよなと思うときに、実はネットのお外では書き変わっていて、自分ちだけ変わってないんじゃないかという疑念があるときにパパっとやればいいよということで。

# rndc flush

キャッシュのフラッシュです。これでOKでした。

Next Page »