コンピュータやソフトウェアのあれこれ@道民(&元道民)
Archive for 12月, 2010
[Java][TDD][java-ja][planet] BDDの話をしよう
12月 26th
25個目!
12月 25th
一人Advent Calendarも今日でおわり!
終了間際には、1日空いちゃったけど、
C言語について25個書きました。
途中で思わず書いちゃったけど、
こんなの読んでないで、良書探して、
習うより慣れた方が良いと思います。
後で読んだヒトが困らないコードを目指すと、
長く険しい道のりが待っているので、
飽きずに続けられると思います。
めでたし、めでたし。
もっと知ろう!
12月 25th
12/24の分だよ。
きっと、いくつかの本を読み終えた頃には、
一通りの知識が身に付いて、それなりにコードを書けるんだけど、
たまに、コンパイラの警告が消えないとか、
文章にできるほど理解していない場合は、
こういうのも見たら良いと思うよ。
初級C言語Q&A
最初は、これを読んで理解出来なくても、
コードを書いて、慣れた頃にもう一度読むと、いろいろ発見があって、
ちょっとしたことで時間を使いすぎちゃうのを防げるかもしれないから、
こうした先人の知恵を探して、正しい知識を身につけてね!
leet が楽しそうなので試してみた
12月 25th
leet が楽しそうなので試してみた
@smokeymonkey さんのブログで紹介されていた leet というのをやってみました.
/Users/niku% ruby leet.rb 'Hack the planet.'
plain
|-|/\<|X -1-1=- *elД[\]=--.
mapping
1-1aye(]{ -1-1=- 9[_/\И=-][.
H ac k t h e p l an e t.
…読めませんね
leet.rb はこんな感じになりました.僕は module を作って String に include するのが好きみたいです.
# -*- coding: utf-8 -*-
module Leeter
MAP = {
'a' => ['4','/\\','@','/-\\','^','aye','(L','Д'],
'b' => ['3','P>','|:','!3','(3','/3',')3','|-]','j3'],
'c' => ['[','<','('],
'd' => [')','(|','|o','[)','I>','|>','T)','I7','cl','|}','|]'],
'e' => ['=-'],
'f' => ['=','|#','ph','/=','v'],
'g' => ['6','&','(_+','9','C-','gee','(?,','[,','{,','<-','(.'],
'h' => ['|','|-|',']~[','}{','!-!','1-1','\\-/','I+I','}-{'],
'i' => ['eye','3y3','][',']','/me'],
'j' => ['_/','</','_]','(/'],
'k' => ['<','|{',']{','|X'],
'l' => ['|_','el','[]_','[_'],
'm' => ['v|','[V]','{V}','/V\\','em','AA','|\\/|','/\\/\\','(u)','(V)','(\\/)','/|\\','^^','/|/|','//\\','|\\|\\',']\\/['],
'n' => ['\\|','/\\/','[\\]','<\\>','{\\}','[]\\','//','[]','/V','1V','И','^'],
'o' => ['0','()','oh','[]','p','<>'],
'p' => ['*','|o','|?','|^(o)','|>','|"','9','[]D','|7'],
'q' => ['&'],
'r' => ['`','|~','|?','/2','|^','lz','|9','2','12','[z','.-','|2','|-'],
's' => ['5','$','z','§','ehs','es','2'],
't' => ['-','][','†','"|"'],
'u' => ['_|','v','L|'],
'v' => ['/','\\|'],
'w' => ['/','\\_|_/','\\_:_/','Ш','uu','2u','\\\\//\\\\//','ω'],
'x' => ['><','Ж','}{','ecks','×','?',')(','][','}{'],
'y' => ['/'],
'z' => ['_'],
}
def leet
self.each_char.map{ |char| leet_by_char(char) }
end
def leet_with_base
self.each_char.map{ |char| [leet_by_char(char), char] }
end
private
def leet_by_char char
MAP.include?(char.downcase) ? MAP[char.downcase].sample : char
end
end
class String
include Leeter
end
puts 'plain'
puts ARGV[0].leet.join
puts
lines = ARGV[0].leet_with_base.map{ |char| [char[0], "%#{char[0].size}s"%char[1]] }.transpose
puts 'mapping'
puts lines[0].join
puts lines[1].join 公開サイトにどのCMSが使われているか見分ける方法
12月 25th
フリーになってからご無沙汰していたので、久しぶりに前の勤め先にご挨拶をしてきました。
そのときに、私の後任の制作の人にこんな質問をされました。
「公開されてるサイトにどんなCMSが使われてるか、一発で見やぶる方法ないすか?」
実務でやっていると、使用されているCMSを調べたいという場面はけっこうあります。
CMSベースと思われるのに精密なデザインのサイトに出会ったときとか、新規案件の相談を受けたものの、現状サイトにどのCMSが使われているのか聞かされていない場合などです。
私が扱ったことがある、MovableType・WordPress・XOOPS・a-blog cms・SOY CMSに絞ってまとめてみます。
Firefoxの解析ツール「Wappalyzer」

「Wappalyzer」というFirefoxアドオンがあります。
これは表示しているページのソースを解析して、どのようなアプリケーションが絡んでいるか調べてくれるものです。主にGoogle Analyticsの有無などで使うようですが、MovableTypeやWordPress、XOOPSも対象になります。
ただ、あまりCMSに関する精度は高くなく、一部埋め込みや、根本からテーマを構築するような作り方をしたサイトは解析できません。
※ツールの名前を思い出せませんでした。川上さんありがとうございます。
MovableType
検索フォーム
どのCMSにも言えることですが、検索フォームが付いていればform要素周辺を見ることで、かなりの確率で見破ることができます。
サイト全体がCMSで管理されていれば、普通はCMS内蔵の検索エンジンを使うからです。
MovableTypeの場合、環境変数でパスを変えていない限り、検索エンジンのファイル名は必ず「mt-search.cgi」になります。
また、limitやincludeBlogsなどのオプションが引数で渡されています。
不自然な改行
MovableTypeは「ブロックタグや条件分岐タグの前後に改行が出力されてしまう」という仕様上の特徴があります。
プラグイン追加や、タグの前後の改行を詰めてしまうことで回避できますが、前者は再構築の速度に影響しますし、後者はコードの可読性が落ちるので、そこまでするコーダーはあまりいません。
このため、他のCMSで作られたサイトよりソースコードに余計な改行が多くなります。
新着情報の各エントリーの前後が二行以上開いていたり、head要素内に改行が多数存在している場合は、MovableTypeを使っている確率が高いです。
画像配置
MovableTypeで作成された新着情報などで画像が貼られている個所を見てみると、「mt-enclosure」というspan要素で囲まれていることがあります。
また、冗長なインラインスタイルが入っています。

WordPress
head要素
WordPressはMovableTypeほどコーディングの自由が利かないため、だいたいはWappalyzerで見破ることができます。
head要素にマニフェストファイルが自動リンクされるのも特徴的です。
また、METAの管理に「All in One SEO」を使用するのが一般的なので、これを導入しているサイトではhead要素のかなり下の方にdescription・keywords・canonicalがあります。
クォーテーションの混在
WordPressは不特定多数の手によって開発されてきたせいなのか、リストなどの自動出力部分のHTMLに、「シングルクォーテーション」が使用されている個所と「ダブルクォーテーション」が使用されている個所が混在しています。
なので、全体のコードをざっくり見てもなんとなくわかると思います。
XOOPS
検索フォーム
少し古いXOOPSのテーマだと、検索フォームに「xoops」という接頭語が付いた引数が指定されていることがあります。
div要素
XOOPSは、本文を囲むカラムのdivに「blockContent」classが付けられる慣習があります。
公式テーマがそうだからです。
~
また、通常コンテンツの管理には「pico」というモジュールが使われることが多いので、会社概要やプライバシーポリシーなどの本文上にpicoのアンカーが入っているかもしれません。
XOOPSは外部のモジュールを多数組み合わせて構築する性格上、どうしてもソースコードに一貫性がなくなります。
XHTMLとHTML4の書式が混在していたり、一部だけやたらインラインスタイルが使われていたら、XOOPSの可能性が高いのではと思います。
a-blog cms
a-blog cmsは、かなりわかりやすいです。
「特定のフォルダに入れたHTMLがそのままサイトルートに反映される」という仕様があるため、cssやjsなどのパスがかなり変わった相対パスになっていますし、パス内には必ず「themes」があるはずです。
また、head内に管理用のjavascriptが読み込まれていますし、METAのgeneratorも必ず入ることになっています。
<meta name="generator" content="a-blog cms v1.3.1" />
実際、中にどのCMSが使われているかというのは、運営側にはバレバレでもどうということはありません。
a-blog cmsはその分、管理しやすさを重要視しているということなのでしょう。
SOY CMS
今のところ、SOY CMSでできたサイトを見分ける方法はよくわかりません。すみません。
現状、既存のサイトにCMSを埋め込むような使われ方が多いので、ソースコードに特徴が出ないのです。
SOY CMS2ではa-blog cmsやJimdoと同様のユニット式が採用されるので、今後はクセが出てくるものと思います。
現状ではRSSが配信されていた場合、ファイル名が「feed?feed=rss」になっているというくらいでしょうか。
(SOY CMS2ではフレンドリーURLになります)
[きのこ97][ソフトウェア開発][Planet][AppEngine][slim3] 05-美はシンプルさに宿る
12月 25th
平鍋さんとのイベント
12月 25th
平鍋さんとのイベント
ご縁があって、来年の1月29日(土)に行われる平鍋さんをお迎えしてのイベントのお手伝いをすることに。主にイベントの構成や運営なんかのお手伝いをしています。絶賛参加受付中ですので、どうぞよろしくお願いします :-)
