2023年5月11日から13日まで、長野県松本市でRubyKaigi2023が開催されました。今回のRubyKaigiは「松本に始まり松本に終わる」かたちで、Rubyの作者であるまつもとゆきひろさんの基調講演からスタートしました。タイトルは「30 Years ofRuby」です。 今年はRubyの開発を始めてから30年の節目ということで、今回の講演では、これまでの開発で得た様々な教訓を、いくつかの時代ごとに区分して紹介くださいました。 1993年2月24日:Rubyの誕生Rubyの名前が決まったのがこの日です。この時点ではRubyのコードは1行もなかったそうですが、公開された日ではなく、名前が決まった日が誕生日とされています。ソフトウェアは物理的実体を持たない概念であり、名前によってその存在が決まるのだから、名前が決まった日を持ってRubyという概念が誕生したとみなしているそうです

こんにちは、メディアサービス開発部Webアプリケーション開発課のシゲタです。普段はRuby onRailsによるバックエンドの開発に携わっています。 先日とあるRubyメソッドの仕様が気になりコードリーディングに挑戦したのですが、当該メソッドがどこに何という名前で定義されているのかわからず、定義にたどり着くのに時間を要してしまいました。 同じようなポイントでつまづいた方、これからコードリーディングを始めようと思っている方のために、本記事ではRubyメソッドの実装を参照する方法をいくつかご紹介したいと思います。 pry-docで参照する リファレンスから参照するRubyリポジトリをgit cloneしてローカルから参照するgithubで検索して参照する まとめ 最後に pry-docで参照する pryにpry-docをインストールして$コマンドを使うことで、C言語で実装されたRubyメ

今回のエントリでは先日、僕が勤めているソニックガーデンで話題になったプログラミング関連の小ネタを書きます。 それは何かというと、「プログラミング初心者は変数名やメソッド名を略さない方がいい」という話です。 長い変数名やメソッド名はつい略したくなります。 実際、僕も長い名前を略すときはよくあります。 ですが、略称を使うのは長年の経験から「この略称は一般的だから誤解を招くことはきっと少ないだろう」とか「前後の文脈から、変数の中身は誰が見ても明らかだろう」という想像が付いた場合だけです。 一方、プログラミング初心者の人は経験が浅いため、「一般的かどうか」とか、「誤解が発生しないかどうか」といった判断ができません。 そのため、他の人が見たときに「え、何この変数名?」と思ってしまうような略称を付けてしまう恐れがあります。 たとえば、先日のコードレビューで、初心者の人がrev_noという名前の変数を定

Matzことまつもとゆきひろといえばプログラミング言語Rubyの作者なのだが、技術的にはともかく政治的にはツイッターを見ていてとてもつらい。 「高度プロフェッショナル制度」について 高度なスキルを持つと自負し、高い裁量が欲しい私のような労働者を野党が目の敵にしてることはよく分かった。実に残念だ。— Yukihiro Matsumoto (@yukihiro_matz) March 1, 2018 「定額働かせ放題」とも呼ばれ、専門性も裁量性も低い業種への拡大が懸念される「高度プロフェッショナル制度」について、問題点を理解せず反対する野党を揶揄。 「IT 業界を苦しめたいか、生産性を高めるのを阻害したい勢力」について 軽減税率といい、改元といい、サマータイムといい、IT 業界を苦しめたいか、生産性を高めるのを阻害したい勢力が政治をコントロールしている陰謀論を信じたくなるな。— Yukihir

以下の記事を読んだ私は違和感を覚えた。 私がソフトウェア技術者をやめた理由 今時のソフトウェア技術者というものは未だにこんな判定処理を書いているというのか。やはり遅れているとしか言いようが無い。 闇プログラマー界隈ではその一歩後ろ右斜め奥をいっている。 うるう年の判定とはこうやるのだ。 def leap_year?(y) /^(?:[13579](?:[13579](?:[13579][26]|[26][048]?|[48][048]|0[48])|[48](?:[13579][26]|[48][048]?|[26][048]|0[48]?)|0(?:[13579][26]|[48][048]?|[26][048]|0[48])|[26](?:[048][048]?|[13579][26]|[26][048])?)|[26](?:[13579](?:[13579][26]|[26][048
![[ruby]闇プログラマーによる、うるう年の判定処理](/image.pl?url=https%3a%2f%2fcdn-ak-scissors.b.st-hatena.com%2fimage%2fsquare%2fb1638cdb5807a4788e4ba3c1109a984166e095fc%2fheight%3d288%3bversion%3d1%3bwidth%3d512%2fhttps%253A%252F%252Fanond.hatelabo.jp%252Fimages%252Fog-image-1500.gif&f=jpg&w=240)
require 'net/telnet' # リモートホスト "foobar" に接続 # タイムアウトは 10 秒localhost =Net::Telnet.new("Host" => "localhost", "Timeout" => 10) # ログインし、プロンプトが出るまで待ち合わせる telnet.login("your name", "your password") {|c| print c} # ls コマンドを実行し、実行後、プロンプトが出るまで待ち合わせる telnet.cmd("ls") {|c| print c} # sleep で 5 秒 telnet.cmd("sleep 5 && echo foobar &") {|c| print c} STDOUT.flush # <- これがないとここまで処理が来てることがわかりにくい # 前のコマンドの出力を待ち

この記事はRubyそしてRailsをこれから勉強したい方に、どんな技術を勉強すればいいかと、それらの技術全体のガイドマップを図示します。そしてそれを学ぶための資料(書籍、Web記事ほか)を紹介していきます。この記事は、頭の中に技術全体の地図を描き、イメージしてもらうのが狙いです。Railsアプリを作るときに必要になたくさんの技術について説明していきますが、本当にたくさんの技術が出てきます。まだ学んでいない、分からない言葉が出てくると思いますが、全体を把握するために、ひとまずは「そういう技術があるのだな」くらいで捉えてもらえればと思います。将来、その言葉が出てきたときに「どこかで聞いたような?」と思えたら儲けものです。 勉強方法のお勧めは、1つの知識を徹底的にやるよりも、まずは全体を通して勉強し、そのあとで勉強したいところに戻って積み重ねて学んでいく方が、挫折しづらいのでお勧めです。 追
[2017-06-22 追記]chromeバージョン59の正式リリースに伴い、記事の内容を全面刷新しました。 [2017-07-27 追記] selenium使用時にsend_keysが使用できない問題を記載しておりましたが、Chromedriver2.31のリリースに伴い問題が解消しました! はじめに注意chromeはバージョン59より正式にヘッドレスモードを搭載しました。 それを試そうと「chrome headless」などで検索すると、古いバージョンのchromeをXvfbなどの仮想ディスプレイを通してLinux上で動かす記事が沢山でてきますが、これらはheadlesschromeに関しての記事ではなく、普通のGUIchromeをどうにかしてcui上で動かそうという取り組みの記事です。chromeのヘッドレスモードでは、PhantomJSと同じようにXvfbはありません。g

Webアプリにリアルタイムの双方向通信が必要な場合、WebSocketを選ぶのは自然なことだと思います。では、どのツールでWebSocketサーバを構築すべきでしょうか。パフォーマンスは重要ですが、開発のプロセスも見過ごしてはなりません。パフォーマンスを基準にするだけでなく、開発のしやすさも考慮に入れるべきでしょう。今回の大合戦では、Clojure、C++、Elixir、Go、NodeJS、Rubyのそれぞれの言語によって慣用的な手法で実装されたシンプルなWebSocketサーバを比較したいと思います。 テスト内容 サーバに実装するのは、 echo と broadcast の2つのメッセージのみを扱う非常に単純なプロトコルです。echoは送信クライアントに返され、ブロードキャストは全ての接続クライアントに送信されます。そしてブロードキャストが完了すると、結果メッセージが送信者に返されます。

NGINX Unitが正式リリース。PHP、Go、Pythonなどに対応した軽量アプリケーションサーバ オープンソースで開発されている軽量なアプリケーションサーバ「NGINX Unit」の正式版がリリースされました(「AnnouncingNGINX Unit 1.0 |NGINX」)。NGINX Unitは、軽量なWebサーバとして知られるNGINXの開発者であるIgor Sysoevが設計し、NGNIXのソフトウェア開発チームが実装を担当したもの。昨年の9月にパブリックプレビュー版が登場しており、今回それがバージョン1.0に到達しました。 参考: 日本Nginxユーザ会が発足。開発者Igor Sysoev氏が語る、Nginxが生まれ、商用化された理由 - PublickeyNGINX Unitの主な特長は、動的制御が可能なためコンフィグレーションやアプリケーションの入れ替え、バー

この記事はRuby 2.5.0 preview1 時点のものです。Ruby 2.5 リリース版については http://tmtms.hatenablog.com/entry/2017/12/30/ruby25 を見てください。Rubyは毎年クリスマスにバージョンアップされます。 今年も問題なければ12/25にRuby 2.5が出ると思います。 https://docs.ruby-lang.org/en/trunk/NEWS.html を元に変更内容を調べてみました。 言語仕様 トップレベル定数参照 rescue/else/ensure 節 文字列内式のRefinement Unicode バージョン 10.0.0 組み込みライブラリ Array#append, #prepend 追加 Dir.children, Dir.each_child 追加 Dir.glob :base オプショ
This is an excerpt from the second chapter of an eBook I’m writing this Summer called “Ruby Under a Microscope.” Mygoal is to teach you howRuby works internally without assuming you know anything about the Cprogramming language. If you’re interested inRuby internals you can sign up here and I’ll send you anemail when the eBook is finished. I also posted one entire chapter in May, and an excer
皆さん、こんにちは。MUGENUP の osada です。 いきなりですが、問題です。 def if_expression(flag) if flag "NG" else "OK" end endRuby は 最後に評価された値が返る と言われていますね。 では、上記のメソッドで if_expression false の返り値は、何ですか? はい、正解です。OKが返ってきますね。 ちょっと長いので、リファクタリングしましょう。 def if_modifier(flag) "OK" "NG" if flag end さてもう一度。 if_modifier(false) の返り値は、何ですか?Ruby は 最後に評価された値が返る と言われていましたよね? はい。正解です。nil が返ってきますね。 え、"OK"じゃないのかって? いいえ、後置if は if とは全く違います。 右辺の条
はじめに 2017年11月1日、2日で開催されたRubyWorld Conference 2017にて「組込みハードウェアモジュールへのmrubyアプリケーション適用試行」というタイトルで喋ってきました。 内容は、ESP-WROOM-32を使ってmrubyアプリを動かすというもの。「業務ですか?」と聞かれたのですが、日本OSS推進フォーラムアプリケーション部会で話題に上がったものを個人的に進めていたもので、基本は個人的趣味です。業務ではこういうことをしないので、ノウハウが全然なかったり時間が取れなかったりと悪戦苦闘しましたが、無事発表にまでたどり着けることができました。 資料は後日、RubyWorld Conferenceのサイトから公開されると思います。 動機 昨年RaspberryPiを使ってmrubyアプリを動かしたことを発表したのですが、PaspberryPiはCRubyが動くので

平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識
curbで取得した情報内に改行や空白が大量に含まれている文字列があるため、改行と空白を削除しました。 ●改行のみ削除 今まで、下記コードで文字列内にある改行を削除していました。 str = str.gsub(/(\r\n|\r|\n|\f)/,"") ●空白、改行を削除 下記コードで、文字列内に含まれる改行、空白を削除しました。 str = str.gsub(/(\s)/,"") ¥sを指定すると空白だけでなく改行も削除するようです。 ●タブ、複数のスペースを一つのスペースに置換 すべてのタブ、スペースを削除すると文字が読みづらくなってしまう部分があるため、複数の連続するタブ、スペースを一つの半角スペースに置換するようにします。 str = str.gsub(/([\t| | ]+)/," ")
require 'familyable' require 'gottani_core' require "gviz"text =<<-EOSRuby スクリプト言語 影響 FromPerl Lisp Smalltalk To CoffeeScript Elixir Author まつもとゆきひろ Matz 松江Heroku WebRuby onRails Author DHH ProductsRedmineGitLab Sinatra DevOps Vagrant Author M.Hashimoto Provider Virtual Box VMWare Workstation FusionAWS Chef Puppet 特徴 楽しい すべてがオブジェクト 可読性の高さ 動的言語 強力なメタプログラミング DSL作成の容易さ EOS sp2 =Gottani::Spa

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く