おめでとうございます sometime, please, look your foot, look down, sometime, so this is one message, so try to continue, so let me introduce you at first, my name is Koichi Sasada, this is Kanji character of my name, and last year I married and last April,We heard a wedding party, so I'm a happy person, thank you very much. Important information is that my baggage has spare space, okay.私の仕事はプログラマーですRubyのデロッパーですRubyのデロッパーはレイルザープログラマーですCプログラマーですRubyのインタプリートはCです私はヘロクマッツチームのメンバーです私は日本のデロッパーですRubyのアサシュエーションですアドパタイズスライドですRubyのアサシュエーションはRubyのプログラマーのデロッパーですこのヘロクマッツチームのメンバーです私たちが多くのアクティビティーを作っていますサーチフィケーションプログラムですRubyのサーチフィケーションエンジニアプログラムを知りません私たちがサーチフィケーションコンピタベースのテースを作っています私たちがサーチフィケーションコンピタベースを食べた人に着いています私たちがサーチフィケーションコンピタベースとして作った人からのコンピタベースを選択しますこの販売を見てくださいRubyPrice is one new comma engineer who is very commitment to the Ruby community or Ruby development.今年、RubyPriceプロジェクトをプレイしてみます。Ruby Interpreterプログラマは、多くのデブロッパーはオールドバージョンを保持しています。オールドバージョンを保持するために、多くのデブロッパーをプレイしてみます。Ruby World Conferenceプロジェクトをプレイしてみます。Ruby World Conferenceプロジェクトは、大きなスリースのイベントをしています。ドネーションは、アクティビティをしています。アドバイスメントを続けてみましょう。Ruby Interpreterプログラマは、多くのデブロッパーはオールドバージョンを保持しています。Ruby Interpreterプロジェクトは、多くのデブロッパーはオールドバージョンを保持しています。Ruby Interpreterプロジェクトは、多くのデブロッパーはオールドバージョンを保持しています。Ruby Interpreterプログラマは、多くのデブロッパーを保持しています。Ruby Interpreterプログラマは、多くのデブロッパーはオールドバージョンを保持しています。Ruby Interpreterプロジェクトは、多くのデグロッパーを保持しています。Ruby Interpreterプロジェクトは、多くのデブロッパーで関するコレクターを持っています。Ruby Interpreterプロジェクトは、多くのデブロッパーで関するコレクターに関するコレクターです。パチモンサーは、たくさんのパチが描かれています。これはパイチャースです。パチが描かれていますが、ノブのパチが描かれています。ノブが描かれています。パチモンサーが素晴らしいです。このパチモンサーは、EDDのデベロッパーです。このパチモンサーは、ルビカンのパチモンサーです。毎年にパチモンサーは、コミットナンバーが増えました。これはアドバイスのデベロッパーです。でも、大きなプライベートイベントは、最後の末、最後の末、パチモンサーのデベロッパーです。コミットナンバーは、デベロッパーです。マッチモンサーは、マッチモンサーは、次のパチモンサーは、シルビーのパチモンサーです。マッチモンサーは、デベロッパーです。マッチモンサーは、シルビーのパチモンサーです。このパチモンサーは、スピードのスリーミーです。今、パチモンサーが、フリットに参り、スピードのパチモンサーです。スピードのパチモンサーは、ピク les Stark というパチモンサーです。これを、まず、スピードのデベロッパーが、Ruby 2.1は、新しいRuby 2.1は、2.1.2の最後の映像です。2.1.1と2.1.2のバグフィックスは、セグメンテーショフォルトなどのクリティカルバウスがあります。この新しいバグフィックスは、この新しいバグフィックスを使ってください。Ruby 2.1の最大変化は、193のバグフィックスは、191と193のバグフィックスが、多くの変化があります。しかし、Teenyバグフィックスが、一番上乗せのバグフィックスは、一番上乗せのバグフィックスは、Teenyバグフィックスを使ってください。この場合は、2.1のバグフィックスを使ってください。1.1のバグフィックスが判断し、求めて下がっていき、研究室をのせる必要があります。2.1のシーンは、new syntax、required keyAhts parameter,some little holes,and a different def syntax,リクエイトキーワードのパラメータはこのようにRuby 2.1がキーワードアキュメントを紹介しますそうするとメッセルのデフィニッションを書くことができますこのようにこのようにこのようにAとBはオプショナルアキュメントですAとBがエルミネートできますでもリクエイトキーワードアキュメントをスペースしていることができますBはリクエイトですこのようにAとBのアキュメントを書くことができますこれがエルミネートですそしてラッシュナルナンバーリテラルとコンプレックスナンバーリテラルを紹介しますメッセルデフィニッションのシンボルリテラルを改善しますこれを改善する前にニルを改善する前にメッセルの名前デフィニッシンテックスナンバーリテラルを使うそのためデフィニッシンテックスナンバーリテラルはプライベートでフブラブラブラやプロプリックスタジクでフブラブラブラもしスタティックのメソッドを作ると、このメソッドは、不確定になるのではないかもしれません。でも、このメソッドは作れることができます。Rove-in2.1は、使用者のために、このメソッドを作ると、もっと、プロフォーマンスの改善を行います。この地図は、特にGenerational Garbage Collectionを紹介します。Generational Garbage Collectionは、非常に well-knownオフタマイザーションテクニックをプロフォーマンスの改善を行います。でも、この問題は、Generational Garbage Collectionを紹介します。C-RubyのGenerational Garbage Collectionを紹介します。しかし、Generational Garbage Collectionを紹介します。R-Chain GCを紹介します。I don't describe explained details, but simply we can improve the performance of Garbage Collection. This is a total marking time.Ruby has a mark-and-sweep Garbage Collection and marking phase needs only so marking phase so we can speed up 50 times.Sweeping time is not so different. So because of this improvement application can improve performance about 10% on this generating R documentation. SoIf you are using Ruby 2.0 then please check the 2.1 to improve your application performance.Ruby 2.2 is the next version of Ruby. Maybe we release in this year.Schedule of Ruby 2.2 is not announced in public but there is a draft page of this schedule of Ruby 2.2 There is Red Ruby Conf and RubyKaike and RubyConf and another RubyConf conference so we only have these big conferences and the day of release we plan is Christmas of this year and we also planning to have developer meeting to decide what specification changes are acceptable or not. So there is two developer meeting and after this discussion of this feature we will release a big feature at September and we will release Preview 2.0 of this year and these candidates at December I hope Unfortunately Ruby 2.2 now we don't have big feature changes maybe no syntax changes and no big method changes library we change the library maintenance policy but maybe it is not affect for you mostly you don't care you don't need to care about that but Ruby 2.2 will internal changes we improve the performance or some other features so there are several changes but maybe most most interesting feature is symbol garbage collection so if you write such code make n symbol symbols and the generated symbols are not freed because of the implementation issue so symbol GC collects dynamically create such a dynamically created symbols so you don't need to care about the symbol so too many symbol issues on Ruby 2.2 I believeOKSo I try to go to today's main themeRuby.inspect Maybe you are working on Ruby program language and making Ruby applications and if you feel what's happened because some reasons so there are many inspecting features to do such a thing so I want to introduce these things so there are several reasons to why inspecting inspect feature is needed so one is code reading one is debugging and performance tuning one is understanding Ruby's implementation and so maybe debugging and performance tuning is main reason to inspect and performance tuning is one of my task so I made some inspecting features so I want to show you about that so there are some things to inspect Ruby's behavior so one is using the tools and services for Ruby and if you can't find out correct tool you can make it so I want to show you how to make Ruby's inspection this way is inspecting Ruby process itself from outside with operating system support there are several way this is general computer architecture layers so computer is based on hardware hardware has operating system operating system make Ruby Interpreter so some library and some tools are implemented on the Ruby Interpreter and based on these infrastructure you can write your application so this is the basic concept of computer architecture there are many many tools and services so tools and services based on here you can find many tools benchmarking for profiling or debugging there are many many features for example can I use this mic there is some blog post New Relic provides great performance inspecting through they provides very pretty chart to understand what's happened on Ruby Interpreter so maybe you can use it it's easiest way and easiest way to use the New Relic maybe it is Heroku is easiest way to use New Relic so please use it please try it and there are many many tools there are many many services to inspect the Ruby so you can find and you can you can find manual documentation so please Google it and this slide by Aman Gupta in GitHub is very helpful and I don't talk about these services or tools today I want to talk about the primitives how to such inspection tools so Ruby Interpreter provides several primitives of Ruby inspection features so I categorize for things inspection features one ishow to show the objects so maybe kernelP is most famous inspection feature so kernelP prints the result of object.inspect so object.inspect returns the inspection string so it represents what objects and pp pp is pretty print of pretty print results both methods print on to standard out you can modify object.inspect for better representation so this is for the printf debuggingI want to introduce some chips from Ruby 2.0 we introduce the keyword argument and you can write such things p, who, column, who and bar, column, bar so maybe some Ruby program are confusing what happened on that but the result is who is this one short syntax sugar of hash literal output to this oneand also if you want to write standard error of the pp module then you can use this method it's this method implication prints on to standard error not to the standard it's a small tips but I usually use I recently use this tips it is very useful for me and maybe for you and also object space dump is provided from Ruby 2.1 I want to demonstrate about this one this method is provided by the object space and object for example dump the string you can find a JSON format object serialize not series but inspected feature it shows very, very detail information so implementation specific information for example the address memory address of the object and the type encoding or some other detail information but you can find you can find what's happened on Ruby interpreter and also object space what dump all dump all methods all of objects so this you can find all of objects in this file with this method you can find object relationship so you can find unexpected object relation Ruby has powerful very powerful reflection features such as these things so for example maybe it is very common technique to understand where the method implication is occured so for example caller methods return the back trace information so you can use you can see the long back trace information so it means the top of stack frame is the evil and evaluate method and evaluate method so this method is introduced from the ancient Ruby maybe 1.1 or some old versions but this advantage of this method is this string is only a string so if you want to only get a file name then you need to pass this string with regular expression or some other techniques so Ruby 2.0 introduce other methods caller locations the return value of caller location is not a simple string but we can check the file for example pass name this method for example we can query the pass name or method name so you don't need to pass anymore and the debug inspector gem is provided by gem file this is very powerful tool all binding objects can use by evil methods for every frame I will show you the demonstration after after this and also we have accessing variables methods for example local variable global variable class variable you can get any object any variables if you want to write a debug so you can do it you can use it maybe the local variable gets is difficult to understand why it is needed so I want to introduce this one so for example so we can make local variableA can you read the bottom line so define local variableA and binding local variable so you can get object hell storing local variableA but but we can access with this only this one this is same but when we make keyword parameter foo maybe you can't find out there is a local variable foo binding by keyword there is a keyword argument foo if but we can't do we can't say if it is syntax error syntax error so we can use binding local variable this is why local variable get is introduced to ruby 2.1 let's continue and also we can get method definition locationand the parameter informationso I define the method foo and you can get the method object foo about foo the method object has source location so we can understand the method definition place of this one for example pp where the definition is like that so we can find definition at this file at 97 line also you can find parameter foo m is method object of foo you can find you can find there is a keyword argument so there are several reflection features like that and the most powerful last weapon is evil so I write every evil because it is very dangerous because we can do everything so you can find you can access a variable you can get and also set you can set a variable and if you misuse this method it breaks the interpreter Ruby interpreter provides some statistics features so for example garbage collections information and so gc.starts returns current information of gc so there are many many information return by gc.starts but if you know the algorithm of Ruby interpreter then you can use these variables for example the total allocated object is total allocated object in this interpreter process and freed object so this is a plot of the total allocated object and freed total freed object so basically total allocated object and total freed object is near because most of objects are collected by garbage collection but if there is leaky object then so allocated object and freed object are different so you can find leaking behavior and also there are another statistic information so I introduce how to get information but we need to get when I can get information so I want to introduce the trance points so trance point is track-duby's information execution so inserting tracking point by block is introduced from ruby 2.0 and right-weight object-oriented version style of set-less punk set-less punk is also old traditional old style traditional methods we can write these things such thing but the new style with trance point we need we can write this one so maybe if you do not know about set-less punk then you don't know to need you don't need to run set-less punk methods you only need to run trance point interface so because it's very easy to enable and disable and write very right-weight and you can filter the event events so you can trace line event, call and return event and class open, class close and raise events and thread begin and thread end block begin and block end trance point can filter the events for example set-less punk invoke on each event but trance point only invoke for example call and return events and also we introduce a call and a return events so I introduce this a call and a return events as the areas of this one is there is c call and b call but there is no a call so I introduce a call so there is several description but I want to demonstrate of this one so this is a very famous very famous benchmark methods so this invoke many many recursive method dispatch so it's costly so for example if you want to know how many how many try function try method is invoked then you can make this events so this trance point every call this is disabled so enable this block and try and you can findc call so so many try methods are invoked we can understand means there is such such small lines and also trance point can provide binding object so you can find what parameter are called this trance point shows parameter x and y and set as call methods with binding object you can find what parameter are passed and also this try methods is very very recursive methods so we can understand how many how many try recursively called sorry this trance point show the depth of each method call and method return so you can find method depth stack depth of each call time calling time and return time so there is only few lines you can see only a few lines very easy to use alsoluby 2.1 introduce several internal events for garbage collection so at the new object and free object and gc start, gc end mark, gc sweep mark so new object and clear object is easy to understand when there is one object creation then invokes this event hook also free object is same and garbage collection has marking phase and sweep phase so we invoke the three time gc start and gc end marking and gc end sweeping so with this trance points you can find how what happen on garbage collection for example I make several tools with this feature andluby also provide detrace proof so if you are operating system provides detrace support then you can use it object allocation tracing is introduced from the luby 2.1 also this feature is used by such internal events new object and free objects you can find where the object is created and also we provide the object relation how to know the object relation reachable object from method returns directly reachable object from objects so for example this object sorry this array is refer to the array class and a and b and c of the class and this array pointed to the different a object and this array pointed to the same objects same string object so this is a figure and we made object make it graphical or interactive we made such a tool this syntax a and b and bracket c and d pointed to the array class and string a and a and b and array and also array refer to the this object and this object we can make such a graphical user interface with this inspection feature maybe it is easy to understand and easy to learn but if you make a huge number of mess objects so this array object contains 100 string objects so it is difficult to understand what's I introduce some primitives we can make your own inspector tools with these tools for if you can't find if you cannot find correct tools then so please remember the thing remains as primitives and make your own tool maybe it is contribution to for other people and I introduce Ruby's primitives but we can inspect from as Ruby interpreter process from other sites from the operating system from other process for example S-trace, D-trace Bargain there are several outside tools so if you know what information are needed then you can use it so mainly I use GDB to debug the Ruby application and Ruby interpreter so I introduce this computer layer but seeing that these objects this figure so they are only a software so this means that you can modify the inspection tool so for example modify Ruby interpreter or modify operating system or using the operating system tools then you can add inspection features so if you want to modify the Ruby source course so these books will help you Ruby under the microscope is a brief guide of the Ruby interpreter and Ruby hacking guide is detailed introduction of the Ruby source course and this is there is English translation somore advanced computer areas so recently this figure is not correct so this hardware is not a real hardware so if you use a virtual machine monitor this hardware and this operating system is only a software so you can inspect these hardware behavior with modifying the virtual machine monitor so everything is software so you can modify you can add inspection tools so this I want to say that understanding lower layers lower layers than your application there are very very lower layer but if you understand the lower layer you can find out how to introduce inspection feature so Ruby hides computer architecture details but if you understand the details of the lower layer you can choose you can make your correct tools so this is why computer science is computer science study is important so please don't hesitate to learn computer science maybe you need to learn many many things how to make a good application good testing or some other things but computer architecture computer science study is also important so please remember a bit sometimes you need to you need it or try to ask the lower lower level professional like me if you give me a question so for example some days agoaron asked mehow to do it then I can make it so this communication is very important so if you have any idea any requirement for the Ruby interpreter inspection please ask me I can provide some ideas or implementation so balance is matter so if you I only know the lower layer so it is problem because I cannot make a good layer application but if you only know the higher level then you cannot touch these lower layer so balance is important so this is what I want to say become a lower level engineers so today21 and 22and the inspection featureand knowledge of lower layer is important why it is important so please so maybe it is inspected so thank you very much