Tech Racho エンジニアの「?」を「!」に。
  • 開発

週刊Railsウォッチ(20190826)6-0-stableの更新を見てみる、『Morning Cup of Coding』ニュースレター、Rails TutorialがRails 6対応に動き出すほか

こんにちは、hachi8833です。数列の1, 2, 4, 8,...みたいな表記を見ると、1, 2, 4, 8, 1, 2, 4, 8, 1, 2, 4, 8,...みたいな可能性もありそうな気がして不安になります。


つっつきボイス:「ruby-jp Slackのどこかで、Rubyの..だったか...を魔改造するみたいな話をちらっと見かけたんですけど、そっちの数学的表記の方が気になっちゃって😅」「どう解釈するか問題ね☺️」「数学方面だと無限数列の...の略記ってコンベンションが頼りというか割と自明でなかったりした覚えが😆」

  • 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください

今回のウォッチは分割なしです。

週刊Railsウォッチ「公開つっつき会」第14回のお知らせ(無料)

第14回目公開つっつき会は、9月5日(木)19:30〜にBPS会議スペースにて開催されます。皆さまのお気軽なご参加をお待ちしております🙇。

Rails: 先週の改修(Rails公式ニュースより)

Rails 6がリリースされたので6-0-stableの更新をチェックしましたが、masterのdiffも一部含まれています🙇。


つっつきボイス:「6-0-stableがまだ動いているというより、当面は6-0-stableがメインで更新されるということなのかも?」「それもそうでした😅」「6-0-stableが動いているのは確か?」「ですね」「6.1を出すときになったら初めて6-1なんちゃらみたいなタグなりブランチを作るのかも」「後で調べておきます↓」

現時点では6-1などに相当するブランチやタグはありませんでした。

参考: Ruby on Rails のメンテナンスポリシー - Rails ガイド

  • バージョン命名はSemantic Versioningに従う
  • 新機能はmasterブランチにのみ追加される

なおマイルストーンには6.0.1などがあります↓。

参考: Milestones - rails/rails

(master)最適化: CurrentAttributes.instanceのオブジェクトアロケーションをメモ化

これは純粋なパフォーマンス最適化。
問題: stackprofオブジェクトのアロケーションプロファイルをたまたま見ていて、CurrentAttributes.instanceからのアロケーションでnameの呼び出しに気づいた。Class#nameは呼び出しのたびに新しいstringをアロケートするが、この手の不必要なオブジェクトアロケーションは自分としては避けたい。以下のスクリプトでオブジェクトアロケーションをカウントすると、このPR修正の前では1が返る。

# 同PRより
require 'stackprof'
require 'active_support/all'

class Current < ActiveSupport::CurrentAttributes
end

Current.instance # memoize
p StackProf.run(mode: :object) { Current.instance }[:samples]

解決: current_instances_keyをメモ化することでオブジェクトアロケーションをなくし、シンボルに変えることでハッシュ探索の効率が向上する。
同PRより大意


つっつきボイス:「これは確実にシングルトンですしね😋」「もしシングルトンじゃなかったらえらいこっちゃ😆」「やってることはごく普通のメモ化📋」

# activesupport/lib/active_support/current_attributes.rb#L93
      def instance
-       current_instances[name] ||= new
+       current_instances[current_instances_key] ||= new
      end
...
+       def current_instances_key
+         @current_instances_key ||= name.to_sym
+       end

(6-0-stable)ARオブジェクトのtakeのメモ化をクリアするようにした

あるリレーションからtakeされたARオブジェクトはメモ化されて、同じリレーションからwherefind_byが呼ばれた時にもメモ化されたものが返る。
このオブジェクトのメモ化されたステートはクリアする必要がある。
同PRより大意

これは6-0-stableに入りました。

# activerecord/lib/active_record/relation.rb#L638
    def reset
      @delegate_to_klass = false
      @_deprecated_scope_source = nil
      @to_sql = @arel = @loaded = @should_eager_load = nil
      @records = [].freeze
      @offsets = {}
+     @take = nil
      self
    end

期待する動作: Active Recordリレーションでfind_bywhereが呼ばれるたびにDBにクエリをかける。
実際の動作: リレーションでfind_bywhereが使われる前にtakeが呼び出されていると、Active Recordリレーションのクエリが返すActive Recordオブジェクトがtakeについてメモ化されてしまう。
同issueより大意


つっつきボイス:「たしかにこれはおかしくなる」「修正されたのはresetメソッドか」「takeって何件か取ってくるメソッドでしたね」「takeってあんまし使わないけど😆」「wherefind_byみたいにリレーションの形が変わるときはresetしないといけなくて、でも形が変わってたのにメモ化変数のうち@takeが同じリレーションに残って影響しちゃってたのでそれを修正したと」「メモ化するとこういうこと起きる可能性ありますね😅」

# activerecord/test/cases/relations_test.rb#L2053
  def test_where_with_take_memoization
    5.times do |idx|
      Post.create!(title: idx.to_s, body: idx.to_s)
    end

    posts = Post.all
    first_post = posts.take
    third_post = posts.where(title: "3").take

    assert_equal "3", third_post.title
    assert_not_equal first_post.object_id, third_post.object_id
  end

(6-0-stable)コネクションプールのreaperスレッドがforkでコケる問題を修正

# activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb#L649
      def reap
        stale_connections = synchronize do
+         return unless @connections
          @connections.select do |conn|
            conn.in_use? && !conn.owner.alive?
          end.each do |conn|
            conn.steal!
          end
        end
        stale_connections.each do |conn|
          if conn.active?
            conn.reset!
            checkin conn
          else
            remove conn
          end
        end
      end
...
      def flush(minimum_idle = @idle_timeout)
        return if minimum_idle.nil?

        idle_connections = synchronize do
+         return unless @connections
          @connections.select do |conn|
            !conn.in_use? && conn.seconds_idle >= minimum_idle
          end.each do |conn|
            conn.lease
            @available.delete conn
            @connections.delete conn
          end
        end
        idle_connections.each do |conn|
          conn.disconnect!
        end
      end

@jhawthornへ: 最新版だと以下のスクリプトがforkしたプロセス内でreaperスレッドがクラッシュすることからして、まだ何か足りないものがある気がする。このスレッドはクラッシュ後にコネクションを再確立しないと再度spawnされず、自分としては理想的とは言えない。
同issueより大意


つっつきボイス:「reaperは例の稲刈り機的にコネクションを刈り取るヤツでしたっけ」「forkするとダメになってたあたり、マルチスレッド系で起きそうなバグ🐛」「synchronizeとかやってるし、マルチスレッドのタイミング問題っぽい」

「なお#36998にこんなコメントが付いていたそうです↓」「ちょwこれ🤣」「明らかに狙ってますし🤣」「日本人しかわかんないし🤣」「なごんだ〜☺️」

(master)pumaを4.1にバージョンアップ

# railties/lib/rails/generators/app_base.rb#L191
      def web_server_gemfile_entry # :doc:
        return [] if options[:skip_puma]
        comment = "Use Puma as the app server"
-       GemfileEntry.new("puma", "~> 3.11", comment)
+       GemfileEntry.new("puma", "~> 4.1", comment)
      end

つっつきボイス:「pumaのバージョン上げる忘れてたのかなと(以下参照)😆」「puma本家がつい最近4にバージョンアップしてましたしね☺️」

↑つっつき時点では6-0-stableへのコミットだと思っていたので、実際はmasterブランチの更新です🙇。


puma.ioより

番外: Rails Conductorは特に動きなし


つっつきボイス:「TechRachoの過去記事を集計中に例のRails Conductorの見出しを見かけて、どうなってるかなと思ったら特に何も変わってませんでした😆」「前のウォッチ↓で話題になったときのままという感じですか😆」「Rails Conductorって、ブラウザ画面でRailsを開発できるようにするみたいな感じの構想だったかな」「しばらくは動きなさそう」

週刊Railsウォッチ(20190311-1/2前編)「Rails Conductor」14年ぶり復活なるか?、RubyGemsに複数の脆弱性、2009年のRailsエコシステムほか

# conductor/app/controllers/rails/conductor/source/notes_controller.rb
# frozen_string_literal: true

class Rails::Conductor::Source::NotesController < Rails::Conductor::CommandController
  def show
    @notes = extract_notes
  end

  private
    def extract_notes
      capture_stdout { Rails::SourceAnnotationExtractor.enumerate tags_param }
    end

    def tags_param
      params[:tag].presence || %w[ OPTIMIZE FIXME TODO ].join("|")
    end
end

「Rails Conductor、そこそこ実装はあるっぽいですけど↑」「これを熱心にメンテしたい人はいなさそう🤣」「強い人はあんまり使わない感じですかね」「productionに入る機能ではないことを考えると、メンテするモチベが😆」「Railsコンソール的なものに落ち着くのか、それ以上のものになるのかで変わってきそうな予感はしますね☺️」「サードパーティがRailsエンジンで作る方が回りやすかったりして」「公式として入れたい何らかのモチベがあるのかも?」

Rails

Railsのモデルクラス名と名前空間の衝突


つっつきボイス:「こういう問題があるって知りませんでした😅」「結局2.5のおかげで問題が起きなくなったと🎉」

# 元記事より
# app/controllers/blogs_controller.rb
class BlogsController < ApplicationController
  puts "BlogsController loaded"

  before_action :set_blog, only: [:show, :edit, :update, :destroy]

  def index
    @blogs = Blog.without_draft.all
  end

  def show
  end

  private
    def set_blog
      @blog = Blog.without_draft.find(params[:id])
    end
end
# 元記事より
# app/controllers/staff/blogs_controller.rb
class Staff::BlogsController < ApplicationController
  puts "Staff::BlogsController loaded"

  before_action :set_blog, only: [:show]

  def index
    @blogs = Blog.all
  end

  def show
  end

  private
    def set_blog
      @blog = Blog.find(params[:id])
    end
end

「元記事のコード↑にclass BlogsController < ApplicationControllerclass Staff::BlogsController < ApplicationControllerというのがあると、Staff::BlogsControllerを期待しているときにBlogsControllerを取ってしまうという話ですね☺️」「Ruby 2.4までは、Staff::BlogsControllerと書いて、かつStaff配下にBlogsController定数がないと、トップレベルのObject配下にそれが存在する場合にそっちを取ってきてたらしいんですよね: 全然知らなかったけど😳」「割と罠的な動き😇」「こういう直感的でない動きするんだなって😅」「2.4まではその条件でトップレベルの定数が取れた場合にwarningが出ていたのが、2.5では失敗するようになったと」「大規模なコードを書くには必要な機能だから、このあたりはちゃんとしてて欲しいっすね🧐」

「今までrequire_dependencyでやってたときの問題については、6.0のZeitwerkでやれるようになったから今後は大丈夫と😋」「そういえばZeitwerkではrequire_dependencyをまったく使わなくなるってガイドにありますね↓」

参考: 2.6.3 require_dependencyについて -- Rails アップグレードガイド - Rails ガイド

「この辺の問題は、踏んだときにとっても謎な死に方をするのが厄介でしたよね😭」「発生するかどうかがタイミング次第だったり😇」

「ちなみにこの問題は、以前のつっつきに出てきた名前空間地獄の問題↓とは別なんでしょうか?」「少なくともwarningレベルでは別の話ですね🧐: ただ元記事の後半ではconst_missingがらみで名前空間地獄に近いところも話されてますけど」

週刊Railsウォッチ(20181022)Railsの名前空間地獄とrequire_dependency、PostgreSQL 11がリリース、clean-rails.orgほか

「Rails Tutorial」がRails 6対応に向けて動き出す

The Ruby on Rails web framework continues to be an outstanding choice for developing dynamic web applications—relied on by companies as varied as Disney, GitHub, and Airbnb.
And it keeps getting better: Ruby on Rails creator David Heinemeier Hansson has just announced the release of Rails 6.0!
With this new major release, I’m happy to say that the Ruby on Rails Tutorial book, videos, and online course will soon be updated accordingly.
Experience shows that it’s a good idea to let things shake out for a couple of weeks after any big release like this, so I'm going to spend that time going back through the whole tutorial using Rails 6 and fixing anything that needs to be updated.
Rails TutorialのNewsletter(2019/08/17)より


railstutorial.orgより


つっつきボイス:「Rails Tutorial作者のMichael Heartlさんが、Rails 6に合わせて必要な部分に更新をかけるそうで、でもしばらく自分がいじってからになると思うとのことです: Railsチュートリアルの方もその後で対応したいです☺️」

「RailsチュートリアルはRails 6で影響される部分ってそんなになさそうですけどね: 業務に寄ったマルチDBとかTwitter的アプリでは要らなさそうだし😆」「たしかに〜」「Action TextぐらいはRailsチュートリアルにあってもよさそうですけどね😋」「それもたしかに〜」「ちょっとリッチなテキストボックス!」「そこにドラッグアンドドロップするだけでファイルをアップロードできる!とか☺️」

「Railsチュートリアルのボリューム、ますます単調増加したりして😆」「さすがにMichaleさんもサポートを軽減するために、HTMLの基本とかGitの基本みたいな部分を別教材にして販売しています(Learn Enoughシリーズ↓)」「そういう基本的な部分って面倒見きれないですよね😆」

参考: Learn Enough to Be Dangerous


learnenough.comより

Morning Cup of Coding: 高品質の技術情報ニュースレターサイト


つっつきボイス:「『Morning Cup of Coding』は@st0012さんイチオシの技術情報リンク集ニュースレターで、評判も上がってファンディングを取り付けたことで紙の雑誌も出すらしいと聞きました」「朝に読む一杯のコーヒー的な☕」「メールが飛んでくる的な」「実は@st0012さんにずっと前に教えてもらっててサブスクライブしてたんですが、すっかり忘れててGmailの肥やしになってました😅」

「これは毎日出るのかしら?」「週イチぐらいかなと思ってたら...ほぼほぼ毎日出てますね!😳」「見た感じRubyやRailsに限らないっぽい」「ですです、JavaScriptでもRustでも何でもありで」「ノリとしてははてブTech的な雰囲気かな?」「あるいは日刊Railsウォッチというか😆、このペースでウォッチ出してたら死ねるかも」「目についたものをTumblr的に流してる感も😆」「自分もまだちゃんと読み込んでませんが、キュレーションはされてると思います」

  • バックナンバー: Issues

apparition gemでpoltergeistを除霊しよう(Ruby Weeklyより)

ポルターガイストだけにapparition(霊現象)とかexorcise(除霊)というネーミングになるでしょうね。


つっつきボイス:「タイトルに惹かれて拾っちゃいました😆」「poltergeistとかもう終了してどんだけ経ってるかと🤣」「poltergeistは、Capybaraで使えるPhantomJSドライバですね👻」

「でこのapparitionって何をするgem?」「リポジトリにはCapybara向けChromeドライバとありますね」「これをpoltergeistと差し替えるとシームレスに動いてくれるとかそういう感じかな?」「『poltergeist APIとできるだけ互換性を取るようにしている』みたいなことも書いてますね😆」「poltergeistで書いたものを今更書き直すのがつらすぎるから、ミニマムに置き換えられるアダプタを作った的な🤣」

# 同記事より
    require 'capybara/apparition'
    Capybara.javascript_driver = :apparition

「このapparition gemでめでたく成仏できそうでしょうか?」「どうだろう?さすがにもうみんなpoltergeistは置き換えてるんじゃないかと😆」「わかんないすよ〜、bundle installすら通らないようなレベルの古代のプロジェクトが発掘されることもありますし😇」「gemがなくなってるレベルとか😆」「ファラオの呪い💀」

参考: Rails E2EテストでpoltergeistからHeadless Chromeへ乗り換える - Hack Your Design!
参考: ポルターガイスト現象 - Wikipedia


コンピュータプログラミングにおいて、ほかのオブジェクトに情報を渡すだけのオブジェクトを表す。アンチパターンの一つ。
ja.wikipedia.orgより

「上はWikipediaにぴろっと書いてあったのを貼ってみました↑」「Poltergeistっていうアンチパターンは知らなかったなぁ〜😳」「これだけ見たらData Access Objectも含まれそうな気がするけど」

英語版WikipediaにはOOPのアンチパターンとしてありました

参考: Poltergeist (computer programming) - Wikipedia
参考: 【ソフト開発 アンチパターン】Poltergeists - 緑茶思考ブログ

その他Rails


つっつきボイス:「esaはGoogleアカウントで認証できるのがいいなと思って」「今のesaはオンラインエディティングとかも含めて全然いいと思いますね❤️」「記事によると改修も素早いみたいですし」


esa.ioより

参考: esa.io の作り方 -- Rails 4.2.5頃から使い始めているそうです

↓3年前の記事でだいぶ状況変わってますが一応。

Markdownで書けるドキュメントコラボレーションサービスを比較する

Ruby

32,000行の腐ったCSVを32,000ステップ以下で修正する(Ruby Weeklyより)


つっつきボイス:「元CSVの行数が32,000あってもタイトルみたいに32,000ステップもかからないと思いますけど😆」「CSVのどこが壊れてるかなっと」「artist列がクォートされてるのとされてないのとあったり😇」「でフィールドがずれる😇」「よくあるダメCSV😆」



`
「こんなふうに↓想定カラム数となぜか食い違っちゃうとかあるある〜😆」「実データを見てきっとここがずれてるみたいに当りをつけて対応するとか😆」「ある程度開発経験があれば一度は出くわすヤツ」「いい経験にはなりますけど😅」

[1, 2, 3, 4, 5] -> [x, x, x, x] =>
[[1, 2], 3, 4, 5]
[1, [2, 3], 4, 5]
[1, 2, [3, 4], 5]
[1, 2, 3, [4, 5]]

「そういえばこれ↓はRuby Weeklyの別のエントリにあったgemですが、上の記事と作者が同じですね」「CSVをちょっといい感じに整形してくれるのかな?」「同じ人だ」「なるほど、『こうじゃね?』ってパースの候補を出してくれるっぽい↓😋」「パースを推測してくれるのか!」「gemを作ったついでに記事を書いたかその逆みたいなノリかも☺️」「数値に入ってるカンマで区切られるとか悲しい😭」

Which one of these is correct?

(1)  artist    : 10
     title     : 000 Maniacs and Michael Stipe
     albumtitle: To Sir with Love
     label     : "Campfire Songs,Rhino"

(2)  artist    : 10
     title     : 000 Maniacs and Michael Stipe
     albumtitle: "To Sir with Love,Campfire Songs"
     label     : Rhino

(3)  artist    : 10
     title     : "000 Maniacs and Michael Stipe,To Sir with Love"
     albumtitle: Campfire Songs
     label     : Rhino

(4)  artist    : "10,000 Maniacs and Michael Stipe"
     title     : To Sir with Love
     albumtitle: Campfire Songs
     label     : Rhino

「こんなデータを作った人を問い詰めたい😆」「できちゃったものはしょうがないですし☺️」

「そういえばCSVと格闘してた人が社内にもいましたね↓」「CSV以外にもメールから文章を取り出すとかありますし☺️」

Ruby: CSVでヘッダとボディを同時に定義するやり方

アルファベットのアクセント記号を除去する方法いろいろ(Ruby Weeklyより)


つっつきボイス:「なるほど、こういう置き換えね↓」「こういう便利メソッドってRubyになかったっけ?」「Martin先生がアクセント付きの大文字小文字変換をやってた覚えはあるんですけど😅」「まあ自分ら使わないけど😆」「ヨーロッパの人には切実なヤツですね」「文字が変わっちゃうと大変ですし☺️」

# 同記事より
UNACCENT = {
  'Ä'=>'A',  'ä'=>'a',
  'Á'=>'A',  'á'=>'a',
  'Æ'=>'AE', 'æ'=>'ae',
  'É'=>'E',  'é'=>'e',
  'Í'=>'I',  'í'=>'i',
             'ï'=>'i',
  'Ñ'=>'N',  'ñ'=>'n',
  'Ö'=>'O',  'ö'=>'o',
  'Ó'=>'O',  'ó'=>'o',
  'Œ'=>'OE', 'œ'=>'oe', 
             'ß'=>'ss',
  'Ü'=>'U',  'ü'=>'u',
  'Ú'=>'U',  'ú'=>'u',
}

つっつきボイス:「書いた人はどちらかというと変換のパフォーマンスをチェックしてるみたいですね↓」

# 同記事より
text=>AÄÁaäá EÉeé IÍiíï...<, n=20000:
                               user     system      total        real
each_char                  4.953000   0.000000   4.953000 (  4.958531)
each_char_v2               4.265000   0.000000   4.265000 (  4.265561)
each_char_v2_7bit          4.266000   0.000000   4.266000 (  4.268788)
each_char_v2_7bit_faster   3.375000   0.000000   3.375000 (  3.379573)
each_char_reduce           5.641000   0.000000   5.641000 (  5.638152)
each_char_reduce_v2        5.125000   0.000000   5.125000 (  5.113069)
gsub                       6.078000   0.000000   6.078000 (  6.079772)
gsub_v2                    5.500000   0.000000   5.500000 (  5.492944)
gsub_v3a                   4.203000   0.000000   4.203000 (  4.248036)
gsub_v3b                   5.094000   0.000000   5.094000 (  5.098041)
scan                      10.062000   0.000000  10.062000 ( 10.050102)

text=>Aa Ee Ii...<, n=20000:
                               user     system      total        real
each_char                  1.313000   0.000000   1.313000 (  1.304258)
each_char_v2               1.328000   0.000000   1.328000 (  1.327656)
each_char_v2_7bit          0.984000   0.000000   0.984000 (  0.981193)
each_char_v2_7bit_faster   0.984000   0.000000   0.984000 (  0.977593)
each_char_reduce           1.594000   0.000000   1.594000 (  1.583752)
each_char_reduce_v2        1.641000   0.000000   1.641000 (  1.650390)
gsub                       0.140000   0.000000   0.140000 (  0.127486)
gsub_v2                    0.125000   0.000000   0.125000 (  0.127581)
gsub_v3a                   0.125000   0.000000   0.125000 (  0.124071)
gsub_v3b                   0.047000   0.000000   0.047000 (  0.056792)
scan                       3.141000   0.000000   3.141000 (  3.129562)

記事には「もっといい方法があったら教えて欲しい」とありました。

その他Ruby


つっつきボイス:「この成果報告会は毎年やってるっぽいですね」「金曜午後という時間帯のせいか、まだ空きがかなりあります」「まあちょっと行きづらい時間帯ではあるけど😅、当日までにはもっと増えるんじゃないかなと」「親睦会以外は無料ですし、Rubyコミッターとがっつり話す機会が多そうですね😍」「場所も品川でアクセスいいですし」

クラウド/コンテナ/インフラ/Linux/Serverless

『A Heavily Commented Linux Kernel Source Code』

PDFの日付は2019/01/24ですが、カーネルのバージョンは0.12となっています。なお自分のUbuntu 18.04 VMのカーネルバージョンは以下です。

$ uname -r
5.0.0-25-generic

つっつきボイス:「このPDF、Intelアーキテクチャのとっても基本的なところを最初の方でしっかり押さえてるのがいいですね❤️: 割り込みピンとかバスの図とかもちゃんとあるし、これ1冊でコンピュータアーキテクチャの授業数本分ぐらいのボリュームが集約されてる感」(以下Linux話が続く)


同PDFより

「このPDFが15年ぐらい前に出ていたら最高の教科書だったろうなって😆」「😆」「ボリュームめちゃ多いですし😅」「1000ページ超え!」「もし読み通すことができたら相当力付くかも💪」


なお以前のウォッチでもご紹介した『Linux Inside』↓のカーネルバージョンは、明言はされていませんが4.0.0-rc2という文字がありました。

「こっちのLinux Insideは新しいのがいいところですね😋」「Linux 5ではないみたいでした」「cgroupsとかも扱ってるあたりが現代のLinux!」

参考: cgroups - Wikipedia

なおLinux 5の公式ドキュメントは以下です。

JavaScript

clean-code-typescript


つっつきボイス:「見出しを眺めた感じではTypeScriptに限らない一般性の高そうな感じではありますね」「こういう話でTS独自のものってあんまり出てこなさそう😆」「言語固有の話と一般の話を分けてくれたらうれしい🙏」

「『Promiseよりasync/awaitを使え』とか、たしかに」「このあたりは言語固有っぽいですね😋」「Promiseって慣れないと読みにくい気が😅」

参考: async function - JavaScript | MDN

CSS/HTML/フロントエンド/テスト

8/27 12:00までのセール

言語・ツール

あまりに自然な英文を自動生成?

参考: 「危険すぎる」と言われたAIの自動文章作成ツール「GPT-2」のモデルが新たに公開へ - GIGAZINE

ちょっと試しに動かしてみました。

  • 入力(Goby READMEより: 実際はもっと英文ニュース的な文が望ましい)

Goby is an object-oriented interpreter language deeply inspired by Ruby as well as its core implementation by 100% pure Go. Moreover, it has standard libraries to provide several features such as the Plugin system. Note that we do not intend to reproduce whole of the honorable works of Ruby syntax/implementation/libraries.

  • 出力

======================================== SAMPLE 1 ========================================

In many cases, the project can use Java for various reasons. For example, we are interested in the Java and Java Virtual Machine. Another example was to work on a project based in Go. But we don't have that. The project is also looking at Open Source languages such as Go which can make development smoother.

Our goal is to create and maintain an open source program which provides a complete representation of the language without limitations and it enables programmers and engineers to work with Java and Java Virtual Machine (JVM) in a highly productive time. So, there is no way that the project can change its design.

In order to achieve this goal we are developing a Go application which consists of two files which you can read directly in the IDE. These files contain all the information you need to write a program. So, as you have read that code, you can understand how it works and make your own choices.

These two files are the src folder and src/classes folder.

If you are interested in learning them as well as working on them as an an IDE, you may see more information at our articles. The same code and documentation will be available at our websites.

We will also try to produce the most current version of the app from Go and we expect that you do not have an Java or Go IDE and you will only experience Go features when developing the project.<|endoftext|>"This is a very sad episode for him," said the head of one of the largest bitcoin companies in the world, Jihan Wu. "The CEO is already a very hard-working and loyal businessman. His staff is always helping out and there's a sense of selflessness in this guy that makes him very loyal to the people in this company."<|endoftext|>A recent report by the American Institute for Fiscal Studies says that the Trump administration is making a good case for the federal government to expand healthcare to poor people — a position that it's taken in past legislative successes.

The administration has pushed to tighten up its health care requirements by requiring all Americans to have coverage before receiving an insurance plan or paying a penalty. This has helped expand Medicaid, which under Obamacare has run out of money.

But the president has indicated that he wants Congress to push for a similar expansion because of his belief that more people would be able to become members of the health-care system.

Read the analysis in the September 23, 2017 issue of The Daily Axios.

This is exactly what the White House
@article{radford2019language,
title={Language Models are Unsupervised Multitask Learners},
author={Radford, Alec and Wu, Jeff and Child, Rewon and Luan, David and Amodei, Dario and Sutskever, Ilya},
year={2019}
}


つっつきボイス:「CUDAとかTensorFlowとかが続々インストールされましたけど何とか動きました: たしかにかなりそれっぽい英文が生成されました」「この種の研究はかなり前から行われてますね☺️」「要約とかではない?」「入力の語群を元に記事を生成してるようです」「この英文が自然かどうか自分にはわかりそうにないです😅」

「そういえば論文の世界だとこういうので査読ハックしたりする人いたりしますね: 生成された文章を投稿してカンファレンスの審査を通したり🤣」「なんと🤣」「リポジトリに『生成した文にはcitation付けろ』とあるのもたぶんそれを念頭に置いてるんでしょうね😆」「そうやって生成した意味のありそうでない文章をcitationしてさらに...と繰り返すと謎のディープラーニング世界ができそう🤣」「日本語でできるようになったらすごいかも」「日本語自動生成の研究してる人いた気がするけど、日本語はなかなか自然な文章にならないみたいです🤔」「日本語は構造とか文体とかでいろいろ難しいかも😅」

その他

OCB2共通鍵暗号の脆弱性を事前に発見

参考: OCB mode - Wikipedia

その他のその他


つっつきボイス:「ケーキの3等分🎂」「最優秀賞の六芒星スゴい😳」「全部直線なのにできてるっぽいし」「画期的」「ツイートの続きもめちゃ盛り上がってます」「4等分し続けるの好き😆」

番外

夢の図書館@青梅


つっつきボイス:「ものすごい量の技術雑誌や実機をコレクションしてるらしくて、そのうち行ってみたいと思ってたので貼ってみました」「『CQハムラジオ』とかあるし😆」「青梅ちょと遠いかな😆」


今回は以上です。

バックナンバー(2019年度第3四半期)

週刊Railsウォッチ(20190821-2/2後編)11のgemにバックドア、ruby-jp Slackがとてもアツい、Fullstaq Rubyでチューンアップ、HTTPサービス監視chaoほか

今週の主なニュースソース

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSなど)です。

Rails公式ニュース

Ruby Weekly


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。