[雑記]上原ひろみちゃんにWONDER AIRPORTに出て欲しかった。

g-wonderairport
BS日テレ系 世界探訪!空港物語 WONDERAIRPORT
司会はこの二人!
ol_02

この番組は世界中の空港の楽しみ方や、航空会社のサービスなどを探る番組ですが、残念ながら終わってしまったようです。

さて、司会のこのお二人、上原ひろみちゃんととっても仲の良い方たち。清水ミチコさんは言わずと知れた仲であるし、八嶋智人さんもひろみちゃんと親しい仲ですね。八嶋智人さんは初共演はたぶんNHKの英語の番組。それから何回か共演したことがあるはず。ひろみちゃんが笑っていいともに出た時には紹介してましたしね。ツイッターでも度々ひろみちゃんの話題が出ることがあります。Haze聞いて泣いたとか。

会社を興せるくらい世界の空港に詳しいひろみちゃん。
年間様々な国でライブをしている上原ひろみ。海外の事務所に属しているものの、現地での移動手段や宿泊先の手配も自分でやっています。そんなひろみちゃんの苦手なものは飛行機!が、しかし、おのずと空港や移動手段に詳しくなってしまい、本人曰く会社が興せるほどのこと。

是非、この番組にゲスト出演して欲しかった!!
飛行機ネタには事欠かないひろみちゃん。短時間で超多忙な移動をこなすため、移動中に顔がにやついてしまったり、知らない人に武勇伝の様に話し始めて呆れられるほど。そしてこの番組で仲の良いお二人との共演を是非見たかった!!あー、スペシャルでもいいからやらないかなぁー。

[雑記]Windows8は普及するのか。

windows_8_wallpaper_by_aquil4-d4qx06e-1024x640
はっきり言って使いづらい。
この投稿ではWindows8のノートを買う話をしましたが、インターネットが繋がったので、セットアップまでしてきました。WindowsOSには慣れている僕でしたが、これまでのOSと違い、Windows8の使い方に戸惑いを隠せません。

スタートボタンがない。
これはもう有名な話ですが、左隅にあるはずのスタートボタンがありません。つい、左隅を押してしまいインターネットエクスプローラが立ち上がってきます。

タブレットOS+デスクトップOSのMixはいかがなものか。
スタートボタンがない代わりに、マウス操作により上下左右に動かすことによって、隠しメニューが現れます。これはタッチパネルなどにより直感的に操作を行う場合、多少使い勝手がよいのかもしれませんが、デスクトップOSとして使用する場合、微妙なマウスカーソルの加減によってメニューが出てこない場合もあります。

まだまだ盛り上がらないWindowsストア。
AndroidやiPhoneと同様に、Windowsもアプリケーションストアを設けました。今やスマホのアプリケーションは無数に存在しますが、Windowsストアは全然未成熟です。小学校1年生の男の子とストアアプリケーションで「ゲーム」や「教育」カテゴリを遊んでいたところ5問だけで終わってしまうようなクイズアプリケーションなど、開発本に載っているようなアプリケーションしかありませんでした。しかも、同じフレームワークを使用しているのか、似たようなアプリが無数に・・・。
Img20130328151644
XBOX360との連携はいるのか?
スタートメニューにはゲームというメニューがありますが、これを押すとXBOX360ゲームのメニューが目に入ってきます。XBOX360を持っている人には嬉しい機能かもしれないけど、持っているのを前提にしたような作りになっていて(というか米国向け)、ソリティアやマインスイーパーのようなものを想像すると拍子抜けします。ストアにWindowsPC用ゲームもありましたが、MSから出ているゲームばかりで、今後EAのOriginやStreamなどと連携するのでしょうか。。。
Img20130328151514

Windowsストアアプリ開発。
昨今のスマホアプリ開発はそれまで業務用アプリ開発に使用されてきたC言語やJavaなどを席巻し、Lightweight言語やHTMLなどにより、より簡単に開発出来るようになりました。MicrosoftもWindowsPhoneやSurfaceなどタブレット端末を出すようになり、これらのアプリケーション開発にこれまでの開発資産(C#やVB.Netによる開発)を活かすことができる、とアピールしていますが、実際のところ需要や注目度はどれほどのものなのでしょうか。これまでのWindowsアプリ開発と大きく違うのはXAMLによるUIの構築だと思います。XAMLはこれまでのWindowsフォームアプリケーションの作成よりもかなり自由にUIをデザインできるやり方ですが、一方で、そのスキルを1から付けなければならないというのが普及への障壁となっているように感じます。
XAMLによく似ているのがAndroidアプリです。AndroidSDKを使用するとUIの部分はXML構造になっているので、XAMLと似ているように感じます。これは、当初かなり評判が悪かったです。というか、今も悪いです。しかし、Androidはもう既に様々な開発手法の構築が進められていることもあり、参考本もかなりの数が出ています。本屋に行くとXAMLの開発本って・・・、というくらい無いですね。

開発の決め手は純正ツール。
AndroidはUIデザインツールが原始的なものしかついてきませんが、VisualStudio2012からはBlendなるものがバンドルされています。これは非常に高機能なUIデザインツールです。これを使いこなすことができれば、開発段階でのプレゼンやデモストレーションは絶大な効果が得られると思います。
VisualStudioDesigner1
Windows8は普及するのか。
結局のところ、Windows8は普及するのでしょうか。パソコン売り場で売られているのはほぼWindows8であるし、これから新規に調達するには半ば強制的にWindows8を使うしかないと思うのですが、、、職場や学校で使用されているパソコン環境とのミスマッチが大きい限り、ぎりぎりまでWindows7などを使う人がほとんどなのではないでしょうか。

それでも、数年後はどうなっているか分からない。
かつてWindowsM◯やWindowsVi◯taなど、今のWindows8を見ているような時代がありましたが、それでもWindowsXPやWindows7など少なからず支持されたOSが出現しました。自分的にはパソコンとしてのハードウェアやOSの成熟度は今後も変化はないと思いますが、開発の視点から見ていくと、Windows8のストアアプリなどは大きな転換点になると思います。
そうなるとWindows8の「成功」が今後のMicrosoftの方針を決めるのではないでしょうか。へたをすると開発者が身に付けるスキルは無意味なものになってしまいかねないですね。

[上原ひろみ]Solo@BlueNoteToKyo 2日目2nd!

開場2時間前で60番台。
19:40の開場でしたが、2時間前に整理券取りに行って60番台。完全にのろまりました。あーブルーノートはもう何回も行ってるのにー。

食事のオーダーはOneNightSpecial + オリーブがいつもの定番です。この日のOneNightSpecialはひろみちゃん考案の「春爛漫」。ライブのMCでもちゃっかり宣伝していました。

proxy

とりあえずセトリ。
1.トムとジェリー(Another Mind)
2.シュー・ア・ラ・クレーム / Choux a la creme(PlaceToBe)
3.マイ・フェイヴァリット・シングス(Beyond Standard)
4.古城、川のほとり、深い森の中(Spiral)
5.Haze(Voice)
6.ラプソディ イン ブルー(アルバム収録なし)
Ec.タイム・アウト(Time Control)

間違ってるかもしれないですが、後日、BlueNoteTokyoのホームページに正式なものが掲示されると思います。

PlaceToBeのソロライブよりもアグレッシブに感じた!
PlaceToBeの時と違うのは普段はバンドでやる曲をソロでやっているところ。ドラムやベース、そしてオーケストラまでもピアノ1台で表現するというのだからアグレッシブな演奏に!ラプソディインブルーはタップダンサーの熊谷和徳さんとの共演が強烈に耳に残っていて、心臓が飛び出そうなくらいドキがムネムネしました。熊谷さんのタップ音が響き渡っているようでしたね。
当然お客さんもノリノリ♪東京のお客さんはよくわかってらっしゃる人が多い。

トリオとソロ。
トリオのライブはベースとドラムが加わるので、ライブの迫力はソロよりも大きいです。ソロの場合はひろみちゃんは1人、そしてピアノだけ。でも、トリオのライブに負けるといったらそんなことないんです。ひろみちゃんが頼れるのはピアノだけ、観客が聞くのはひろみちゃんの演奏だけ。ピアノ1つの音に集中できるソロならではのいわば「特典」のようなものが味わえます。ひろみちゃんサイコー♪

2013-03-23 19.35.38

[Webアプリ]nginxを使ってWebSocketのリバースプロキシを設定する。

nginxのWebSocketのリバースプロキシはversion 1.3.13から対応。
nginx本体にWebSocketのリバースプロキシが対応したみたいなので、SSL接続まで使ってみました。

nginx.org – WebSocket proxying
http://nginx.org/en/docs/http/websocket.html

バージョンは1.3.13から対応しているようです。stable版ではないので、ソースからコンパイルします。

テストとして、nginxのリバースプロキシ機能を使用して、(http)80,(https)443でlibwebsocketsのテストサーバーに接続してみます。

パッケージダウンロードと展開(2013/03/22時点での最新)

$wget http://nginx.org/download/nginx-1.3.14.tar.gz
$tar -zxvf nginx-1.3.14.tar.gz

SSLを有効にしてコンパイル & インストール

$./configure --with-http_ssl_module
$make
$sudo make install

リバースプロキシを設定してlibwebsocketsのWebSocketサーバーに接続してみる。
ここを参考にして、WebSocketのリバースプロキシを設定します。
※ちなみに、この設定はnginx1.3.13以前のバージョンでも有効な設定であり、WebSocketをクライアントが繋ぎにいこうとするとhttpハンドシェイクがWebSocketサーバー側に伝わります。しかし、この場合はサーバーのみクライアントの接続を認識しますが、クライアント側に応答が返らない状態になります。

◇Port:80 http libwebsocketsのリバースプロキシの設定例。
設定ファイルパス(default):/usr/local/nginx/conf/nginx.conf
libwebsocketsはtest-server/libwebsockets-test-server(同PC内で起動 Port:7681で待受)を使用します。

http{
// 略
       server {
                listen 80;
                server_name localhost;

                location / {
                        proxy_pass http://localhost:7681/;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                }
        }
}

libwebsokcets-test-serverの起動

$ ./libwebsockets-test-server
lwsts[46535]: libwebsockets test server - (C) Copyright 2010-2013 Andy Green <andy@warmcat.com> - licensed under LGPL2.1
lwsts[46535]: Initial logging level 7
lwsts[46535]: Library version: 1.2
lwsts[46535]:  Started with daemon pid 0
lwsts[46535]:  static allocation: 5512 + (16 x 1024 fds) = 21896 bytes
lwsts[46535]:  canonical_hostname = ubuntuserver
lwsts[46535]:  Compiled with OpenSSL support
lwsts[46535]:  Using non-SSL mode
lwsts[46535]:  per-conn mem: 248 + 1328 headers + protocol rx buf
lwsts[46535]:  Listening on port 7681

nginxの起動

$sudo /usr/local/nginx/sbin/nginx -s stop  // 停止
$sudo /usr/local/nginx/sbin/nginx          // 起動

ブラウザでアクセスしてみる。
httpで接続!正常に動作します。
Img20130322145850
libwebsocketsはエイリアスに”/”のみでアクセスし、WebSocketのサブプロトコルが”/”,”dumb-increment-protocol”,”lws-mirror-protocol”で動作が変わります。(nginx.confに”root”パスを書かなくてよいのはlibwebsocketsにhttpサーバーの機能があるからです)。nginxの設定だけでサブプロトコルも引き継ぎられているようです。

アクセスがないソケットはnginxによって閉じられてしまう。
どうやら動きのないソケットはnginxによって閉じられてしまうようです。
Img20130322150035
“dumb-increment-protocol”はサーバーから一方的にデータ(カウンター値)を受信しているのに対し、”lws-mirror-protocol”は任意のタイミングで送受信が発生するので何もしないと約110秒くらいでソケットが閉じられてしまいます。今のところこのtimeoutの設定はわかりません。

◇Port:443 SSL libwebsocketsのリバースプロキシの設定例。
設定ファイルパス(default):/usr/local/nginx/conf/nginx.conf
libwebsocketsはtest-server/libwebsockets-test-server(同PC内で起動 Port:7681で待受)を使用します。

http{
// 略
        server {
                listen 443;
                server_name localhost;

                ssl on;
                ssl_certificate /home/user/work/libwebsockets/libwebsockets-1.22-chrome26-firefox18/test-server/libwebsockets-test-server.pem; // テストサーバーの証明書
                ssl_certificate_key /home/user/work/libwebsockets/libwebsockets-1.22-chrome26-firefox18/test-server/libwebsockets-test-server.key.pem; // テストサーバーの秘密鍵

                location /{
                        proxy_pass https://localhost:7681/;
                        proxy_http_version 1.1;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgarede";
                }
        }
}

libwebsokcets-test-serverのSSL起動
※configure時に”–enable-openssl”オプションが必要。

$ ./libwebsockets-test-server -ssl
lwsts[46628]: libwebsockets test server - (C) Copyright 2010-2013 Andy Green <andy@warmcat.com> - licensed under LGPL2.1
lwsts[46628]: Initial logging level 7
lwsts[46628]: Library version: 1.2
lwsts[46628]:  Started with daemon pid 0
lwsts[46628]:  static allocation: 5512 + (16 x 1024 fds) = 21896 bytes
lwsts[46628]:  canonical_hostname = ubuntuserver
lwsts[46628]:  Compiled with OpenSSL support
lwsts[46628]:  Using SSL mode
lwsts[46628]:  per-conn mem: 248 + 1328 headers + protocol rx buf
lwsts[46628]:  Listening on port 7681

nginxの起動

$sudo /usr/local/nginx/sbin/nginx -s stop  // 停止
$sudo /usr/local/nginx/sbin/nginx          // 起動

ブラウザでアクセスしてみる。
httpsで接続!!正常に動作します。
Img20130322151711
ちなみに、動きの無いソケットが閉じられるのはhttpと同じ現象。

[PC]VMware Player 5でUbuntuを手動インストールする方法。

後でOSをインストールする。
VMWare Player5では特定のディストリビューションを自動インストールしてくれちゃいますが、言語設定などが日本語にならなかったり、VMWareToolsのインストールに失敗して終了したり、なにかと不便だったりします。
そこで、仮想マシン作成時に「後でOSをインストール」を選択することで、OSを手動でインストールすることができます。

◇新しい仮想マシンウィザード画面で”後でOSをインストール”を選択して作成。
Img20130322131626

◇仮想マシン設定の編集でインストールディスク(またはISOイメージ)を指定して起動する。

Img20130322131855

◇仮想マシンを起動するとOSの手動インストールが始まる。
Img20130322131918

[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その3。

リアルタイム監視マップ作成続き。ブラウザで操作編。

やりたいこと。
・全国の拠点(工場や事務所)で発生したイベント(警報、警告など)をWebSocketとGoogleMapsを使ってリアルタイム監視したい。
・重大な警告が発生したら発生場所を示すマーカーを点滅表示させたい。
・重大な警告が発生したら警告音を鳴らしたい。尚、警告状態が収束したら警告音を止めること。
・デバッグ用にブラウザからイベントを送信できるようにしたい。←NEW

ブラウザからイベントを発生させる。
JavaScriptでJSON文字列を作成し、監視マップに反映させてみます。

実行画面(音出ます)

今回作成したソースはこちら

[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その2。

WebSocketを使用してのWebアプリ作成続き。
JavaScriptをあまりやったことがないので、四苦八苦しながら。。

やりたいこと。
・全国の拠点(工場や事務所)で発生したイベント(警報、警告など)をWebSocketとGoogleMapsを使ってリアルタイム監視したい。
・重大な警告が発生したら発生場所を示すマーカーを点滅表示させたい。←NEW
・重大な警告が発生したら警告音を鳴らしたい。尚、警告状態が収束したら警告音を止めること。←NEW

イベントの発生場所の点滅と警告音を鳴らしてみる。
重大な警告レベルのイベントが発生したらマップ上のマーカーを点滅させるのと、警告音を鳴らし続ける機能を追加してみる。
重大なイベントがない場合は警告音を止める。

サウンドはこちらのサイトの方のを使わせていただいた。
音楽素材/魔王魂
http://maoudamashii.jokersounds.com/

実行画面(音出ます)

今回作成したソースはこちら

[C#]WebSocketを試してみる。クライアントSSL通信編。

WebSocketでSSL通信。
この投稿ではSSL通信を行うサーバーを試したのでクライアント編。
SSL通信を行うにはWebSocketサーバーへの接続URIが”ws://”ではなく”wss://”になります。

基本的にSSLの検証が通ればソース変更の必要はなし。
C#に関わらず、各WebSocketライブラリはWebSocketの規格に準拠して作られているはずなので、”SSL/TLS Support”とかライブラリのドキュメントに書いてあればSSLが使えるのだと思います。
SSLは通信が安全であるかを証明したうえで通信を行います。.NetFrameworkなどは検証を行う仕組みが存在するので、そこが通ってしまえばソースコードの改修は要らないはずです。

ちゃんとやろうとするとちょっと面倒だし、SSLを使った開発やテストなどの目的で検証を無理やり通してしまうやり方もあるので、ここでは無理やり突破してSSL通信を試します。

WebSocket4Net編
WebSocketインスタンスのAllowUnstrustedCertificateプロパティにtrueを設定します。

            var ws = new WebSocket("wss://192.168.1.22:7681/");
            ws.AllowUnstrustedCertificate = true; // 信頼されない検証を通す

System.Net.WebSockets.ClientWebSocket編
System.Net.WebSockets.ClientWebSocketはWindows8向けです。
下記の記事などを参照に通します。

@IT – SSL通信で信頼されない証明書を回避するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/867sslavoidverify/sslavoidverify.html

接続前に検証を通すコールバックを設定します。

                    ServicePointManager.ServerCertificateValidationCallback += (s, certificate, chain, sslPolicyError)=>true; // 信頼されない検証を通す

                    await _ws.ConnectAsync(new Uri(textBox1.Text), CancellationToken.None); // WebSocketの接続

ちなみにWebSocket4Netはソケットの接続部分がラップされているので、System.Net.WebSockets.ClientWebSocketと同じ方法ではダメでした。

実行画面(左上:WebSocket4Net,左下:ClientWebSocket,右:libwebsocketsサーバー)

Windows8上でブラウザでのWebSocket(SSL)接続ができず。。。
SSL通信を無理やり通している為か、Windows8上でChrome,FireFox,IEを使用してwssによる接続を試しましたが、どれも接続完了しませんでした。
IE10に関しては無理やり突破すらできないようです。
Img20130319172309

[C/C++]libwebsocketsを試してみる。その3。SSL通信を試す。

libwebsocketsのサンプルでSSL通信を試す。
まず、libwebsocketsのサンプルで試してみます。
SSL通信によりサンプルサーバーを動作させるにはconfigureにオプションを付加してMakefileを作ります。

$./congifure --enable-openssl
$ make clean
$ make && sudo make install

test-serverにあるlibwebsockets-test-serverを起動します。
SSL通信を有効にするにはパラメータ付きで起動させます。

$ ./libwebsockets-test-server -h
Usage: test-server [--port=<p>] [--ssl] [-d <log bitfield>]

起動

$ ./libwebsockets-test-server --ssl
lwsts[25447]: libwebsockets test server - (C) Copyright 2010-2013 Andy Green <andy@warmcat.com> - licensed under LGPL2.1
lwsts[25447]: Initial logging level 7
lwsts[25447]: Library version: 1.2 
lwsts[25447]:  Started with daemon pid 0
lwsts[25447]:  static allocation: 5472 + (12 x 1024 fds) = 17760 bytes
lwsts[25447]:  canonical_hostname = ubuntu
lwsts[25447]:  Compiled with OpenSSL support
lwsts[25447]:  Using SSL mode
lwsts[25447]:  per-conn mem: 184 + 1328 headers + protocol rx buf
lwsts[25447]:  Listening on port 7681

ブラウザからアクセスしてみる。
httpsでアクセスします。サンプルの認証鍵を使用しているので、ブラウザが信頼されないサイト、とか、セキュリティ証明書に問題あるとかいわれますが、続行して接続してみます。
Img20130317011820
※ちなみに、IE10ではHTMLは表示されますが、WebSocketの部分は動作しませんでした。たぶんセキュリティかなぁ。

その2のチャットサーバーをSSL通信化。
その2で作成したチャットソフトをSSL通信化させてみます。SSLの認証関連が面倒なので、サンプルサーバー同様、Webサーバー経由でhtmlをロードさせてからhtmlの中でWebSocketを使ってみます。

今回の実行環境
Ubuntu 12.04 LTS
Apache/2.2.22
OpenSSL 1.0.1
Windows7(クライアント実行環境)

apache2+SSLの準備
apache2+SSLを設定し、そこで設定した認証鍵をWebSocketサーバーで使用したいと思います。
今回はテストなのでSSL通信に必要な設定はサンプル等を使用します。

apache2+SSLのデフォルト設定を使用。

$ sudo aptitude -y install apache2
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo /etc/init.d/apache2 restart

default-sslが使用する鍵のパス
設定ファイル:/etc/apache2/sites-available/default-ssl

SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

チャットフォームの設置
DocumentRoot(/var/www)にhtmlファイルを保存します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>WebSocket Sample</title>
</head>
<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>Chat</h1>
            </div>
        </header>
        <section id="main">
        URI <input id="uri" type="text" />
        <input type="button" value="Connect" onClick="connect()" /><br>
		SEND<input id="chatmessage" type="text" />
		<input type="button" value="Send" onClick="send()" />
		<hr />
		<div id="log"></div>
		<script type="text/javascript">
			var ws;
			
			function connect(){
				if ("WebSocket" in window) {
					ws = new WebSocket(document.querySelector("#uri").value);
				} else if ("MozWebSocket" in window) {
					ws = new MozWebSocket(document.querySelector("#uri").value);
				}
				
				ws.onmessage = function(event){
				    output(event.data);
				}
				
				ws.onopen = function(event){
				    output("WebSocket Open!");
				}

				ws.onclose = function(event){
				    output("WebSocket Close.");
				}				
			}	
			
			function send(){
			    var str = document.querySelector("#chatmessage");
			    ws.send(str.value);
			    str.value="";
			}

			function disconnect(){
				ws.close();
				ws = null;
			}
			
			function output(str) {
			    document.getElementById("log").innerHTML += str + "<hr />";
			}
			
		</script>
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

サーバー側の改修は楽。
ソース

int main()
{
	int n = 0;
	struct libwebsocket_context *context;
	int opts = 0;
	char interface_name[128] = "";
	const char *iface = NULL;
	int syslog_options = LOG_PID | LOG_PERROR;
	unsigned int oldus = 0;
	struct lws_context_creation_info info;
	int debug_level = 7;
	
	memset(&info, 0, sizeof info);
	info.port = 7681;
	
	lws_set_log_level(debug_level, lwsl_emit_syslog);
	

	info.iface = iface;
	info.protocols = protocols;
    
//	info.ssl_cert_filepath = NULL;
//	info.ssl_private_key_filepath = NULL;
	
	info.ssl_cert_filepath = "/etc/ssl/certs/ssl-cert-snakeoil.pem";
	info.ssl_private_key_filepath = "/etc/ssl/private/ssl-cert-snakeoil.key";
    
	info.gid = -1;
	info.uid = -1;
	info.options = opts;
	
	signal(SIGINT, sighandler);
	
	setlogmask(LOG_UPTO (LOG_DEBUG));
	openlog("lwsts", syslog_options, LOG_DAEMON);
	
    lwsl_notice("libwebsockets chat server -\n");
	
    context = libwebsocket_create_context(&info);
	if (context == NULL) {
		lwsl_err("libwebsocket init failed\n");
		return -1;
	}
	
	n = 0;
	while (n >= 0 && !force_exit) {
		struct timeval tv;

		gettimeofday(&tv, NULL);

 		n = libwebsocket_service(context, 50);
	}

	libwebsocket_context_destroy(context);

	lwsl_notice("libwebsockets-test-server exited cleanly\n");

	return 0;
}

SSL通信を有効にするにはlws_context_creation_info構造体に認証鍵を指定するだけのようです。

	info.ssl_cert_filepath = "/etc/ssl/certs/ssl-cert-snakeoil.pem";
	info.ssl_private_key_filepath = "/etc/ssl/private/ssl-cert-snakeoil.key";

コンパイル。

$g++ cppserver.cpp -lwebsockets -o wsserver_ssl

起動してみる。尚、デフォルトではSSL通信用の認証鍵のパーミッションが無いのでsudoで実行します。

$ sudo ./wsserver_ssl
[sudo] password for user: 
lwsts[27128]: libwebsockets chat server -
lwsts[27128]: Initial logging level 7
lwsts[27128]: Library version: 1.2 
lwsts[27128]:  Started with daemon pid 0
lwsts[27128]:  static allocation: 5472 + (12 x 1024 fds) = 17760 bytes
lwsts[27128]:  canonical_hostname = ubuntu
lwsts[27128]:  Compiled with OpenSSL support
lwsts[27128]:  Using SSL mode
lwsts[27128]:  per-conn mem: 184 + 1328 headers + protocol rx buf
lwsts[27128]: LWS_CALLBACK_ADD_POLL_FD
lwsts[27128]:  Listening on port 7681
lwsts[27128]: LWS_CALLBACK_PROTOCOL_INIT

ブラウザでアクセスしてみる。
Img20130317000419