`why the lucky stiff`
Tags: ruby, whytheluckystiff, hacker
Published: 2022-06-05 01:14:36

# `_why`

http://poignant.guide/book/chapter-6.html

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86ajfrmyn7ry6bfk0pk2.jpg)

Why’s (Poignant) Guide to Ruby [:wikipedia](https://en.m.wikipedia.org/wiki/Why's_%28poignant%29_Guide_to_Ruby)
>The book is unusual among programming books in that it includes much strange humor and many narrative side tracks which are sometimes completely unrelated to the topic. Many motifs have become inside jokes in the Ruby community, such as references to the words "chunky bacon". The book includes many characters which have become popular as well, particularly the cartoon foxes and Trady Blix, a large black feline friend of why's, who acts as a guide to the foxes (and occasionally teaches them some Ruby).

## [Translate this article from Japanese to English](https://rentry-co.translate.goog/_why?_x_tr_sl=ja&_x_tr_tl=en&_x_tr_hl=ja&_x_tr_pto=wapp)


13年前に[ネット自殺](http://www.slate.com/articles/technology/technology/2012/03/ruby_ruby_on_rails_and__why_the_disappearance_of_one_of_the_world_s_most_beloved_computer_programmers_.html)した(ネットダンシャリ？自殺って言うと自殺みたいだけど、[ネット上の自分の痕跡を消し去る](https://www.urbandictionary.com/define.php?term=infosuicide)ということの比喩としてだから、生物的に死んだというわけじゃないけど、インターネット上での痕跡を自ら消し去ったことについて "dead" とか "death" とか形容される。つまり、逆に言うとそれ以前がかなりアクティブでいきいきとして活動している感じが影響を与えていたアーティストであり)、Ruby プログラマー` _why` のことをたまたま昨日知って（xpath や html の parse について調べていて [Hpricot](https://github.com/hpricot/hpricot) というパーサーがあることに気がついて、なんだろう？と思ったから）、朝までずっと `_why` こと **why the lucky stiff** の事と、別件で片手キーボード( frogpad などの片手で全てタイピングできる仕様のキーボードについて)のことをネットで追っていて、起きてからずっと `_why` が書いた、彼が消し去った彼の本のコピー(再配布可能、商用利用可能のデータだから第三者によってサルベージされて公開されているが、あくまでも `_why` 自身は彼の過去ワークはすべて消し去って音信不通となっているような感じ) を読んでいた。

日陰にひきこもって、冷めたコーヒーを飲みつつ。


とても暑いので、ネコも洗って乾かした。


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kt2bs496jwx9nilqbto1.jpg)

**why the lucky stiff** については知らなかったが、知ったことでいろいろ謎だったことがつながった。

ここ最近古本で取り寄せた、[ぶ厚めのオライリーの Ruby 本について、なんでこんなインディーよりのグラフティみたいな挿絵が一枚入ってるのかな？と思ってたが、やはりそれはよく見るとwhy the lucky stiff の絵だった。](https://www.oreilly.co.jp/community/blog/2009/04/unidentified-popular-figure.html)[shoes というGUI があるらしい](https://github.com/shoes/shoes-deprecated)ことは知っていて、それも もともと _why によって作られていた。

Mr._why 's github mirror
https://github.com/whymirror/

Ruby について全く知らなかったので、だいたい 2009 年くらいまでの本を取り寄せて Ruby 関係の本は 5 冊になったが、どれも「仕事で使える達人の」？とかいうのは範囲ではなく、選んだのは言語の詳細のリファレンスとか、サンプルのコード見て雰囲気だけつかめそうなものだったので逆に薄く濃いものだったためか、なんとなく言語周辺のカルチャーを感じさせるものだった。

(最初に、
[恋するプログラム-Rubyでつくる人工無脳 秋山智俊](https://www.fukkan.com/fk/CartSearchDetail?i_no=68323271) ... 2005 年 
[Ruby で作る奇妙なプログラミング言語 原 悠](https://tatsu-zine.com/books/esoteric-language-programing-in-ruby) ... 2008 年 
[初めての Ruby Yugui](https://www.amazon.co.jp/初めてのRuby-Yugui/dp/4873113679) ... 2008 年初版2014年初版第十刷
という順で届いて半年くらいたって、
[プログラミング言語 Ruby David Flanagan](https://www.amazon.co.jp/プログラミング言語-Ruby-まつもと-ゆきひろ/dp/4873113946) ... 2009 年
一番最近で、[Ruby のしくみ](https://tatsu-zine.com/books/ruby-under-a-microscope-ja) 2014年 。
そして、どれもちゃんと読んでないけど、どれも的確に良いと思う。注意散漫でチラチラとしか読めてないので、他の本のこともしらないけれど、これから Ruby ってどんな言語がゼロから知りたいって場合は、[初めての Ruby](https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AERuby-Yugui/dp/4873113679) が一冊あればいいんじゃないかと思っていた。 )


`_why` の本 **Why’s (Poignant) Guide to Ruby** [:wikipedia](https://en.m.wikipedia.org/wiki/Why's_%28poignant%29_Guide_to_Ruby) は漫画で、面白そうな物語になっていて 2003 年から 2007 年あたりまでの作品のような感じ(全く確かではない)。
[本の中登場する最新版の Ruby は](http://www.aoky.net/articles/why_poignant_guide_to_ruby/expansion-pak-1.html)[バージョン 1.8.2](https://www.ruby-lang.org/en/news/2004/12/26/ruby-182-released/)。

ネット上にいろいろ ( 愛されて ) 保存 ( 保管 ) されてて、[ダウンロード可能になっている。](https://libgen.is/search.php?req=Why%E2%80%99s+%28Poignant%29+Guide+to+Ruby&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def)

**why the lucky stiff (= `_why`)** は理由は不明だが 2009 年 8 月 19 日に、すべての著作を消したと言われていて、2009 年という時代背景を日本で起こったことでふりかえってみると、リーマンショックの約一年後で winny 騒動の裁判で
>[「 2009 年 10 月 8 日、大阪高等裁判所は、一審の京都地裁判決を破棄し、金子に無罪を言い渡した」](https://internet.watch.impress.co.jp/docs/news/320251.html)

文言は[wikipedea :Winny 事件](https://ja.m.wikipedia.org/wiki/Winny事件) から。

インディーゲーム cave story
> [「 2008 年10月3日、ニンテンドー・オブ・アメリカのプレスリリース、および開発者のサイトにおいて、海外向けにWiiウェア版の配信が発表された（日本国内での配信は未定）。2010 年 9 月には、北米向けにニンテンドーDSiウェア版の配信が発表された。」](https://ja.m.wikipedia.org/wiki/洞窟物語)
 
など。
エンターテイメント界では、マイケル・ジャクソンというスターが亡くなったのが 2009 年だった。


**「ホワイの(感動的)Rubyガイド」青木靖 訳**
http://www.aoky.net/articles/why_poignant_guide_to_ruby/index.html

![https://rentry.co/vkr8s](https://rentry.co/vkr8s/png)


**mislav によるサルベージ版 github**
https://github.com/mislav/poignant-guide
>On August 19, 2009 Why the Lucky Stiff removed every trace of his work from the Web, including this book: the Poignant Guide to Ruby.
>I've salvaged the book from the Internet archive and re-published it. The original work was under the Attribution-ShareAlike license.

http://poignant.guide/

https://archive.org/details/TheSoundtrackToWhyspoignantGuideToRuby
>The soundtrack to "why's (poignant) guide to ruby" tutorial that was taken offline. The Internet Archive's version is still available here:
http://web.archive.org/web/20070704022347rn_1/poignantguide.net/ruby/


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/27aig78gs5bavj85jfvc.jpg)

実際おもしろい。少し自分をマイノリティーサイドに表現していて、完全に人と上手に付き合えないという性質を告白した上で、ストーリーが進んでいく。まだ最初の方しか読んでいないけど。一人もくもくと創造していく創作物という感じ。インディーズ game のような雰囲気で、一体どんなこと考えているんだ？という好奇心がうまれる。
> Chapter 2: Kon'nichi ha, Ruby 
> -d: How Books Start
> 
>One problem here. I don’t get along well with people. I don’t hold hands very well.

[chapter 3: Regular Expressions](https://crieit.now.sh/upload_images/28be8148925559ca3b5fa789b28246a762942a15142b0.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oy90u4y9h0c18w1ma4pr.png)
(http://poignant.guide/images/the.foxes-6.png)


Ruby についてほとんど知らないので、ストーリーの流れでプログラムの言語を教えるという作りで(それは、[恋するプログラム](https://www.fukkan.com/fk/CartSearchDetail?i_no=68323271) もやや近い)、おそらくいちばん最初に読むべき内容であって、よく知らないと、その本自体の情報にいきつかないので、存在が見えないという幻の本かもしれないし、いまちょうどいい。絵がすごくかわいい。

[Chapter5:The Mechanisms of Name-Calling](https://crieit.now.sh/upload_images/f494e07d32c008e3cc2788ef2c4141a16294074cea432.gif)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2qqqo59jzpb56q8lodu5.gif)(http://poignant.guide/images/my.daughters.organ-2.gif)

紙の本も出ていて、[Lulu からのオンデマンド](https://www.lulu.com/search?adult_audience_rating=00&page=1&pageSize=10&q=_why+the+lucky+stiff)か、海外発送の古本かというところ。紙で欲しい。2 冊くらい。

---

[Diogo Terror may 15, 2010
_Why: A Tale Of A Post-Modern Genius](https://www.smashingmagazine.com/2010/05/why-a-tale-of-a-post-modern-genius/)
>QUICK SUMMARY ↬ Why the Lucky Stiff was one of the brightest and most inspiring programmers in activity. He became famous through a series of blogs and through the incredible amount of open-source projects that he maintained over the course of more than seven years.

---

[_why's Estate](https://viewsourcecode.org/why/index.html
)
>Hey, welcome to my collection of why the lucky stiff links. Everything _why has published on the internet should be accessible from here. It works sort of like a museum that sells maps. Many of his abandoned writings are mirrored locally here, and everything else is through external links. To download the Estate perhaps for local viewing, get why.zip (5.8 MB).

---

[The Little Coder's Predicament](https://viewsourcecode.org/why/hacking/theLittleCodersPredicament.html) by why the lucky stiff june 10, 2003

---

**Why The Lucky Stiff Documentary**
{% embed https://youtu.be/64anPPVUw5U %}

>This is the documentary about Why The Lucky Stiff, an artist and software innovator who  disappeared from the Internet in 2009, taking down all his code and artwork ("infosuicide"). Ten years in the making, this documentary presents a portrayal of the artist, his influence and the possible reasons behind his disappearance.
>Years later, _why released more art and his own explanation for his disappearance, streamed live to printers connected to the Internet. A very innovative artist, he will be missed but his art lives on.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7n5dox4fwl5jv6826ov.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/35af0uqg4jl0vddykrhb.png)

このドキュメンタリーの冒頭とラストに出演しているのは Ruby の Nokogiri（XML / HTML パーサーで web スクレイピングに使われる） [:wikipedia](https://en.m.wikipedia.org/wiki/Nokogiri_%28software%29) の作者 Aaron Patterson と思われる。Nokogiri  と同等の用途に使われてい（た）るもののうちの一つ [Hpricot](https://github.com/hpricot/hpricot) のオリジネーターが `_why` だから対比としてキャスティングされているのかもしれない。

---


ところで、ほんとうにチャプター 8 "Heaven's Harp" は存在しないんだろうか？
https://github.com/mislav/poignant-guide
>Chapter 8: Heaven's Harp was never recovered. I suspect _why started drawing it, but never finished or published.

---

Madison Ruby 2013 CLOSURE by Steve Klabnik
{% embed https://www.youtube.com/watch?v=MaWHVceDbFo %}

documentary に出演していた Klabnik が語る CLOSURE === _why


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7lcmm8wmmfk0zeyydsb2.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imfua9k76imm5gidty69.png)


google colab

```python
pip install youtube_transcript_api
pip install googletrans==4.0.0-rc1
from youtube_transcript_api import YouTubeTranscriptApi
from googletrans import Translator
from google.colab import files
import time

video_id = 'MaWHVceDbFo' ## youtube video_id
line =[]
line[:] = YouTubeTranscriptApi.get_transcript(video_id,languages=['en'])

text_list = []
for l in line:
    ##print("text: ", l['text'])
    ##print("start:", l['start'])
    ##print("duration:", l['duration'])
    
    l['text']=l['text'].strip()
    l['text']=l['text'].rstrip('\n')
    l['text']=l['text'].replace('\n',' ')
    text_list.append(l['text'])
##print(line)    
del line
##print(text_list)

print()
print("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
print("YouTube captions")
print("- - - - - - - - - - - - - - - - - - -  YouTube  - - - - - - - - - - - - - - - - - - -")
print()
print()
line = YouTubeTranscriptApi.list_transcripts(video_id)    

transcript = line.find_transcript(['en'])
##print(transcript.fetch())
for count, dict_obj in enumerate(transcript.fetch()):
    print( count +1, dict_obj['text'] )
print()
print()
print("************************************************************************************")
print()
print("Youtube captions")
print("- - - - - - - - - - - - - - - - - - translated - - - - - - - - - - - - - - - - - - -")
print()
print()
translated = transcript.translate('ja')
for count, dict_obj in enumerate(translated.fetch()):
    print( count+1, dict_obj['text'] )
print()
print("-----------------------------------------------------------------------------------")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - -  googletrans  - - - - - - - - - - - - - - - - - -")
print()
print()
####line_list = []
####for l in text_list:
####    line_list.append(l.replace('\n',' '))
##text_list[:] = [a for a in text_list if a != ' ']
##text_list[:] = [l.replace('\n',' ') for l in text_list]


text_compo = [] ##2 lines to 1 line
i = 0
txt = ''
for count,l in enumerate(text_list):
    if i == 0:
      txt += l
      i = i + 1
      text_compo.append(txt)
    elif i == 1:
      txt += ' ' +l
      text_compo.pop()
      text_compo.append(txt)
      i = 0
      txt = ''

for count, l in enumerate(text_list):
    print(count+1,l)
print()
print("************************************************************************************")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - -  translated - - - - - - - - - - - - - - - - - - -")    
print()
print()
#translator = Translator()

#for count, l in enumerate(text_list):
#    translated = translator.translate(l, dest='ja')
#    ##print(count+1, l)
#    print(count+1, translated.text)

num = 5
#obj_num = 1

#for count, l in enumerate(text_list):
#    if count+ 1 < num:
#        translated = translator.translate(l, dest='ja')
#        print(count+1, l)
#        print(count+1, translated.text)
#    else:
#        translated = translator.translate(l, dest='ja')
#        print(count+1, l)
#        print(count+1, translated.text)        
#        del translator
#        num = num + 5
#        #obj_num = obj_num + 1
#        #print("")
#        #print("--- translator :", obj_num)
#        #print("")
#        translator = Translator()
#
#del translator
print()
print("------------------------------------------------------------------------------------")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - - - 2 lines to 1 - - - - - - - - - - - - - - - - - -")    
print()
print()

for count, l in enumerate(text_compo):
    print(count+1,l)
print()
print("************************************************************************************")
print()
print("google translate API")
print("- - - - - - - - - - - - - - - - - - translated - - - - - - - - - - - - - - - - - - -")    
print()
print()
#for count, l in enumerate(text_compo):
#    translated = translator.translate(l, dest='ja')
#    ##print(count+1, l)
#    print(count+1, translated.text)

translator = Translator()
num = 5
#obj_num = 1
filename = 'subtitle.txt'
with open(filename, 'w') as f:


  for count, l in enumerate(text_compo):
      if count + 1 < num:
        time.sleep(0.5)
        translated = translator.translate(l, dest='ja')
        print(count+1, l)
        linenum = f'{(count+1)}'
        f.write(linenum)
        f.write('  ')
        f.writelines(l)
        f.write('\n')
        print(count+1, translated.text)
        f.write(linenum)
        f.write('  ')
        f.writelines(translated.text)
        f.write('\n')
        f.write('\n')
      else:
        translated = translator.translate(l, dest='ja')
        print(count+1, l)
        linenum = f'{(count+1)}'
        f.write(linenum)
        f.write('  ')
        f.writelines(l)
        f.write('\n')
        print(count+1, translated.text)
        f.write(linenum)
        f.write('  ')      
        f.writelines(translated.text)
        f.write('\n')
        f.write('\n')
        del translator
        num = num + 5
        #obj_num = obj_num + 1
        #print("")
        #print("--- translator :", obj_num)
        #print("")
        translator = Translator()
  f.close()
files.download(filename)
del translator
print()
print()
print("************************************************************************************")
print()
print("Thank you.")
```

https://rentry.co/_why_2013/