RubyにおけるPluginの設計技法について、実際に多くのユーザーに利用されている 3つの gem を参考にしてみます。 1. Minitest github.com Minitest とは? Minitest は UnitTest を行うためのライブラリです。 Plugin機構のルール ファイルは minitest/XXX_plugin.rb で作成する RubyのLOAD_PATHに配置する(rubygemsやその他) plugin_XXX_init メソッドを定義すると初期化処理として実行される plugin_XXX_options メソッドを定義するとオプションパースの処理として実行される Plugin機構のコード Minitest の Plugin 関連のコード minitest/lib/minitest.rb L77-202 - seattlerb/minitest - Gi
こんにちは、hachi8833です。 少し前に、babaさんから「Rubyの内部文字コードはUTF-8じゃないよ」とツッコミがありました。 (追記: 上は会話の途中から切り取りましたのでご了承ください) いきなりの展開にくらくらきましたが、babaさんはさらにたたみかけます。 こうしたことはとっくにご存じの方も多いと思いますが、「Rubyといえば2.0以来UTF-8完全対応なんじゃないの」と勝手に思い込んでた私は脳に掌底を食らったような思いです。ああ、でもこういうことがあるから面白い。 ⚓ プログラミング言語と内部文字コードの関係 まず最初に押さえておきたい点です。プログラミング言語で文字コードに関連する部分は、「文字列」「正規表現」「入出力」「コード中の文字リテラル(""の中など)」「コード中の文字リテラル以外の要素(変数名など)」「ファイル名」などが中心になります。そして文字列に関連し
Service Workerの全体像の解説と、それがもたらすWebの未来を考察します。今後の動向を左右しそうなService worker meeting notesについても解説します。
こんにちは、みんなのウェディングに出向中の小室 (id:hogelog) です。 今回はクックパッドとみんなのウェディングで利用しているデータベースドキュメント管理システム dmemo を紹介します。 https://github.com/hogelog/dmemo dmemo を作成し導入した経緯 私は2016年3月頃からみんなのウェディングで Redshift, bricolage, embulk, re:dash 等を利用したデータ分析基盤の構築を進めています。 (みんなのウェディングのデータ分析基盤の現状 - みんなのウェディングエンジニアリングブログ) 社内の誰でも扱えるデータベース、データの集約・計算・加工、ダッシュボードの作成、クエリの共有などは上記ブログ記事でも書いたように Redshift, bricolage, embulk, re:dash 等を組み合わせることで実現
「サーバレスとは何か」そして「サーバレスとPaaSの違い」とは。マーチン・ファウラー氏のブログに投稿された解説 サーバレスアーキテクチャは、クラウドに対応したアプリケーション開発においてホットな話題の1つと言えます。 その発端はAmazonクラウドがAWS Lambdaを発表したことですが、その後Googleが「Google Cloud Functions」を、IBMが「OpenWhisk」を、マイクロソフトが「Azure Functions」を相次いで発表し、主要なクラウドにおけるサーバレス環境が一気に整いつつあります。 しかしサーバレスはAWS Lambdaなどの実装が先行したことなどから、明確な定義があいまいなまま普及が始まろうとしている面があります。 こうした状況を整理し、何がサーバレスなのか、PaaSと何が違うのか、といった解説が、マーチン・ファウラー氏のブログMartinFol
こんにちは。一松です。 前回のSQLの基本に続き、今回は基本として身に付けておきたいアルゴリズムについて書きます。 はじめの一歩として、アルゴリズムを知る上で必要な計算量という考え方と代表的なアルゴリズムの特徴を紹介します。また、これを踏まえてプログラムを書く際の注意点を説明します。 アルゴリズムとは アルゴリズムとは問題や課題を解決するための処理手順をもれなく表現した考え方のことです。この処理手順の考え方はプログラムの世界だけでなく、みなさんの日常にも使われています。 例えば、「雨が降っていたら傘を持って出かける、雨が降っていなかったら傘を持たずに出かける」、これも短いですがアルゴリズムです。もう少し長いものだと料理のレシピもアルゴリズムの一種といえるでしょう。手順をひとつずつ行うことでおいしい料理が完成しますね。他にもトランプを絵柄ごと数字の小さい順に並び替えることもアルゴリズムを元に
答え:脆弱性が見つかったので使用禁止になったから Web通販サイトなどにアクセスするとWebブラウザーのアドレスバーに「錠マーク」が表示される。日経NETWORKの読者でも多くの人は、「SSL▼が使われているサイン▼だ」と理解しているはずだ。ところが実際は異なる。この場合のほとんどはSSLの後継のプロトコル「TLS▼」を使っている。なぜか? SSLが「使用禁止」になったためだ。安全な通信手段の代名詞は今後、TLSとなる。SSLとTLSの交代劇を説明する前に、まずはこれらの歴史を見ていこう。 SSLは単一の企業が開発 インターネットは安全性が保証されていないネットワークであるため、通信の盗聴やなりすまし、改ざんといった危険がある。TLSやその基になったSSLは、これらの危険から通信データを守るために用意されたプロトコルだ(図1-1)。盗聴に対しては、やり取りするデータを暗号化して防ぐ。通信相
「ゲイだ」とばらされ苦悩の末の死 学生遺族が一橋大と同級生を提訴 https://www.buzzfeed.com/kazukiwatanabe/gay-student-sued-hitotsubashi-university?utm_term=.ip7yvXYE8l#.fnvQewmzd9 この事件でいう、グループチャットにいた9人の側の立場に近かった経験を話す。今回はあくまでも、アウティングを聞かされた側としての意見だと思って欲しい。 忘れもしない。高校一年生の秋頃のこと。放課後の渡り廊下で、私と友人A子と友人B子の三人で他愛もない話をしてた。 けど、突然A子がB子の携帯を奪って、B子と知らない女の子がふたりで写った写メを見せつけながら言った。 「B子付き合ってる人いるよ!しかもこいつレズなんだよwで、これ彼女w」 いやーーーー、ほんとねーーーー、私あの瞬間を一生忘れられない。 ”w”
現在の自分の肩書である「セールスエンジニア」という仕事がどのようなものか知らない方も多く、毎回説明するのが大変なのでブログ記事にしました。セールスエンジニアという仕事はなかなか馴染みがありませんが、20代後半から30代のITエンジニアのキャリアパスとしては面白い仕事の一つだと思います。マネージャーになるかどうか考える前に、是非一度読んでください。 この記事では、ClouderaのようなB2BのITソフトウェアベンダーのセールスエンジニアを想定して執筆しています。他の業界のセールスエンジニアについては確実に状況が異なりますのでご注意ください。 要約 セールスエンジニアとは、お客様が自分たちの製品を正しく活用できるよう情報を提供していき、営業が製品・サービスを販売するのを助ける仕事です。お客様への製品紹介と提案が主要業務ですが、その方法は様々です。お客様の要望を満たすようなサンプルプログラムを
人間中心設計プロセスの「2つの誤解」 先ずは以下の図をご覧ください。これは、著者が評議員を務める人間中心設計推進機構が自社の公式サイトで掲載している人間中心設計(Human Centered Design:HCD)のプロセス図です。「人間中心設計 プロセス」と画像検索すると類似する画像が沢山ヒットしますが、多くは以下のような図ないしは円形の図で示されていることが多いです。 (出典:HCDのプロセスと手法) 国際規格として1999年に発効されて以来、この図は17年もの間、ユーザー中心・ユーザー視点で自社製品やサービスを構築、実現するための手段としてさまざまな研究論文やプレゼンテーションなどに流用されてきました。 が、17年も経過するとさまざまな変化が訪れます。もともとはユーザビリティ強化の一環としてハードウェア業界の発展に伴い普及してきた人間中心設計ですが、逆もありきでソフトウェア業界でも同
こんにちは。ウェブ開発担当の清水です。 Ruby 2.0 で実験的に導入されていた Refinements が、バージョン 2.1 より正式に導入となりました。 今回はこの機能を利用してクラスの拡張をしてみたいと思います。 オープンクラス Refinements とはクラスの拡張の範囲を限定する機能です。使用の前に、まず Ruby のオープンクラスについて説明します。 オープンクラスとは、既存クラスを再定義(再オープン)することで、メソッドの追加・上書きなどが容易にできる機能です。 この機能により組み込みクラスであっても自由に拡張できるため、使い道次第で強力な効果を発揮します。 以下の例では、 Array クラスへ bogo_sort! メソッドを追加することで、全ての Array インスタンスから呼び出せるようにしています。 class Array def bogo_sort! shuf
こんにちは、CA ProFit-Xという広告サービスを開発している塚本です。 今回も弊社で行っているAdTech Scala Meetupの様子をご紹介します。そろそろ何回目か分からなくなってきました。今回のテーマはFinagleでした。 Finagle (フィネーグル) はTwitter社が開発しているRPC用のフレームワークです。Webサービス/Webアプリケーション フレームワークと捉えても良いかもしれません。 我々アドテクスタジオではほとんど導入実績が無いため、語れる人は少ないのですが、幸いこの前のアドテクハックで利用された方がいらっしゃったため、発表していただけました!アドテクハックはアドテクスタジオで開催している社内向けハッカソンです。詳細は以下の記事を御覧ください。 アドテクハッカソン「第二回アドテクハック」を開催しました。 もろもろFINAGLE 一人目はhuyさんのもろも
こんにちは、CA ProFit-Xという広告サービスを開発している塚本です。 先日、第9回 AdTech Scala Meetupを開催しました。今回はApache Sparkの情報共有を行いましたので、その様子を少しご紹介します。 Spark Streaming Snippets 一人目はSmalgoチームの阿川さんでした。 Spark Streamingのコードスニペットを交えて、SmalgoがどのようにSpark Streamingのコードを書いているかについて発表されていました。 私事ですが、最近Spark Streamingの利用を検討していましたので、非常にタイミングの良い発表でした。参考になります。 Spark SQL Thrift JDBC Server 二人目は私、塚本で、Spark SQLのThrift JDBC Server機能について発表しました。 色々とSpark
Scala勉強会第170回 in 本郷 rpscala.doorkeeper.jp は、サブテーマ「Scalaの言語仕様」であったため、久々に熱弁をふるったところ、特に、メソッドや関数の仕様や区別に関して疑問に思った方が多かったらしく、質問も多かったので、Q&A形式でまとめておきます。 Q: (x1, xN) => body 形式と、{ case pat1 => body1; ... case patN => bodyN }形式の違いは何でしょうか? A: 前者は必ずFunctionN[S1,...,SN,R]型を持つのに対して、後者は期待型(expected type)によって型が異なります: 1: FunctionN[S1,...,SN,R]: この場合、 (x1:S1,...,xN:SN) => (x1,...,xN) match { case pat1 => body1 case
Thoughtworks Technology Radar is a twice-yearly snapshot of tools, techniques, platforms, languages and frameworks. This knowledge-sharing tool is based on our global teams’ experience and highlights things you may want to explore on your projects. Adopt Trial Assess Hold Adopt Trial Assess Hold Adopt Trial Assess Hold Adopt Trial Assess Hold Adopt Trial Assess Hold Adopt Trial Assess Hold Adopt T
これは Enchant の開発者である Vinay Sahni さんが書いた記事「Best Practices for Designing a Pragmatic RESTful API」1を、ご本人の許可を得て翻訳したものです。 RESTful な WebAPI を設計しようとすると、細かなところで長考したり議論したりすると思います。また、他の API に倣ってやってはみたものの、本当にそれでいいのか、どうしてそうしているのか分からない、何てことも少なくはないと思います。 この記事では、そのようなハマリどころについて Vinay さんなりの答えを提示し、簡潔かつ明快に解説してくれています。 今後 WebAPI を設計される方は、是非参考にしてみてください。 なお、誤訳がありましたら編集リクエストを頂けると幸いです。 まえがき アプリケーションの開発が進むにつれて、その WebAPI を公
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く