Posts Tagged ‘プログラム’

python-logo-master-v3-TM

ちょっとしたウェブページを作るという案件において、デザイナーから上がってきたイラストレーター形式のデータをHTMLに落としこむという作業をしました。

イラストレーターのデータは基本的に単位が「mm」なので、ピクセル単位で管理するHTML&CSSに落としこむには単位の変換が必要です。

最初の段階でサイトの横幅は950pxにしようと決めていました。
デザイナーさんから上がってきたイラストの横幅は315mmでした。

それで、例えば横幅50mm縦幅60mmのイラストパーツをピクセルに変換しようと思ったら

315 : 950 = 50 : x の式を立てて
x = (950 * 50) / 315 
x ≒ 150px

の計算で950ピクセルを総横幅としたサイトにおける50mmのピクセル換算が求められます。
答えはおよそ150ピクセルですね。

続いて縦幅を求めます。

50 : 60 = 150 : y
y = (60 * 150) / 50
y = 180px

総横幅315mm の中にある50mm × 60mm のパーツは 総横幅950pxの場において 150px × 180px に変換される事が分かりました。

実際サイトを作り始めるとこの様な計算を何度もやらないと行けないので、この仕事をこなすためのプログラムをPythonで書きました。

#! /usr/bin/python

fullWidth_mm = 315
fullWidth_px = 950

input_width_mm= raw_input('Width=: ')
answer_w = float(input_width_mm) * fullWidth_px / fullWidth_mm
print answer_w

input_height_mm = raw_input('Height=: ')
answer_h = float(input_height_mm) * answer_w / float(input_width_mm)
print answer_h

ここで重要なのはraw_input()関数ですね。
この関数を用いる事で、input_width_mm,input_height_mmに値を入力する事ができます。
引数は文字列で、入力を求める時に表示する文字を設定できます。

加えて、raw_input()によって入力された値は文字列になっていますのでfloat()によって浮動小数点数にキャストしています。
Pythonは計算において一番複雑なオペランドの型にすべてのオペランドを合わせて計算しますので、結果はfloatで返って来ます。
ちなみにPythonには4つの数値型があり、複雑さの序列は
整数型 < 長整数型 < 浮動小数点型 < 複素数型 の様になっています。 さて、こいつを実行するとこんな感じです。

Width=: 50 #input
150.793650794
Height=: 60 #input
180.952380952

と言う事でこんな感じに変換して、イラストレーターのデータをHTMLに落としこむ事に成功しました。

まあ・・・もともとイラストレーターにこういう事を簡単にこなす機能がありそうですが・・・。
end

google_logo

「記号を以って文章を検索する。」

検索エンジンによる検索は高速、高密度化の一途をたどっていますが、
この記号検索の問題は依然根強く残っています。

プログラムの世界では記号が大活躍しますので、プログラム関連の調べ物をした時に
この問題にぶち当たって困った人も多いでしょう。

なぜ記号の検索が出来ないのか、という問題も「プログラム」である事に起因します。
検索エンジンの内部も当然プログラムで動作しています。検索窓に記号の入力を受け入れてしまうと
本来検索するだけのシステムのはずが、全く別のプログラムを実行してしまう恐れがあるのです。

残念ながら、そう言う事を意図的に起こす人々が世に絶えませんので
検索サービス側としては、もういっそ記号等の入力を受け入れないような体制を取らざるを得ないという訳です。
興味のある人は「SQLインジェクション」等のキーワードで、この辺りの問題を詳しく知る事ができます。

さて、そんな情勢の中でも検索エンジンは日々進歩を遂げようと改善し続けているようです。
現在、Googleでは以下の記号による検索が可能になっています。

  • プラス記号(+): 血液型 「AB+」や プログラミング言語 「C++」などの用語を検索できます。
  • アットマーク(@): ソーシャル タグを検索できます( 「@Google」 や 「@ladygaga」など)。
  • アンパサンド(&): 2 つの単語が結び付いて構成される概念や語句を検索できます( 「A&E」 や 「Brothers & Sisters」など)。
  • ドル記号($): 価格を表します。たとえば 「nikon 400」 と 「nikon $400」 では異なる検索結果が表示されます。
  • ハッシュタグ/番号記号(#): 流行のトピックを検索できます( 「#lifewithoutgoogle」など)。
  • ダッシュ(-): その前後の単語を強く結び付けるのに使用されます( 「twelve-year-old dog」 や 「cross-reference」など)。
  • アンダースコア記号(_): 2 つの単語を結び付ける場合は無視されません( 「quick_sort」など)。

たまたまCSS関連の調べ物をしている時に”-webkit”を検索してみたのですが、全く検索できませんでした。
まあ上に書かれているような、本来の使い方ではないんですが(笑)
“webkit”で検索すると、当然ズラっと結果が返って来ました。
まだまだ記号を使った柔軟な検索は難しいようです。

追記(12/10/18)
dyama氏からコメント欄にて指摘をいただきました。

「-webkit」のように単語の頭にハイフンを付けるとNOT検索ですね。「lilo」で検索した際、リロ&スティッチが大量にヒットして見づらい場合など「lilo -desney」という使い方をすると検索候補からディズニー関連の候補がとりのぞかれます。
ついでですが、スペースを含む単語の順番を固定したい場合は「”X Window”」のようにダブルクォートで囲めばOK。
また「nes ソフト 開発」のように、Googleが勝手にNESをNECのタイポと解釈して「NECソフト」などを検索候補に出しやがる場合はも「”nes” ソフト 開発」と入力することにより、単語NESの優先順位を挙げることができます。

ありがとうございます。

まとめると、上のリストに加えて以下の事が言えるようです。

  • 単語の頭に-(ハイフン)をつけるとNOT検索。その単語を含む結果が除外される
  • スペースを含む単語の順番を固定したい時には”(ダブルクオート)で囲む。
    たとえば”hello world”と囲んで検索すれば”hello”と”world”のorで検索されず、”hello world”の完全一致検索が出来る
  • また、”(ダブルクオート)で単語を囲んで検索した場合、複数単語と組み合わせた時に、ダブルクオートで囲んだ単語の検索優先順位を上げる事が出来る。

という事ですね。上手くまとまってない気もしますが。

つまり、”-webkit”と検索していた私は何も検索していないのと同義だったという事ですね・・・orz

とりあえず-webkitを全体で一語として認識させるべく、”-webkit”とダブルクオートで囲んで検索してみましたが結果は”WebKit”等のハイフンなしの文字が結果として上がって来ました。

“(ダブルクオート)で囲んだオプション用記号はエスケープして、文字列として認識して検索する。
のようなアプローチに今後期待したいですね。

end