dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

「みんなのデータ構造」学習メモ:6.2 BinarySearchTree 二分探索木

みんなのデータ構造(紙書籍+電子書籍) – 技術書出版と販売のラムダノート

amazon

これまでのメモ

二分木の続き。 TypeScript によるソースコード
https://github.com/zaki-yama/open-data-structures-typescript/blob/master/src/BinarySearchTree.ts

続きを読む

2020年1〜3月のふりかえり

本当は毎月ふりかえりたかったんですが、気がついたら最初の四半期が終わってました。
この3ヶ月の間にやっていたこととか勉強していたことのふりかえり。

ちなみに年末のふりかえりは 2019年のふりかえりと2020年の抱負 - dackdive's blog です。

2020年1〜3月にやったこと

コンピュータサイエンスを勉強する💪 → 「みんなのデータ構造」

2020年の個人的メインテーマである「コンピュータサイエンス系のことを勉強する」。
その第一歩として読み進めていた「みんなのデータ構造」、ざっくり3ヶ月以内を目標にしていたんですがまだ終わってません。。。

読み始めた当初、この本に書かれている内容は細かいところまですべて理解しようと意気込んでいたんですがあえなく挫折しました。
今は、「本書の読み方」に書いてあったように「わからないところは飛ばしてもよい」ものと割り切り、また特に重要な項目として取り上げられていたものだけとりあえず読むことにしました。

あとトピックとしては3つぐらいなので、4月中に読み終えてまとめもしたい。

ブラウザの Cookieについて学んだ

年明けにHTTP/Tokyoという勉強会に参加したのがきっかけで、1月後半〜2月頃はブラウザのCookieについて勉強してました。
アウトプットとして何も残せなかったのが残念。

こちらのブログ・スライドはとてもわかりやすくまとめられていて、定期的に読み返したくなります。

ECMAScript Proposal の Realms や SES について学んだ

今の職場のチームでは業務時間内に興味のある技術の調査・探究をする時間があるのですが、この時間を利用して前々から興味のあったRealmsとSESというECMAScript Proposalについて勉強してました。

github.com github.com

Realmsは現在Stage 2、SESはStage 1です。
前提とされるJavaScriptの仕様の話が難しく、時間をかけた割に概要レベルでしか把握できてないのですが
それぞれがどんなことを実現しようとしているのか、雰囲気だけでも理解できてよかったです。

また、ECMAScriptの仕様の読み方、策定中のProposalの追っかけ方なども学びがありました。
(後者はまだコツがつかめてなくて、いつの間にかSESから分離したProposal Compartmentsなるものができてたことに気づきませんでしたが...)

この2つの記事はまだ積ん読状態なので読みたいなあ。

また、Realmsなどを理解する上でJavaScriptのPrototype Pollutionという攻撃についても学びました。
こちらの記事が非常にわかりやすかったです。

Node.jsにおけるプロトタイプ汚染攻撃とは何か - ぼちぼち日記

ChromiumMicrosoft Edgeに興味を持った

チームでブラウザ情報とかウォッチするようにしてるんですが、年明けにリリースされたChromium版のMicrosoft Edgeに関する公式ブログを読んだおかげでEdgeに興味を持つようになりました。

Chromiumベースの新しいMicrosoft Edgeについて - dackdive's blog

また、実現はできませんでしたが、このブログ記事がきっかけで勉強会に登壇しないかと声をかけていただくこともありました。

(話そうかと思ってた内容の一部を資料にまとめたものは
Chromium版EdgeのTracking Prevention機能 / Tracking Prevention in Chromium-based Microsoft Edge - Speaker Deck
です)

あんまり日本語の情報も出回ってないので、しばらくは引き続きウォッチしてこうかなーという気持ちになりました。
また、Macでも使えるようになったし、Chromiumベースだから普通に使いやすいのでデフォルトのブラウザとしても使っていこうかと。

次の四半期(2020年4〜6月)のテーマ

最初の四半期をなんとなく過ごした結果、四半期ごとぐらいの大きめのテーマと、月ごとの小さなテーマの2種類を用意しておくと自分にはいいんじゃないかなという考えになりました。

データ構造とアルゴリズム勉強するぞ!みたいな目標だと1ヶ月はハードル高いし、かといって「この本読みたい」みたいな目標であれば◯月中に終わらせる!という目標設定にした方が間延びせず良さそうです。
毎月

というわけで

長期(四半期)

引き続きデータ構造とアルゴリズム系の勉強をするぞ!ということで、次の課題図書はこちらです。

すらすら読める本であってくれ頼む〜😇

あとは密かな裏テーマとして、Rust + WebAssembly 的なところにもぼちぼち手を出したい。
今は rustlings をちまちまやっています。

またこんな情報もある。

短期

4月中は「みんなのデータ構造」を読んでると思います。
5, 6月は設計の勉強をしたい。

年末に立てたTryの確認

  • 英語ブログ、今年こそ書く!目標は3本
    • →何もやってない
  • 今年もどっかのカンファレンスにCfP出す
    • →何も(略
  • 「みんなのデータ構造」とあともう1冊、コンピュータサイエンスに関する本を読む
    • →「みんなのデータ構造」は続いているぞ💪
  • 本は年間で6冊読む
    • →1冊め

新Microsoft Edgeにこれからリリースされる新機能("The top 10 reasons to switch to the new Microsoft Edge"より)

Edge公式ブログより。
Edgeにリリース済みorこれからリリースされる便利機能の紹介。

ざっと目を通したのでメモ。
gifは公式ブログより引用しています。

1. Collections機能 Organize your research with Collections

f:id:dackdive:20200403102343p:plain

概要:高機能ブックマーク的なやつ。カテゴリ分けたり、記事から画像だけドラッグ&ドロップでCollectionに保存することもできる。 ステータス:Canaryにはリリース済み。Stableには間もなくリリース。モバイルにも今春後半にリリース予定

2. 垂直タブ機能 Work efficiently with vertical tabs

概要:1クリックでタブが垂直に。タブ名見やすくなりそう

ステータス:数ヶ月後にInsider (Beta?) チャネルにリリース予定

3. スマートコピー機能 Save time with smart copy

概要:Webページを雑にドラッグで選択→コピーすると、表などのフォーマットを保ったままコピーできる

ステータス:5月にInsiderチャネルでリリース予定

4. Tracking Prevention機能 Take back control with tracking prevention

概要:以前まとめたので見てください(宣伝)

ステータス:リリース済み

5. パスワードモニター機能 Know if your passwords have been compromised on the dark web with Password Monitor

概要:ブラウザのautofillに保存したユーザー名+パスワードがダークウェブに漏洩したと見られる場合に通知される

ステータス:数ヶ月後にInsider (Beta?) チャネルにリリース予定

6. InPrivateモード Maintain truly private browsing and search with enhancements to InPrivate mode

概要:Chromeのシークレットウィンドウ。これまでBing検索履歴は対象外(削除されない)だったが、今後はこの検索履歴もアカウントに関連付けられなくなる

ステータス:InPrivateモードはリリース済み。Bing検索はInsiderチャネルはリリース済み、Stableは間もなく。

7. イマーシブリーダー Immersive Reader enables everyone to learn and benefit from the web

概要:サイトの不要な部分を除外してコンテンツを読みやすくしたり、音声読み上げができる機能

f:id:dackdive:20200403102233p:plain:w200f:id:dackdive:20200403102234p:plain:w200

ステータス:リリース済み。今後より機能を追加していく予定。

8. Netflix動画を4Kで Microsoft Edge delivers the best immersive viewing experience in 4K and Dolby Audio

概要:Netflixの動画が4K + Dolby Audio & Dolby Visionで観られる。Win10限定

ステータス:リリース済み

9. Bing検索時に獲得できるリワードを寄付できる Make a difference: Give with Bing

概要:Bing検索するとポイントが貯まるMicrosoft Rewardsというしくみがあるが、このポイントを特定の団体に寄付するよう設定できる

ステータス:リリース済み

10. Microsoft Edge is ready for you (and it’s easy to switch)

概要:新Edgeへの移行時はこれまでのお気に入りなどの設定情報を引き継ぐことができる(機能ではない)

「みんなのデータ構造」学習メモ:6.1 BinaryTree 二分木

みんなのデータ構造(紙書籍+電子書籍) – 技術書出版と販売のラムダノート

amazon

これまでのメモ

今回は第6章。ここから木構造の話。

TypeScript によるソースコード
https://github.com/zaki-yama/open-data-structures-typescript/blob/master/src/BinaryTree.ts

続きを読む

「みんなのデータ構造」学習メモ:5.1 ChainedHashTable, 5.2 LinearHashTable

みんなのデータ構造(紙書籍+電子書籍) – 技術書出版と販売のラムダノート

amazon

これまでのメモ

今回は第5章にとんで

  • [P91] 5.1 ChainedHashTable: チェイン法を使ったハッシュテーブル
  • [P97] 5.2 LinearHashTable: 線形探索法

を読む。

始めに書いておくと、5.1.1 乗算ハッシュ法の数学的な証明部分をちゃんと理解するのを諦めた。
また、LinearHashTable は冒頭の概要説明しか読んでいない。

TypeScript によるソースコード
https://github.com/zaki-yama/open-data-structures-typescript/blob/master/src/ChainedHashTable.ts

続きを読む

「みんなのデータ構造」学習メモ:3.2 DLList 双方向連結リスト

みんなのデータ構造(紙書籍+電子書籍) – 技術書出版と販売のラムダノート

amazon

これまでのメモ

今回は「[P58] 3.2 DLList: 双方向連結リスト」。

TypeScript によるソースコード
https://github.com/zaki-yama/open-data-structures-typescript/blob/master/src/DLList.ts

続きを読む

Chromiumベースの新しいMicrosoft Edgeについて

2020/1/15に新しいMicrosoft Edgeが正式リリースされました。

日本語

今後、これまでのMSEdgeはEdge Legacyと呼ぶようです。
(今回リリースされたChromium版Edgeのことを、以後「新Edge」と記載しています)

移行の流れや今後のアップデートポリシー、主な特徴などをまとめてみます。

なお、ユーザー目線での影響を知る上ではこちらの記事が一番わかりやすかったです。

3行まとめ

  • 新EdgeはChromiumベース(Chromeと全く同じかは不明)
  • 手動でインストールするか、Home/Proエディションのみ今後Windows Update経由で自動アップデート。インストールするとLegacy版は置き換えられて使用不可に
  • IEモードを使うとEdge内で指定したサイトをIEレンダリングエンジンで表示することが可能だが、手順はかなり複雑なので管理者向けの機能と思われ

新EdgeはChromiumベース

ずいぶん前からアナウンスされていた通りですが、新EdgeはChromiumベースになります。
そのため、レンダリングエンジンやJavaScriptエンジンは基本的にChromeと同じものになります。

基本的に、と書いたのは、実際にはChromiumをforkして独自のカスタマイズを加えている可能性も考えられるのですが、そういった記述は見つけられませんでした。

新Edgeのインストール方法と、ロールアウト計画

新Edgeをインストールしたい場合、現在は https://www.microsoft.com/edge から直接ダウンロードする必要があります。

インストールすると、これまでのLegacy版を置き換えるような挙動になり、古い方は利用できなくなります。

before f:id:dackdive:20200206003859p:plain

after f:id:dackdive:20200206003904p:plain

また、今後はWindows Update経由で配信され、数ヶ月かけてロールアウトしていく計画のようです。
ただし、公式ブログの日本語版のトップにでかでかと書かれていますが

※日本のお客様に対しては、確定申告への影響を考慮し、Windows Updateを通じた新しいMicrosoft Edgeの配信は令和2年4月1日以降、順次開始される予定です。

です。

加えて、Windows Updateでの自動更新は HomeおよびProエディションのみで、Enterprise、Education、Workstation Pro(?)といったエディションは対象外 です。
また、管理対象デバイス(*)も同様です。

(*) 「管理対象デバイス」は公式ブログ に記載されてた表現。冒頭に挙げたZDNetの記事 によると

Active DirectoryやAzure Active Directoryドメインに参加しているコンピューター、モバイルデバイス管理(MDM)で管理されているコンピューター、Windows Server Update ServiceやWindows Update for Businessなどで管理されているWindows 10 HomeやPro

を指す?

今後のアップデートポリシー

新しい Microsoft Edge へのアップグレード - Windows Blog for Japan から引用

Microsoft Edge のインストール後は、約 6 週間ごとにインストール先の OS とは独立して更新が行われます。初回のメジャー アップデートとなる Microsoft Edge 80 は、2 月上旬に Stable チャネルでリリースする予定です。

設定の「About Microsoft Edge」から更新確認とアップデートができます。Chromeと同じですね。

f:id:dackdive:20200206004027p:plain

IEモード

新Edgeには「IEモード」という機能が搭載されています。
これは、あらかじめ設定したURLにアクセスした際は、そのタブ内のみIEレンダリングエンジンを使ってサイトを描画するというものです。

この機能自体は以下のページに従って設定さえすれば誰でも使えますが、Windowsのグループポリシーを変更するなどかなり複雑な操作が必要なため、実際には情シスなどの管理者が設定する機能という位置づけのようです。

必要な手順はおおむね Microsoft Edge を IE モードで使用する | Microsoft Docs の通りですが、ポリシーダウンロードサイト(https://www.microsoft.com/en-us/edge/business/download)のファイルダウンロードボタンの場所がわかりづらいので注意。

f:id:dackdive:20200206004213p:plain

あと、自分が試したときはポリシーを追加でダウンロードしたファイルを選択することができず、手動でフォルダ内に配置する必要がありました。

指定するとこういったアイコンが表示されます。

f:id:dackdive:20200206010501p:plain

リリースチャネル

Chromeと同様、Stable(安定版)以外にCanary(毎日更新)、Dev(毎週更新)、Beta(6週おきに更新)が用意されています。 f:id:dackdive:20200206010537p:plain

新Edgeの独自機能その1: Tracking Prevention

新EdgeにはTracking Preventionというトラッキング防止機能が備わっています。

f:id:dackdive:20200206010552p:plain

設定>プライバシーとサービス からこのような画面にアクセスすることができ、3段階のレベルから選びます。 デフォルトは真ん中のBalancedです。

日本語の情報はあまりありませんが、公式ブログから以下の2つの記事が参考になります。

ラッキングや暗号通貨マイニング(Cryptomining)目的のサイトに分類されているURLへのアクセスに対して、ストレージへのアクセスを禁止(Restrict storage access)したり、リソースの読み込みをブロック(Block resource loads)したりするようです。

どのサイトがどういうカテゴリに分類されるか、については Disconnect社(トラッキング防止のブラウザ拡張機能などを開発してる会社)のリスト を使っているらしいです。 Firefoxも同じ?(参考

どういうしくみ?

Disconnect社のリストに加え、Site engagementOrganizationsというしくみが実装されているらしいです。

Site engagement とは、ユーザーのサイト訪問頻度や滞在時間などからサイトの信頼度をスコアリングするしくみです。
スコアはローカルに保存され、また Edge で edge://site-engagement にアクセスすると各サイトがどういうスコアになっているのか確認できます。

f:id:dackdive:20200206012230p:plain

将来変わる可能性はありますが、今のところこのスコアが4.1以上なら信頼できるサイトとして判断しています。(スコアは0〜100点)

Organizations とは、ある会社が複数のドメインを使用していたときに、それらのドメインをグルーピングし、同一グループ内でのクロスドメインリクエストはブロッキング施策を緩和するみたいなしくみです。

新Edgeの独自機能その2: Collections

こちらは現在の安定版(v79)ではまだ有効になっておらず、v80以降で使える機能です。 DevやCanary版で試せます。

f:id:dackdive:20200206010843p:plain

ブックマークをもうちょっと高機能にした感じでしょうか。 ブラウザ右側のサイドバーに、ページのURLだけでなく、テキストや画像をコレクションに追加することができます。

ブラウザ拡張

新EdgeではChrome拡張がほぼそのまま動きます。 Chrome Web Storeからもインストールできるようです。

f:id:dackdive:20200206010901p:plain

また、まだベータ版ですが、Edge専用のストアも公開されています。 https://microsoftedge.microsoft.com/

Edge専用ストアへの公開については以前記事を書きました。
Chrome拡張をChromium版Microsoft Edgeに対応する - dackdive's blog

chrome.tabsなどのAPIがそのまま使えるので、おそらくChrome拡張のソースコードに何も手を入れなくても公開できます。

リファレンス

公式ブログ・ヘルプ

日本語記事