たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。
以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
ロストテクノロジーAdvent Calendar 5日目に予告無しで飛び入り参加のPiroと申します。
アンテナの高い皆さんにとって、開発環境の重要なファクターであるテキストエディタの最低ラインはATOMかVisualStudio Codeでしょうか。では、これらがElectronというChromiumベースの実行環境上で動作するHTML/CSS/JavaScriptで書かれたアプリであるという話を聞いたことはないでしょうか。
Webベースの技術で実用的なローカルアプリを作れるなんて素晴らしい! そこに目をつけるとはさすがGutHub! と思いますか? しかし実際の所は、そういう試み自体は過去から何度もあったのです。WebkitベースでFlashも取り入れて当時のWebのリッチな体験をそのままローカルに持ってこようとしたAdobe AIR、HTMLとJScript/VBScriptのミックスでWindowsローカルアプリを作ろうとしたHTML Application(.hta)。この記事で語るXULRunnerも、そんな試みの中の一つです。
By the fixed bug 1500479, following new features become available on Firefox 65 and later.
previousTabId
for activeInfo
object notified to listeners of tabs.onActivated
.successorTabId
for tabs returned by tabs.get()
, tabs.query()
, and other APIs.
tabs.update()
.tabs.onUpdated
, and there is no alternative listening API like tabs.onHighlighted
.tabs.moveInSuccession()
to set successorTabId
for multiple tabs, as an atomic operation.When you close the active tab (by Ctrl-W or any operation), Firefox instead focuses to its next or previous tab. Or, if the closed tab was opened from another tab, Firefox possibly focuses the opener tab. In short: new Successor Tabs API is a mechanism to override these behaviors.
Bug 1500479が解決され、Firefox 65以降のバージョンで、WebExtensionsのタブ関連APIに以下の変更が入る事になりました。
tabs.onActivated
のリスナに通知されるactiveInfo
に、previousTabId
というプロパティが追加されました。tabs.get()
やtabs.query()
などで取得されるタブのオブジェクトにsuccessorTabId
というプロパティが加わりました。
tabs.update()
で変更可能です。tabs.onUpdated
では通知されません。tabs.onHighlighted
のような専用のリスナもありませんので、変更を動的に検知する方法はありません。successorTabId
をまとめて変更するtabs.moveInSuccession()
メソッドが追加されました。Firefoxでアクティブな(現在の)タブをCtrl-Wなどで閉じると、右隣や左隣、あるいはそのタブを開いた親のタブにフォーカスを切り替えるようになっています。上記の新機能は、この挙動に介入するための物です。「successor」とは「後継者」という意味で、つまり、アクティブなタブを閉じられた後に次にフォーカスされるタブを指定する仕組みという事になります。
今までは、WebExtensionsのAPI経由でこの挙動に介入する方法がなかったため、例えば「タブを閉じたら、必ずそのタブの直前に見ていたタブにフォーカスを移す」というような事をアドオンで実現しようとすると、
という手順を踏む必要がありました。これは見た目に美しくない(一瞬無関係のタブがフォーカスされてしまう)のもさることながら、現在のFirefoxの初期設定である「Ctrl-Tab/Ctrl-Shift-Tabで最近フォーカスされた順にタブのフォーカスを切り替える」という挙動にも悪影響を与えます。
拙作アドオンのツリー型タブも、ツリーの最後の子を閉じたら、右隣のタブ(=下にある別のツリーの親タブ)ではなく1つ前の兄弟タブまたは親タブにフォーカスを移すという機能があり、これを実現するにあたっては前述の点がずっと未解決のままでした。今回のAPI追加によって、ようやくこの問題を解決する目処が立ったと言えそうです。
しがないラジオ2 Advent Calendarをご覧の方々、初めまして。しがないラジオsp.31でゲストとして出させて頂いた、Piroと申します。自分がどういう背景を持つ人間かについては、しがないラジオの当該回を聞いてみて頂けましたら幸いです。前後編で3時間はありますが……
しがないラジオ2 Advent Calendarの2日目は、「しがない」エンジニアになるためにあると良さそうな「人にアピールできる実績」の積み方についてのお話です。
さて。しがないラジオに限らず、エンジニア系Podcastを聞いているとよく「つよいエンジニア」というフレーズを耳にする印象があります。
強いとはどういうことか。人によって解釈にブレはありそうですが、「口だけじゃなく、形として実績が目に見えている」というのはわりと共通して言えそうな気がします。例えば、Googleのような著名企業でサービスやプロダクトの開発を主導しているとか、著名なOSSの作者(開発チームの一員)だとか、そういうプロジェクトに外部からパッチを提供しているとか。あるいは、何かの技術イベントを主催してるとか、技術書を(特に、商業出版の書籍を)書いてるとか。
で、いつかはそうなりたい、そうなるにはどうすればいいんだろう、と憧れを抱いている人が多いのかなと思います。
僕がそういう方にお勧めしたいのが、OSSの開発やコミュニティに実際に関わってみてはどうでしょうか? という事です。既存のプロジェクトに関わるのも、自分で始めるのもどちらでもOKです。
「いやいや、ああいうのはつよいエンジニアの人がやる事で、自分みたいなペーペーがやるなんておこがましい……」そんなふうに思っていませんか? だとしたら、それは因果関係が逆です。むしろ、OSSの開発に関わったから、その人は結果的につよいエンジニアになった、という風に考えてみて下さい。
先日しがないラジオmeetup 2の懇親会で若手の方相手に(偉そうに)話してた話です。
しがないラジオパーソナリティのzuckeyさんの発表でも触れられていた、ゲームをAIにプレイさせる機械学習の実験で、ゲームのスコアが上がるような行動に報酬を与えるというモデルではなく、今までにやった事がない行動を取る事に報酬を与えるというモデルにしたところ、その方が結果的に高いスコアが出るようになった、という話があります。
これを人間に当てはめると、「何をすれば一番自分が成長できるか?という事を考えて効率の良い成長に繋がりそうな事だけを繰り返すよりも、成長に繋がるかどうかはさておいて新しい挑戦をとにかく手広くやった方が、結果的により高いレベルの成長に繋がる」みたいな感じでしょうか。自分がしがないラジオにゲストで出させて頂いた時に話した、やりたい事をジャンル問わずやっていたら結果的にユニークな価値が生まれたという話にも、どことなく重なる話であるような気がします。
IT関係の勉強会で、どこそこの会社の会議室やイベントスペースを借りて開催する、という話はよく聞きます。懇親会で話していたその若手の方も、自社のスペースを使って勉強会を開催しようとしたらしいのですが、会社サイドから「それは採用に繋がるのか?」などの具体的な数字を示す事を求められて、自社スペースの使用を断念したとのことでした。
話を聞いていて、「分かりやすい数字を上げる事に固執して挑戦の芽を潰す」という事例のようにも思われて、まさに前述の話に反する事をしているように見えるなあ、そういう風に短期の数字に囚われないで、もっと長い目で考えた方が、結果的により良い結果に繋がるんじゃないのかなあ。そんなふうにその場で話しました。
ところで話はまったく飛びますが、教育先進国では子供に将来の夢を聞く時に「どんな職業に就きたいか」ではなく「どういう人でありたいか」を訊ねる、という説があるそうです。日本では将来の目標を定める時に「どういう地位に就くか」「どういう地点に到達するか」という事を重視しがちなため、一度その目標到達の過程で頓挫すると挫折したままになりがちなのに対し、他の先進諸国では「どういう行動を取る人でありたいか」という事も大事にしていて、そういう教育をしていると「今回は成果を出せなかったけど、こういう行動をしよう・こう振る舞おうという事はちゃんと達成できてたな」と考える事ができ、挫折から立ち直りやすいのだそうです。
考えてみれば、「名の通った有名企業に入りたい」や「歴史に名を残したい」といった目標というのは突き詰めると他人からの評価に依存する物なので、成功できるかどうかは運次第なのに対し、「誠実に生きる人でいよう」や「途中で投げ出さないようにしよう」のような行動指針を定める事は、あくまで「自分がどうするか」というだけの話なので、やればやっただけ確実に成功が積み重なるというおいしい目標設定だと言えます。
なので、その話を引用しつつ僕はその方に、「『つよいエンジニア』になる」のような仰ぎ見る対象の・遠くの地点を目標に設定するのではなく、「目の前の問題の解決に真摯に取り組む人であり続けよう」のような、常に自分の傍らに置き続ける道連れとなる行動指針を目標に設定して、その目標に反しないようにという事に気をつけて活動を続ければ、何かしらの結果が積み重なって自信に繋がるんじゃないでしょうか、という話もしました。
こうして並べてみると、字面的には矛盾する事を言っているようにも見えます。でも僕の中では、これらは矛盾しておらず、共通する1つの事を言っている、それを別の角度から言い表しているだけに過ぎない、という思いがあります。
自分にとって非常に興味深く感じる事例に遭遇したので、Twitterだけでなくこちらにも記録しておきます。
事の発端は、「topコマンドの日本語の検索結果がデタラメばかりだった。原典にあたらず間違いを拡散している人が多い」という趣旨のツイートを見かけた事でした。
自分も過去にシス管系女子の本編でtopの簡単な説明を書いていたので、これは他人事ではありません。 「もしかして嘘を書いていたか?!」と真っ青になって、詳しくお話を伺ってみました。 その結果分かったのは、自分の心配は杞憂だった(自分が書いた解説の範囲についての話ではなかった)という事と、その人は不幸にも検索キーワードの選び方のせいで誤った情報の海に飲まれてしまった、「検索の仕方」によってネットの技術情報が島宇宙化している、という事でした。
(島宇宙化というのは元々は、宮台真司氏が「社会全体で共通の価値観という物が薄れ、同じ価値観を持つ者同士で小さな社会を作っている様子」を指していった言葉だそうです。自分はその言葉が登場した原典を読んでいませんが、物理的な距離によって隔てられた小集団ごとの社会があるだけだったのが、マスメディア等によって大きな社会が形成され、しかし価値観の多様化により再び小集団に分かれていっている、という事から出てきた表現なのかなあと思っています。)
Here is the English version of this article.
朗報があります。2016年6月にWebExtensionsへ一本化の方針が示された時に出した要望であるBug 1280347 - Add ability to provide custom HTML elements working as alias of existing Firefox UI items, especially tabsが、最近ようやく解決されました。
何故これが朗報なのでしょうか? アドオンのXULからWebExtensionsへの移行の話をおさらいしてみましょう。
Here is the English version of this article. 7月に英語で書いた物の日本語版です。Qiitaにもクロスポストしています。
ツリー型タブをXULからWebExtensionsに移植した時の話で、アドオン同士の連携が取りづらくなる事への懸念について書きました。この点について現時点での知見をまとめておきます。
Tokyo WebExtensions Meetup #3で、標題の通りの発表をしました。スライドはQiitaにありますが、こちらにもクロスポストしておきます。
タブの複数選択機能が入った事で「選択」という言葉が多義的になってしまったので、まずその点を整理します。 WebExtensions APIにおいては、「選択」という言葉で表されうる状態に以下の2つがあります。
「selected tab」という表現は紛らわしいので、このエントリでは使いません。
Firefox 63でabout:config
でbrowser.tabs.multiselect
をtrue
にすると試せます。Chromeでも同じ操作ができます。
WebExtensionsベースのアドオンにとっては、このタブの複数選択機能に対して2つの関わり方があります。
それぞれ順番に紹介します。 なお、基本的にはChromeの拡張機能でも同様のAPIが使えます。
As I described at the previous article, you can provide more useful and usable context menu for your addon on Firefox 64 and later, if it is focused to control tabs or bookmarks. The previous article described basics of new APIs, but it looked too complex because there are various usecases. So this article aims to describe how to provide context menu simply for different cases:
All following examples assume that your addon named "Bucket" provides ability to send tabs to an online bucket, like the "Pocket".