読者です 読者をやめる 読者になる 読者になる

マイブーム@技術と生活

仕事や生活に関わる技術的なことを記述します。

ゲーム事情

自分のゲーム事情は、以下のとおり。

ポケモンGO + ポケモンGOプラス
 (2017/02/12)
 バレンタインデーイベント開催中。プリンが多い。
 本郷三丁目あたりで、ポリゴン、コイル、ビビリダマ。
 (2017/02/19)
 金・銀世代のかわいくないポケモンたち。

スプラツゥーン2
 3/25(土)、26(日)、に、オンライン、スイッチで無料対戦イベント。

チームマッチ20人
 何ができるの?

小さな子供が食べないように、苦い味が付いたゲームカード


 

 

CES 2017 で自動車とテレビはまだ融合されていないことが明らかだった

(英語勉強中)

CES 2017 から戻ってきました。AI、ドローン、スマホでたくさんの技術革新を見てきました。しかし、自動車の巨大市場においては、更なる、映像サービスとユーザー体験の融合と、ネットワーク接続機能、の2つが望まれていると思います。これらの流行は、接続性に大きく依存します。接続性は自動車と娯楽を組み合せた複雑な技術革新の中心的役割です。TheMultiscreenBlog の CES レビューに書いたように、私はとても夢中になっています。

誰も将来を予測することができず、再発明し続ける産業分野に、参加していることを光栄に思います。また、GENIVI 懇親会でお会いできた皆様に感謝します。懇親会では、車載インフォテインメントの未来について、見識のある議論を行うことができました。

最後に、この機会をお借りして、協力会社の方々、お客様、読者の皆様に、新年のお祝いを申し上げます。

ニール・フォスター

列車幽霊

新幹線で、新横浜から名古屋までの間、ずっと、

こわい、たすけてくれ〜、こわい、たすけてくれ〜、

と男の声が聞こえていた。

node-proxy-https-example / proxy.js

(作成中)

https://github.com/TotallyInformation/node-proxy-https-example/blob/master/proxy.js
http://stackoverflow.com/questions/10085082/node-http-proxy-ssl-transparent

複数の仮想ドメインを構築する HTTPS プロキシサーバーを実行するプログラム

同じ IP アドレスで複数ドメイン(またはサブドメイン

ここで指定したように、1つの証明書にしたい場合は、ワイルドカード証明書、または、「Subject Alternative Name」拡張領域を使う必要がある

http-proxy は、https とルーティングテーブルを同時に使うことができないので、少し複雑な方法で対応した

 

 

 

企業トレンド

■ iPS細胞
 富士フイルム
  CDI
   エピソーマルベクター・末梢血
 (競合)リプロセル
 (体細胞由来)J-TEC
 アイロムグループ
  IDファーマ
   センダイウイルスベクター
   薬事法・GMP省令(医薬品及び医薬部外品、医療機器及び体外診断用医薬品
  (関係)医学生物学研究所、ライフテクノロジーズ(米国)
  (関係)タカラバイオ
  (関係)大日本住友製薬、(関係)ヘリオス
  (非営利理化学研究所バイオリソースセンター
  (感音性難聴)防衛医大
  (下肢慢性動脈閉塞症)九州大大学院薬学研究院
  (エイズワクチン)国立感染症研究所 エイズ研究センター
 京都大学
  iPS アカデミアジャパン(特許管理)

■ 自動運転
 ZMP
 (出資)フューチャーベンチャーキャピタル
 (出資)インテルキャピタル
 (遠い)アートスパーク、(傘下)エイチアイ(ロボット制御用ユーザーインターフェースの共同開発)

 

レシピ:納豆と漬物

組合せ:
 ネギ納豆
 漬物(パックの半分)
 ごはん

そして誰もいなくなった @ 白黒写真の自動色付け(早稲田大学)

アガサ・クリスティの映画、そして誰もいなくなった、をがんばって色付けしてみました。早稲田大学の白黒写真の自動色付けのウェブページを使いました。

Automatic Image Colorization・白黒画像の自動色付け

45枚変換して、その内、なんとなく色が付いたものが、以下の25枚です。

他は、特に、家の中が、茶色になってしまうようです。

 

f:id:sato7411:20161116175526p:plain

f:id:sato7411:20161116175600p:plain

f:id:sato7411:20161116175619p:plain

f:id:sato7411:20161116175640p:plain

f:id:sato7411:20161116175657p:plain

f:id:sato7411:20161116175720p:plain

f:id:sato7411:20161116175732p:plain

f:id:sato7411:20161116175758p:plain

f:id:sato7411:20161116175817p:plain

f:id:sato7411:20161116175845p:plain

f:id:sato7411:20161116175916p:plain

f:id:sato7411:20161116175935p:plain

f:id:sato7411:20161116180022p:plain

f:id:sato7411:20161116180121p:plain

f:id:sato7411:20161116180136p:plain

f:id:sato7411:20161116180204p:plain

f:id:sato7411:20161116180231p:plain

f:id:sato7411:20161116180327p:plain

f:id:sato7411:20161116180333p:plain

f:id:sato7411:20161116180346p:plain

f:id:sato7411:20161116180358p:plain

f:id:sato7411:20161116180409p:plain

f:id:sato7411:20161116180426p:plain

f:id:sato7411:20161116180458p:plain

f:id:sato7411:20161116180521p:plain

Taken at the Flood (満潮に乗って)

英語の勉強です。

abomination, accost, adamant, adze, agitate, arse
bailiff, barely, barrister, baronet, behalf, bigamist, billable, bloke, bludgeon, bonkers, bother, bribe, brunette, bugger, bunch
caper, charade, cherish, chum, colossal, compel, confetti, conjure, conscience, consequence, constitution, construe, corpse, corruptibility, creek, crook
damn, dangle, depravity, desecrate, despair, dismal, disposal
embark, extravagance
feckless, filthy, flabbergasted, flit, floozy
gabble, gallows, gloat, gore
imposture, indigo, indiscreet, inflammatory, insolent, intrusion, itch
jackpot
leach
mandate, mercy, mess
oblige, orgy
parishioner, paunch, pimp, plucky, prickly, prostrate, prurience, punctilious, purse
quid, quirk
ramification, rant, resurrect, riot
scrawny, scuttle, seance, sewer, shove, smother, smutty, sprint, stink, substantial, sundry, sustain, swan
tawdry, till, traipse, trespass
unequivocal, unscathed, unsolicited
veer, venal, vilify, vinegar, vouch, vulgar
waive

 

レシピ:肉野菜炒め

フライパンにて、野菜と肉を分けて焼く。

先に野菜の場合、野菜を焼いた後に端に寄せて、空いた所で肉のみで焼く。味付けは、火を止めてから、醤油。

野菜を後から載せて、サラダのようにする場合もある。

簡単なウェブ解析アプリを作るための node.js、request、cheerio の使い方

勉強のために日本語訳します。

https://www.digitalocean.com/community/tutorials/how-to-use-node-js-request-and-cheerio-to-set-up-simple-web-scraping

 

はじめに

本文では、ハッカーニュースサイトの、上位ランキングのリンクと、題名、URL、点数、コメント数など他のデータを取得するために、ホームページを走査します。これは、node.js を使ってウェブページからデータを取得するための、いくつかある方法の内の1つです。主に、Matthew Mueller 氏が作成した cheerio と呼ばれるモジュールを使います。cheerio はサーバーサイドで使うように設計された jQuery のサブセットです。

cheerio は軽量で、高速、融通が利き、jQuery に慣れていれば、使い易くできています。また、簡単な HTTP クライアントとして、Mikael Rogers 氏が作成した request モジュールを使います。

 

必要事項

node.js、jQueryVPSSSH の接続方法など基本的な Linux の管理・設定ができることが前提です。もし、node.js を使うことが初めてで、まだインストールしていなければ、お使いのOSへのインストール手順について、上記の Articles & Tutorials の章を参照してください。

 

プログラム

NPM を使って必要なモジュールをインストールします。次のコマンドを実行します。

npm install request cheerio

これは、現在の作業ディレクトリにのみ、モジュールをインストールします。全体にインストールする場合は、 npm install -g request cheerio を実行します。

ファイル scrape.js  を作成し、次の行を追加します。

var request = require('request');
var cheerio = require('cheerio');

これは、必要になるモジュールをすべて読込みます。

まずは request でハッカーニュースサイトのホームページを読込み、ページの HTML コードを表示しましょう。もし、エラーが無ければ、HTTP ステータスは 200 になります。

ファイルに次の行を追加します。

request('https://news.ycombinator.com', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    console.log(html);
  }
});

node scrape.js でスクリプトを実行してみてください。端末画面に HTML コードが表示されるはずです。

目的のデータをどうやって抽出するかを調べるために、HTML コードで要素がどのように構成されているかを知る必要があります。良い方法は、Google Chrome に組み込まれているウェブデベロッパーツールを使って、目的の要素を調査することです。ウェブページで右クリックし「要素を調査する」を選びます。

次の例では、Chromeハッカーニュースサイトを開いて、右クリックし、上位ランク記事の題名を調査しています。

図1.

ウェブデベロッパーコンソールで確認すると、上位ランクの30個すべてのリンクと題名を解釈するためには、 クラス名 comhead が付いた「span」要素を探し出し、jQuery API 関数の prev() を使って、その1つ前の「a」要素を選べば良いことが分かります。

プログラムを次のように変更して、動作を確認します。

request('https://news.ycombinator.com', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    $('span.comhead').each(function(i, element){
      var a = $(this).prev();
      console.log(a.text());
    });
  }
}); 

プログラムを実行すると、期待したように、30個の題名の一覧が得られました。次に、残りの他のデータを解釈するように修正します。

request('https://news.ycombinator.com', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    $('span.comhead').each(function(i, element){
      var a = $(this).prev();
      var rank = a.parent().parent().text();
      var title = a.text();
      var url = a.attr('href');
      var subtext = a.parent().parent().next().children('.subtext').children();
      var points = $(subtext).eq(0).text();
      var username = $(subtext).eq(1).text();
      var comments = $(subtext).eq(2).text();
      // Our parsed meta data object
      var metadata = {
        rank: parseInt(rank),
        title: title,
        url: url,
        points: parseInt(points),
        username: username,
        comments: parseInt(comments)
      };
      console.log(metadata);
    });
  }
}); 

 

追加したプログラムの説明

1つ前要素の選択

var a = $(this).prev();

a要素より2つ上位の要素を解釈して、ランクを取得する

var rank = a.parent().parent().text();

リンクの題名を解釈する

var title = a.text();

a要素から href パラメータを解釈する

var url = a.attr('href');

HTML の表の次行から、subtext 子要素を取得する

var subtext = a.parent().parent().next().children('.subtext').children();

子要素から実際のデータを取得する

var points = $(subtext).eq(0).text();
var username = $(subtext).eq(1).text();
var comments = $(subtext).eq(2).text();

修正したスクリプトを実行すると、オブジェクトの配列が次のように出力されます。

[ { rank: 1,
    title: 'The Meteoric Rise of DigitalOcean ',
    url: 'http://news.netcraft.com/archives/2013/06/13/the-meteoric-rise-of-digitalocean.html',
    points: 240,
    username: 'beigeotter',
    comments: 163 },
  { rank: 2,
    title: 'Introducing Private Networking',
    url: 'https://www.digitalocean.com/blog_posts/introducing-private-networking',
    points: 172,
    username: 'Goranek',
    comments: 75 },
...

以上です。加えて、詳細な解析を行うために、抽出したデータを、MongoDB や Redis のようなデータベースに保存できます。scrape.js ファイルのプログラム全体を以下に示します。

var request = require('request');
var cheerio = require('cheerio');

request('https://news.ycombinator.com', function (error, response, html) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(html);
    var parsedResults = [];
    $('span.comhead').each(function(i, element){
      // Select the previous element
      var a = $(this).prev();
      // Get the rank by parsing the element two levels above the "a" element
      var rank = a.parent().parent().text();
      // Parse the link title
      var title = a.text();
      // Parse the href attribute from the "a" element
      var url = a.attr('href');
      // Get the subtext children from the next row in the HTML table.
      var subtext = a.parent().parent().next().children('.subtext').children();
      // Extract the relevant data from the children
      var points = $(subtext).eq(0).text();
      var username = $(subtext).eq(1).text();
      var comments = $(subtext).eq(2).text();
      // Our parsed meta data object
      var metadata = {
        rank: parseInt(rank),
        title: title,
        url: url,
        points: parseInt(points),
        username: username,
        comments: parseInt(comments)
      };
      // Push meta-data into parsedResults array
      parsedResults.push(metadata);
    });
    // Log our finished parse results in the terminal
    console.log(parsedResults);
  }
});

 

Nintendo Switch 予想

Nintendo Switch 初公開
2016年10月20日 日本時間 23:00
【初公開映像】Nintendo Switch(ニンテンドースイッチ) - YouTube

 

CPU:
 NVIDIA Tegra X2、Pascal世代
 世界中の誰も作れないデバイスがターゲット
 2016年05月16日
 http://www.4gamer.net/games/049/G004964/20160530012/

 

OS:
 iOS
 2016年10月13日
 Appleのティム・クックCEO来日 日本語でツイート、任天堂訪問も - ITmedia ニュース

 

タッチスクリーン:
 有り_◎
 2016年10月21日
 A Deep Dive on LPVG’s Nintendo Switch Reports and Info | LetsPlayVideoGames.com
 2016年10月27日、10点マルチタッチ、720p_◎、6.2インチ_◎
 Nintendo Switch has a 6.2" 720p multi-touch screen • Eurogamer.net

 

カメラ:
 有り
 2016年08月05日
 http://www.digitimes.com/news/a20160805PD205.html

 

NFC ID カード:
 e-Shop で購入したゲームやキャラクターが、他人の Switch でもダウンロードできるようになる
 リーク2016年11月4日
 http://www.itechpost.com/articles/49921/20161104/nintendo-switch-rumor-region-free-bundles-game-titles-retail-price-leak.htm

 

ハードウェア:
 イヤホンジャック
 2 USB ポート(ドック正面)
 ゲームカード
 キックスタンド
 +、-ボタン
 アミーボ
 ×1920×1080 修正→ 1280×720_◎
 6.2インチ=WiiUと同じ_◎
 ドックに置いたとき、小画面が消え、その内容は大画面に表示される。ドックに置かないで、小画面は別の内容を表示し、タッチ操作して使うこともできる。

  Real Arcade Pro SW 2017/01/11リーク

 

  

テクノロジー:
 テッセレーション

 

ローンチタイトル:
 ゼルダ
 スプラ2
 マリオカート
 3Dマリオ
 スカイリム
 NBA 2K14(バスケットボール)
 ドラクエ11
 ポケモン(2016年09月20日、ポケモン、任天堂の次世代機「NX」向けにゲーム開発へ - WSJ

 

値段:
 35,000 円 (または、49,800円?)_×
 2017年11月14日
 $329.99、26,213円(レート79.436018)_×
 Nintendo Switch - Nintendo - Toys"R"Us
 Wii U は 32,400円

 

 

発売日:
 2017年3月17日、リーク2016年11月2日_×
 https://twitter.com/LaurakBuzz/status/793947481574780928

 

居心地の良いコーヒーショップ

【 判断基準 】
Wi2Premium が使える
静かで、ゆっくりできる
トイレに余裕がある

 

本郷三丁目本郷三丁目東:
 ドトール(電源あり)
 サンマルクカフェ(電源少しあり)

千石:
 フレッシュネスバーガー
 デニーズ(朝食・石窯ブール、7SPOT)

神保町:

 ドトール(電源あり)
 × マック(人が...)

小川町:
 ドトール

巣鴨
 サンマルクカフェ(平日BF1が良い、壁際だと寄りかかれる、電源なし)
 タリーズ(atre free wifi

春日:
 サンマルクカフェ(席少なめ)
 マック(MCD、電源あり、1時間で切れるが再起動すれば使用可能)
 ジョナサン(朝食6:15)
 Littlewood(wifi弱い、電源1か所あり)
 × 珈琲庵(Wi2使えず)

千駄木
 サンマルクカフェ(席少なめ、トイレ混み)

湯島:
 ドトール

秋葉原
 アトレ・スターバックス(4F、スタバ wifi より Wi2 のほが良い、電源あり)
 △ 駅東口ベローチェ(通信が不安定)

御徒町
 昭和通りドトール(電源なし)
 秋葉原御徒町ベローチェ(2F窓際電源あり)

池袋:
 シアトルズベスト(1F、電源あり)
 ベローチェ南池袋(電源あり、非ウォシュレット)
 × タカセ(wifiなし)
 × モリド(wifiなし)
 × イタリアントマト(wifiなし)
 × サンシャイン・ドトール(B1F、wifiあるが狭い)
 × サンシャイン・タリーズ(1F、wifiなし)

飯田橋
 タリーズ(電源あり)
 神楽坂ベローチェ(電源あり)
 珈琲館(電源2口あり、壁際は圧迫感がある)
 トヨタスターバックス(スタバwifi
 × ベッカーズカフェ(softbankのみ)

日暮里:
 × マック(MCD通信が不安定、電源あり)
 ×エクセルシオールカフェwifiなし)

神田:
 ベローチェ鍛治町店

田端:
 マック(Wi2、電源あり)

日比谷:
 ドトール

江戸川橋
 ドトール(電源あり)

京橋:
 ドトール(1Fに電源あり)

 

駒沢大学前:
 ベローチェ
 × ドトールsoftbankのみ、1Fに電源あり)

三軒茶屋
 ドトール(窓際、電源なし)
 × サンマルクカフェ(wifiなし、電源あり)

  

 

 

ポケモン GO: Google クラウドで、ポケモンがいる、本当のパラレルワールド(並行世界)を作った

勉強のために日本語訳します。

Google Cloud Platform Blog: Bringing Pokémon GO to life on Google Cloud

2016年9月29日(木)

ルーク・ストーン、顧客信頼性エンジニア主任

エンジニアとしてのキャリアの中で、ユーザーが数百万となる、いくつもの製品の配信に関わりました。比較的長い時間で計画された新しい機能や仕組みの変更に、通常、ユーザーは、数か月かけて、徐々に夢中になります。

作成中。

MongoDB の使い方

https://mlab.com/

MongoLab のホームページより、
[SIGN UP]からユーザー登録(user、account)やパスワード(password)を設定します。

届いたメールのリンクから作業を進めます。

MongoDB Deployments、Create new
Amazon's US East (Virginia) Region (us-east-1)

Plan:
 Single-node
 Sandbox
を選んで、無償で使えます。

Database Name:
user-account-administration
Create new MongoDB deployment

データベースを作成した後、データベースユーザー(Database Users)を作成します。 

 

データベースへの接続:
const MongoClient = require('mongodb').MongoClient;
var db;
MongoClient.connect('mongodb://myname:mypass@ds999999.mlab.com:88888/database-name', function(err, database) {
  if (err) return console.log(err);
  db = database;
});

 

SELECT文:
    db.collection('quotes').find( { user:'abcde' } ).toArray(function(err, result) {
      if (err) return console.log(err);

      if (result.length > 0) {
        req.session.user = result[0].user;
        req.session.description = result[0].description;
        return next();
      }
      res.send('接続に失敗しました。');
    });

 

UPDATE文:
          db.collection('quotes').update( { user:'abcde' }, { $set:{description:'あああ'} }, function(err, result) {
            if (err) return console.log(err);
          });

 

INSERT文:
  db.collection('quotes').save(req.query, function(err, result) {
    if (err) return console.log(err);
    res.send("データベースに保存しました。");
  });