こんにちは。Qiita Zine 編集部です。 2019年も残りわずかとなりました。 年末年始休暇には、読書をされる方も多いのではないでしょうか。 この記事では、先日Qiitaメルマガで行った『Qiitaユーザーが選ぶ、2019年に読んで良かった技術書』アンケートの結果を、選出理由を交えて紹介します。 ぜひ、ご自身へのクリスマスプレゼントや、年末年始の読書のお供の参考にしてください💁♀️
![『Qiitaユーザーが選ぶ、2019年に読んで良かった技術書』アンケート結果発表 - Qiita Zine](https://cdn-ak-scissors.b.st-hatena.com/image/square/ec2aea965e57f2968129d0838c46c853804cfc3e/height=288;version=1;width=512/https%3A%2F%2Fzine.qiita.com%2Fwp-content%2Fuploads%2F2021%2F11%2FQiita-Zine-OGP-1-1.png)
はじめに データサイエンティストでなかったとしても、数値データを使って様々な解析をする際には CSV ファイル等ファイルを読み込み、数値の配列としてメモリに保持して、それらをループ等で利用して解析を行っておられると思います。 その際、配列は1次元目に行、2次元目に列、を格納するのが一般的です。多くのケースではこの方法で事足りるのですが、解析を行ううちに「列としてデータの固まりを扱いたい」「ラベル付けされた列を扱いたい」と感じる事が出てくると思います。 これを簡単にしてくれるのが「データフレーム」です。 データフレーム4種 本記事では Go 言語から扱えるデータフレームを4つご紹介します。 QFrame https://github.com/tobgu/qframe QFrame は、フィルタリング、集計、およびデータ操作をサポートするイミュータブルなデータフレームです。 QFrame での
はじめに Goの良いところは、最低限の文法を知っていればコードを上から順番に読むことで詳細を容易に理解できることです。 文法の中にシンタックスシュガーや特別な省略が許されていないため多様な表現になることはありません。 そのためGoを書ければGoの本体と標準ライブラリを読むことができます。 しかし以下の原因により、これらの利点を守ることが難しくなることがあります。 DSL フレームワーク 抽象化 これらは設計として新たな制約を課すことで品質向上や実装を容易にするためのものです。 またこれらを採用する論理立てた 正しい 理由が存在します。 DSL DSLを提供するツールとして、DIのための wire があります。 GoでDIを実現するためには多くの実装を必要とするため、実装量を減らすためにもDIツールが求められてきました。 これは 正しい です。 しかし一方でDSLはコードを読む人間に言語以上
C#大統一理論とは CySharpのneueccさんが提唱している理論で、ザックリ言えば サーバーサイドもクライアントサイドもC#で完結できるとよくね? という理論です。 そして現状サーバーサイドとクライアントサイドの両方で使える言語はC#を除くとJavaScriptくらいだと思います(なんかあったら教えてください) C#でクライアントサイドを作るにはXamarinやゲームエンジンのUnityが筆頭になります。 C#のよさ いろいろありますが、個人的に上げるなら 比較的言語が若く(C++と比較して)、LINQなどモダンな文法仕様が遂次追加されている(というかLINQは単独で良い)。 単純に.NET Coreがクラスプラットフォームで安定して動作する。マイクロソフトが本気を出してるからサーバーサイド、クライアントサイドから機械学習まで使える範囲がめちゃくちゃ広い。 decimalみたいな型ま
はじめに ちょっと前に20年物のC言語で作られたシステムのテストを色々改善しようとしてみたので、この時に得たちょっとした知見を書いていこうと思います。 ※注意 記事を書くために自分のパソコンで当時を思い出しながら環境を作っているので、実際、実務でやった環境やバージョンとは違います。 また、この記事にはいくつかコードがでてきますが、すべて記事を書くために考えた疑似的な例にすぎません。 単体テスト用のテストコードの作成 20年も動いているシステムだと、もはや誰にも意味はわからんが、既存の挙動を変えてはいけない箇所がいくつもあります。 そういう箇所に手を入れざるを得ないときに、有効な方法として以下のような方法があります。 まず、既存のコードに対するテストコードを記載します。そして全て合格することを確認してから、少しづつ機能を拡張していきます。 これにより、新規機能追加が既存の機能を壊していないこ
Spring以前 RPC 業務で使うシステムはサーバー間で連携することが多い。2019年現在ではREST apiに対してjsonやprotocolbufferで呼び出す事が当たり前のように行われているが、まだjsonも発見されていない時代はもっと複雑な仕組みが取られていた1。異機種間でやりとりするためのCORBAや、機種に依存しないデータプロトコルのASN.1なども利用されていたが、仕様は複雑でそれぞれをハンドリングするライブラリは有償で売られ、ベンダーからサポートを受けながら使用するようなものだった。 RMI Javaの世界ではJava同士でやりとりするためのRMIが定義され、比較的に楽にRPCできるようになった2。とはいえhttpでrestをコールすることに比べたらアホみたいな複雑さである。 https://docs.oracle.com/javase/jp/1.3/guide/rmi
はじめに 先日、エンジニアの能力と今どきの難しさというタイトルの記事(2018年)を読んで、「これはほんとにその通り」と思う一方で、具体例がないためにピンと来ない人や、マウント取りではという意見も多数見られた。というわけで、自分が比較的得意な、プログラミング言語の構文解析といった分野に関して、この記事の言わんとしていることを補足するような記事を書こうと思い至った。 記事中では、エンジニアに必要な知識や経験を、「ベース」「カテゴリ」「実行環境」という形(以下)に分けて論じている。 ①ベース コンピュータサイエンス(CS)などの理論的なもの 低レイヤー ②カテゴリ フロントエンド / バックエンド / クライアントアプリなど ③実行環境 特定のプログラミング言語や開発環境やツール、フレームワークやライブラリなど この中で、特に印象的であり、かつ「よくわかる」と思ったのは以下の記述だ。 ③は比較
はじめに ここ数年で、Kotlinは急速な勢いで台頭してきており、Androidでは(おそらく)既に支配的な言語になっているかと思います。サーバーサイドKotlinはまだまだこれからというところがあるように感じますが、今後の発展次第でシェアを伸ばす可能性が高いでしょう。この記事では、そんなKotlinとScalaの関係について説明したいと思います。 結論からいうと、KotlinはScalaの直系の子孫であり、ScalaはKotlinの親であるといって差し支えないくらいKotlinがScalaから受けた影響は深いです。このことについて、私はパクリだとかそういうつもりは一切ありません(元々、プログラミング言語の発展というのは、色々な言語からアイデアを集めてきてこそですし)。しかし、最近、Kotlinについて、GroovyとScalaのいいとこどりであるとか(そのくらいにしか影響がないという意味
PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる というキャッチーな紹介をするP++: 静的型付けをめざすPHPという記事がそれなりに話題になり、このニュースは目覚しく革新的な内容で、多くのひとの目を引き付けました。 これは早まった理解であり、ほとんど誤報と言ってもいい内容でした。2019年8月15日には提案者本人も、少くとも「P++」の計画を短期的に実現するととは非現実的であり時期尚早であることを認めています。 この記事では、PHP開発の現状、なぜ野心的なP++計画が提案され、事実上撤回されたかの経緯について紹介します。 [中立性のための表示] この記事の著者@tadsanはPHPの静的解析を強く推進する立場です。 PHPゆるふわCI入門 PHP型検査・夢と理想と現実) 三行で要約 PHPはバージョンを経るごとに「歴史的経緯」による負債が削ぎ落されてきた
このエントリーは、 「ドメイン駆動設計 #1 Advent Calendar 2018」の24日目の記事です。 23日目は、@smdmts さんの「ユビキタス言語と境界付けられたコンテキストを構築する目的とは」でした。 DDD本で触れられている、モデリングパラダイムについて考えを晒します。 まずはモデリングパラダイムについて考えましょう。 目的 「モデリングパラダイム」という言葉をどういう意味を持つのでしょうか。それは、以下の二つの単語で構成されます。 モデリング 広義の意味での模型(モデル)を組み立てる事を言う。 パラダイム ある時代のものの見方・考え方を支配する認識の枠組み。 「モデルを組み立てるための認識の枠組み」と考えてよいでしょう。 DDD本の用語解説では、以下の説明があります。モデリングの「枠組み」や「スタイル」と解釈して問題なさそうです。 ドメインにおける諸概念を切り取る特定
TypeScriptはJavaScriptに静的型を追加した言語で、コンパイルエラーを検出することでJavaScript開発をさらに快適・効率的にしてくれるものです。 型システムを備えている言語は、多かれ少なかれ何らかの形で型推論を備えています。大ざっぱに言えば、これは型を明示的に書かなくてもコンパイラがいい感じに型を推測して理解してくれる機能です。型推論は静的型付き言語における花型機能のひとつと言ってもよく、色々な言語がそれぞれの特色を持っています。 この記事ではTypeScriptにおける型推論について詳説します。この記事に書いてあることは、TypeScriptを普段から書いている方ならなんとなく理解している内容が多いと思います。しかし、これらの内容がちゃんと言語化されている記事がいまいち見当たらなかったので今回記事を書くことにしました。 ※ この記事の内容は執筆時点の最新版のType
新しめの言語では例外を投げることを推奨しない言語が出てきているように思えるが、そうした言語が例外をどう考え、例外の代わりにどのようなアプローチを奨励しているかを調べてみた。 本稿での「例外」とは、Javaのthrow構文のようにスコープを脱出してcatchされるまでエスカレートされる「投げる例外」のことを指し、エラーを表現したオブジェクト(エラーオブジェクト)については「例外オブジェクト」と呼び区別するものとする。(この2つを同一に扱うと、例外を使わないということは、エラーオブジェクトは使わないの?という話になるため) Go言語 - 例外はコードを複雑にする Go言語では、通常、エラーは戻り値として扱われる。(本当の本当に例外的なエラーのためにpanic, recoverがあるが、ほとんど使われることがないように見受けられる。) 例外がないGoでは、どう呼び出し元にエラーを伝えているかとい
言いたいこと 重要なファイルを書くときは、予期しないOSシャットダウンなどを考慮した書き方にする必要があるというお話。 お作法を知らないと、中途半端なファイルや空ファイルが生成され、システム起動時や連携システムで致命的なことになる。 例としてC言語/Java/Python/JavaScript(node.js)を挙げるが、ほぼすべての言語で対策する必要あり。 背景 本番運用されているソフトウェアが起動しなくなるという致命的な不具合が発生した。 ログやコンフィグファイルを収集・解析したところ、コンフィグファイルがぶっ壊れていた。 コンフィグファイルは起動時に読まれるが、必要に応じて書き込まれることもある。 コードを追っていくと、書き込み処理中に強制終了したりすると、中途半端に書かれる可能性があることに気づく。 使い終わると電源がぶち切りされる運用をされており、奇跡的にタイミングが重なったのか
こんにちは、クラウドワークスの新規事業のエンジニアとして仕事をしている高梨です! 最近、「実践ドメイン駆動設計」という本を読みました! 500ページ近くもある技術書で、なかなか量は多かったのですが、DDDがどんなものなのか一通り大枠を掴めた気がします。 ただ読み終わった後にこんな疑念や不安をいだきました。 「たしかにかなり面白そうだけど、実際にやるとどれだけ工数かかるんだろう...?」 「設計の話は全然出てこなかったけど、DDDで作るとなるといったい何から始めればいいんだ?」 「戦術についての知識はついたけど、実際に書こうとしたらできなそうだな...」 そこで、そういった疑念や不安を解決するために、実際にDDDでサンプルプロダクトを作ってみようと思ったわけです。 実際に作ってみるのが、結局一番理解が進みますしね。 今回は、そのプロダクトがリリースされるまでの過程や感想を、作成した設計書やソ
機械学習を実務で使う場合、「ではお客様、ラベルデータを・・・」と申し出て色よい返事が返ってくることはあまりありません。また、例えば自動運転車を作るときに、データが足りないからその辺流してくるか、お前ボンネットに立ってデータとってな、とするのは大変です。 NICO Touches the Walls 『まっすぐなうた』 より そこで必要になってくるのが転移学習です。 転移学習とは、端的に言えばある領域で学習させたモデルを、別の領域に適応させる技術です。具体的には、広くデータが手に入る領域で学習させたモデルを少ないデータしかない領域に適応させたり、シミュレーター環境で学習させたモデルを現実に適応させたりする技術です。これにより、少ないデータしかない領域でのモデル構築や、ボンネットに立つという危険を侵さずにモデルを構築することができるというわけです。 この転移学習の可能性は、NIPS 2016
こんにちは Newspicksでエンジニアインターンをしている、Nguyen Hoangです。普段は、奈良先端科学技術大学院大学(Naist)で自然言語処理の研究をしている大学院生です。 記事で書かれている手順に従えば、ITのことを知らない方でも、AIのプログラムを実行できますので、非エンジニアの方でもAIを体験できます。Kaggleというサービスに登録し、Enterを押すだけで、AIプログラムの実行できます。記事の中でより詳しい内容を書いて行きます。 また、この記事は私が普段の研究でよく使う学習テクニックについて書いていきます。「AIとは何か」を理解した方は入門を飛ばして、中級から読んで下さい。 何かご指摘を頂けると嬉しく思います。 入門 AIとは? AI技術を詳しく知らない人だと、人工知能といえば、アニメやSF映画に出てくるようなものを想像するでしょう。しかし、そのものはまだ遠いように
侍エンジニア塾の圧倒的SEO力 侍エンジニア塾とは 侍エンジニア塾って知ってますか?プログラマならみなさん何かしらぐぐったときに、ほぼトップに表示されるあのサイトです。つい先日、侍エンジニア塾がとても炎上していましたね。みなさんやっぱりあのサイトにとても怒りをもっているそうです。ほぼトップに表示されるわりには、中身がほとんどない、会員専用みたいなページも表示してきたり、エンジニアにはかなり嫌われています。 しかし、僕らはあのサイトから見習わなければならないことがあります。あの史上最悪の独裁者ヒトラーであっても、見習うべき部分があることと同じく。それは、「SEO」です。侍エンジニア塾のすごいところは、この圧倒的SEO力です。では、なぜ、侍エンジニア塾はそこまで検索の上位に出てくるのか思いました。 でも、プログラミング系ワードで検索した際に、もう一つSEOに強いサイトがあります。それは、ご存知
言語仕様が一番複雑なプログラミング言語は何だろうか?主観的な意見として、○○の機能があるとか、ないとか、そういう話になるだろう。しかし、客観的に判断するとしたら、どうするべきだろうか? 一つはBNFを用いた比較だろう。しかし、BNFは文法の複雑さの指標になっても、それらが意味するところの解釈の複雑さについては指標にならない。そこで、解釈を含めたその言語仕様を全てカバーしたもの、つまり、規格書を比較すればいいのではないかと考えた。 プログラミング言語によっては国際的な規格書が存在しないものもある。特にオープンソースで開発されている言語では、コミュニティーの合意によって作成された複数の文献によって仕様が形作られているというのもある。なかには、実装がそのまま仕様であり、明文化されていないものもあるだろう。また、仕様自体がHTMLである場合、それがどれぐらいの量であるかを把握するには難しい(各ペー
参加したイベントのメモです。 イベント概要 【CTO meetup】Rust,Go,Elixir,Kotlin次世代言語の魅力をCTOが語る 2018/04/12(木) 19:00 〜 23:00 https://flexy.connpass.com/event/82063/ 言語選定について サーバーが2種類あった。 使う言語を統一していこう→トップダウンでElixirに決まる。 1200台のサーバーを4人で運用。自動化しないと無理。 →GOで自動化(現場発信) Elixir使いたいとは思っていたが、ずっと使えずに居た。 Railsで何のチューニングもなしだとパフォーマンス問題。 →Elixirだと何のチューニングもなくても10倍は違う。 APIサーバー ユーザー情報保存 ユーザーのストレージ情報 書き換え用API マルチバトルサーバー ずっと接続しっぱなしのサーバー。 言語はC#, R
ちょろっとメモ。の割には長くなったけど、最後の方にいいことが書いてある。 ※技術英語や翻訳 Advent Calendar 2015に参加してみました。スレ違いだったらすみません。 追記: taka-oyamaさんの記事「多国対応ウェブアプリを開発する前に知っておきたかったこと」も参考になります。 追記: 「17ヶ国の多言語対応Tips」で当記事を紹介いただきました。素晴らしいスライドです。 追記: 「本当にあった怖い誤訳」によると、今でも機械翻訳をそのままウェブページで使っている自治体があるそうです。怖す。 追記: ぼくたちのかんがえたさいきょうのi18n国家 - Qiitaもどうぞ。 概要 Web アプリやモバイルアプリを問わず、アプリで当てたらそれ英語化だ多言語化だ国際化だ、となることは多い。しかしアプリの作りなどさまざまな原因によって、他所の国の言葉に翻訳してもらっても実は現地の人
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く