Video presentation: https://www.youtube.com/watch?v=jLAFXQ1Av50
Most applications written in Ruby are great, but also exists evil code applying WOP techniques. There are many workarounds in several programming languages, but in Ruby, when it happens, the proportion is bigger. It's very easy to write Ruby code with collateral damage.
You will see a collection of bad Ruby codes, with a description of how these codes affected negatively their applications and the solutions to fix and avoid them. Long classes, coupling, misapplication of OO, illegible code, tangled flows, naming issues and other things you can ever imagine are examples what you'll get.
Video presentation: https://www.youtube.com/watch?v=jLAFXQ1Av50
Most applications written in Ruby are great, but also exists evil code applying WOP techniques. There are many workarounds in several programming languages, but in Ruby, when it happens, the proportion is bigger. It's very easy to write Ruby code with collateral damage.
You will see a collection of bad Ruby codes, with a description of how these codes affected negatively their applications and the solutions to fix and avoid them. Long classes, coupling, misapplication of OO, illegible code, tangled flows, naming issues and other things you can ever imagine are examples what you'll get.
Keep hearing about Plack and PSGI, and not really sure what they're for, and why they're popular? Maybe you're using Plack at work, and you're still copying-and-pasting `builder` lines in to your code without really knowing what's going on? What's the relationship between Plack, PSGI, and CGI? Plack from first principles works up from how CGI works, the evolution that PSGI represents, and how Plack provides a user-friendly layer on top of that.
PHP 5.3 has many new features that allow very different paradigms of software development, that may be unfamiliar to many PHP developers. If you want to learn more about functional or aspect-oriented programming, or how to organize your PHP libraries according to the new de facto PHP namespacing standard, don't miss this talk.
Integrating icinga2 and the HashiCorp suiteBram Vogelaar
We all love infrastructure as code, we automate everything ™ but how many
of us can really say we could destroy and recreate our core infrastructure
without human intervention. Can you be sure there isnt a DNS problem or
that all the things ™ are done in the right order This talk walks the
audience through a green fields exercise that sets up service discovery
using Consul, infrastructure as code using terraform, using images build
with packer and configured using puppet.
Let'Swift 2019 컨퍼런스에서 RxSwift to Combine 이라고 발표한 자료입니다. 자료 내에 언급되는 코드 링크는 다음과 같습니다.
[BringMyOwnBeer]
• RxSwift/RxCocoa: https://github.com/fimuxd/BringMyOwnBeer-
• Combine/SwiftUI: https://github.com/fimuxd/BringMyOwnBeer-Combine
Let'Swift 2019 컨퍼런스에서 RxSwift to Combine 이라고 발표한 자료입니다. 자료 내에 언급되는 코드 링크는 다음과 같습니다.
[BringMyOwnBeer]
• RxSwift/RxCocoa: https://github.com/fimuxd/BringMyOwnBeer-
• Combine/SwiftUI: https://github.com/fimuxd/BringMyOwnBeer-Combine
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
Keep hearing about Plack and PSGI, and not really sure what they're for, and why they're popular? Maybe you're using Plack at work, and you're still copying-and-pasting `builder` lines in to your code without really knowing what's going on? What's the relationship between Plack, PSGI, and CGI? Plack from first principles works up from how CGI works, the evolution that PSGI represents, and how Plack provides a user-friendly layer on top of that.
PHP 5.3 has many new features that allow very different paradigms of software development, that may be unfamiliar to many PHP developers. If you want to learn more about functional or aspect-oriented programming, or how to organize your PHP libraries according to the new de facto PHP namespacing standard, don't miss this talk.
Integrating icinga2 and the HashiCorp suiteBram Vogelaar
We all love infrastructure as code, we automate everything ™ but how many
of us can really say we could destroy and recreate our core infrastructure
without human intervention. Can you be sure there isnt a DNS problem or
that all the things ™ are done in the right order This talk walks the
audience through a green fields exercise that sets up service discovery
using Consul, infrastructure as code using terraform, using images build
with packer and configured using puppet.
Let'Swift 2019 컨퍼런스에서 RxSwift to Combine 이라고 발표한 자료입니다. 자료 내에 언급되는 코드 링크는 다음과 같습니다.
[BringMyOwnBeer]
• RxSwift/RxCocoa: https://github.com/fimuxd/BringMyOwnBeer-
• Combine/SwiftUI: https://github.com/fimuxd/BringMyOwnBeer-Combine
Let'Swift 2019 컨퍼런스에서 RxSwift to Combine 이라고 발표한 자료입니다. 자료 내에 언급되는 코드 링크는 다음과 같습니다.
[BringMyOwnBeer]
• RxSwift/RxCocoa: https://github.com/fimuxd/BringMyOwnBeer-
• Combine/SwiftUI: https://github.com/fimuxd/BringMyOwnBeer-Combine
Talk at RubyKaigi 2015.
Plugin architecture is known as a technique that brings extensibility to a program. Ruby has good language features for plugins. RubyGems.org is an excellent platform for plugin distribution. However, creating plugin architecture is not as easy as writing code without it: plugin loader, packaging, loosely-coupled API, and performance. Loading two versions of a gem is a unsolved challenge that is solved in Java on the other hand.
I have designed some open-source software such as Fluentd and Embulk. They provide most of functions by plugins. I will talk about their plugin-based architecture.
I hope to communicate to developers of web apps, especially of those handles payment information, that they should be aware of what they trust when developing an app. This should make the app more secure and make the developers aware of when to update gems or certs.
A rabbit*1 presentation presented as a Lighting Talk at RubyKaigi 2015*2.
- *1 http://rabbit-shocker.org/
- *2 http://rubykaigi.org/2015/presentations/lt
URLs
- https:/www.hyuki.com/cr/
- https://blog.mozilla.org/security/2014/09/08/phasing-out-certificates-with-1024-bit-rsa-keys/
- https://ja.wikipedia.org/wiki/SHA-1
- https://aws.amazon.com/security/security-bulletins/aws-to-switch-to-sha256-hash-algorithm-for-ssl-certificates/
- https://googleonlinesecurity.blogspot.com/2015/10/sustaining-digital-certificate-security.html
Gisting is an implementation of Google\'s MapReduce framework for processing and extracting useful information from very large data sets. At the time of this writing, the code is available for PREVIEW at http://github.com/mchung/gisting. I am currently working to release this framework for general usage.
Presentation on how Puppet has been introduced in Seat Pagine Gialle to automate system administration tasks and easy the cooperation between Ops and Others.
A Recovering Java Developer Learns to GoMatt Stine
As presented at OSCON 2014.
The Go programming language has emerged as a favorite tool of DevOps and cloud practitioners alike. In many ways, Go is more famous for what it doesn’t include than what it does, and co-author Rob Pike has said that Go represents a “less is more” approach to language design.
The Cloud Foundry engineering teams have steadily increased their use of Go for building components, starting with the Router, and progressing through Loggregator, the CLI, and more recently the Health Manager. As a “recovering-Java-developer-turned-DevOps-junkie” focused on helping our customers and community succeed with Cloud Foundry, it became very clear to me that I needed to add Go to my knowledge portfolio.
This talk will introduce Go and its distinctives to Java developers looking to add Go to their toolkits. We’ll cover Go vs. Java in terms of:
* type systems
* modularity
* programming idioms
* object-oriented constructs
* concurrency
Long journey of Ruby Standard library at RubyKaigi 2024Hiroshi SHIBATA
Ruby has a lot of standard libraries from Ruby 1.8. I promote them democratically with GitHub today via default and bundled gems. So, I'm working to extract them for Ruby 3.4 continuously and future versions. It's long journey for me.
After that, some versions may suddenly happen LoadError at require when running bundle exec or bin/rails, for example matrix or net-smtp. We need to learn what's difference default/bundled gems with standard libraries.
In this presentation, I will introduce what's the difficult to extract bundled gems from default gems and the details of the functionality that Ruby's require and bundle exec with default/bundled gems. You can learn how handle your issue about standard libraries.
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
I will introduce what's the difficult to extract bundled gems from default gems and the details of the functionality that Ruby's require and bundle exec with default/bundled gems. You can learn how handle your issue about standard libraries.
Deep dive into Ruby's require - RubyConf Taiwan 2023Hiroshi SHIBATA
Since Ruby's bundled and default gems change every year with each release, some versions may suddenly happen LoadError at require when running bundle exec or bin/rails, for example matrix or net-smtp.
In this presentation, I will introduce the details of the functionality that extends Ruby's require to provide guidance to users on what they can do to load them. And I will also show how $LOAD_PATH is build behind Ruby and Rails by Bundler.
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
I maintain the RubyGems, Bundler and the standard libraries of the Ruby language. So, I've been extract many of the standard libraries to default gems and GitHub at Ruby 3.0. But the some of libraries still remains in only Ruby repository. I will describe these situation.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
9. Contributing of OSS
People say:
“Contributing to OSS is easy! Please write
some documentation and submit a patch!”
You say:
“Okay! I will contribute new documentation
for Ruby!”
10. Documentation is hard
But documentation is hard, I think
• No-one knows the true behavior of the Ruby
language.
• Only Matz knows that.
• English is hard (for Japanese)
• Documentation is boring work :bow:
Because documentation is valuable work.
11. Testing and Running are easy
On the other hand, testing and running code is easy.
• Ruby has a lot of test ecosystem and libraries.
• Bundler and Docker provide an encapsulated
environment.
If you get test failures, you can submit issue ticket to our
tracker. It helps ruby committer.
If test coverage is missing for some ruby code, you can
also write new tests and submit a patch to upstream.
12. Code reading tips
I always start code reading with the following commands
I pick out `before_script` and `script` code from .travis.yml
and invoke it. For example:
$ git clone https://github.com/some/gems
$ cd gems
$ less .travis.yml
$ bundle install
$ rake spec
$ rake spec:plugins
13. In the case of ruby
You will get…
$ git clone https://github.com/ruby/ruby
$ cd ruby
$ less .travis.yml
16. Tips for testing ruby
You can invoke language tests with the following
instructions:
$ git clone https://github.com/ruby/ruby
$ cd ruby
$ autoconf
$ ./configure —disable-install-doc
$ make -j
$ make check
18. common.mk
common.mk defines test tasks for the make command
• check/check-ruby
• btest/btest-ruby
• test-sample
• test-knownbug
• test-testframework
• test
• test-all
• test-almost
• test-ruby
• test-rubyspec
19. make test
make test depends on the following tests
• test-sample
• invoke `tool/rubytest.rb` with target ruby
• rubytest.rb run `sample/test.rb` !!1
• btest-ruby
• snip for next slides
• test-knownbug
• invoke `KNOWNBUGS.rb`
• It’s empty a lot of the time.
21. make btest-ruby
btest-ruby invokes test files with the ruby binary and
`bootstraptest/runner.rb` under the `bootstraptest`
directory.
What’s `bootstraptest/runner.rb` ?
• load test files and invoke them
• define assertion methods like `assert_equal` etc.
% ls bootstraptest
pending.rb runner.rb* test_attr.rb test_autoload.rb test_block.rb test_class.rb
test_eval.rb test_exception.rb test_finalizer.rb test_flip.rb test_flow.rb test_fork.rb
test_gc.rb test_io.rb test_jump.rb test_literal.rb test_literal_suffix.rb test_load.rb
test_marshal.rb test_massign.rb test_method.rb test_objectspace.rb test_proc.rb
test_string.rb test_struct.rb test_syntax.rb test_thread.rb
22. `cat bootstraptest/test_class.rb`
assert_equal 'true', %q( class C; end
Object.const_defined?(:C) )
assert_equal 'Class', %q( class C; end
C.class )
(snip)
assert_equal 'Class', %q( class A; end
class C < A; end
C.class )
(snip)
assert_equal 'M', %q( module M; end
M.name )
(snip)
assert_equal 'A::B', %q( class A; end
class A::B; end
A::B )
23. make test-all
test-all invokes test files under the `test` directory.
These test files contain core libraries like String and
Array and stdlib like Webrick and Logger. This task is a
good one for a typical contributor.
test-all has some options for testing:
• make test-all TESTS=logger
• test only files under `test/logger`
• make test-all TESTS=“-j4”
• it make parallel execution with 4 processes.
27. make check
make check depends on the following definitions:
• main
• build encodings and extensions.
• test
• (snip)
• test-testframework
• run tests for `testunit` and `minitest`
• test-almost
• run tests under `test` excluding `testunit` and
`minitest`
make check runs all test tasks in CRuby
28. make testframework-test/test-almost
I separated test files testunit and minitest from test-all.
Why does CRuby have test files for testunit and minitest?
• CRuby Forked test-unit and minitest
• CRuby added parallel execution function to test-unit
We need to invoke to test to test-framework before CAPI,
core library and standard library.
test-almost invokes tests under `test` without test-unit
and minitest.
30. Why separated the test framework?
The following libraries uses minitest directly in Ruby 2.3:
• rubygems
• rdoc
• net-smtp (It seems unnecessary)
Other libraries uses test-unit. rubygems and rdoc are
developed at github.com/rubygems/rubygems and
github.com/rdoc/rdoc. We need to support these libraries
and their tests.
31. How to merge upstream from others
I merged upstream into ruby/ruby periodically using
following instructions.
ruby and rubygems guarantee to work to test and code
each other. it’s the same situation for ruby and rdoc
$ git clone https://github.com/ruby/ruby
$ git clone https://github.com/rubygems/rubygems
$ cd ruby
$ rm -rf lib/rubygems test/rubygtems lib/rubygems.rb
$ cp -rf ../../rubygems/rubygems/lib/rubygems ./lib
$ cp -rf ../../rubygems/rubygems/lib/rubygems.rb ./lib
$ cp -rf ../../rubygems/rubygems/test/rubygems ./test
$ git checkout lib/rubygems/LICENSE.txt
32. backporting is hard
rubygems and rdoc still support Ruby 1.8.
% g show a34fb569e41cd87866e644d92a9df4be89b3cad2 test/rubygems/test_gem_package.rb
commit a34fb569e41cd87866e644d92a9df4be89b3cad2
Author: Eric Hodel <drbrain@segment7.net>
Date: Tue Jul 8 16:53:50 2014 -0700
Fix tests on ruby 1.8
diff --git test/rubygems/test_gem_package.rb test/rubygems/test_gem_package.rb
index f07c083..128dcdb 100644
--- test/rubygems/test_gem_package.rb
+++ test/rubygems/test_gem_package.rb
@@ -638,7 +638,7 @@ class TestGemPackage < Gem::Package::TarTestCase
e.message
io
end
- tf.close!
+ tf.close! if tf.respond_to? :close!
end
def test_verify_empty
33. Forked code for Test::Unit
• test/lib/envutil.rb
• some assertion and function for language
testing
• leakchecker.rb
• checker for memory and fd leak.
• test/lib/test/lib/parallel.rb
• helper library parallel execution for test-
case
35. RubySpec
Q. What’s rubyspec?
A. RubySpec is an executable specification for the Ruby
programming language.
“Matz's Ruby Developers Don't Use RubySpec and It's
Hurting Ruby”
http://rubini.us/2014/12/31/matz-s-ruby-developers-don-t-use-rubyspec/
rubyspec is not a “specification”. It’s actually a set of
“test”. The only real ruby specification is inside of Matz :)
36. make test-rubyspec
CRuby has `make update-rubyspec` and `make test-
rubyspec` tasks.
`make update-rubyspec` pulls ruby/rubyspec and ruby/
mspec into the spec directory.
`make test-rubyspec` invokes mspec with the ruby binary
and the latest rubyspecs.
37. cat spec/rubyspec/core/string/append_spec.rb
require File.expand_path('../../../spec_helper', __FILE__)
require File.expand_path('../fixtures/classes', __FILE__)
require File.expand_path('../shared/concat', __FILE__)
describe "String#<<" do
it_behaves_like :string_concat, :<<
it_behaves_like :string_concat_encoding, :<<
end
% cat spec/rubyspec/core/string/shared/concat.rb
describe :string_concat, shared: true do
it "concatenates the given argument to self and returns self" do
str = 'hello '
str.send(@method, 'world').should equal(str)
str.should == "hello world"
end
(snip)
38. rubyspec and mspec
We approved new or updated examples at github.com/
ruby/rubyspec.
@headius wrote: “So nice to see RubySpec getting a
steady stream of Ruby 2.3 specs.”
https://twitter.com/headius/status/667793518098673664
A lot of contributors submitted new specs for Ruby 2.3
features.
40. rubyci and chkbuild
Ruby CI is a CI results collector for alternative
platforms:
https://github.com/nurse/rubyci
ruby ci uses chkbuild built by akr:
https://github.com/akr/chkbuild
41.
42. How to add a new server
You can add your server to rubyci.org
Requirements:
• not yet supported platforms.
• ex. linux with ARM, *BSD, icc with OSX, Windows
• periodically running every day
• It must be possible to access to AWS S3
You should check the following commands on your server
$ git clone https://github.com/akr/chkbuild
$ cd chkbuild
$ ruby start-build
44. make run/bisect
`make run` invokes the `test.rb` file on ruby source
directory. ko1 said this task helped with YARV
development.
`make bisect` invokes `make run` with git-bisect. It helps
detect commits containing defects.
but it’s only useful for a single ruby file. we need to
invoke git-bisect under the bundler environment. that’s
very difficult.
45. test coverage
I added a coverage task using simplecov
You can get coverage results for `webrick` under the
coverage directory.
% make update-coverage
updating simplecov ...
remote: Counting objects: 90, done.
(snip)
updating simplecov-html ...
updating doclie …
% COVERAGE=1 make test-all TESTS=webrick
46.
47. % COVERAGE=1 make test-all
CC = clang
(snip)
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext
-- --disable-gems" --excludes=./test/excludes -x /memory_leak/
# Running tests:
[ 3491/15951] TestCoverage#test_big_code = 0.17 s
1) Failure:
TestCoverage#test_big_code [/path/to/ruby/test/lib/tracepointchecker.rb:18]:
The number of active trace events was changed.
<[[#<RubyVM:0x000001017c3588>, 1]]> expected but was
<[[#<RubyVM:0x000001017c3588>, 0]]>.
/path/to/ruby/test/lib/leakchecker.rb:116: [BUG] Segmentation fault at
0x00000000000000
ruby 2.3.0dev (2015-12-03 trunk 52872) [x86_64-darwin15]
Limitation of test coverage
We have some defects related to the “Coverage” library.
49. Plan for Ruby 2.4/3.0
• Restructured test directories and files
• Separated test focus
• Removed duplicate tests
• Simplify test tasks
• stdlib tests more friendly with JRuby
• Increase coverage
• Integrate rubyspec and ruby tests
50. Please contribute tests to ruby
You can invoke CRuby tests:
You can invoke focused tests with coverage:
You can code new tests or update existing tests. and
submit patches to our tracker or github.com/ruby/ruby.
$ git clone https://github.com/ruby/ruby
$ cd ruby
$ autoconf
$ ./configure —disable-install-doc
$ make -j
$ make check
$ COVERAGE=1 make test-all TESTS=“logger”
$ open coverage/index.html