すべてクワッドコア以上?の第8世代Coreプロセッサ

LenovoThinkpad X280・T480・T480sなどを発表しました。 第8世代のCoreプロセッサ搭載とのことです:

news.mynavi.jp

news.mynavi.jp

T470s買わなくて(買えなくて)よかった!

第8世代のCoreプロセッサが何であるか調べてみると…どうやら、 すべて4コア以上のようです:

デスクトップ向け Coffee Lakeマイクロアーキテクチャ - Wikipedia

モバイル向け Kaby Lake Refreshマイクロアーキテクチャ - Wikipedia

Mac Bookがモデルチェンジした際も(12インチを除いて)すべて4コアになるのかもしれません。

Facebook:シェアを実装する際のポイント2点

一回目の表示で画像が表示されない

Facebookで最初にシェアをした際に画像が表示されないことがあります。 この場合は、画像の横幅と高さを以下のように指定するとうまくいきます:

<meta property="og:url"                content="http://thebaker.hatenablog.com"/>
<meta property="og:type"               content="website" />
<meta property="og:title"              content="Thebaker's blog" />
<meta property="og:description"        content="今夜の晩ご飯は鶏肉とカシューナッツです。" />
<meta property="og:image"              content="http://thebaker.hatenablog.com/images/chicken_with_cashew.jpg" />
<meta property="og:image:width"        content="384" />
<meta property="og:image:height"       content="256" />

キャッシュされている画像を更新したい

こちらのページにおいて、キャッシュクリアしたいページのURLを入力後「デバッグ」をクリック。 さらに「もう一度スクレイピング」をクリックするとキャッシュを更新できます

Display PortとHDMIの変換アダプタのナゾ

この手の変換アダプタ、変換できる方向は双方向ではないのですね。

Cable Mattersの102018Aは「入力DisplayPort→出力HDMI」の変換アダプタですが、 逆方向、即ち「入力HDMI→出力DisplayPort」には使えないのです:

f:id:thebaker:20180105151909p:plain

結局、代わりに別の変換アダプタを買いました:

Postgresql:シーケンスが加算されないナゾ

先日、データベースのシードファイルを作って初期データを投入。 その後、ブラウザから追加のデータを登録しようとしたところ 「プライマリキーが重複しているよ」といったエラーが出ました。

原因は、PostgresqlにINSERTする際、プライマリキーの値を指定しているためでした。

以下のSQLをご覧ください。1回目と2回目のINSERTはプライマリキーを指定してないので、 シーケンスの値が自動的にインクリメントされます。3回目は明示的にプライマリキーを指定しているので、 シーケンスが置いてけぼりになります:

CREATE TABE test_table (id SERIAL PRIMARY KEY, name VARCHAR(255));
INSERT INTO test_table (name) VALUES ('hoge');
INSERT INTO test_table (name) VALUES ('hoge');
SELECT CURRVAL('test_table_id_seq');
 currval
---------
       2
(1 行)

INSERT INTO test_table (id, name) VALUES (3, 'hoge');INSERT 0 1
SELECT CURRVAL('test_table_id_seq');
 currval
---------
       2
(1 行)

Mysqlではプライマリキーを明示的に指定しようがしまいが、AUTO INCREMENTが加算されます:

CREATE TABLE test_table (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));
INSERT INTO test_table (name) values ('hoge');
INSERT INTO test_table (name) values ('hoge');
SHOW TABLE STATUS FROM `DB名` WHERE `name` LIKE 'test_table';

+----------------+
| Auto_increment |
+----------------+
|               2|
+----------------+

INSERT INTO test_table (name) values (10, 'hoge');
SHOW TABLE STATUS FROM `DB名` WHERE `name` LIKE 'test_table';

+----------------+
| Auto_increment |
+----------------+
|              11|
+----------------+

Javascript:変数の初期化の落とし穴

数字を格納する予定の場合は初期化必須ですね。 以下のコードを実行するとNaNが出力されます:

function sum(){
  var total; // total =0 とすべき
  for(let i=0;i<arguments.length;i++){
     total+=arguments[i];
  } 
  return total;
}

console.log(sum(10,20));

理由は、var totalの値はundefinedであり、undefined+数字NaNであるから。

PHPとかPerlとは挙動が違いますね。

CakePHP3:日付のフォーマット、YYYY vs yyyy

CakePHP3のi18nFormatはとても便利な関数ですが、年の指定をyyyyと書くべきところをYYYYと記述すると落とし穴があります

yyyyは、カレンダー上の年です。例えば、2017年12月31日の場合、yyyyの値は2017です:

        $timezone_string = 'America/Los_Angeles';
        $year  = 2017;
        $month = 12;
        $day   = 30;

        $raw_post_date = Time::createFromFormat(
            'Y-m-d',
            implode('-',[$year, $month, $day]),
            $timezone_string
        );

        echo $raw_post_date->i18nFormat("yyyy/MM/dd",$timezone_string);

→2017/12/31と出力されます。

上のコードのyyyyYYYYに変更すると、2018/12/31になります。

原因ですが、YYYYはその日が何年であるかではなく、 その日が含まれる週の土曜日(木曜日という説もあり…)が何年であるかを返すためです。

念のため、2017年12月31日をカレンダーで見てみます:

f:id:thebaker:20180102122757p:plain

31日は日曜日、その週の土曜日は2018年1月6日なのでYYYYが2018を返却するわけですね。

ソース:

ICU 60.2: icu::SimpleDateFormat Class Reference

JsFiddleの代替サービス:PLAYCODE

JsFiddleって、コードを変更してからUPDATEを押してRUNするのが面倒だなと思ってました。 またconsole.logを見るにはブラウザのデベロッパツールを開かねばならない…(裏技もあるみたいですが)

そこでPLAYCODEを使ってみました。書いたコードは即座に実行されるし、console.logの中身も 画面上に表示されます。IE11でES6を使いたいときはBabel(ES6)を選択するとトランスパイルしてくれる!

欠点?ですが、alert文を書くと、書いている最中にポップアップが出ることですかね。

playcode.io