2023年振り返り

今年も軽く振り返り。 仕事 昨年後半にスタートアップをレイオフされ、2月からAdobeで働き始めました。 shinichy.hatenablog.com AdobeではiOSのカメラアプリの開発をしていたのですが、夏頃に組織再編でチームが解散してしまいました。1ヶ月半以内に社内で…

アメリカでレイオフされました。

Metaが11,000人をレイオフした昨年の11月9日、私の働くスタートアップでもレイオフがあり、レイオフの対象となってしまいました。 昨年3月にも勤め先のスタートアップが倒産してしまい、6月から働き始めたばかりだったので、またかという感じでした。 shinic…

2022年振り返り

今年も軽く振り返り。 仕事 今年は仕事面は人生で一番大変でした。3月下旬に働いていたスタートアップが倒産してしまい、なんとか別のスタートアップに転職したと思ったらわずか5ヶ月後に会社の業績不振で所属チーム全員レイオフされてしまいました。スター…

息子がアメリカで生まれ、自閉スペクトラム症と診断されるまで

7月はアメリカではDisability Pride Month(障害者プライド月間)です。6月のLGBTQ Pride Monthに比べて知名度が低い気がしますね。うちには2歳の息子がいますが、息子は自閉スペクトラム症(ASD)という障害があります。以前は単に自閉症と呼ばれていたようです…

アメリカでの転職活動2022

去年サンフランシスコにあるFintechのスタートアップに転職しましたと書きましたが、なんと1年も経たないうちに会社が資金難で潰れてしまいました…。 会社には日本人の方も何人かいて、1ヶ月前に元同僚の方がブログに詳細をまとめて下さっています。会社が…

2021年振り返り

今年もようやく仕事を納めたので軽く今年を振り返り。 子育て 毎日1歳児の子育てに追われて大変ですが、ようやく歩けるようになったりデイケア(保育園)に行き出したり順調に成長しているので嬉しいです。 少しずつ言葉も喋り始めて可愛さがどんどん増してき…

Kafka Streamsのタスク割り当てアルゴリズム

この記事はKafka Advent Calendar 2021の7日目の記事です。 Kafka Streamsのタスク割り当ては TaskAssignor インターフェースで抽象化されており、具体的な実装は2.6以降は HighAvailabilityTaskAssignor、2.4-2.6までは StickyTaskAssignorというクラスで行…

Kafkaコンシューマグループのパラメータについて

この記事はKafka Advent Calendar 2021の2日目の記事です。 最近仕事でKafkaコンシューマグループの動作に関わる幾つかのパラメータチューニングをしたので、備忘録として残しておきます。 Kafkaコンシューマーの日本語での説明はKafka コンシューマー — Con…

Integrantのコードナビゲーションを可能にするIntelliJプラグイン

この記事はJetBrains Advent Calendar 2021の1日目の記事です。 今の会社ではClojureでバックエンドのアプリケーションを開発しており、Integrant というライブラリを使っていわゆるDI(Dependency Injection)をしています。 Integrantの詳細はこちらの記事が…

2020年振り返り

色々今年の振り返りブログ読んで触発されたので、自分も振り返ってみた。 私生活 子供(第一子)が生まれた。完全に子供中心の生活になった。大変だけど幸福度も上がった。 子育てが忙しいのとCOVIDであまりでかけたりできなかった。高い家賃払ってアメリカに…

QuiverのノートブックをInkdropにインポート

Inkdropというマークダウンエディタについての記事がバズっていたので興味を持ちました。 Markdownエディタを作って月15万円稼ぐまでにやったこと — Inkdrop 今はQuiverを使っています。デスクトップアプリの出来はすごくいいんですが、iOSアプリが全然使い…

クラウドサービスで利用可能なGPUインスタンス調査

クラウド上でchainerを高速に動かすためにクラウドサービスのGPUインスタンスを調査してみました。 NVidiaの GPU Cloud ComputingのページにGPUが利用可能なクラウドサービスが列挙されていますが、今回はAzureとAWS、さくらについて調査しました。 Google C…

QEventLoopでイベントループを自在に操る

この記事は Qt Advent Calender 2015 の14日の記事です。 QEventLoopクラスを使って非同期処理を同期的に扱う方法を紹介したいと思います。 QEventLoop はQtのイベントループを扱うクラスです。イベントループについては2日目の記事で分かりやすく解説されて…

アロー関数はコンストラクタとして使えない

util.inheritsでアロー関数を渡すとエラーになるので調査していたところ、アロー関数はコンストラクタとして使えないことが分かった。 原因はアロー関数のprototypeがundefinedになるため。 再現コード 'use strict';var util = require('util');var EventEm…

QLocalSocket+QEventLoopを組み合わせた時のreadyReadシグナルの仕様

QLocalSocketとQEventLoopを組み合わせると、非同期なネットワーク呼び出しを同期的に記述できます。(もちろんUIスレッドはブロックしません)。 詳細はここの”Forcing event dispatching”という箇所を参考にして下さい。 http://qt-project.org/wiki/Threads…

日本からBank of Americaの口座を閉じる

昨年10月にアメリカから帰国したんですが、まだ一部ペンディングのトランザクションがあって帰国前にアメリカの口座を閉じれず、帰国後に閉じたんですがすごく時間がかかって大変でした。最初に電話で問い合わせてから小切手を受け取るまでに3ヶ月半かかりま…

Artistic License 2.0のソフトを自作アプリと一緒に配布するための条件

npmを現在開発中のエディタに埋め込んで一緒にバイナリを配布したいので、npmが使用しているArtistic License 2.0について調べてみました。 主にPerlで使われているようです。 http://ja.wikipedia.org/wiki/Artistic_License 原文 http://www.perlfoundatio…

Macで英語配列のRealforceを使う

Mac

環境 Mac OS X 10.8.5 (Mountain Lion) Realforce 86u RealforceはWindows用キーボードなので、デフォルトではWinキーはCommand、AltキーはOptionに割り当てられたり等、Mac用のキーボードとかなりレイアウトが異なります。ここではKarabiner(旧KeyRemap4Mac…

Qt CreatorでCMake+Ninjaを使う (Mac)

環境 Mac OS X Mountain Lion Qt 5.3 cmake 3.0.1 qmakeからCMakeベースのプロジェクトに移行 まずはCMake, NinjaをHomebrewからインストール brew install cmake ninja qmakeベースのプロジェクトからCMakeベースのプロジェクトに移行するため、下記のよう…

SBTでコンパイル完了後に通知する

普段Scalaで開発する時にはsbtのインクリメンタルコンパイルを使用するのですが、シングルディスプレイいっぱいにIntelliJを広げているといちいちターミナルを開いて確認しなければならないので、コンパイルが完了したら通知センターに通知を行う方法を考え…

HomebrewでMySQL 5.1をインストール (Mountain Lion)

インストール 以下のオプションを付けて色々試したがビルドエラーになってうまくインストールできなかった。 $ brew install mysql51 $ brew install --use-llvm mysql51 $ brew install --use-clang mysql51 以下のようにAppleのgccを使ってコンパイルする…

IntelliJでScalaの継続プラグインを設定

以下のScala実践プログラミングの限定継続のサンプルをIntelliJで動かす時にハマったのでメモ。 import scala.util.continuations._object Main extends App { val answer = reset { val x = shift {k: (Int => Int) => println("A") println("k(10) = " + k…

iTunesのプレイリストをAndroidに同期する方法比較

MacのiTunesのプレイリストをAndroidに同期したかったので、方法を調査してみました。 現時点で以下の4つの方法を見つけたので、それぞれ比較してみます。 Google Play Music + Play Musicアプリ Google Play MusicはPC上のライブラリを丸ごとGoogleのサーバ…

Scalaの継続モナド(Continuationモナド)を理解する

Scala実践プログラミングに出てきた継続モナド(Continuationモナド)を理解するに手こずったので、備忘録として簡単に説明を残します。該当ページはp.304,305です。 以下は継続モナドの定義です。 class Cont[A, B](m: (A => B) => B) { // for内包表記用のメ…

ConvertBox - 単位変換アプリ リリース

ここ最近ずっとAndroidの単位変換アプリを開発していましたが、ようやくそこそこの完成度になってきたのでGoogle Playストアに公開しました。 ConvertBox - 単位変換 よくある単位変換ツールですが、検索機能に力を入れており、「華氏86」と検索ボックスに入…

PCで作成したSQLite DBをAndroidアプリで使う

辞書アプリなどのSQLiteに保存されたデータを使うアプリでは、アプリの初回起動時に何らかの方法でデータをDBにインサートする必要があると思います。 件数が少なければ外部ファイルからインサートしてもいいのですが、件数が多くなってくるとこのインサート…

Spinnerでプログラムから選択肢を変更した時にonItemSelectedを呼ばないようにする

少しはまったのでメモ。 以下のようにsetOnItemSelectedListenerでnullを設定すればいけるかと思いきや、これではnullに設定してもonItemSelectedイベントが呼ばれてしまいます。 spinner.setOnItemSelectedListener(null) spinner.setSelection(0) 以下のよ…

RobotiumでUIに関するアクションを実行

RobotiumでSoloではサポートされていない操作を行う必要がある時、textView.setText(“hoge”)のようなUIに対する変更のコードをRobotiumのテストで実行すると、以下のエラーとなります。 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the…

CursorLoaderのロード後にListViewの選択行を変更

ListViewでadapterにSimpleCursorAdapterとCursorLoaderを使用している状況では、onLoadFinishedメソッドの中でadapter.swapCursor(cursor)を呼び出してListViewの中身を更新すると思います。 この時swapCursorの後にListViewの選択行を変更するには、以下の…

Spinnerの中でアイテムのpositionを取得する

Spinnerの選択肢を手動で変更する場合、以下のようにsetSelectionで引数にSpinner中のアイテムのpositionを指定します。 // spinnerの先頭を選択spinner.setSelection(0) 問題はこのpositionをどうやって調べるかです。Spinnerから特定の文字列に合致するア…