「バグフィックス」を含む日記 RSS

はてなキーワード: バグフィックスとは

2015-08-06

とうとう人類幸せに導くpgbouncer1.6が公開された

みんな大好きPostgreSQL

複数DBマルチテナントシステムを構築するなら忘れてはいけないコネクションプーリング

大量コネクションを扱うなら都度forkやpre-fork式ではちょっと辛い、イベントベースが好ましい。

もうお分かりですね。pgbouncer1.6の話題です。

PostgreSQL界隈では有名なコネクションプーリング実装が2つあります。 pgpool-II と pgbouncer。

ざっくり言うと高機能の pgpool-II に対して、軽量・大規模向けの pgbouncer という棲み分けがあると言えるでしょう。

pgpool-II は最近日本トレジャーデータ社の Prestogres ( https://github.com/treasure-data/prestogres ) という痺れるようなプロジェクトベースとして採用されていることで名前を聞いたことのある方もいるのではないでしょうか。

pgbouncer は少し古いですが LastFM( http://www.lastfm.jp/user/Russ/journal/2008/02/21/zd_postgres_connection_pools:_pgpool_vs._pgbouncer )の事例が有名でしょう。Instagram も使ってますネ。

pgbouncerは現行のバージョンは1.5系で、最新は1.5.5です。1.6系は8月1日リリースされ、複数DBマルチテナントシステムに向けた大規模な機能強化が行われています

この1.6系では複数DBマルチテナントシステム開発者にとって嬉しい機能がたくさん搭載される予定です。本番運用に投入する前に一足お先にリリースノートを読んで夢を感じましょう。

バージョン2013年ぐらいからリリースノートは準備されているのにさっぱりリリースされなくて関係者をやきもきさせていました。(想像

記事では以下のリリースノートをもとにザックリ読み解いたものです。

http://pgbouncer.github.io/2015/08/pgbouncer-1-6/

主要新機能

接続ユーザーパスワードハッシュDBからロードできるようになった

プーリングモードの設定をデータベース毎、ユーザー毎に設定できるようになった

データベース毎、ユーザー毎にコネクションの最大接続数を制御できるようになった

・新しいコネクション確立を避けるための DISABLE/ENABLE コマンドが追加された

・新しい推奨のDNSバックエンド c-ares が追加された

設定ファイルに include ディレクティブを追加した

ではリリースノートをそれぞれ細かく見ていきましょう。

接続ユーザーパスワードハッシュDBからロードできるようになった

新しく以下のパラメータが追加された

1.5までのpgbouncerは userlist.txt というテキストに静的に接続ユーザを書かなければいけませんでした。

これは動的に接続ユーザーが増えるようなマルチテナントシステムを構築するのに不向きという事です。

この機能はその悩みを解消するための機能と言えるでしょう。

プールモードデータベース毎、ユーザー毎に設定することができる。

タイトルがすべてを物語ってます。柔軟にできますねぇ('∀`)

ただ、私にはちょっと有用な利用シーンが思いつかなかったです。

たとえば分析ユーザーではトランザクションなんて使わないので statement モードにしてコネクションの消費を抑えたりできるという事でしょうか。

データベース毎、ユーザー毎にコネクションの上限を設定できる。

max_db_connections と max_user_connections という設定が追加されます

テナント毎にユーザーを分けているような複数DBマルチテナントシステムにとって必須といえる機能です。

特定ユーザーリクエストコネクションをすべて占有されてしまい、他のユーザーサービスできないという事態を避けることができるようになるでしょう。

新しいコネクション生成を防止する DISABLE/ENABLE コマンドを追加。

特定データベースの新しいコネクション確立を抑止・再開することができます

新しいDNSバックエンドとして c-ares を導入した。

c-ares名前解決の非同期化を行うためのライブラリです。c-ares名前解決をブロックしないし、いろいろな方式名前解決に対応している唯一のプロダクトとのこと。

名前解決をブロッキングしてしまうようではpgbouncerのような大規模向けシステムでは役に立たないのだというpgbouncerの強い意志を感じる。

というか、ドキュメントを見る限り pgbouncer は名前解決にかなりこだわりを持っているらしい。それだけそこが重要ということでしょう

個人的には困ったことがないのでそこまでだわる理由はよくわからない。)。

SHOW CLIENTS, SHOW SERVERS で remote_pid を出すようになった。

UNIXドメインソケットで接続しているクライアントと、TCPまたはUNIXドメインソケットで接続しているサーバーでremote_pidを取得できるようになりました。

tcp serverの場合、pid はキャンセルキーから取得できる。(?ドキュメントから意味が読み取れず)

キャンセルキーとは何でしょうね。ちょっとリリースノートから判断できませんでした。

pg_cancel_backend とかに使えるPIDだよという事なのでしょうか。

ネガティブDNSキャッシュのために dns_nxdomain_ttl を分割した。

DBの数なんてもはや何台あるかわからない。ホスト名の解決はもはやDNSで行っておるよという皆様にとって必須機能

…なのでしょうがちょっとこの機能必要となるようなシステムとはどんなものなのか、私も未経験なのでよくわからないです。

クライアントIPアドレスポートapplicationネームに追加する

この設定は application_name_add_host=on にすることで有効となる。

今や接続アプリケーション名がWebだとかBatchだとか区別できるだけで問題が解決するような時代ではない。

どのホスト(ポート)レベル区別しないと。という事なんだろう。

「おお、Webサーバーから死ぬほど重いクエリが飛んでる、今すぐ調べないと!で、どのWebサーバーよ?100台あるんだぜ」みたいなときに助かりますね。

設定ファイルに外部ファイル読み込みディレクティブを追加することができるようになります

設定ファイル大規模化してくると、切り出して整理したいという要望はどうしてもでてくるもの

データベース毎、ユーザー毎に設定できる項目が増えてきたので必要になったという事でしょう。

以上。

以降はバグフィックスとかクリーンアップだとかで自分はあまり興味がないので各自読むように。

本番運用突撃するPostgreSQL界の猛者の報告待ってます

2015-02-08

さらプロマネ

アプリケーションを完成させるにはテストを終わらせなきゃダメなんだよプロジェクトマネージャー

キミは本当に頑張ってるが、

テストをちゃんとやらなくても納品すりゃ終わるというキミの思い込みが、プロジェクトダメにしたんだ。

何度もリリース日を延期して仕切り直すチャンスが与えられたのに、

顕在化しているバグ修正日数だけを計上して、何とか納品に漕ぎ着けようとしてるのが致命的だ。

終わってないテストを終わった事にしたって、バグは消えてくれないんだよ。

せめて「まだできてません」と言えば良かったのに、「できました」でまともに動かない代物を客に渡して、

それでどうなるかも判らないくせにプロマネか。

客の信頼は既に地に落ち、リリースしたところでバグだらけの代物では毎月平謝りとデータ修正バグフィックス忙殺されて、他の業務に支障を来すのはもう確定的だ。

付き合いきれない主力メンバー2人も去った。

うちの部署は消えるだろう。

その原因にキミ自身が気づくかどうかは知らんけどね。

まあ、認識合わせの打ち合わせを「時間無駄」と切り捨てて、

コミュニケーションスキルを駆使して情報自分のところだけにかき集めてメンバーに「由らしむべし知らしむべからず」の方針を取ったのはキミだ。

僕の知ったこっちゃない。

せめて仕切りなおすタイミングで一度でも打ち合わせをして、僕達に「アプリを完成させるのに後何が必要か」を共有する機会を作っておけば、

仕切り直しは一回で済んでたんだ。

こうなっちゃ僕達じゃプロジェクトを救えないし、勝ち目のない戦いを勝てる気でいるキミのために健康生活犠牲にしてやるつもりもない。

こんなインパール作戦みたいなプロジェクトに関わり続けるのは御免だ。

後は未熟なプロマネの下でプロジェクト崩壊した時に会社上層部がどういう行動を取るのか、それを勉強させてもらうだけだ。

それが僕が今の職場から得る最後経験になるかも知れんが、それもどうでも良い事だ。

2015-01-31

向上心スキルもないプログラマと開発を続けるために

どうすればいいの?

自分がそのプロジェクトに入ったときにはもうそ人達はいた。

最初の2,3ヶ月は少しは期待して懇切丁寧に教えてみたけど、

「それは私にはわからない」とか「好みの問題だ」(実際には副作用ある危険実装だった)とか言って受け入れてもらえなかった。

「早急なバグフィックス」を免罪符に、コードはどんどん荒んでいった。

他にも数名チームメンバはいてそこまでひどくはないものの、動けばいいというメンタルモデルは同じらしく、レビューもまともに機能していない。

ツールやら手法やらも試してみても、使うメンバの意識がなければ全く役に立たない。

そんなこんなを画策しているうちに、精神が参りそうだったので、自分適当コメントをつけて修正するのが最善であるという結論に至ったんだけど、

同じような境遇の人はどのように改善しているのだろうか?

2014-09-13

iPhoneLINE強制アンインストール(アイコンがホーム画面から消える)

先に言っておきたい。LINEは確かに便利だけれども、運営があまりにもサボりすぎである

乗っ取り事件であったり、アップデートの度にバグ発生してるし

LINEゲームに労力を割きすぎているのではと、勝手に思ってる

あ、僕はそこらの大学生ですよ、誤解なきよう

(個人的には高校浪人時代メールの返信を待ってる時間が好きだったけどなぁ、時代は変わっちゃいました笑)

で、表題の件だけれども、以下に書いてみた。時間ない人はまとめだけ読んで下さい。


※まとめ

iPhoneLINE強制アンインストール(またはアイコンが消えそうになってる)されてる時は

その場で機内モードにすると(なぜか)防げた

ってことです。たまたまかもしれないんで、自己責任で。

時間前のことの流れはこんな感じ。

ーーーーーーーーーーーーーーーーーーーーーーーーーー

iPhoneネットサーフィン終え、ホーム画面に戻る

LINEアイコンが暗くなって揺れていて、「削除中」の途中だった。

(焦ってて細かく覚えてない、Appの自動更新オフにしてるからアップデート時の不具合ではない。原因不明)

トーク履歴消されたくない!!!!なんとかしなきゃ!!!

iPhone再起動するか、機内モードにするか、で迷う

機内モードにする

数秒後、アイコンが明るくなって、アンインストール中止

iPhone機内モードのまま、怖いからiTunesバックアップ

(こちらを参考にした。勝手引用ごめんなさい。)

http://appllio.com/line-transfer-and-restore-talk-history-completely#h2_1

http://did2memo.net/2012/09/21/naver-line-how-to-move-talk-history/

※この時PCLINEでは購入したスタンプが消えていた。トークは閲覧可

iPhone機内モード解除、LINE起動、問題なし。

(キャッシュがかなり消えていたみたいで、友達トップ画をロードしたりと。)

ほんとにトーク内容消えなくてよかった・・・

安心

ーーーーーーーーーーーーーーーーーーーーーーーーーー


最後一言

運営いいかげんにしろや、LINEゲームCM流してる暇あるなら、LINEアプリバグフィックスしろ!!!!!

国内トップシェアあるからって、天狗になってんじゃねーよ!!!

無料ってのには感謝しますけど、不具合多すぎ、利用人数考えて下さい。もはやインフラです。昔のキャリアメールの代わりですから、その辺、もう少し責任をもって下さい。

開発費足りないなら有料にしてもいいから安定したものお願いします。

2014-03-14

http://anond.hatelabo.jp/20140314171611

minifyを実施せよと言う指摘があるが、これは大して改善効果が無いので採用しない

採用しない理由は、自社内のコストと、バグフィックスのしにくさである

こういうふうに、minifyしないのは見やすさを残して後で簡単に変更出来るようにするためだ!

とか言う馬鹿が沢山いるんだけど(それもはてなでの大御所?的なひとから明らかにプログラマー()的なひとまで)

そもそも、元のコードはてなの中にはあるわけで、この外に出てくるコードを直接見ていじるわけではないわけで、

minifyするのは最後コマンド一発で出来るわけで、

全くコストバグフィックス関係ないと思うんだけど。

これをminifyしても大したこと無いから別にしない、ってのは実際問題そうだと思うし別にどうでもいいんだけど、

それに対する反論が余りに馬鹿すぎるでしょう、と。



後、反応が大きかったのは「コメントを残してる」というところではなくて、

おばかゆとりぷろぐらま()のテンプレにも出てきそうな余りにびっくりするようなコメントを実際に見てしまって

笑ってしまった、というだけの事なのに。

というか

「よく分からないけど〜」とか

「ここは難しいのでとりあえず放置

とかむしろ分かってて敢えて面白がって書いて、ユーザーが見つけてくれたら面白いなって敢えて仕込んでるだけじゃないのか?とすら思うんだけど。

今頃はてな中の人が、あ、やっと見つけてくれたwwwってなってるんじゃないか、とか思ってみたりする。

はてブロJavaScript問題にみるはてなの駄目さ 顧客が抱える問題放置

はてな最近迷走している。ある調査だとアクセス数が落ちているという。アクセス数が増えないことを別の方法カバーしようとまた余計なことをして顧客ばなれを招くという悪循環に陥っていると。新しいサービスは軒並み失敗中だ。

なぜか。それは顧客が求めているもの分析せず、表面的に考えているからだ。社員顧客ではなくとなりの同僚の方をみて仕事をしているからだ。

それを表す顕著な事例があったので書かせてもらう。

経緯を整理する

http://emija.hatenablog.com/entry/2014/03/11/231940

はてなブログが遅いのはだいたいJavaScriptのせい

こんな記事があがった。

要点を絞るとこうだ

  • はてなブログが重たい・遅い
  • 独自に調査してみたところ、Javascriptを切ったら早くなった
  • どのJavascroptが悪いのか確認したところ、はてなコードが目についた
  • 妙なコメントがついているし、容量が大きい。これが原因ではないか。改善を求める。

また、この情報に対する他の顧客から、minifyを実施するのは常識であって、なぜそれを行わないのかという指摘があった。

それに対してはてな側の対応はこう。

http://developer.hatenastaff.com/entry/2014/03/14/125131

はてなブログにおけるページ表示速度改善の取り組みについて

もしはてな食品製造会社だったら?

また、この情報に対する他の顧客からHACCPを取得しそれによって管理するのは常識であって、なぜ行わないのかと言う指摘があった。

それに対して

はてな対応問題点

今回のはてな対応で何か改善した事は何もない。元の顧客が感じた「遅い」という問題は解決していない

はてなの中では「お前のせいで遅いのだろう」と言う汚名を返上できたと言う内々の評価はあろうかとおもうが、そんなもの顧客に何の関係があるのか。最大限評価してもこう言う的外れクレームに晒された経験のある一部のニッチな同類技術者が多少の賛意を得られ、彼や彼女らの評価が若干上がる程度だ。

多くの人は重たいページに出会ったとき、その場で評価を決めて次に去ってしまう。そこで技術論をいくら述べてもほとんどの人間はそれに興味が無い。

クレームを上げてくれる人間などほんの僅かだ。さら分析までしてくれるというのは顧客としてはその分析が多少間違いでも最優秀だろう。そこで自社のプライドを守るためだけの話に終始し、顧客の問題を放置するなど、一体何を考えているのか。

はてなはどうするべきだったか

書くべきエントリー

はてなブログにおけるページ表示速度改善の取り組みについて」ではなく

はてなブログの表示をより高速にするためのTipsであるべきだった

内容はいきなり技術から始め、顧客の推論を否定する等ではなく

はてなブログは速度も最大限になるように努力しておりますが、ユーザの皆様の環境によっては読み込みが遅く感じる事もあると思います。読み込み速度を重視する皆様に、よくある速度を遅くする原因と、できるだけ快適にするためいくつかチェックするポイントをまとめました」

として

といった事をきちんと書き、顧客の「遅い」という問題の解決を図る。

そして最後

「ご参考に、弊社ではできる限り高速なサービス提供出来るよう、様々な工夫をおこなっています

として、今回のこの「はてなブログにおけるページ表示速度改善の取り組みについて」エントリーの一部を掲示し、やんわりと顧客が推測したことは間違いだと否定する形にするべきだった。(当然ながら社内コストがかかるからやらないとか余計なことは書かない)

そして、今回のような説が広がったことが営業的にマイナスであると考えるのであれば、今後は誤解を与えないように誤解を与えた原因を修正する。(誤解する相手を変えることは不可能)

食品工場の例なら、客が不衛生な環境に置いたのが悪いのだというのではなくて、清潔で乾燥した場所に置けと言う事をやんわりと伝え、最後に自社の衛生環境に対する取り組みを伝えるべきだ。その後でまた誤解を受けないようにペンキ屋でもなんでも手配し、対外的に説明のしやすくなるHACCP認定取得を目指すという事になるだろう。

はてなユーザをちゃんと見ているのか

はてなブクマガールズなど試験的なものリリースしている。今度はニュースアプリにも参画しようという。これは従来のはてなユーザ以外にも顧客を広げたい意向があるのだろう。そうでなければ企業としての成長が難しいからだ。

確かにはてなエンジニア利用者が多い。だからはてなの内情を察知してくれ、技術の話をしたらそれにもきちんとついてきてくれる。しかし、今後もそんな優しいユーザだけ相手にするつもりなのか?彼らは技術の事を話をすれば、なるほどそれは仕方が無いと納得してくれるだろう。だが果たしてそんな姿勢で、顧客を増やせるのか?

はてなブックマークデザイン改悪実施された頃からいろいろとおかしくなった。それ以前はなによりベータ版提供していたし、それによって得たフィードバックを反映していた。しかしそのあたりから指摘を受けると間違っていないと言う言い訳はするものの、顧客が困っていることについての解決策を示さなくなった。顧客が出すクレームよりも、となりにすわる同僚が同意してくれることを重視していないか?

もう一度考え直せ。このままでいいのか?

ユーザとしては全くよくない。いい加減しっかりしてくれ。

追記

どうもわかってないな。

b:id:pmint

minifyは開発手法だとする意見常識を理由にするのでは技術者失格だし、技術者じゃないのなら「もうちょっと周囲のコメント読んで」といった所。作り話(≠例え話)でないと対抗できない時点で勝負ありと思うがどうか

http://b.hatena.ne.jp/pmint/20140315#bookmark-186417446

  • だれもminifyをしろと言う意見を書いてない。対応が全くなってないと言う話をしている
  • 技術者合格しなけりゃはてなユーザにはなれないのか?
  • 問題を作り話だとレッテルを貼っても問題は変わらない。対抗などしていない。
  • そもそも、客と勝負してどうするんだって話をしてるのに、勝負有りとかなしとか。その視点をまず捨てろ

解決ではなくて「問題なし問題なし」と言い続ける奴らが回り回ってはてなを駄目にしてる。はてなを甘やかすなと言いたい。

http://anond.hatelabo.jp/20140314173959

そんなのは枝葉。

そういう技術論ばかりやって本当に客が必要だったものを用意できないのがはてな最近の駄目さなんだよ

例えば、LINEが自社で使ってる技術をアピールする事で客を集めてるか?

もしLINE技術をアピールする戦略をとったら、今のような形になれていたと思うか?

その上で"尖った"技術力がどんどん無くなっているのがはてなの現状。ベンチャー企業ってのはそういうもん。これは別に悪い事じゃない。ただそれ以外にウリを作り出せないとじり貧だろう。

http://anond.hatelabo.jp/20140315033741

実際に見て欲しいんだけど、そんなに広告多い?

http://emija.hatenablog.com/entry/2014/03/11/231940

具体的には分からない。

ただはてな顧客から寄せられたクレームにおける推測部分を否定だけしたが、顧客が抱えている問題に対して答えを出していないのは確か。

そこに書いてあるようにはてなが言うべき回答例として挙げた部分は、例えばそういうことが言われているので書いた例程度に思ってくれ。

当然ながら、はてなはきちんと分析して回答するべき。顧客が投げてきた疑問を否定するためだけに無駄時間を使う暇があるならできるはずだ。

http://anond.hatelabo.jp/20140315042727

http://emija.hatenablog.com/about

その人も技術者らしいんだけど

技術者である前に、そいつ顧客だ。はてなはまずはそう扱うべきだろ。

2013-05-06

http://anond.hatelabo.jp/20130506214334

携帯つながらないと思って打ちまくったら連投してました。すみません

いや、ジェンキンス入れろとか、バグジラかいう話なら

一通りはやってるよ。

説明責任が発生するのは大概機能試験で、モンキー過程

唐突に出るものから状況把握をチームで共有したいとなったとき

テスト自動化〜じゃ補えないことが多いって話だ。

バグフィックスを実際に行うチームは、

また違う会社人間が大概だし、システムみたいに

API叩けばバグ概要をすぐ掴めるようなら、

テスターはいらねーよ。

状況から断片的に自分が言いたいことだけ

言ってんじゃねー

2012-09-29

教えてGoogleかApple

 バグフィックスiOS6最適化をさせた最新のAdMobを載せたい!→AdMob SDK 6.2.0を使ってね。あ、でもこのバージョンのAdMobはiOS5以下ではUDID取得するから(あと、iOS6ではadvertising identifier使うからアプリ側の責任でそのことはちゃんとユーザに告知してね☆

 あれ、今まではUDID使わないバージョンダウンロードできていたと思うけど、それどこ行ったの? 6.2.1とかないんですか。


 え、iPhoneでAdMob使うなら、ユーザに「IDFA/UDIDを使ってもいい?」って同意をとったことを確認した上じゃないと使えない? めんどくさくね? 端末がユニークになるようにトラッキングしないと広告出せないの?

2011-08-18

プログラマ浮気の基準について

http://anond.hatelabo.jp/20110817224009

プログラマ浮気の基準について、皆さんの考えを教えて下さい

A、メイン言語以外でコーディングをする

B、気になる言語オープンソースダウンロードする

C、fork OK なオープンソースを改変する

D、コミットが自由なオープンソースプロジェクトに参加する

E、コミット承認制なオープンソースプロジェクトに参加する

F、一度だけバグフィックスのリビジョンコミットする

G、いつでも別れられる感覚プロジェクトに参加する(≒メンテナになる)

H、プロジェクトに参加した結果、他の言語の方に本気になる


プログラムで思う存分浮気しろってことですね、分かります

2010-03-03

Opera 10.50

だめじゃん。

GMailフォントが読みづらいのになってる

Google Readerの各フィードの未読件数が表示されない

早くバグフィックスしてください。

2009-12-13

はまちちゃんのと脆弱性報告のあり方

http://yugui.jp/articles/851

とか、それに付いたブコメとかに勘違いが多いので。

はまちちゃんの手法の問題点は、脆弱性を直せる立場の人よりも先にクラッカー脆弱性を教え、しかもその利用方法まで実証し解説してみせていることにある。

なお、「先に」と書いたのは、はまちちゃんクラッキング手法を披露した時に、理論上はサービスプロバイダクラッカーも同時に知りうるはずだが、実際のところ、はまちちゃんが突く程度の穴を作る開発者はまちちゃんblogをチェックしておらず、他方クラッカーは手軽な情報源としてチェックしている可能性があるからだ。また、バグフィックスよりもクラッキングの方が早いため、どうしてもはまちちゃんに教示されたクラッカーアタック危険に曝される時間ができてしまうからだ。

サービスプロバイダいつまでも直さないなら、あの「カンチョー程度の」教示も親切と呼べるかもしれない。

しかし、まずサービスプロバイダに直す機会を与えなければならない。

はまちちゃんblogクラッキング手法を披露する前に、まずはサービスプロバイダに「貴社サイトには◯◯という脆弱性が有ります。直す予定があるのか、直す場合はいつまでに直すのかを、◯月◯日までに返答してください。」と脆弱性を報告し、返答期限を無視し、あるいはまともなバグフィックス予定を示さなかった場合に、初めてカンチョーするべきなのだ。

カンチョーするに至った場合であれ、殊勝にもカンチョー前に直された場合であれ、blogネタにするのはかまわないだろう。)

ところで余談だけれども、「内臓露出」した患者に対し「カンチョー」しているというのは比喩として不正確ではないか。

はまちちゃん脆弱性自体を突いているのだから、比喩においても失態と攻撃が部位的に一致していなければならない。

「(アナルの)隙」に対しては「カンチョー」で対応が取れているが、「内臓露出」に対しては対応が取れていない。内臓に粉末ハバネロを吹きかけるとか、そういう喩えにならなければ対応しない。

おそらく脆弱性を「内臓露出」と派手にしてみたものの、内臓を攻撃してしまうとはまちちゃんの攻撃が正当だと言いづらくなる為、あえてカンチョーを維持して読者の印象を操作しようとしたのではないか。

2009-01-12

http://anond.hatelabo.jp/20090112203831

>マイクロソフトジャパン

それはバグフィックスローカリゼーション会社だと言った。しかも別に大きくない。

>NECIBMジャパン富士通

子会社でしょ。本体で優遇されるのはハードの人。もしくは経理とか文系

本社プログラム組み込みソフト)はハードの人に組ませる。ソフト専門はいらない。

あと、研究職はいちおう本社になるけど、全くの別枠。

>NTT研究所

それ研究

>沖、NED、フジソフトサムソンジャパンとか。

この辺を中小と表現した。

ついでに

>トヨタホンダ

ハードメインソフト専門は基本的に募集してない。

ハードがわからないやつにどうやって組み込みソフトを組ませろと。って空気を感じる。

>三菱

やっぱりソフトウェア専門の人は今回募集してないなって言われた。

ソフトウェア開発で就職したい場合

大手ってグーグルぐらいしかないですよね?ヤフーは大量雇用、大量リストラ

マイクロソフトジャパンは別に大きくもないし、やってることはバグフィックスローカリゼーションみたいだし。

その次がいきなりメーカ子会社とかの中小企業で、大手がないですよね?

で、後ははてなとかのベンチャー系?

大手がなさすぎる…

で、中小に入ると役員は銀行から、もしくは本社からの天下りで、上に上り詰める道ももうないと。

まともな就職がしたければハードに行けとはこういうことか。

2008-12-12

Adobe CS4 に関するメモ

PhotoshopCS4とIllustaratorCS4アプリ体験版をちょっと弄ってみた。以下はその感想メモ

全体

アプリ全体のウィンドウVistaっぽくなった。表示操作に関する機能が取り出されてメニューより上の段に並べられ扱いやすくされている。

書類のウィンドウは2種類の状態があり複雑になった。一つはFlashのように書類エリアにハメ殺しになっている状態と書類ごとにウィンドウに分かれた状態。そしてそれぞれで単独の書類を表示している状態と複数の書類をタブでまとめている状態を持っている。少し分かりにくい。実際は自分が作業しやすい一定の状態に落ち着くので問題はないと思われるが「並べて表示」での挙動が違ったりして消化し切れていない印象が残る。

パネル(旧パレットウィンドウ)とドックはCS3から少し洗練され、操作時に思わずクリックしてしまうクローズボタンはドック内では表示されなくなった。

また、スクリーンを共有するというどこかで見たような機能が追加された(β版らしい)。こういうのは諸々のコンセンサスの得やすい社内チーム間とかで使うのだろうか。VersionCueもそうだけど不可視概念とか設定とかで面倒そうだと使う気にならないなあ。

Photoshop CS4

今回の変更点は分かりやすい。CS3でもGPU演算させていたそうだが、さらにGPU利用のスムーズズームカンバスの見た目だけの回転(回転ビュー)が追加された。特に回転はPhotoshopで絵を描く人にはありがたいだろう。一部でペンツールに補正機能が付いたといってるようだがこれは元からあったブラシオプションの「滑らかさ」がデフォルトで付くようになっただけのようだ。

もう一つ大きな変更は3Dペイントらしいのだがちょっと分からない。何しろすごく重くて弄る気がなくなってしまった。グラボを奢ってる人はいいかもしれない。

写真自動編集機能も機能強化されている。複数の画像を用いたピント操作(レイヤー自動合成)はCS3より精度が良くなっている。被写体を除いた背景の自動拡大縮小(コンテンツにあわせて拡大縮小)も追加された。しかし触った所では「自動」ゆえにコントロールできず画像を上手く加工できなかった。既存の機能で手作業したほうが思い通りに扱えるのではないか。

ほかにもスタンプツールの複数コピー元対応とかマスク編集パレットなど地味ながら使い勝手を向上する変更もある。

残念なことにメニューリストや書類ウィンドウリフレッシュされない目障りなバグがあるがこれはグラフィックボード依存して再現されるのかもしれない

総合するとPhotoshopで絵を描く人には要アップデートだがそれ以外の人には別にどっちでもよさそう。

Illustrator CS4

のっけから言わせてもらうとIllustrator CS3は欠陥商品であった。オブジェクト操作に数字にでない誤差(?)が出るバグがあり、カラーパレットには指した値が指定できないというとても不細工なバグがあった。その不具合が直っただけでもアップデートする価値がある。というかさっさとパッチで対応して欲しかった。

大きな変更点は複数アートボードの取扱いが可能になったこととブラシの復活だろう。従来から数ページものの印刷物ならIllustratorで作られたりしていたわけで、そのへんの機能強化ともいえる。でもマスターページも自動ノンブルも無くてどうするのかなと思う。PDF変換が楽とかそういうものかもしれない。

ブラシは既存ブラシのようなパスシンボルを貼り付けて変形させている機能と違って、10年前、Illustrator 5.5まではあった描画した線の輪郭にパスが付くブラシ機能である。前回との違いはFlashとの統合意識してか重ねて描いた部分が1つのオブジェクトに結合される所だ。使い勝手が直感的でいいと思う。

あとパネルの改良がされている。カーソルをあっちこっち動かさずにすむよう、その場で設定値パネルを開けるようになっている。いいねえ。

最後に

ほかにもDreamWeaverFireWorksも弄ってみて、CS3の時も思ったが正直メジャーアップデートするほどの更新があっただろうか疑問だ。旧Macromedia製品だからだろうか。

AdobeCS Suiteというパッケージを売り出してからSuiteのためだけにバージョンの数字を上げているだけに見える。新製品で特定のもの以外、あまり魅力的でなくとも現状のままではSuiteで丸ごとアップグレードせざるをえない。抱き合わせ商法である。個別製品以外に更新意欲がわかないようなバージョンアップをするならSuiteから個別製品へのアップグレードを認めてほしい所だ。

それからメジャーアップデートの前にちゃんとバグフィックスしてください。

2007-11-08

60行テンプレートエンジンがパワーアップしてレイアウト機能に対応

前の60行テンプレートエンジンを改良して、レイアウトテンプレート機能を追加してみた(それでも全部で90行)。

レイアウトテンプレート機能とは、例えば個別のテンプレートが<table>...</table>を出力して、それをレイアウトテンプレートが<html><body>...</body></html>で囲って出力するとかそんなの。

詳しくは終わりの方のサンプルをみてくれ。

これは Ruby on Rails(とその仲間たち)にある便利機能のひとつ。

ついでにいうとSmartyにはない機能のひとつ。

今まで知らなかった人はぜひ試してくれ。チョー便利だから。

前回はたくさんのブックマークありがと。

コメントで「男前テンプレート」と名前がついてたので、勝手採用

名前がキモいっていわれるよ?でもそんなのカンケイネー

あと、これ以上の機能追加はしないので、各自勝手に改造して使ってくれ(そのためにコメントをつけてるから)。何でも人任せにするな。

コード

<?php
/*
 *  OtokomaeTemplate.php -- レイアウトテンプレートに対応した90行のテンプレートエンジン
 *
 *  - レイアウトテンプレート中で echo $_content; とすると中身が表示される。
 *  - テンプレート中で設定した変数レイアウトテンプレートで使うことが可能。
 *  - レイアウトテンプレート名をテンプレート側で指定することも可能。
 *  - 使い方:
 *      require_once('OtokomaeTemplate.php');
 *      $TEMPLATE_DIR    = 'templates';  // 省略可、パーミッションに注意
 *      $LAYOUT_TEMPLATE = 'layout.php'; // 省略可
 *      $context = array('title'=>'Example',
 *                       'list'=>array(10,'<A&amp;B>',NULL));
 *      include_template('template.php', $context);
 *  - 要 PHP 5.1 or later
 *  - ライセンス: public domain (自由に改造してね)
 */

/*
 *  設定用のグローバル変数
 */
$TEMPLATE_DIR    = NULL;   /* テンプレートを探すディレクトリ */
$LAYOUT_TEMPLATE = NULL;   /* レイアウトテンプレートファイル名 */

/*
 *  テンプレートを読み込んで実行する。
 *  $_context は変数名をキー、値を要素とする連想配列。
 *  $_layout はレイアウトテンプレートファイル名。
 *  - NULL または省略した場合は $LAYOUT_TEMPLATE を使う。
 *  - FALSE ならレイアウトテンプレートを使わない。
 *  - $_context['_layout'] = '...'; とすればテンプレート側でも指定可能。
 */
function include_template($_filename, $_context, $_layout=NULL) {
    global $LAYOUT_TEMPLATE;
    $_content = render_template($_filename, $_context);
    if (@$_context['_layout'] !== NULL)   // テンプレート側で指定された場合は
        $_layout = $_context['_layout'];  // それを使う。
    elseif ($_layout === NULL)            // 引数で指定されなかった場合は
        $_layout = $LAYOUT_TEMPLATE;      // デフォルトファイル名を使う。
    if ($_layout) {
        $_context['_content'] = $_content;  // レイアウトテンプレート中で使う変数
        $_content = render_template($_layout, $_context);
    }
    echo $_content;   // or return $_content;
}

/*
 *  テンプレートを読み込んで実行し、その結果を文字列で返す。
 *  include_template() の実体。
 */
function render_template($_filename, &amp;$_context) {
    $_cachename = convert_template($_filename);
    extract($_context);     // 連想配列ローカル変数に展開
    ob_start();
    include($_cachename);   // テンプレートを読み込んで実行
    return ob_get_clean();
}

/*
 *  テンプレートファイルを読み込み、convert_string() で置換してから
 *  キャッシュファイルに書き込む。読み込み時のロックは省略。
 *  (file_get_contents() もファイルロックできるようにしてほしいなあ。)
 */
function convert_template($filename) {
    global $TEMPLATE_DIR;
    if (! file_exists($filename) &amp;&amp; $TEMPLATE_DIR)
        $filename = "$TEMPLATE_DIR/$filename";
    $cachename = $filename . '.cache';
    if (! file_exists($cachename) || filemtime($cachename) < filemtime($filename)) {
        $s = file_get_contents($filename);
        $s = convert_string($s);
        file_put_contents($cachename, $s, LOCK_EX); // LOCK_EX サポートは 5.1.0 から
    }
    return $cachename;
}

/*
 *  テンプレートの中身を置換する。
 *  - '#{...}' を 'echo ...;' に置換
 *  - '%{...}' を 'echo htmlspecialchars(...);' に置換
 *  - ついでにXML宣言も置換
 */
function convert_string($s) {
    $s = preg_replace('/^<\?xml/', '<<?php ?>?xml', $s);
    $s = preg_replace('/#\{(.*?)\}/', '<?php echo $1; ?>', $s);
    $s = preg_replace('/%\{(.*?)\}/', '<?php echo htmlspecialchars($1); ?>', $s);
    return $s;
}
?>

サンプルPHPコード:

<?php
require_once('OtokomaeTemplate.php');
$TEMPLATE_DIR    = 'templates';
$LAYOUT_TEMPLATE = 'layout.php';
$context = array('list'=>array(10,'<A&amp;B>',NULL));
include_template('template.php', $context);
?>

レイアウトテンプレート(layout.php):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <body>
    <h1>%{$title}</h1>
    <div id="maincontent">
<!-- テンプレートの内容 -->
<?php echo $_content; ?>
<!-- /テンプレートの内容 -->
    </div>
  </body>
</html>

テンプレート(template.php):

<?php // レイアウトテンプレート名をテンプレート中で指定する場合 ?>
<?php //$_context['_layout'] = 'mylayout.php'; ?>
<?php // レイアウトで使用する変数テンプレート中で指定する場合 ?>
<?php $_context['title'] = 'レイアウトのサンプル'; ?>
<table>
<?php foreach ($list as $i=>$item): ?>
  <tr bgcolor="#{$i % 2 ? '#FFCCCC' : '#CCCCFF'}">
    <td&gt;#{$i}</td&gt;
    <td&gt;%{$item}</td&gt;
  </tr>
<?php endforeach ?>
</table>

出力例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <body>
    <h1>レイアウトのサンプル</h1>
    <div id="maincontent">
<!-- テンプレートの内容 -->
<table>
  <tr bgcolor="#CCCCFF">
    <td&gt;0</td&gt;
    <td&gt;10</td&gt;
  </tr>
  <tr bgcolor="#FFCCCC">
    <td&gt;1</td&gt;
    <td&gt;&lt;A&amp;B&gt;</td&gt;
  </tr>
  <tr bgcolor="#CCCCFF">
    <td&gt;2</td&gt;
    <td&gt;</td&gt;
  </tr>
</table>
<!-- /テンプレートの内容 -->
    </div>
  </body>
</html>

いくつか補足:

ログイン ユーザー登録
ようこそ ゲスト さん