Techの最近のブログ記事

YAPC に参加したのに blog を書かないと怪僧に激詰めされると聞いて、久々に blog 見たら前回のエントリーがまさかの YAPC::Asia 2011 のエントリーで特保コーラを噴射しました。
こんばんは。

2012-09-29 18.38.12

今回は前回と違ってスピーカー登録をしていなかったのと、iPhone 5 の入荷仕事の関係上1日目の大半を抜けざるを得なかったので、参加したとは言い難いのですが、とりあえず行ってきました。

各トークの感想は他の blog に譲るとして、ちょっと気になったのが charsbar さんの CPAN Author の動向調査で全体的にアクティビティが下がってるのでは?という発表でした。これは最近思うことが色々あって、前日に自分から charsbar さんにお願いして出してもらったのですが、結果としてはだいたい予想通りでした。

ただ、これに対しては charsbar さんも壇上で言っていたとおり、色んなとらえ方があると思うのですが、個人的には直近ではこれ自体には特に大きな危惧は抱いていません。例えば自分の会社、特に自分の部署ではもちろん Perl をメインの言語として使っているし、恐らく Web アプリケションのサーバーサイドで Perl で裁いているトラフィックとしては日本、ひょっとしたら世界一だと思っています。なので Perl 自体には雇用はまだまだあると思ってるし、これからもしばらくはあると思っています。

が、別のセッションで kazuho さんが指摘していたとおり、ビジネス要件や技術進化が進む中では、適材適所に技術を使っていけばいいと思うのはごく自然なことで、例えば、サーバーサイドで非同期なものは node.js でやった方が楽だと思うし、大規模な開発でヒューマンリソースをスケールアウトさせなきゃいけない場面では Java や RoR みたいな解法もあると思うし、まさに適材適所で選択していけばいいと思うし、自分たちのように大規模に Perl を使っている会社においても、それはやっていかなきゃ生き残れないと思ってます。

ただ、Perl には、"There's more than one way to do it." という考え方の通り、それさえも Perl でやってしまおうという、いい意味で狂った人たちがいて、そんな人たちが作る物だからこれまた面白いし、実際現場で使える物も生まれたりするわけです。そんな人たちの話が直接聞けるのが YAPC であり、そんな人たちと直接話ができるのが YAPC だと思います。だから楽しい。そんなコミュニティやエンジニアがたくさんいるから Perl をやめれない。

自分が Perl コミュニティに対してやっていきゃなきゃいけない一つのこととしては、そういうエンジニアが働ける箱を用意することと、若いエンジニアには Perl 以外の選択肢も与えながら、Perl コミュニティにコミットさせていくことなのかなーとか思っています。

最後にlestrrat さん、941 さんを始めとするスタッフの皆様お疲れ様でした!
毎回何もお手伝いせずに飲んだくれて申し訳ありません。
来年も飲んだくれてます。

というわけで、次回の更新は YAPC::Asia 2013 で!
次回は飛び入りLTだけじゃなくて何か話せるといいですなぁ。

界王拳がスムースに変換できないのについカッとなってことえりを捨ててATOKに乗り換えました。結局辞書登録しています。こんばんは。

さて、このたび DeNA Technology Seminar #1 というのを会社で開催することになって、その中で Inside mbga Open Platform ( Gadget Server ) というお題で話すことになりました。

OpenSocialというとアプリケーションの作り方とかの話が多くて、裏側の話というのはなかなかないと思うのでよかったら聞きに来てください。会社を首にならない程度に話せたらなーと思います。

まだ詳細は決まっていませんが、懇親会もあるのでよかったら僕と握手!

あと、zigorou先生が気合いを入れてくれたエンジニアブログも始まりました。僕もそのうちネタができたら書けたらなーとか思ってますので、こちらも是非。

猫も杓子もMacな世の中で、未だに2004年に発売されたVAIO T90PSを使い続けています。
別に不満はなかったのですが、最近ハードディスクが変な音を出すようになってまずいなーとか思ってました。
んで、重い腰を上げてハードディスクの換装に乗り出したのですが、こいつにくっついてるのは巷で出回ってる2.5インチではなく、iPodとかで使われている1.8インチという事実上東芝しか作っていない特殊なやつ。
しかも、コネクタが現行のものは使えず、最大容量でMK8007GAHという80GBの物を最後にモデルが生産終了になってるんですね。
しかもこいつが高い。このご時勢で80GBで2万円前後。
とはいえ、生産終了ってことは在庫にあるものがはけたら入手困難必至になり、新しくノートを買う羽目になるので、背に腹は変えられんってことで購入したわけです。

VAIO HDD換装

とにかくちっちゃい。

で、本体ばらして乗せ換え。

VAIO HDD換装

途中、部品が余ったりして冷や汗でましたが、なんとなく完了。

んで、容量増えて密度が上がったので多少はパフォーマンス上がるかなと、とりあえずWinXP入れてみたら、何となく体感でわかる程度に上がった気がします。
少なくとも異音がしなくなったので快適。

っつーわけで、容量増えて20GBくらいWindowsに割けるようになったのでPCDJでも始めようかなとか思ってます。

typesterさんが言い出しYappoさんが提供しているcodereposはcommit権を得れば、公開されているコードを誰でもいじくれるステキプロジェクトです。
こういうフルオープン全開な試みはときめきます。
ときめいているだけではダメなので、早速お願いしてcommit権を頂きました。

で、せっかくなので何か提供しようと思ったので、行き場に困っていたけど常々使っているDBIx::Class::InflateColumn::DateTime::Autoをとりあえずあげてみました。

じゃんじゃんばりばり添削していただきたいと思います。

で、みんなもっともっとソースを晒せばいいんだと思います。

追記:

最近猛烈にJavaScriptを書く機会が増えたのでvimで整形ツール欲しいなと思っていました。
で、YappoさんJavaScript::Swellを使ってみることにしました。

CPANでインストールしてこんなラッパー作って ~/bin/js_swell.pl
#!/usr/bin/perl

use strict;
use JavaScript::Swell;

my $data;
while (<>) {
    $data .= $_;
}
close IN;

print JavaScript::Swell->swell($data);
.vimrcかなんかにこんな風に書いたら
map ,jt <Esc>:%! ~/bin/js_swell.pl<CR>
こんなコードが
var i=0;if(i++){var a=-1;}
vimから:,jtでこんな風になりました
var i = 0;
if (i++) {
  var a = -1;
}

便利。

ustreamの[My Shows]の[Embed]にあるタグをそのままblogのHTMLとかに貼り付けると、いきなり再生が始まってしまいます。
ボクみたいに音を配信してる場合、いきなり音が鳴るのでえらい迷惑です。
前は違ったのですが、リニューアルでデフォルト自動再生になったんですね。

<embed width="360" height="261" flashvars="autoplay=false" src="http://ustream.tv/yoP4a3TvpHYY37xGGJS1p68pa3k2rY3j.usc" type="application/x-shockwave-flash" wmode="transparent" />

とかすればよろし。

そろそろみんな飽きてきた観もあるustreamです。

で、これと同じようなサービスをやるにはFlash Media Serverが必要なんでしょうが、むちゃくちゃ高いです。

で、これとほぼ同じ機能を提供してくれる(正確にはRTMPサーバーになるんだろうか)OSS、Red5をCentOS 5に入れたので、メモ。

antのインストール

makeにantを使うのでantをyumでインストール。

$ yum install ant

JDKのインストール

antをインストールするとjava-1.4パッケージがインストールされるけど、コンパイルと実行にはjdk1.5以上が必要なのでSunからJDK 5以上をダウンロードしてインストールしてデフォルトのVMを1.5に切り替え。

詳しくはこの辺。

JAVA_HOMEの指定をしないとコンパイルでこけるので注意。
JAVA_VERSIONの指定はしてもしなくてもよさげ。

Red5のコンパイル

ここからred5-0.6.2.tar.gzをダウンロードして適当なディレクトリで展開してコンパイル。

$ wget http://dl.fancycode.com/red5/red5-0.6.2.tar.gz
$ tar xzvf red5-0.6.2.tar.gz
$ cd red5-0.6.2
$ make

山のようなメッセージが出るけど最後にBUIDL SUCCESSFULが出てればおっけー。

Red5の起動

このままmake installしてもいいんだけど、とりあえず実行してみる。

$ ./red5.sh

これでサーバーが起動するのでブラウザからhttp://[host]:5080/にアクセスしてページが表示されればオッケー。

/adminはid: admin password: adminで入れるけど、何ができるのかよくわからんかった。
/demos以下にいろんなデモがある。
このページにリストされているもの以外にもwebapps/root/demosにいろいろある。

/demos/othello.swf - ネット対戦オセロ
/demos/FITCPresentation.swf - プレゼンテーション
/demos/videoConference.swf - 複数ビデオチャット

サーバーの実装は基本的にはJavaだけど、./webapps/oflaDemo/WEB-INF/src/applicationsに.rbや.pyや.jsや.groovyなファイルがあるのでRuby, Python, Javascript, Groovyで実装できそう。

ちなみにmakeしたソースディレクトリは

doc - ドキュメント(APIドキュメントあり)
src - 本体のソース
swf/DEV_Source - デモクライアントのFlashのソース
webapps/*/WEB-INF/src - デモサーバーのソース

で、サンプルをいじった感じでは個人ユースでは結構いける感じです。
ただ、クライアントのソースがみんなflaなんでちときつい。
使いこなすにはRTMPの仕組みとRed5のAPIドキュメントを読んで勉強する必要がありそうです。

ITMedia News: 米Apple、Windows版Safariをβ公開
 米Appleのスティーブ・ジョブズCEOは6月11日に開催された開発者会議、Worldwide Developers Conference(WWDC)基調講演で、自社のWebブラウザSafariをWindows Vista、XP向けに投入すると宣言した。即日同社のWebサイトから公開β版がダウンロード可能になった。

というわけで、早速試してみた。

Apple - Safari 3 Public Beta 3

で、こんな感じ。

2007061201.jpg

2007061202.jpg

日本語は設定で日本語フォントを指定してもレンダリングされず。
検索フォームとかも崩れてるのが嫌な感じ。
ついでにadsenseもうまくレンダリングしてくれてない感じ。

ま、betaですから。

で、機能や特徴のほうですが

一般的なブラウジングがIE7より2倍、Firefox 2より1.6倍速く、JavaScriptの実行に至ってはIEの2.8倍、Firefox 2の1.6倍速いと豪語してますが、よくわかりませんでした。
でも起動は気持ち速い気がしました・・・とはいえIE7入れてないのでIE6とエクステンション山ほど入ったFirefoxと比べてですが。

そのほかの特徴もIEやFirefoxと比べて取り立てて珍しい機能はないようですが、面白いと思ったのがSnap BackとResizable Text Fields。

Snap Backは例えばGoogleで「apple」を検索をして、結果をクリックしてappleのトップに行ってから、クリックしまくっていろんなところに行っても

2007061203.jpg

2007061204.jpg

2007061205.jpg

このボタンで検索結果に一発で戻れるかゆいとこに手が届いた機能。

Resizable Text Fieldsはテキストエリアを自由にリサイズできる機能。

2007061206.jpg

2007061207.jpg

結構まともにできてて、テーブルタグのセルの中のテキストエリアをリサイズするとテーブルのセルもリサイズされました。

あと、プラグインはいわゆる大御所は揃ってます。

Apple - Safari 3 Public Beta - Download - Plug-ins for Safari on Windows

今のところ
  • Adobe Flash Player
  • Adobe Reader
  • QuickTime
  • Java
  • Real Player
  • Windows Media Player
があります。 FirefoxのextensionやIEのActiveXとは違い、インストーラーをダウンロードして実行する、ちょっと古めかしい感じ。

まぁ、大方の期待はクロスブラウザのチェックにいいなぁと思ってるのでしょうが、Safari 2なんかと表示違うだろうから、そんなうまい話はない気がします。


頼むからSafari 2 hackとかやる羽目にならんことを祈ります。

2007060901.jpg

何故か知らないけど日本Ruby会議2007に来ています。

  • 聴衆がPerlな人より品がいいかも
  • JRuby面白い
  • 来れなかったYappoさんがircでぼやいてるのが会場中に流されてた
  • 相変わらず無線LANのIPの取り合い
  • でもYAPCよりはましになってるかも
  • 椅子が硬くて午後になって尻が痛い 椅子重要

久々にPerl以外の言語のカンファレンスに来てるのでとっても新鮮です。

blogに載せるなど、ちょっとしたイメージのサイズ変更やクリッピングにMicrosoft OfficeにくっついてきたPicture Managerっていうソフトを使ってます。
フォルダ内のイメージをまとめて編集するときとか、結構軽くて重宝しているのですが、たまに起動がバカみたいに遅くなります。

で、いっつも対応方法を忘れて困るのでメモ。

原因: すでに接続されていないネットワークドライブを参照するのにタイムアウトを待つから

対応:
  1. c:\Documents and Settings\[ユーザー名]\LocalSettings\Application Data\Microsoft\OIS\OIScatalog.cag をノートパッドとかで開く(隠しフォルダなのでエクスプローラからたどるときは[ツール]-[フォルダオプション]-[表示]の[ファイルとフォルダの表示]を[すべてのファイルとフォルダを表示する]に選択しておく必要があります)
  2. <mru path="~の行のうちでネットワークドライブであろう行を全て消す
  3. 普通に起動してみる

参考:
Microsoft: Office Picture Manager は、開くの低速になります。

Flex2でとりあえずやってみたかったのがこれ。

* ファイルサイズは5Mbytesが上限です。
* 実際にはファイルの保存などは行ってません。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
  layout="absolute" 
  width="400" 
  height="120" 
  creationComplete="initApp()">
  <mx:Script>
  <![CDATA[
    import flash.events.*
    import flash.net.FileReference;
    import mx.controls.Alert;
    
    private var max_size:int;
    private var post_url:String;
    private var fileRef:FileReference;

    private function initApp():void{
      max_size = Application.application.parameters.maxSize;
      post_url = Application.application.parameters.postURL;
      fileRef = new FileReference();
      fileRef.addEventListener(Event.SELECT,fileSelectEvent);
      fileRef.addEventListener(Event.OPEN,fileOpenEvent);
      fileRef.addEventListener(Event.COMPLETE,fileCompleteEvent);
      fileRef.addEventListener(ProgressEvent.PROGRESS,progressEvent);
      btn_browse.addEventListener(MouseEvent.CLICK,selectFile);
      btn_upload.addEventListener(MouseEvent.CLICK,upload);
      btn_cancel.addEventListener(MouseEvent.CLICK,cancel);
    }
    
    private function fileSelectEvent(event:Event):void {
      progress.label = "";
      if(fileRef.size > max_size) {
        Alert.show("Size over");
        btn_upload.visible = true;
        btn_upload.enabled = false;
        btn_cancel.visible = false;
        btn_cancel.enabled = false;
        btn_browse.enabled = true;
        return;
      }
      progress.setProgress(0, 0);
      text_file.text = fileRef.name;
      btn_upload.visible = true;
      btn_upload.enabled = true;
    }
    
    private function fileOpenEvent(event:Event):void {
      btn_upload.visible = false;
      btn_upload.enabled = false;
      btn_cancel.visible = true;
      btn_cancel.enabled = true;
      btn_browse.enabled = false;
    }

    private function fileCompleteEvent(event:Event):void {
      progress.label = "Completed";
      btn_upload.visible = true;
      btn_upload.enabled = false;
      btn_cancel.visible = false;
      btn_cancel.enabled = false;
      btn_browse.enabled = true;
    }

    private function progressEvent(event:ProgressEvent):void {
      progress.setProgress(event.bytesLoaded, event.bytesTotal);
    }
    
    private function selectFile(event:MouseEvent):void {
      fileRef.browse();
    }
    
    private function upload(event:MouseEvent):void {
      var param:String = "file";
      var req:URLRequest = new URLRequest(post_url);
      req.method = URLRequestMethod.POST;
      fileRef.upload(req, param, false);
    }

    private function cancel(event:MouseEvent):void {
      fileRef.cancel();
      progress.label = "Canceled";
      progress.setProgress(0,0);
            btn_upload.visible = true;
            btn_upload.enabled = true;
            btn_cancel.visible = false;
            btn_cancel.enabled = false;
            btn_browse.enabled = true;      
    }
  ]]>
</mx:Script>
  <mx:Panel x="0" y="0" width="400" height="120" layout="absolute">
    <mx:TextInput x="10" y="10" width="180" id="text_file"/>
    <mx:Button x="198" y="10" label="Browse" width="80" id="btn_browse"/>
    <mx:Button x="286" y="10" label="Upload" width="80" id="btn_upload" enabled="false"/>
    <mx:Button x="286" y="10" label="Cancel" width="80" id="btn_cancel" visible="false" enabled="false"/>
    <mx:ProgressBar x="10" y="40" width="356" id="progress" label="" mode="manual"/>
  </mx:Panel>
</mx:Application>

ちょっと長く見えますが、ほとんどがボタンを見せたり隠したりと機能とは関係ないところです。
ちゃんとした人が書いたらもっと綺麗にまとまると思います。

AJAXでもできるんだろうけど、結構面倒ですがFlex2だとあっという間です。
もちろんアップロードされたファイルを保存するなり加工するなりのCGIは必要です。

で、FileRefクラスを使ってみた感想は

いいとこ
・アップロードの状態を簡単に表示できる
・アップロードさせる前にファイルサイズをチェックできる
・キャンセルが簡単

わるいとこ
・アップロードが終了したときの返り値がHTTPステータスしか取れない

てな感じです。
もちろんAJAXなアップローダーを実際に触ったわけでも、FileRef自体(というかFlex自体も)まともに触り始めて間もないので間違っているかもしれません。ツッコミ歓迎です。

最近、仕事でFlex2を触り始めました。結構楽しいです。
Flashアプリケーションが無料で、しかもタイムラインとか意味不明なことを考えずに作れるのがとっても魅力です。

で、Fedora Core 6にインストールしたのでその手順のメモ。

まずはJavaの環境が必要なので整えます。
せっかくなのでJDK 6をインストール。(日本語フォントの設定などは今回関係ないので省きます。)

SUNからパッケージを持ってきてインストール。
$ sudo ./jdk-6-linux-i586-rpm.bin

Javaの環境設定。

.bash_profile
export JAVA_HOME=/usr/java/jdk1.6.0
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
既存のインストール済みVMの確認。
$ rpm -qi java-1.4.2-gcj-compat
java-1.4.2-gcj-compatパッケージが入ってる場合はalternatives機能を使ってVMをスイッチ。
$ sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.6.0/bin/java 2
$ sudo /usr/sbin/alternatives --config java

2 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
   2           /usr/java/jdk1.6.0/bin/java
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
VMの確認。
$ java -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

続いてFlex SDKのインストール。

AdobeからFlex SDKとFlex Language Packを適当なところにダウンロード(Adobe IDの登録が必要です)して適当なところに解凍。
$ mkdir -p ~/sdk/flex2
$ cd ~/sdk/flex2
$ unzip ~/tmp/flex_sdk_2.zip
$ unzip ~/tmp/flex_sdk_2_ja.zip

PATHにflex2/binを通しておく。

.bash_profile
export PATH=$PATH:$HOME/sdk/flex2/bin

ようやくアプリケーションの開発。とりあえずmxmlで書いてみました。

/home/hide/public_html/flex/hello.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
	xmlns:mx="http://www.adobe.com/2006/mxml"
	width="300" height="150"
	>
    <mx:Script>
    <![CDATA[
        import mx.controls.Alert;
        private function initApp():void {
		}
        private function sayHello():void {
            Alert.show("Hello World");
        }
    ]]>
    </mx:Script>
    <mx:Button width="80" label="Say" click="sayHello()" />
</mx:Application>
コンパイル。
$ mxmlc hello.mxml
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
/home/hide/public_html/flex/hello.swf (138266 bytes)

hello.swfが出来てるのでブラウザから確認。

おぉ。初めてのFlash。

でもコンパイルが非常に遅い。ちょっと変更したくらいでいちいち時間かけてらんないのでsecondlifeさんのこの記事を見てfcshをインストール。

rlwrapでラップするとreadlineが効いてお得なので、ついでにインストール。
$ sudo yum install rlwrap
fschをここからダウンロードしてインストール。
$ cd ~/sdk/flex2
$ unzip ~/tmp/flex_compiler_shell_012307.zip
fcshでコンパイル
$ rlwrap fcsh
Adobe Flex Compiler SHell (fcsh)
Version 2.0.1 build 155542
Copyright (c) 2004-2006 Adobe Systems, Inc. All rights reserved.

(fcsh) mxmlc -benchmark hello.mxml
fcsh: Assigned 1 as the compile target id
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
最初の設定 : 479ms
8 個の SWC がロードされました : 887ms
ファイル :286 時間 : 3713ms
リンクしています... 79ms
最適化しています... 354ms
SWF エンコーディング中... 65ms
/home/hide/public_html/flex/hello.swf (138266 bytes)
合計時間 :5586ms
ピークメモリ使用量 :50 MB (ヒープ :27, ヒープ以外 :23)
以降は返されたtarget idを使用してコンパイル。
(fcsh) compile 1
設定ファイル "/home/hide/sdk/flex2/frameworks/flex-config.xml" をロードしています
最初の設定 : 7ms
8 個の SWC がロードされました : 36ms
Nothing has changed since the last compile. Skip...
合計時間 :57ms
ピークメモリ使用量 :51 MB (ヒープ :28, ヒープ以外 :23)
リンクしています... 22ms
最適化しています... 116ms
SWF エンコーディング中... 41ms
/home/hide/public_html/flex/hello.swf (138266 bytes)
合計時間 :183ms
ピークメモリ使用量 :53 MB (ヒープ :30, ヒープ以外 :23)
(fcsh)

んむ。速い。
vimから使えるようになるとさらに便利になりそうけど、この辺はいずれってことで。

AJAXも楽しくていいのですが、クロスブラウザなんかいちいち考えるのが非常に面倒だったりすするのでFlashもいいかなぁなんて最近思ったりします。

参考: WEB+DB PRESS Vol.37にFlex2の特集があります。
WEB+DB PRESS Vol.37
WEB+DB PRESS Vol.37
posted with amazlet on 07.02.25
WEB+DB PRESS 編集部
技術評論社 (2007/02/23)
売り上げランキング: 293

前にやっていたのに忘れていたのでメモ。

vmware-toolsをインストールした状態でゲストOSの*.vmxファイルをエディタで開いて

tools.syncTime = "FALSE"

tools.syncTime = "TRUE"

にすればOK。

お仕事でパスワードによる認証があるサービスを立ち上げるにあたって、お客さんがパスワードを忘れたときのパスワードの救済措置(いわゆる、「パスワードを忘れましたか?」とか「パスワードリマインダ」ってやつです。)をどーするか、ちょっとした議論(そもそも要件で決めて置けという話もありますが)になったのでまとめてみました。

パスワードの保存方法として大きく三つ考えられます。

1. そのままの文字列として保存

・認証
ユーザーが入力した文字列と同じかどうか比較するだけです。

・リマインダ
文字列がそのまま保存されているのでそのまま送ればユーザーはそれを使ってログインできます。

・問題点
パスワードがそのまま保存されているのでデータベースなどを盗まれたらだだ漏れします。

2. 秘密鍵を使って復号可能なアルゴリズムで暗号化して保存

・認証
復号できるので保存されているパスワードを復号化してユーザーが入力した文字列を比較するか、ユーザーが入力した文字列を同じ秘密鍵で暗号化して比較すれば認証できます。

・リマインダ
復号化してからユーザーに送れば1.と同じです。

・問題点
秘密鍵と暗号アルゴリズムが漏れれば1.と同じリスクの可能性があります。また秘密鍵を忘れた場合認証そのものが出来なくなるし、秘密鍵を変更する場合は既存のパスワードを全て暗号化しなおす必要があります。

3. ハッシュ関数を使ってハッシュ値を保存

・認証
ハッシュ関数を使うと元の文字列を復号化するのは不可能なので、ユーザーが入力した文字列を同じハッシュ関数でハッシュ値を計算して保存されているハッシュ値と比較して認証します。

・リマインダ
復号化できないので、現在のパスワードを送ることは出来ません。代替策としてパスワードの再設定ページへのURLをワンタイムパスワードと絡めて生成して送るか、新たにランダムなパスワードを作成して送る必要があります。

・問題点
パスワードを忘れたユーザーはパスワード再設定を行う必要があります。(自動生成されたパスワードもランダムで覚えられないので、これも普通は変えるでしょうから同じです。)

こんな感じでしょうか。
他にもあったら教えてくださいな。

先週末辺りから特に環境をいじってないのにWindows Live Messengerがサインインできなくなりました。

現象としてはサインインすると延々とサインイン中になってしまい、エラーも帰ってこないという感じです。なんかチラホラ同じ状況の人がいたみたいだったので、個人的な問題ではない感じ。

再インストールやセキュリティソフトの見直しなどを試みてダメだったのですが、ようやく解決できました。

なんてことはない。

  1. 一旦アンインストールして
  2. レジストリエディタで[HKEY_CURRENT_USER] - [Software] - [Microsoft] - [MSNMessenger]以下を全部削除
  3. インストールしなおし

これでOKでした。

それにしても、再現されるPCとされないPCがあったのは一体なんなんだろう。

プロフィール

このアーカイブについて

このページには、過去に書かれたブログ記事のうちTechカテゴリに属しているものが含まれています。

前のカテゴリはMusicです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。