[programming]

ShortcutKey2URLのFirefox WebExtensions版をリリースしました

もともとFirefoxで提供していたShrotcutKey2URLという拡張機能ですが、WebExtensions版を実装するうえで課題となっていた部分がFirefox60で解決したので、やっとWebExtensions版をリリースすることが出来ました。 ShortcutKey2URL (WebExtensions) – Firefox…

Elevator Saga にチャレンジしてみた & 自動実行できるようにした

Elevator Sagaが社内で再度話題になっていたので、いまさらながらですが、チャレンジしてみました。 Elevator Sagaは、エレベータを操作するプログラムをJavaScriptで書いて実行できるゲームです。全18面あって、クリアの条件が異なります。 Elevator Saga -…

社内勉強会で「WebSocketでカメラの映像を共有してみた」というタイトルで発表しました

社内勉強会でこないだ作ったWebSocket+カメラを使ったアプリケーションについて発表してきました。 WebSocketでカメラの映像を共有してみた from onozaty www.slideshare.net Herokuにデプロイしてデモをやりましたが、自分が試したとき以上に遅延がおっき…

ブラウザ拡張機能 Online Bookmark Incremental Search を Firefox と Chrome で同一のものを提供するようにしました

もともと公開していたChrome版も、先日公開したFirefoxのWebExtension版と同じものにしました。 Online Bookmark Incremental Search for Firefox – Firefox 向けアドオン ソースコードも同一になります。 FirefoxのWebExtensionは、Chromeとの互換性を意識…

Rocket.Chatでチャンネル毎にデザインを変える

Rocket.Chatでチャンネルが複数あったときに、発言先のチャンネルを間違えてしまうといったことがあります(少なくとも自分は)。結構恥ずかしいです。 発言する際に、どのチャンネルなのかもっと識別しやすいようにできれば間違え減らせるのでは!ということ…

XPathで a を祖先に持たない b を選択する

最初はXPath2.0のexcept使えないと無理じゃないか?って思っていたけど、よくよく考えたらそんなことなかったのでメモ。(きっとまた忘れると思うので、、、) たとえば下記のようなXMLがあったとして <root> <a> <c> <b /> </c> </a> <c> <b /> </c> </root> aを祖先に持たないbだけを取りたいってときは、…

WebSocketでカメラの映像を共有する(Shared Camera with WebSocket)

WebSocketを利用してカメラの映像を共有するアプリケーションを作ってみました。 Raspberry Piにカメラをつなげて監視カメラにしたり、ブラウザを通してお互いのカメラの映像を共有するようなことができます。 GitHub - onozaty/shared-camera-websocket 仕…

Lombokで生成されたメソッドをJacocoのカバレッジから除外する

Jacocoの0.8.0が2018年1月2日にリリースされ、待ち焦がれていたLombokで生成されたメソッドを除外する機能がはいりました。 JaCoCo - Change History Methods annotated with @lombok.Generated to better integrate with Lombok >= 1.16.14. Initial analys…

Online Bookmark Incremental Search for Firefox を公開しました。

オンラインブックマーク(Google Bookmarks, Pinboard, はてなブックマーク)をインクリメンタルサーチする拡張機能を公開しました。WebExtensionsに対応したものとなり、Firefox57以降でも使えます。 Online Bookmark Incremental Search for Firefox – Firef…

担当者欄にインクリメンタルサーチをつける(Redmine View Customize Plugin)

この記事は、Redmine Advent Calendar 2017 - Qiitaの5日目の記事となります。 更新@2017-12-29 チケット一覧でエラーが発生していたので、コードを少し変更(対象のIDが存在しない場合、何も処理しない)しました。 前田さんの下記スライドみて、Redmine 4.0 …

Redmine から Rocket.Chat (Slack) に通知するプラグイン

RedmineからRocket.Chatに通知するプラグインを調べていたところ、redmine_messenger というプラグインがよさそうに見えました。ちなみにWebhook使っているのでSlackでも同じです。 GitHub - AlphaNodes/redmine_messenger: Messenger plugin for Redmine wi…

大量のテキストからトークンを切り出す際に、トークンをキャッシュしてメモリ使用量を抑える

大量のテキストからトークンを切り出す場合(形態素解析など)に、同じ内容のトークンが大量に発生することがあります。 このトークンが不変なオブジェクトであるならば、同じ内容のトークンは1つのオブジェクトを使いまわす、すなわちキャッシュすることによ…

Firefoxでbreak-insideは対応していないけど、page-break-insideで同じ効果を得られる(Firefox 56で確認)

CSSのcolumn-countなどを使って段組した場合、要素の途中で折り返しをして欲しくなくて、break-inside: avoid;を指定していました。 break-inside - CSS | MDN Chromeはこれで意図した動きになりましたが、Firefox(確認したのはFirefox 56)ではサポートされ…

ShortcutKey2URL for Chrome というGoogle Chrome向けの拡張機能を公開しました

ShortcutKey2URL for Chrome という、Google Chrome向けの拡張機能を公開しました。 ShortcutKey2URL は、ショートカットキーを使用してURLを開いたり、移動したり、JavaScriptを実行できる拡張機能です。 スタートアップキー(デフォルトはCtrl+Period、Mac…

FirefoxのWebExtensionsにおけるショートカットキー(commands)の重複について

FirefoxのWebExtensionsで、ショートカットキーはmanifest.jsonのcommandsで定義します。 commands - Mozilla | MDN "commands": { "toggle-feature": { "suggested_key": { "default": "Ctrl+Shift+Y", "linux": "Ctrl+Shift+U" }, "description": "Send a …

PostgreSQLのSKIP LOCKEDを使ってテーブルをキューとして使用する

SKIP LOCKED SKIP LOCKED は PostgreSQL 9.5 から入った新機能です。 What’s new in PostgreSQL 9.5 - PostgreSQL wiki PostgreSQL: Documentation: 9.6: SELECT これを使うと、FOR UPDATEの際に別トランザクションによって行ロックが取得されているレコード…

Redmine: 長いテキストをRedmine 3.4 のワイド表示とは異なる形で、広めに表示する(View customize plugin)

Redmine 3.4 では、長いテキストに対して「ワイド表示」というオプションが追加されていて、長いテキストを見やすく表示することが可能になりました。 Redmine 3.4 新機能紹介 | Redmine.JP Blog 上記機能だと、表示位置が説明欄の下に来てしまうので、今回…

Jackson 2.8.7 で、Lombokの@AllArgsConstructorと@NoArgsConstructorを指定していて、一部プロパティを@JsonIgnoreとしているとJsonMappingExceptionが起きる

下記のようなコードを書くと、Jackson 2.8.7 だとエラーとなります。 public class JacksonExample { public static void main(String[] args) throws IOException { ObjectMapper mapper = new ObjectMapper(); User userBefore = new User(1, "Taro", "pas…

Redmine: チケット編集時の送信ボタンにショートカットキーを割り当てる(View customize plugin)

えの on Twitter: "@g_maeda 他の開発者の方の用途もありますので一概には言えませんが、注記の編集から送信までの間の要素が増えたため、2枚目の画像のような感じになると嬉しいです。 Shift+Alt+Eのようなショートカットが各ボタンやドロップダウンにある…

Redmine: 子チケットの一覧にボタンを追加して、REST API経由で親子関係を外す(View customize plugin)

松谷 秀久 on Twitter: "@onozaty いつも難しいトピックで申し訳ありませんが、view_customizeでボタンを追加し、そのボタンがクリックされるとrest apiにより他のチケットを参照したり更新したりすることは可能でしょうか?" ということで、サンプルとして…

社内勉強会で「Lombokの紹介」というタイトルで発表しました

社内勉強会でLombokについて発表してきました。 Lombokの紹介 from onozaty www.slideshare.net Lombok便利ですよね!もぅLombok無しには戻れません。

Redmine 3.4.0、3.4.1 がリリースされました

Redmine 3.4.0、3.4.1 がリリースされました。(3.4.0が7月2日、バグフィックスで3.4.1が7月9日) Redmine 3.4.0 リリース | Redmine.JP Blog Redmine 3.4.1 リリース | Redmine.JP Blog View Customizeだけは動作確認済みですが、他のプラグインも後ほど確認…

Redmine: チケット一覧でカスタムフィールドの値に応じて行のフォントを太字に変える(View customize plugin)

カスタムフィールドの値に応じて行を装飾する方法について問い合わせをいただいたので、「カスタムフィールド1の値が'A'の場合には、行のフォントを太字に変える」をView customizeで行ってみます。 onozaty/redmine-view-customize - GitHub チケットの優先…

MyBatis にて size というパラメータ名を使うとintとしてマッピングされてしまう

追記@2017-07-02 下記Issueで既に対応していただいています。次のバージョン(3.4.5)に入る予定です。 When the parameter name is "size", it is always mapped with integer · Issue #1030 · mybatis/mybatis-3 · GitHub MyBatisのSQLへのパラメータ埋め込…

Redmineでニュースの参照可否を制御する(patch適用)

Redmine 3.3時点では、ニュースの参照に関する権限が無く、一部のユーザにニュースを見せないということが出来ません。 @onozaty Feature #7068 が採用されればRedmine 3.4.0でロールごとにニュースの参照が制限できるようになります。 https://t.co/fXkrc4U…

Spring Boot で WebSocket (STOMPではなく、TextWebSocketHandler)を試してみる

こないだSTOMP over WebSocketを試してみましたが、今度はSTOMPを使わずに、TextWebSocketHandlerを使ったWebSocketを試してみます。題材も同じくチャットです。 sandbox-spring-boot/spring-boot-websocket at master · onozaty/sandbox-spring-boot · GitH…

Spring Boot で STOMP Over WebSocket を試してみる

Spring BootでSTOMP Over WebSocketを使って、試しにチャットっぽいものを作ってみました。 sandbox-spring-boot/spring-boot-websocket-stomp at master · onozaty/sandbox-spring-boot · GitHub 同じルームに接続しているクライアントに、同じメッセージを…

Lombokの@Builder(toBuilder = true)で、オブジェクトの複製を作成する

前回の記事の続きで。 @Builder(toBuilder = true)とすると、オブジェクトからBuilderを生成できます。 どういうときに使えるかというと、オブジェクトの複製を作成して、一部のプロパティのみ変えたいといった場合です。 package com.example.lombok; impor…

Lombokの@BuilderでBuilderを簡単に作成する

多数のプロパティを持つクラスを生成するときに、Builderが有用だと思っているのですが、普通に書くとそれなりにコード書く必要があります。そこでLombokの@Builderです。 package com.example.lombok; import lombok.Builder; import lombok.ToString; publ…

Lombokで生成されたメソッドに対してアノテーションを設定する

毎回調べているような気がするのでメモ。 Lombok+Jackson(Spring MVCやJerseyなどで使ってたり)を使っている場合に、@JsonIgnoreで一部のフィールドを対象外にしたい場合に、privateなフィールドに設定してもうまく動きません。 Lombokで生成したsetterまた…