SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
JZlibと
“Java7で看取られたバグ(享年12)”
         について


                  @ymnk



Java SE 7 Launch Event in Sendai (2011/09/04)
自己紹介
• 山中淳彦(@ymnk)
• 株式会社ジェイクラフト (JCraft,Inc.)
• FLOSSを幾つか開発 ・公開
  JSch、JZlib、JOrbis など
• Eclipse.org、Liftwebでコミッタ
• Scala勉強会@東北 (通算110回程、休止中)
• 仕事でJava、最近 Scala
• http://facebook.com/aymnk
自己紹介
• ymnkの書いたソフトがBoeing 787に搭載
 JCraft's X Server Part of Boeing 787 Avionics Systems
 http://www.jcraft.com/news/06.18.2009pr.html
いきなり結論
内容
• Bug ID: 4206909
• JZlib
• Zlib
• Deflateアルゴリズム
• SYNC_FLUSHの使用例
• java.util.zip まつわる話題
• まとめ
Bug ID: 4206909
Bug ID: 4206909
• http://bugs.sun.com/view_bug.do?bug_id=4206909
• Synopsis: want java.util.zip to work for
  interactive use (Z_SYNC_FLUSH)
• Submit Date: 28-JAN-1999
• Reported Against: 1.2, 1.3, 1.1.7, 1.1.8
• Release Fixed: 7(b77)
• State: 10-Fix Delivered, request for
  enhancement
Bug ID: 4206909
• Description:

 “Today it is not possible to reuse
 java.util.zip for compression because the
 Java VM calls deflate() in the libz with
 Z_NO_FLUSH (and Z_FINISH for EOF)
 only.”
Bug ID: 4206909
• Description:

 “ This means that in most cases the
 deflate() does not emit enough data for
 the decompressor to reassemble the
 complete data packet because it waits for
 more input.”
Bug ID: 4206909
• java.util.zip パッケージ
   – Deflater
   一般的な ZLIB 圧縮ライブラリを使用して汎用の圧縮
   アルゴリズムをサポート
  – Inflater
   一般的な ZLIB 圧縮ライブラリを使用して汎用の圧縮
   解除をサポート
  – InflaterInputStream
  – DeflaterOutputStream
Bug ID: 4206909
Java6まで(j.u.z.Deflater#deflate+NO_FLUSH)

•“Hello”を圧縮して伸張しても”Hello”が得られるとは限らない
•双方向でやり取りする場合、デッドロックになる可能性がある

  “Hello”
               compressor
                             “lo”は処理待ち


                              “Hel”
              decompressor
Bug ID: 4206909
Java7(j.u.z.Deflater#deflate+SYNC_FLUSH)

•“Hello”をSYNC_FLUSHで圧縮して伸張すると必ず
”Hello”が得られる

 “Hello”
               compressor


                              “Hello”
              decompressor
で、いままではどうしてた?
JZlib
JZlib
•   zlib(1.1.3)のpure Java実装
•   修正BSDライセンスで公開
•   2000年12月より ymnk が開発
•   最近、Inflater/Deflaterでgzip
    format(RFC1952)を操作できるようにhack中
JZlib
• 開発の動機
  SSHのパケット圧縮[RFC4253]実現のため

 “The 'zlib' compression is described in
 [RFC1950] and in [RFC1951].The
 compression context is initialized after each
 key exchange, and is passed from one packet
 to the next, with only a partial flush being
 performed at the end of each packet. “
JZlib
• JZlibを使っているソフトウェア
 – JSch
 – Apache MINA
 – Netty
 – Zimbra
 – as3zlib
 – Zlib.cs
 – IronPython.Zlib
 – Nokia Data Gathering 等
zlib
zlib
• Wikipediaから
 “zlibは、データの圧縮および伸張を行うためのフリーの
 ライブラリである。可逆圧縮アルゴリズムの Deflate
 (RFC 1951)を実装している。ヘッダーやフッターなどの
 データ形式はRFC 1950 (ZLIB Compressed Data
 Format Specification)として仕様化されている。”
zlib
• 作者: Jean-Loup Gailly, Mark Adler
• ライセンス: zlib license
• GIF特許問題を受けて開発開始
• 当初は、性能・効率よりは、特許に触れないよう
  に開発
 ITmedia: LZWに震え上がった10年前の人たち
 Glamenv-Septzen.net: 技術/歴史/zip,gzip,zlib,bzip2
Deflate アルゴリズム
Deflate アルゴリズム
• Wikipediaから
 “LZ77とハフマン符号化を組み合わせた可逆データ圧
 縮アルゴリズム。”
                                       特許あり

   LZ77         LZ78                        LZW

                            GIF
                            Compress コマンド



    LZSS          Deflate       PNG
                                zlib、gzip

                 特許なし(と広く信じられている)
SYNC_FLUSHの使用例
SYNC_FLUSHの使用例
scala> val defl_infl = {
    import java.util.zip._
    val (defl, infl, buf) = (new Deflater, new Inflater, new Array[Byte](100))
    def f(in: String): String = synchronized {
     in.getBytes match {
      case result =>
         defl.setInput(result)
         defl.deflate(buf, 0, buf.length, Deflater.SYNC_FLUSH) match{
         case l =>  l は buf に書き出された圧縮データのサイズ
                   //
         infl.setInput(buf, 0, l)
         val len = infl.inflate(result, 0, result.length)
          new String(result, 0, len)
      }}} // ちゃんと実装するには、中間バッファ(buf)の溢れに注意
    f_    // また、伸張後のバッファ溢れにも注意すべき
}
SYNC_FLUSHの使用例
scala> println(new java.io.File(".").list.forall{ l => defl_infl(l)==l })
true
java.util.zip まつわる話題
java.util.zip にまつわる話題
• JDK は native な zlib を独自に抱えてる
 2002年ごろ double free 問題で大騒ぎに
 zlib 1.1.3の問題
 S ymantec: Zlib compression library double free bug could allow arbitrary code Zlib

• Inflaterがgzip format(RFC1952)を処理できない
  zlib 1.2からの機能 (Java6以降は zlib 1.2.3を使用)
  最近、JRubyのZip::Inflaterの実装で話題に
  JRubyでj.u.zipに代わって、JZlib を使うかも?
• zlibのinflaterSyncをInflaterから使えない
まとめ
JZlib and an aged fixed bug in java7

Mais conteúdo relacionado

Mais procurados

超簡単!Subversion入門 概念編
超簡単!Subversion入門 概念編超簡単!Subversion入門 概念編
超簡単!Subversion入門 概念編Shin Tanigawa
 
シェル入門
シェル入門シェル入門
シェル入門ina job
 
php7's ast
php7's astphp7's ast
php7's astdo_aki
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Kazuki Ohta
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編Shin Tanigawa
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Hidenori Goto
 
Kickstart, Puppet, Docker
Kickstart, Puppet, DockerKickstart, Puppet, Docker
Kickstart, Puppet, DockerHirokazu Tokuno
 
Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving processTakuya ASADA
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
Nas4 freeへzabbix agentを導入してみた
Nas4 freeへzabbix agentを導入してみたNas4 freeへzabbix agentを導入してみた
Nas4 freeへzabbix agentを導入してみたkometch H
 
"More" Introduction to Zend Tool
"More" Introduction to Zend Tool"More" Introduction to Zend Tool
"More" Introduction to Zend Toolsasezaki
 
タスクマネージャーの上級版!Process Explorerの紹介
タスクマネージャーの上級版!Process Explorerの紹介タスクマネージャーの上級版!Process Explorerの紹介
タスクマネージャーの上級版!Process Explorerの紹介Shin Tanigawa
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Kikunaga Taishi
 
Metasploit framework
Metasploit frameworkMetasploit framework
Metasploit frameworkzatslide
 
覚えておきたい! zypper コマンドの使い方
覚えておきたい! zypper コマンドの使い方覚えておきたい! zypper コマンドの使い方
覚えておきたい! zypper コマンドの使い方Fuminobu Takeyama
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
CasperjsのインストールKohei Misu
 

Mais procurados (20)

超簡単!Subversion入門 概念編
超簡単!Subversion入門 概念編超簡単!Subversion入門 概念編
超簡単!Subversion入門 概念編
 
シェル入門
シェル入門シェル入門
シェル入門
 
php7's ast
php7's astphp7's ast
php7's ast
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
 
190925 python-windows
190925 python-windows190925 python-windows
190925 python-windows
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編超簡単!Subversion入門 準備編
超簡単!Subversion入門 準備編
 
Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)Symfony2 workshop-0 (nagoya 2011/2/10)
Symfony2 workshop-0 (nagoya 2011/2/10)
 
Kickstart, Puppet, Docker
Kickstart, Puppet, DockerKickstart, Puppet, Docker
Kickstart, Puppet, Docker
 
Cost of ovs receiving process
Cost of ovs receiving processCost of ovs receiving process
Cost of ovs receiving process
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
Nas4 freeへzabbix agentを導入してみた
Nas4 freeへzabbix agentを導入してみたNas4 freeへzabbix agentを導入してみた
Nas4 freeへzabbix agentを導入してみた
 
"More" Introduction to Zend Tool
"More" Introduction to Zend Tool"More" Introduction to Zend Tool
"More" Introduction to Zend Tool
 
タスクマネージャーの上級版!Process Explorerの紹介
タスクマネージャーの上級版!Process Explorerの紹介タスクマネージャーの上級版!Process Explorerの紹介
タスクマネージャーの上級版!Process Explorerの紹介
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
Kubernetesできること
KubernetesできることKubernetesできること
Kubernetesできること
 
Metasploit framework
Metasploit frameworkMetasploit framework
Metasploit framework
 
覚えておきたい! zypper コマンドの使い方
覚えておきたい! zypper コマンドの使い方覚えておきたい! zypper コマンドの使い方
覚えておきたい! zypper コマンドの使い方
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
 

Destaque

Man-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchMan-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchAtsuhiko Yamanaka
 
an introduction to Distem
an introduction to Disteman introduction to Distem
an introduction to Distemnussbauml
 
A Hippopotamus for Christmas
A Hippopotamus for ChristmasA Hippopotamus for Christmas
A Hippopotamus for ChristmasBruno Lowagie
 
Four failures and one hit
Four failures and one hitFour failures and one hit
Four failures and one hitBruno Lowagie
 
Infrastructure as code might be literally impossible
Infrastructure as code might be literally impossibleInfrastructure as code might be literally impossible
Infrastructure as code might be literally impossibleice799
 
Startup Legal and IP
Startup Legal and IPStartup Legal and IP
Startup Legal and IPBruno Lowagie
 
Porting linux to a new architecture
Porting linux to a new architecturePorting linux to a new architecture
Porting linux to a new architectureKALRAY
 
All of Your Network Monitoring is (probably) Wrong
All of Your Network Monitoring is (probably) WrongAll of Your Network Monitoring is (probably) Wrong
All of Your Network Monitoring is (probably) Wrongice799
 
Digital Signatures: how it's done in PDF
Digital Signatures: how it's done in PDFDigital Signatures: how it's done in PDF
Digital Signatures: how it's done in PDFiText Group nv
 
Why vREST?
Why vREST?Why vREST?
Why vREST?vrest_io
 
Java 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListJava 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListTakipi
 
Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms Timothy Spann
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsBrendan Gregg
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016Brendan Gregg
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Brendan Gregg
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf toolsBrendan Gregg
 

Destaque (20)

Implementing SSH in Java
Implementing SSH in JavaImplementing SSH in Java
Implementing SSH in Java
 
Man-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSchMan-in-the-Middle Attack for SSH with Scala and JSch
Man-in-the-Middle Attack for SSH with Scala and JSch
 
an introduction to Distem
an introduction to Disteman introduction to Distem
an introduction to Distem
 
A Hippopotamus for Christmas
A Hippopotamus for ChristmasA Hippopotamus for Christmas
A Hippopotamus for Christmas
 
Four failures and one hit
Four failures and one hitFour failures and one hit
Four failures and one hit
 
ZUGFeRD: an overview
ZUGFeRD: an overviewZUGFeRD: an overview
ZUGFeRD: an overview
 
Infrastructure as code might be literally impossible
Infrastructure as code might be literally impossibleInfrastructure as code might be literally impossible
Infrastructure as code might be literally impossible
 
Startup Legal and IP
Startup Legal and IPStartup Legal and IP
Startup Legal and IP
 
Porting linux to a new architecture
Porting linux to a new architecturePorting linux to a new architecture
Porting linux to a new architecture
 
All of Your Network Monitoring is (probably) Wrong
All of Your Network Monitoring is (probably) WrongAll of Your Network Monitoring is (probably) Wrong
All of Your Network Monitoring is (probably) Wrong
 
Digital Signatures: how it's done in PDF
Digital Signatures: how it's done in PDFDigital Signatures: how it's done in PDF
Digital Signatures: how it's done in PDF
 
Vert.x vs akka
Vert.x vs akkaVert.x vs akka
Vert.x vs akka
 
Why vREST?
Why vREST?Why vREST?
Why vREST?
 
Java 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature ListJava 9 – The Ultimate Feature List
Java 9 – The Ultimate Feature List
 
Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms Ingesting Drone Data into Big Data Platforms
Ingesting Drone Data into Big Data Platforms
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 

Semelhante a JZlib and an aged fixed bug in java7

Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To ClojureKent Ohashi
 
ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10Kazuhisa Hara
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表などKikuta Go
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったかm2ym
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013Esehara Shigeo
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能Shinichiro Abe
 
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)tokuhy
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!KLab株式会社
 
cl-waffe2 実装
cl-waffe2 実装cl-waffe2 実装
cl-waffe2 実装hiketteinya
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装したt-sin
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)tamtam180
 
Scalaのimplicit、カリー化
Scalaのimplicit、カリー化Scalaのimplicit、カリー化
Scalaのimplicit、カリー化yuya-nakamura
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in LinuxTomofumi Hayashi
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるAtsushi KOMIYA
 

Semelhante a JZlib and an aged fixed bug in java7 (20)

Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10ZFS on Linux @ZFS Day 2011.10
ZFS on Linux @ZFS Day 2011.10
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
Solr 4.0 の主な機能
Solr 4.0 の主な機能Solr 4.0 の主な機能
Solr 4.0 の主な機能
 
InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 
Griffon10 in groovy_fx
Griffon10 in groovy_fxGriffon10 in groovy_fx
Griffon10 in groovy_fx
 
cl-waffe2 実装
cl-waffe2 実装cl-waffe2 実装
cl-waffe2 実装
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
Scalaのimplicit、カリー化
Scalaのimplicit、カリー化Scalaのimplicit、カリー化
Scalaのimplicit、カリー化
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
 
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみるDSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
 

JZlib and an aged fixed bug in java7