Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

Goで作るテキストエディタ

はじめに

みなさんこんにちは。Sansan事業部プロダクト開発部のiOSエンジニア荒川です。

以前はRDBMSの記事*1を寄稿し、好評いただいたこともあり、定期的に車輪の再発明系の記事を書いていこうと思います。

さて本日はタイトルの通り、VimやEmacsに代表されるターミナルで動作するインラインテキストエディタをGoで開発してみました。

ソースコードは以下のリポジトリに置いているため、ぜひ参考にしてください。

github.com

続きを読む

SCSS-Lint から stylelint に移行した話

こんにちは。Eight でフロントエンドエンジニアをしている鳥山(@pvcresin)です。
ついこの間新卒で入ったと思ったら、もう 2 年目に突入していました。時が経つのは早いものです。
今回は Eight の Web フロントエンドで使っているスタイルのリンター(コードの静的解析ツール)を SCSS-Lint から stylelint に移行した話をしたいと思います。

続きを読む

GraphQLを導入してDX向上(フロントエンド編)

こんにちは。Eight事業部の青山です。現在は社内の名刺を一括管理できるEightのサービス"企業向けプレミアム"で主にフロントエンドを担当しています。

今回は以前投稿されたGraphQL導入記事のフロントエンド側について紹介したいと思います。

REST APIが主流のプロジェクトの中でGraphQLを導入してみた話(サーバーサイド編) - Sansan Builders Blog

導入の経緯やサーバー側については上記記事を参照ください。

Eight本体はReact+Reduxで構成されており、今回GraphQLを利用するにあたりデータ管理をどうするかサーバーエンジニアも交えて議論しました。結果として、Apollo Clientを使ってデータの管理を行うことにしました。

github.com

Apollo ClientはApolloというGraphQLを利用するためのツール群の一部で、GraphQLサーバーに対するクライアントライブラリを提供します。同様の候補としてFacebookのRelayもありますが、データストアとしても活用しやすい、ドキュメントが充実している、連携するツール群が豊富といった点から、Apolloを採用しています。 豊富なツールの中でも、graphql-code-generatorとApollo Serverによって開発者体験(DX)が大幅に向上しているのでそれらを紹介します。

続きを読む

新卒AndroidアプリエンジニアがSansanに入社して感じたこと

こんにちは!Sansan事業部プロダクト開発部の荒です。
今年の4月に新卒で入社し、SansanのAndroidアプリを開発しています。

この記事では、新卒として入社した私がSansanに入社する前に抱いていたイメージと入社して感じたことを書いていきたいと思います。

続きを読む

【ML Tech RPT. 】第18回 構造に関連する機械学習を学ぶ (4) ~格子構造~

f:id:ssatsuki040508:20181210005017p:plain
DSOC研究員の吉村です。最近は朝ごはんを完全ルーティーン化していて、ヨーグルトにフルーツグラノーラを入れたのを毎日食べてます。これを続ける中でわかったことですが、ヨーグルトはプレーンじゃないとフルーツグラノーラに合いません。

さて、今回も構造に関する機械学習の話題について見ていきましょう。今回は格子構造についてです。格子構造自体はグラフ構造の特殊な場合として考えられますが、隣り合う点同士が相互に全て接続されているところが特徴的です。例えば、画像を構成している構造がまさに格子構造ですが、この場合には位置が近いピクセル同士は何らか関係があると考えられるので、そういった情報を用いてタスクを取り扱っていくことになります。他の例としては、機械学習というよりはむしろ離散最適化周りの文脈で、整数格子点上の劣モジュラ関数に関する話題などがあります。

そこで下記では、画像の構造に着目した扱い方と整数格子点上の劣モジュラ関数に関する説明をしていきます。

続きを読む

REST APIが主流のプロジェクトの中でGraphQLを導入してみた話(サーバーサイド編)

こんにちは。Eight事業部の古本です。Eightで"企業向けプレミアム"という企業内で名刺を共有できるサービスのサーバーサイドの開発・運用を主に行っています。

その企業向けプレミアムですが、去る2020年5月にバージョンアップが行われました。
そこでEightの中では初めてGraphQLを取り入れてAPI開発を行いました。

EightではRailsを採用しているためAPIといえばREST形式で書かれています。
そんな中で方式が異なるGraphQLを採用するということは、当初思い描いていた以上に様々な課題がありました。

この記事では、そこで起きた様々な課題とそれに対するアプローチや解決策などサーバーサイドの目線から述べたいと思います。

続きを読む

歴史をたどってディープラーニングを学ぶ 第八回 データオーギュメンテーションを実装して学ぶ

こんにちは、ニューラルネット老人こと糟谷勇児です。

今回はデータオーギュメンテーション(Data Augmentation)を見ていきます。データオーギュメンテーションは学習データを人工的に変えて水増しして学習させる技法です。画像なら縮小や回転、左右反転、平行移動などが行われます。今回はニューラルネット自体をいじらないので簡単そうですね。(実際はだいぶハマった)

前回は、ソフトマックス層を実装しました。ソフトマックスはドラクエに例えるとチャモロという話をしましたが、データオーギュメンテーションはドラクエに例えると「ゲントの杖」ぐらいの期待感はあります。

というのも、今までの誤認識をした結果を見ると明らかに失敗しているものに傾向があるからです。

小さいもの
f:id:kasuya_ug:20200703094122j:plainf:id:kasuya_ug:20200703094124j:plainf:id:kasuya_ug:20200703094126j:plainf:id:kasuya_ug:20200703094130j:plainf:id:kasuya_ug:20200703094133j:plainf:id:kasuya_ug:20200703094136j:plain
下のほうにあるもの
f:id:kasuya_ug:20200703094302j:plainf:id:kasuya_ug:20200703094306j:plainf:id:kasuya_ug:20200703094309j:plainf:id:kasuya_ug:20200703094311j:plain

アップのもの
f:id:kasuya_ug:20200703094443j:plainf:id:kasuya_ug:20200703094446j:plainf:id:kasuya_ug:20200703094448j:plainf:id:kasuya_ug:20200703094451j:plainf:id:kasuya_ug:20200703094454j:plain

低コントラストなもの
f:id:kasuya_ug:20200703094625j:plainf:id:kasuya_ug:20200703094629j:plainf:id:kasuya_ug:20200703094632j:plainf:id:kasuya_ug:20200703094634j:plainf:id:kasuya_ug:20200703094637j:plain

これらを認識するのに、画像を拡大・縮小したり、平行移動したり、低コントラストにしたりした画像を増やしていくとよさそうです。

続きを読む

© Sansan, Inc.