はじめに 先日、エンジニアの能力と今どきの難しさというタイトルの記事(2018年)を読んで、「これはほんとにその通り」と思う一方で、具体例がないためにピンと来ない人や、マウント取りではという意見も多数見られた。というわけで、自分が比較的得意な、プログラミング言語の構文解析といった分野に関して、この記事の言わんとしていることを補足するような記事を書こうと思い至った。 記事中では、エンジニアに必要な知識や経験を、「ベース」「カテゴリ」「実行環境」という形(以下)に分けて論じている。 ①ベース コンピュータサイエンス(CS)などの理論的なもの 低レイヤー ②カテゴリ フロントエンド / バックエンド / クライアントアプリなど ③実行環境 特定のプログラミング言語や開発環境やツール、フレームワークやライブラリなど この中で、特に印象的であり、かつ「よくわかる」と思ったのは以下の記述だ。 ③は比較
Runnable/Callable Threads Executors/ExecutorService Futures Thread Safety Problem Example: Search Engine Solutions Runnable/Callable Runnable has a single method that returns no value. trait Runnable { def run(): Unit } Callable is similar to run except that it returns a value trait Callable[V] { def call(): V } Threads Scala concurrency is built on top of the Java concurrency model. On Sun JVMs,
どうも、プログラミングを始めて一年ちょいくらいの初心者エンジニアです 普段はscalaを主に書いていて、ちょこちょこAngularとかも書いてます 両方vimを使って書いてますが、定義元ジャンプとか補完機能とかはやっぱりIDEとかVScodeの熱いプラグインが優秀すぎて。。。 じゃぁそっち使えよって話なんですが、基本的なターミナルでの操作がしっかりできるようになるまではIDEじゃなくてemacsとかvim使おうって会社のCTOに言われて一旦emacsを使い始めたんですが、emailはカスタマイズの記事がなさすぎてvimに移行しました。 ちなみにCTOはeamcs派(エディタ戦争w) でもやっぱり強い補完機能、定義元ジャンプ、構文エラーくらいは教えて欲しい。。。 そしたら最近vim-metalsとかいうプラグインが激アツとの情報が流れてきたので入れてみたんですが神すぎたので共有します 環境
末尾呼び出し最適化 Java は末尾呼び出し最適化をしないことで有名だ [2].だけど, Scala は末尾呼び出し最適化を行う.具体的にコードを見てみる: $ cat src/TailCallOpt.scala object TailCallOpt { def tailCallFunc(a: Long): Long = { if (a > 10) a else tailCallFunc(a + 1) } } $ scalac -Ystop-after:tailcalls -Xprint:fields,tailcalls src/TailCallOpt.scala [[syntax trees at end of fields]] // TailCallOpt.scala package <empty> { object TailCallOpt extends Object { def <
初めまして、Ads Platform開発チームの岡田(@ocadaruma)です。 この記事はLINE Advent Calendar 2017の17日目の記事です。 今回、個人的に以前から気になっていたAkka HTTPの内部構造について、この機会に調べましたので紹介いたします。 Akka HTTPとは Akka HTTPは、Lightbend社によって開発されている、Scala/Java用のHTTP toolkitです。 現在はメンテナンスが終了したsprayの後継と位置付けられており、特徴的なRouting DSLをsprayから受け継いでいます。 また、Play Frameworkは2.6系より、Akka HTTPをデフォルトのバックエンドとして採用しています。 調査のきっかけ Routing DSLを始めとしたAkka HTTPのAPIは、シンプルかつ高いComposabilit
What do you get if you boil Scala on a slow flame and wait until all incidental features evaporate and only the most concentrated essence remains? After doing this for 8 years we believe we have the answer: it’s DOT, the calculus of dependent object types, that underlies Scala. A paper on DOT will be presented in April at Wadlerfest, an event celebrating Phil Wadler’s 60th birthday. There’s also a
新しい記事を書きました. 本記事を包含します. amaya382.hatenablog.jp Dottyで何ができるようになるのかとその使い方を簡単にまとめたいと思います. 理論的な部分は深掘りしません. 以下ちょっと長め. 調べきれてない点も多々あるので, 抜けや間違いがあったら教えてください. そもそもDottyとは Dependent Object Types (DOT) に基づいた新しいScalaコンパイラです. たまにScala3とか呼ばれたりもしています. DOT計算理論の詳細は省きます (まとめるほど理解できていないとも言う…). 現行のコンパイラと比べ, コンパイラサイズの減少・コンパイル速度向上・様々な機能追加の他, コンパイラ自体の開発安定性も増すパワフルなアップグレードが期待できます. 現行のScalaとの互換性は切れていますが, 勿論重要な機能がなくなるといったこと
社内で4月から週一でType-Driven Development with Idrisの読書会をやっています。 Type-Driven Development with Idris 作者: Edwin Brady出版社/メーカー: Manning Pubns Co発売日: 2017/04/07メディア: ペーパーバックこの商品を含むブログを見る 今年のScalaMatsuriで@cbirchallさんにオススメされたのがキッカケなのですが、依存型(Dependent Type)を使って変態的なことがいろいろできるという話を聞いて面白そうということで有志(いまのところ6人くらい)で集まって緩く読み進めています。 ようやく2章の中盤に差し掛かったところなのでまだ先は長そうですが、1章でIdrisの概要をウォークスルーしたのでIdrisの思想やIdrisでのプログラミングのお作法のようなものが
2017年2月28日付けで株式会社ドワンゴを退職しました。 新卒入社から二年弱、Scalaを書いたり、ScalaTextの作成に参加したり、Kafkaを運用したりしていました。 短い期間でしたがscalazコントリビューター1位&2位の人*1を含め、色々な側面ですごい人達と同じチームで仕事が出来たのはとてもいい経験になりました。 チラシの裏になりますが、せっかくの節目なのでドワンゴの思い出を書いていきます。個人ブログだしね₍₍ (ง´・_・`)ว ⁾⁾ Slackと分報チャンネル ドワンゴはSlackが異様に発展していてチャンネルが2700以上あり、自分自身もjoin数が社内2位(700チャンネル)になるほどハマっていました。 最近では分報も急速に発展しています。#times_matsu_charaはジョイン者数55人で、こちらも社内2位でした。 割りと長いこと1位だったのですが人事部長に
(編注:2016/7/27、頂いたフィードバックを元に記事を修正いたしました。) 学生たちから、次に学ぶ言語はどれがいいのかとよく聞かれます。IT業界で働きたい人にお薦めするのは、現在盛んに使われている言語です。C++、Java、C#はもちろん、Python、Ruby、PHP、Perlなども挙げられるでしょう。 一方、向学のためという人や、学術研究や起業に関心がある人にとって、次の言語を選ぶ基準となるのは、就職に有利かではなく言語の表現力でしょう。学術研究や起業活動を行うには、プログラマとしての能力を何倍にも高める必要があります。そして、(おそらく)確立されたコードベースを扱った経験はないでしょうから、手元にあるタスクにとって最適な言語を自由に選ぶことができます。 この記事では、勉強に適したHaskell、Scala、ML、Schemeという4つの言語を、私の好きな特徴や参考資料のリストと
はじめに play-jsonはPlay Frameworkに含まれているJSONを取り扱うためのライブラリです。Play Frameworkを利用していないプロジェクトでもplay-jsonをライブラリ依存性に追加すれば利用することができます。 このライブラリは、非常に強力なJSONコンビネータを備えています。Play Frameworkを使っている方にとってはおなじみのReadsWritesFormatですね。 今回は、これらのコンビネータにまつわる頻出パターンを5つほどご紹介します。 目次 前提知識 1. inmapパターン 2. tupledパターン 3. デフォルト値パターン 4. 列挙型パターン 5. 直和型パターン 小休止: ReadsとWritesはどこに置く? 前提知識 本家のドキュメントがとても詳細なため、それを一通り読めば基本的な使い方がわかります。ですが一応、以下にお
Scala Nativeはscalaのコードを(LLVMのIRを経由して)ネイティブコードにコンパイルするAOTコンパイラ(Ahead Of Time Compiler)です。その存在については、少し前にサイトができていたことで一部で話題になっていましたが、Scala Days 2016 NYCにて正式に公開されました。現在はPre-Release段階ですが、既にサンプルコードを試せるようになっていたので、環境を構築してみました(on Mac OS)。 scala-nativeのリポジトリをcloneする $ git clone git@github.com:scala-native/scala-native.git --recursive git submoduleとしてscala/scalaを持っているので、--recursiveを付けるのを忘れないようにしましょう。 llvm(cla
この文章は、サーバサイドのウェブアプリケーション開発において、社内実績の少ない新しい言語を採用したときにインフラ面で考慮したことを社内向けにまとめたものです。 はてなでは、長らくPerlでウェブアプリケーション開発を続けてきた一方、ここ数年で社内でScalaまたはGoの採用事例も増えてきました。 今後開発が始まるプロダクトにおいても、Perl、Scala、Goもしくは他の言語を採用するかどうかを開発開始時に選ぶことになるでしょう。 新言語を採用するときに、考慮すべきことの一つとして、「インフラ」への影響があります。 新言語に関する雑談をしていると、ウェブアプリケーションエンジニアに「インフラ」への影響について聞かれます。 もしくは、ウェブオペレーションエンジニアから考慮するポイントを伝えることもあります。 ScalaやGo以外に、Node.jsやサーバサイドSwiftはどうかというのも雑談
はじめに 人によって様々な書き方ができてしまうのがScala。 本記事では、階乗を求めるfac関数を例に、いくつかの興味深いプログラミングスタイルを紹介します。 以下のコードは、REPLで:pasteすることで、簡単に動作を確認できます。 手続きプログラミング 破壊的操作をためらわない男らしいプログラミングスタイル。 def fac(n: Int) = { var result = 1 for (i <- 1 to n) { result *= i } result } 再帰で書くより速い(はず)です。 普通の再帰 初学者泣かせの再帰スタイル。 def fac(n: Int): Int = if (n == 0) 1 else n * fac(n - 1) // 再帰呼び出しの外側に * による演算がある このように書くとスタックをどんどん消費するので、後述する末尾再帰を使ったほうがいいで
The Study: Analyzing Subreddits for Positive or Negative sentiment Last week, I came across this excellent, semi-hilarious informal study by Tobias Hermann, aka Dobiasd, which digs into 20+ programming languages and reviews the conversations, comments and sentiments from their respective subreddit feeds (WARNING: this may be NSFW due to profanity recorded by users). Regardless, I loved what I saw,
調査:Subredditsに投稿される肯定的・否定的意見の分析 先週、私は 素晴らしくて、少し笑える非公式の調査 を偶然見つけました。これはTobias Hermann(ハンドルネームは Dobiasd )が行った調査で、subredditのフィードから20以上のプログラミング言語に関するスレッドを探し出し、ユーザ同士のやりとり、コメント、意見を再度見直したものです(警告:ユーザによる不適切な投稿もあるので、職場での閲覧には注意が必要です)。それでも、私はTobiasの調査内容をとても気に入り、Typesafeのブログに記事の投稿を打診するため、そして、なぜ彼がこのような興味深い実験を行ったのかの理由を聞くために、彼にコンタクトを取りました。彼はとても謙虚でありながら、その返事からは好奇心がみなぎっていることが感じられました。以下がTobiasからの返事です。 “正直、どうして私がこのよう
はじめに 関数型といえばモナド、モナドといえば難しいという事が巷で言われていますが、いきなりモナドを理解しようとするから難しく思えるだけで、圏論から順序を追って理解していけば全然難しく無いんだよって事を分かって貰えればいいなぁと思い書いて見ることにしました。 ただ、圏論といっても適用範囲がとっても広く、応用編になると分けわかんなくなってくるので、ここではプログラミング分野に特化したFP(functional programing)圏論*1について書きます。 また、説明を簡単にする為に細かい部分をいろいろ省略しています。学術的な定義としては正確ではないので、このエントリの説明は大体合ってる位の気持ちで読んでくださいね。 尚、ぼくは圏論の詳しい事はさっぱり分からないので、学問的な話を振られても回答できませんキリッ 圏ってなんなの? 圏論と言えば、圏です。 圏って何なのかというと、対象(obje
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く