ペペロン頭脳

いわゆるエスアイヤーに勤めてるけどまともにエスアイやったことないITエンジニアのメモ的なアレ。

Windows版 Sublime Text 3向けにPackage Control 3.0.0がリリースされたけどアップグレード失敗する人へ

はい。タイトル通りです。
Windowsかつプロキシ環境下で使ってる方で、アップグレードに失敗する方がそこそこいるのではないかと思い、ここに記す次第です。

ワンライナーに手を加える

本日(昨日?)ST3起動したらこんなメッセージ出たよね。
wbondサンタさんからのプレゼントだ!ヤッター!!

**** Windows Sublime Text 3 Users ****

Due to a bug in Package Control 2.0, Windows ST3 users will need to open the
Sublime Text console (ctrl+`) and execute the following Python to properly
upgrade. All other users may ignore this part of the message.

Make sure NOT to copy the leading two spaces, or an "unexpected indent" error
will occur.

【以下インストール用ワンライナーが続く】

import urllib.request,os; pr='Preferences.sublime-settings'; ip='ignored_packages'; n='Package Control'; s=sublime.load_settings(pr); ig=s.get(ip); ig.append(n); s.set(ip,ig); sublime.save_settings('Preferences.sublime-settings'); pf=n+'.sublime-package'; urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler())); by=urllib.request.urlopen('https://packagecontrol.io/'+pf.replace(' ','%20')).read(); open(os.path.join(sublime.installed_packages_path(),pf),'wb').write(by); ig.remove(n); s.set(ip,ig); sublime.save_settings(pr); print('Package Control: 3.0.0 upgrade successful!')

プロキシサーバを通過させるためにワンライナーに手を加えてやるのですが、今回のアップグレードではpackagecontrol.ioへの接続にhttpではなくhttpsを使うよう変更されています。
というわけで、httpのみを指定していると通信に失敗します。下記のように、ProxyHandlerでの設定もhttpsに合わせてやる必要があります。

# urllib.request.ProxyHandler()に対し、引数を下記のように指定
urllib.request.ProxyHandler({'https': 'http://[username]:[password]@[host]:[port]'})
# もしくは
urllib.request.ProxyHandler({'https': 'https://[username]:[password]@[host]:[port]'})

あるいは、"https://packagecontrol.io"の箇所をhttpに書き換えちゃっても通るかと思います。
ユーザー認証が必要ない環境では、"[username]:[password]@"を削除して下さいね。

アップデート後にPackage Control使えなくなったんだけど!

ワンライナーの実行に何回か失敗していると、ignored_packagesへPackage Controlが失敗回数分だけ追加された状態になってしまいます。
Preferences(Settings - Default もしくは User)を開き、ignored_packagesのセクションを確認して下さい。"Package Control"があったら全部削除。プロキシ絡みの処理に失敗すると、その先のig.remove(n);が実行されずに残ってしまうんですね。困ったね。

過去の記事に加筆

Package Control 2.0時代の記事にも加筆しておきました。

漢字の線に囲まれた部分だけを塗りつぶした画像で何の四字熟語か当てるアレをWebアプリ化

f:id:peperon_brain:20141017011943p:plain

どーも。
最近は流行りに遅れつつもingressなど始めてみたりしちゃって、ロードバイクで夜な夜な近所を疾走しつつも情報処理試験が近いので遊んでばっかりもいられない今日このごろです。

遊んでばっかりもいられないのですが、先日下記のまとめ記事がホッテントリ入りしちゃって。

即答してる人は超人なのか?サヴァン的な才能を持ってるのか?っつーくらい難しいのです。難しい。無理ゲー。全然わからない。悔しい。

そういったフラストレーションが蓄積した結果、むしゃくしゃしてWebアプリ化してみたのが以下のページでございます。

基本機能

クライアントサイド完結。canvas使って実装してます。
文字描画→2階調化→周囲塗りつぶし→白黒反転
カッとなって作ったレベルなので、機能はシンプルです。デザインもBootstrapそのまんまです。

  • 上記スレッドにある四字熟語を決め打ちで保持。この中からランダムに出題
  • 解答見たり隠したりできる
  • [次の熟語]ボタンで次の問題をランダムに出題

いずれ追加したい機能

  • ソーシャルボタン追加
  • URLハッシュで問題切り替え
  • 投稿機能
  • 問題一覧の表示

情報処理試験が終わってから育てる。

「Windows 9」が欠番である本当の理由?

先日発表された次期Windowsは、9ではなく10とのこと。
上の公式のアナウンスでは9をスキップした理由がふわっとしていてよくわからないが・・
プログラマーの間でまことしやかに囁かれている説があるので、非エンジニア向けの説明をしてみよう。

Windows 9x系を考慮?

本日はてブで上がってきたのがこれ。

プログラマー以外には何のことやらわからないと思うので、例を挙げて説明してみるです。

時は00年代半ば。Windows XP全盛時代です。
あなたはWindowsで動く何かしらのプログラムの開発を依頼されました。
このプログラムは古いWindowsはサポート対象外とする、とのことです。
そこで、起動した時にOSのバージョンを調べて、

上記いずれかの場合は警告メッセージを出してプログラムを終了することにします。あなたはその部分の処理を、下記のように組んでみました。

  1. 起動したら、自身が動作しているOSの名称文字列を取得する
  2. その文字列が"Windows 9"から始まっているか調べる。
    1. "Windows 9~"であればWindows 95/98のいずれかである。警告メッセージを出してプログラムを終了する。
  3. Windows 9x系でなければ処理を続行する

よしよし。"Windows 9なんとか"なのは95と98だけだ。これでバッチリ必要十分なプログラムが書けたぞ。

・・・さて、時は過ぎて2014年になりました。
新OSの名称が"Windows 9"とか"Windows 9.1"であった場合、
新OS上でこのプログラムを実行するとどうなるでしょう??

そうですね。大惨事ですね。

クレームの電話が鳴り止みませんね。
なぜなら"Windows 9"で動かした場合、自身がWindows 95や98上で実行されていると誤判定して終了してしまうからです。
上の例ではとりあえず終了しちゃうという動作をしますが、もしOSのバージョンによって続きの処理を分岐する、という作りになっていたら?
誤判定してそのまま動き続けた場合、予期しない動作が起こるのでは・・・?

こういった判定をしているプログラムが世の中にびっくりするほどたくさんあるよ、というのが上のリンク先なのです。
正直雑な判定方法ではあるのですが、よりシンプルに書こうとして上記の形に落ち着いたということなのでしょう。
XPやVistaの時代を思えば、今のようなナンバリング体系になると想像できなかったとしても仕方ないか・・という気もします(甘い?)。

さて。
サポートを継続しているソフトウェアであれば「ごめんねー★テヘペロ」でちょろっと修正すればいいかもしれません。
が、とっくの昔に開発終了しているプロダクトだったら?
しかもそれが現在も幅広く使われ、業務システムの根幹に深く関わっていたら?
誤動作によって発生する損失は?
調査・改修するための費用は?

Microsoftは影響が広範囲に及ぶことを懸念し、新OSを「Windows 10」と名づけたのではないでしょうか?

っつー憶測ながらもかなりこわい話でした。

2014/10/03 追記

出典付きの詳しいエントリを書いている方がいらっしゃるので紹介。