Takeshi Arabiki
Who am I?
I work as an engineering manager and a kind of technical lead for a team responsible for site reliability engineering (SRE), data engineering, application development, etc. I’m mainly specialized in Rails, AWS, MySQL, Presto, Fluentd, Cassandra, and Kafka. I’m also the co-author of a Japanese book on the R language for advanced users (R言語上級ハンドブック), which was published in 2013.
Related URLs
- Blog
- @a_bicky
- abicky
- abicky
- Speaker Deck a_bicky
- My Blog Posts on Cookpad Developers Blog
- My Blog Posts on Repro Tech Blog
- Employee Interviews
Primary Skills
Rails
Since December 2013, I have been involved in developing medium-sized Rails applications. In my work with Rails, I usually focus on developing background jobs rather than Rack applications, so my experience using modern JS frameworks such as Vue.js and React.js at work is limited.
Also, I can fix almost all flaky system specs.
cf. Fixing flaky tests in Rails applications: Ways of debugging system specs and factors making them flaky (in Japanese)
Ruby
Ruby has been my primary programming language since December 2013. Although I seldom attend Ruby community events or keep up with the latest features they talk about, I can read and write Ruby code most swiftly and efficiently. Actually, when I encounter a bug in an OSS written in Ruby, I can create a pull request to fix it.
Here are some noteworthy pull requests I created:
- A pull request that resolved the deadlock issue preventing the stable release of Fluentd v0.14
- cf. Fluentd v0.14.22 has been released | Fluentd (My GitHub username is @abicky)
- A pull request that fixed an error bootsnap sometimes encountered at startup
- A pull request that introduced a new feature enabling ruby-kafka to support a custom assignment strategy
- A pull request that introduced a new feature enabling a Datadog library to flush the metric buffer on a regular basis
Although the author of ridgepole made me a commiter, possibly because I’m his ex-colleague and I created many pull requests in a short period in 2017, I haven’t been able to contribute to the repository recently.
I also developed several of my own gems:
- activerecord-debug_errors: An extension of activerecord to display useful debug logs on errors
- ruby-kafka-ec2: An extension of ruby-kafka for EC2
- typed_data: A library that converts hash objects managed by an Avro schema
- fluent-plugin-mysql-select-insert: Fluentd output plugin to insert records by SELECT query
- socks_handler: A flexible socksifier for sockets created by TCPSocket.new, Socket.tcp or UDPSocket.new
Additionally, I have a good understanding of how Ruby manages its memory, which is essential to operate Ruby applications effectively.
MySQL
I have a good understanding of how MySQL works and the optimal indexes to add for enhanced performance.
Here are several of my blog posts related to MySQL:
- Importance of checking key_len in Explain when creating composite indexes in MySQL - ARABIKI Blog (in Japanese)
- Presented “Internals of MySQL/InnoDB” at Rails Developers Meetup 2018 - ARABIKI Blog (in Japanese)
- Options for storing boolean settings in RDB and their respective advantages and disadvantages - ARABIKI Blog (in Japanese)
- Foundamentals of indexing in MySQL with InnoDB and common mistakes - cookpad Developers Blog (in Japanese)
AWS
Since August 2017, I have been developing and managing applications on ECS on EC2. This experience has equipped me with substantial know-how regarding ECS on EC2.
- Presented “Aiming for stable and cost-effective ECS auto scaling” at SRE Lounge #11 - ARABIKI Blog (in Japanese)
Additionally, I think I can swiftly build an architecture that integrates AWS services such as S3, SNS, SQS, Lambda, Route53, EMR, and EventBridge.
- Detailed Amazon S3 storage pricing - ARABIKI Blog (in Japanese)
- Five fundamental considerations for running applications processing Amazon SQS messages in production - ARABIKI Blog (in Japanese)
I’m skilled at reducing costs by utilizing Savings Plans and Spot instances, or by re-architecting.
Datadog
I have experience in migrating a monitoring service from CloudWatch Alarm to Datadog and in ensuring it triggers an alert only when needed. The experience has provided me with the knowledge to prevent unexpected alerts.
Here is a blog post to prove my experience:
However, I’m not as familiar with Datadog APM or Logs as I am with the monitoring service.
Terraform
Since August 2017, I have been managing AWS resources, Datadog monitors, etc. with Terraform. The experience has enabled me to swiftly construct infrastructure using Terraform.
Fluentd
Since August 2017, I have been operating aggregators that process a large amout of data. If I encounter a problem, I can read the source code of Fluentd and create a pull request to solve it.
Here is the list of pull requests I created: https://github.com/fluent/fluentd/pulls?q=is%3Apr+author%3Aabicky
Particularly, I was the one who resolved the bug that was a blocker for the stable release of Fluentd 0.14.
We got a bug report about output plugin deadlock with several plugins. @abicky fixed this bug and several users tested the patch on their environment. Many thanks for working on this issue.
cf. Fluentd v0.14.22 has been released | Fluentd
The blog post Introduction to Fluentd: Fundamentals necessary for operating Fluentd (in Japanese) was derived from this experience.
Presto/Trino
I have over four years of experience in managing Presto and ensuring its stability and good performance. Although I may not have enough Java experience to create a pull request, I can make minor modifications to a connector and I have a good grasp of which parts of the source code to read to understand its key behaviors.
I also wrote blog posts targeting beginners, such as Introduction to Presto/Trino on Amazon Elastic MapReduce (EMR) (in Japanese), and blog posts for engineers managing Presto/Trino, such as Service Discovery in Presto (in Japanese).
Additionally, I gave the following presentations at a workshop:
- Presented “The progress of stabilization and peformance improvement of Presto at Repro” at Repro Tech Meetup (in Japanese)
- The story behind modification to Presto Cassandra Connector at Repro / Presto Conference Tokyo 2020 (in Japanese)
Go
I sometimes review changes in services written in Go and write simple programs in Go. As part of learning Go, I also have experience in developing operational tools written in Go as follows:
- ecsmec: A CLI tool for Amazon ECS that provides some commands to execute bothersome operations
- ecswrap: A wrappper program which resolves termination order of ECS containers
However, it takes me much more time to read and write code in Go than in Ruby due to its less frequent use.
Java
Although I rarely write Java code, I often read the source code of Java-based OSS we use, such as Presto, Cassandra, Kafka, Kafka Streams, to understand their behavior and review code of Kafka Streams applications.
Here are examples where I gained an understanding of the behavior of Java-based OSS by reading the source code and setting breakpoints:
- Understanding unexpected skew that happens when consumers in stateful Kafka Streams applications join or leave: How does StreamsPartitionAssignor assigns tasks? - ARABIKI Blog (in Japanese)
- Service Discovery in Presto - ARABIKI Blog (in Japanese)
- Transforming Docker logs into Parquet files optimized for Athena (Presto) with columnify - ARABIKI Blog (in Japanese)
- Data disappears when replication strategy is changed in Cassandra - ARABIKI Blog (in Japanese)
- Resolving “Container is running beyond physical memory limits.” that occurs when Hive on Tez compresses Parquet files with Snappy - ARABIKI Blog (in Japanese)
- What is slop of Sloppy Phrase Search - ARABIKI Blog (in Japanese)
BigQuery
I can investigate and resolve peformance issues and memory-related errors. Additionally, I can write analytical queries that consist of several hundred lines for complex data aggregation.
Kafka
I have over two years of experience in managing Kafka brokers and have developed both producer and consumer applications using ruby-kafka after reading almost all of the source code of ruby-kafka. I can also conduct code reviews for Kafka Streams applications with a good understanding Kafka Streams at the source code level. Furthermore, when encountering problems with librdkafka I can investigate and address them at the source code level.
Here are related blog posts:
- Understanding unexpected skew that happens when consumers in Stateful Kafka Streams applications join or leave: How does StreamsPartitionAssignor assigns tasks? - ARABIKI Blog (in Japanese)
- How to deal with “Local: Broker transport failure (transport)” of rdkafka-ruby - ARABIKI Blog
Additionally, I actively contributed to ruby-kafka: https://github.com/zendesk/ruby-kafka/pulls?q=is%3Apr+author%3Aabicky
Cassandra
I have over three years of experience in managing Cassanda, during which I have gained a good understanding of it by reading a specialized book, studying the source code, and running it locally in debug mode.
- Data disappears when replication strategy is changed in Cassandra - ARABIKI Blog (in Japanese)
- Using Cassandra C/C++ driver leads to INFO log “Connection reset by peer” in Cassandra - ARABIKI Blog
Management
I became a team leader in 2018. Although our development organization abolished the role of team leader in 2019, I functioned as a virtual team leader. In 2021, I officially resumed the role of team leader, a position that doesn’t include people management responsibility. Then, in 2022, I assumed the role of team manager, a position involving people management responsibility.
Here are some examples of materials related to my management experience:
- The another journey of separating responsibilities from jack-of-all-trades SRE-ish team: To building on-call structure in newly established team - Repro Tech Blog (in Japanese)
- The evolution of development organizational structure at Repro and beginning of Platform Engineering
Languages
Japanese
Native
English
CEFR B2
I completed all courses of the Callan Method in 2022. Additionally, since July 2020, I have been taking one-to-one online English conversation classes twice a week, each of which lasts for one hour and a half. These experiences have enabled me to communicate in English on a one-to-one basis.
- TOEIC L&R 935 (August 2021)
- Listening 455 (CEFR B2)
- Reading 480 (CEFR C1)
- duolingo english test 105 (CEFR B2)
Publications (in Japanese)
- R language handobook for advanced users, 2013 (in Japanese)
Workshop Presentations (in Japanese)
- 2023-12-06 The evolution of development organizational structure at Repro and beginning of Platform Engineering (Platform Engineering Meetup #6)
- 2023-08-31 The journey of separating responsibilities from jack-of-all-trades SRE-ish team: To building on-call structure in newly established team (SRE Lounge #15)
- 2020-11-20 The story behind modification to Presto Cassandra Connector at Repro (Presto Conference Tokyo 2020)
- 2019-10-29 Aiming for stable and cost-effective ECS auto scaling (SRE Lounge #11)
- 2019-06-04 The progress of stabilization and peformance improvement of Presto at Repro (Repro Tech: 実践・並列分散処理基盤)
- 2018-03-24 Internals of MySQL/InnoDB (Rails Developers Meetup 2018 Day 1)
- 2015-09-05 Natural Language Processing at クックパッド特売情報: Search system using named-entiry recognition (NLP若手の会 第10回シンポジウム)
- 2013-06-01 Introduction to document classification using R (Tokyo.R #31)
- 2012-09-25 Learning affine transformations with HTML5 Canvas (SWF 研究会#2@東京)
- 2012-02-19 Scope, frame, and environment in R (Tokyo.Lang.R #0)
- 2011-11-26 Comfortable Twitter life with twitteR! (Japan.R #2)
- 2011-11-26 Introduction to Twitter Analysis using R (2011年度 データ解析環境Rの整備と利用)
- 2011-11-12 Developed Getopt::Long for R (Tsukuba.R#9)
- 2011-11-12 Dataframe manupuration in R (Tsukuba.R#9)
- 2011-09-10 Tweet classification without a dictionary using string kernel SVM (第7回自然言語処理勉強会)
- 2011-08-27 Debugging in R (Tokyo.R #16)
- 2010-12-02 Data manupuration Twitter data with R (Osaka.R #4)