へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)! #vZkt8fc6J

nginxでリダイレクトの設定を変えたのにChromeでずっと同じリダイレクトされる問題

nginxが悪いんではなくて、Chromeがリダイレクト先をキャッシュしてるっぽい。その証拠にSafariとかだと普通に動く。

Developer Toolsで Disable Cache をしててもうまくいかなくて、 Preserve log にチェックを入れると治る

stackoverflow.com

かなりハマった。

Promiseで、thenよりも先にcatchを書いてみる

const handleError = (e) => {
  console.error('Error', e)
}

const wrap = (func) => (...args) => {
  let promise = new Promise(resolve => resolve(func(...args)))
  let onRejected = handleError

  const promiseWrapper = {
    all: (onResolveds) => {
      onResolveds.forEach((onResolved) => {
        promise = promise.then(onResolved)
      })
      promise.catch(onRejected)
    },
    // catch: (handler) => {
    //   onRejected = handler
    //   return promiseWrapper
    // }
  }

  return promiseWrapper
}


const plus = (a, b, c) => {
  return a + b + c
}

const promisedPlus = wrap(plus)


promisedPlus(2, 1, 3)
.all([
  x => x * 4,
  () => { throw 'err' }, // handleErrorでハンドルできる
  x => console.log('x')
])

本当はthen.then.thenってやりたかったけど、thenってやると作れないので諦めた。おそらくPromiseの実装自体を変えないといけないっぽい

catchの部分はおまけ

引っ越したのでNURO光を契約して開通しました

情報

  • 都内から横浜市に引っ越しました。ゴミの分別めんどくさすぎわろた。
  • 集合住宅ですが部屋が少ないのでホームタイプです。

タイムテーブル

日付 できごと
2017/10/05 申込み
2017/10/19 引っ越し
2017/10/21 1回目の工事が行われる(宅内工事)
2017/10/26 2回目の工事の情報について催促する
2017/10/28 2回目の工事の情報について再び催促する(返事がないので)
2017/10/28 ネットがないことに耐えられず、SIMロック解除のためにdocomo来店予約する
2017/10/29 So-netから「フォームから再度問い合わせしてくれ」と言われたのでフォームから問い合わせ
2017/10/30 2回目の工事の予定が決まったら連絡してもらえることが確定
2017/11/01 docomoSIMロック解除しに行く。3240円取られる
2017/11/01 IIJ 申し込み
2017/11/03 不信感のあまり別のSo-netサポート窓口に連絡する。11/13までに連絡をもらえるよう約束をとりつける
2017/11/05 IIJSIMカードが届く。テザリングでネット生活を凌ぐことを決意。「いつ工事になってもいいや」と心の平穏を取り戻す
2017/11/08 最速で11/14に工事ができるという連絡が来る(13:00〜17:00に工事することに)
2017/11/09 docomoのパケット制限に到達したのでIIJに乗り換える。docomo解約。一時的にネットが使えない状態になり精神が不安定になる
2017/11/14 18:00頃に工事はじまる(この間にもいろいろあった)ネット開通

総括

  • 回線速度は4Gの50倍以上は速いからまあ妥当といった感じ。ただ120MbpsなのでNURO光じゃなくてもよかったのでは……と若干もにょる。時間帯もあるんだろうけど。
  • So-netやNTTの関連会社の対応がひどすぎる。横の情報連携ができてないし、敬語もちゃんと使えてない。工事の人たちもかなり自由で、礼儀とかそういうものは一切ない。催促しなかったらもっと遅くなってた気がする。
  • 契約して概ねよかったけど、その前に代替の回線ないと死ぬ

つらかったこと

  • 工事まで長過ぎる。フレッツ光とかと違ってNTTの工事を待つのでくっそ遅い。
  • 家でPCが使えないというしんどさ。Web系のエンジニアなのに家でネットできないとか笑えない
  • ドコモだと1GB追加で1000円するので解約せざるを得なかった(おかげで解約の違約金とか端末代で8万円飛ぶことが決定。引っ越しで100万飛んだのに更にドーン)

  • MVNOIIJへの乗り換えの際に一時的に完全にネットが使えなくてワラエナカッタ。制限のせいで通信速度が1Kbpsみたいな感じになっててなにもできなかった。

どうやって解決するか → 検索できない
近くのWiFiがあるカフェは → 検索できない
仕方ないからご飯作るか → レシピ検索できない
オフラインでプログラミングするか → もちろんググれない
とりあえず移動しよう → Apple Payにチャージできない
Hey Siri! 今の天気は? → オフライン
勉強するか → 辞書引けない
暇潰すか → ネットできない

もし過去の自分にアドバイスするとしたら

  • 引っ越しのだいぶ前にさっさとドコモを解約して乗り換えておくべき

これからNURO光を契約しようという方に

  • 工事が終わるまでに何かしらの代替回線を持っておかないとつらい。ほぼ1ヶ月待つとは思わなかった。ほんとにつらい。
  • 運が悪い人は半年とか待ったりするらしいので、契約しようと思ってる人は「へーそうなんだ」って捉えずちゃんと用意しとかないとストレスがやばい。たぶんぼくは早い方
  • とりあえず普通の回線よりは速いと思う
  • なんか工事が特殊なので賃貸だとビス打たれたりしてめんどくさいことになるかもしれないので注意
  • 工事費高い

シェルスクリプトでstartとかstopとかコマンドを作りたいときのテンプレート

foo.sh

#!/bin/sh
case "$1" in
"start")
  echo "Start!!"
  ;;
"stop")
  echo "End!!!"
  ;;
*)
  echo "Usage: $0 start|stop"
  ;;
esac
exit 0

これを叩き台にして作ると便利。知ってる人には普通のことなんだろうけど……

使い方

f:id:haruharu1:20171030115641p:plain

正規形なデータを、非正規形なデータにするためのコードのメモ

>>> before = [('a', 1), ('b', 2), ('a', 3)]
>>> d = {}
>>> for key, value in before:
...     d.setdefault(key, []).append(value)
...
>>> d
{'a': [1, 3], 'b': [2]}

すごく便利

>>> d = {}
>>> d.setdefault('a', []).append(1)

とくにこれが便利

逆(非正規形を正規形にするの)はこっち

>>> x = []
>>> for k, vs in d.items():
...     for v in vs:
...         x.append((k, v))
...
>>> x
[('a', 1), ('a', 3), ('b', 2)]

同僚の人がよくつかってるのでパクった

Refusing to install package with name "ほげほげ" under a package の解決

npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "cube" under a package
npm ERR! also called "cube". Did you name your project the same
npm ERR! as the dependency you're installing?
npm ERR!
npm ERR! For more information, see:
npm ERR!     <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/usrNeko/.npm/_logs/2017-10-23T02_09_11_172Z-debug.log

package.jsonname と、$ npm install {targetPackage}が同じだと発生する。

なんでGitHubから落としたレポジトリにこう書いてあるんだキレそう

JSON-LDとはなにものか。その概要について(プログラマ側)

概要

JSON-LDでググるSEOの話ばっかり出てくるので、プログラマ視点で説明してみる

必要知識

JSON-LDとは

どう厳しくなったのか

次のように、データの意味まで考えて記述しないとエラーになるようになった。

エラーの様子はここで確認できる→ 構造化データ テストツール

↓は正常なやつ

<script type="application/ld+json">
{
  "@type": "Person",
  "name": "Yamada"
}
</script>

↓これはエラー

<script type="application/ld+json">
{
  "@type": 42,
  "name": "Yamada"
}
</script>

こうすることで、データの構造化(つまりデータの意味付け)が簡単になる。

ボキャブラ

データの構造化の規格のこと。

データの構造化っていってもみんな適当に自分の好きなように構造化できるので、じゃあそれ規格化しようということで偉い人がつくってくれた。

たとえばJSON-LDだけだと、 @type"Onigiri" って名前にしようっていうのもできるけど、それ他の人は毎回その構造はどういう構造なのかっていうのを見て考えないといけないから不便じゃね?統一したくね?ってこと

そうやって統一したものをボキャブラリという。日本語で言うと 語彙

ボキャブラリの1つに、 schema.org っていう規格がある。URLっぽくなってるのは、規格の名称をURLにしておくと何かと便利だからなってるっぽい。

基本的にボキャブラリの主流は schema.org っていうやつらしい。他はとりあえず必要無ければ知らなくていい。ぼくは知らん。

scheme じゃないことに注意。 eじゃなくてa

シンタックス

この場合のシンタックスというのは、構造化されたデータを書くときの、書き方のルールのこと。

JSON-LDシンタックスの1つ。

他にRDFa, microdataがある。どっちもHTMLのシンタックスを厳しくした版。

↓はmicrodataの例

<p itemscope>I’m going to the
  <span itemprop="name">Salter Cane</span>
gig next week. Excited!</p>

つらい。XMLHttpRequestのつらさよりつらい。

schema.orgjson-ldを組み合わせた書き方

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Corporation",
  "name": "ぼくの会社",
  "telephone": "090-1234-5678",
  "url": "http://www.example.jp"
}
</script>

schema.org → 規格化されてるのでいちいち自分でどういう構造化すればいいか考えなくてよくて便利。

json-ldJSONシンタックスで構造化されたデータを書けるから便利。

そんなかんじ

まとめ

データの構造化
・ボキャブラリ
 ・schema.org
・シンタックス
 ・JSON-LD
 ・RDFa
 ・microdata