Giter Club home page Giter Club logo

clangsay's People

Contributors

844196 avatar sasairc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

844196 sndpl l4rzy

clangsay's Issues

stdinにデータが無い場合、その時点でプログラムを終了させるべきか否か

問題?

パイプの読み込み先として、存在しないコマンドの標準出力を指定した場合、現状では

% a | clangsay
zsh: command not found: a
 _-
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

という結果になり、加えてファイルにリダイレクトさせた場合は

% a | clangsay > test.txt
zsh: command not found: a
% cat test.txt
 _-
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

という具合に「言葉を失った可哀想な牛さん」のみ書き込みされてしまいます。

私自身、この振る舞いを以前から把握しており、本家cowsayも同じ振る舞いをすることに加えて、
特に不都合(バグではない訳だし、この振る舞いは好き)が無かったので放置をしていました。

これはあくまで一個人での判断ですので、もし不都合があれば「stdinにデータが無い場合、その時点でプログラムを終了させる」よう修正したいと思います。
「別にこのままで良いよ」という場合は、現状の状態を維持しますので、何かしら意見を書いて頂ければ嬉しいです。

default

Collaborators権限に関するガイドライン

「貴方の作ったcowfileを求む!」

今までに素敵なcowfileを作成して頂いた方(複数形ではない)へ、Collaborators権限を追加しました。
以上の権限を持つ方は、PRで私の認可を得ることなく、自由に追加や変更を行うことができます。

  1. ネタは問いません。なんでもござれ。
  2. cowfileを追加または変更した後、masterブランチへpushして下さい。
  3. AUTHORSへ作成したファイル名を含むクレジットを記述して下さい。
  4. masterブランチ宛であれば、別途作業ブランチを作成して頂いて構いません。
  5. 🍜

基本的に、ソースコードの修正はw_0.0.0のような「次期バージョン名」ブランチ上で行っているので、masterへ変更があれば、本ブランチへマージします。
また、./cows及びAUTHORS以外のファイルの編集に関しては、事前にtwitterやissueでご一報下さい。

ソースをサブディレクトリとして分割するか悩む

悩みの種

最初は甘く見てしまいトップディレクトリにベタ置きしていたけれど、
結構ファイルが増えてきて「大きくもなければ小さくもない」微妙な規模なので悩む。

試しに作業ディレクトリ内で作ってみたツリー

.
├── AUTHORS
├── Makefile
├── compdef
│   ├── Makefile
│   └── _clangsay.zsh
├── cows
│   ├── Makefile
│   ├── charlie.cow
│   ├── default.cow
│   ├── hand.cow
│   ├── hiyoko.cow
│   ├── ibm.cow
│   ├── iwashi.cow
│   ├── karl_marx.cow
│   ├── milk.cow
│   ├── null.cow
│   ├── renge.cow
│   ├── respawn.cow
│   ├── shinsei.cow
│   ├── threader.cow
│   ├── vim.cow
│   ├── yasuna.cow
│   ├── yasuna_2.cow
│   ├── yasuna_3.cow
│   ├── yasuna_3a.cow
│   ├── yasuna_4.cow
│   ├── yasuna_5.cow
│   ├── yasuna_6.cow
│   ├── yasuna_7.cow
│   ├── ymd_udon.cow
│   └── zen-noh-milk.cow
└── src
    ├── Makefile
    ├── clangsay.c
    ├── clangsay.h
    ├── config.h
    ├── file.c
    ├── file.h
    ├── info.c
    ├── info.h
    ├── memory.c
    ├── memory.h
    ├── string.c
    ├── string.h
    ├── subset.c
    └── subset.h

うーん・・・

ANSIエスケープシーケンスを考慮して欲しい

shell 2016-09-18 21-58-32

色付き文字をclangsayに通すと吹き出しの長さがANSIエスケープシーケンスもカウントされるため、吹き出しが長くなってしまいます。
吹き出しの長さはANSIエスケープシーケンスを除いた文字数で算出してほしいです。

バイプが壊れた場合や、空のファイルを渡した場合に期待した動作をしない

パイプの読み込み先として、存在しないコマンドを指定した際に起こるバグの修正。

1. メモリアドレス上の適当なデータ(変な文字)が出力される

  • 原因
    p_read_file_char()にて、x = y = 0だった場合の処理が抜けていた。
  • 対処
    同関数内に抜けていた処理の追加。

2. mbstrlen()で無限ループに陥る

  • 原因
    この中で呼ばれているmblen()-1を返すため。
  • 対処
    mblen()-1を返した場合、return 0として関数を出る。

おおかた修正したので、コミットに対して紐付けをし、しばらく経ったらcloseします。

milk.cowのファイル名変更について

cowsayCOWPATHを共有した際に、cowsay側のmilk.cowと衝突してしまうので、ファイル名の変更を考えています。
一個人としてはzen-noh-milk.cowを検討していますが、何か良いファイル名があれば提案して頂ければ嬉しいです。
n1000

macでビルド出来ない

#97 に続き844196さんからの報告。こちらはShared Library生成方法の差異(dylib)によるものなので、libbenly側のMakefile修正で対応可能であると思われる。

  • macでビルド出来ないその1

soname なんてオプションねーよと怒られる(https://stackoverflow.com/questions/4580789/ld-unknown-option-soname-on-os-x)

  • macでビルドできないその2
% make libbenly_cmd.so
cc  -c cmd.c -o cmd.o -fPIC -DLOCALE=\"\"
cc  cmd.o -o libbenly_cmd.so -shared -Wl,-install_name,libbenly_cmd.so.1
Undefined symbols for architecture x86_64:
  "_str_to_args", referenced from:
      _set_cmd_val in cmd.o
  "_trim", referenced from:
      _set_io_val in cmd.o
      _set_cmd_val in cmd.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libbenly_cmd.so] Error 1

末尾にEOCがないcowfileを指定し実行した際の挙動について

判断つかないので起票

末尾にEOCがないcowfileを指定し実行した際、cowsayの場合は「EOCが見つからない」としてエラーになるが、

$ renge | cowsay -f ./cows/respawn.cow
cowsay: Can't find string terminator "EOC" anywhere before EOF at cows/respawn.cow line 1, <STDIN> line 1.

clangsayでは特にエラーもなく正常終了する。

$ renge | clangsay -f ./cows/respawn.cow

これは期待される正しい挙動でしょうか?


今のところ末尾にEOCのないお行儀の悪いcowfileはrespawn.cowのみなので、確認が取れ次第修正プルリクエストを送ります...

AAのみのcowfileと、ANSIエスケープ文字を用いたドット絵cowfileを分ける

ss

問題

  • ドット絵cowfileは比較的大型になる傾向がある
    崩れるのはかなしい(かなしい)
  • 素のttyで利用する際の問題
    フレームバッファとしてvesafbuvesafbを利用した場合、256色表示ができない。
    KMSを利用した場合の挙動は未把握

解決案

ソースツリーをcows/asciiartcows/pixelartに分けた後、

  1. make install-cows-asciiartでアスキーアートなcowfileをインストール
  2. make install-cows-pixelartでドット絵なcowfileをインストール
  3. make install-cowsで従来通り、全cowfileをインストール

上記のよう修正し、インストール時の柔軟性を高めたい。

[ToDo(とど)] Debian用パッケージからcowsayを依存から外す

% dpkg -L cowsay | sort
/.
/usr
/usr/games
/usr/games/cowsay
/usr/games/cowthink
/usr/share
/usr/share/cowsay
/usr/share/cowsay/cows
/usr/share/cowsay/cows/apt.cow
/usr/share/cowsay/cows/beavis.zen.cow
/usr/share/cowsay/cows/bong.cow
/usr/share/cowsay/cows/bud-frogs.cow
/usr/share/cowsay/cows/bunny.cow
/usr/share/cowsay/cows/calvin.cow
/usr/share/cowsay/cows/cheese.cow
/usr/share/cowsay/cows/cock.cow
/usr/share/cowsay/cows/cower.cow
/usr/share/cowsay/cows/daemon.cow
/usr/share/cowsay/cows/default.cow
/usr/share/cowsay/cows/dragon-and-cow.cow
/usr/share/cowsay/cows/dragon.cow
/usr/share/cowsay/cows/duck.cow
/usr/share/cowsay/cows/elephant-in-snake.cow
/usr/share/cowsay/cows/elephant.cow
/usr/share/cowsay/cows/eyes.cow
/usr/share/cowsay/cows/flaming-sheep.cow
/usr/share/cowsay/cows/ghostbusters.cow
/usr/share/cowsay/cows/gnu.cow
/usr/share/cowsay/cows/head-in.cow
/usr/share/cowsay/cows/hellokitty.cow
/usr/share/cowsay/cows/kiss.cow
/usr/share/cowsay/cows/kitty.cow
/usr/share/cowsay/cows/koala.cow
/usr/share/cowsay/cows/kosh.cow
/usr/share/cowsay/cows/luke-koala.cow
/usr/share/cowsay/cows/mech-and-cow.cow
/usr/share/cowsay/cows/meow.cow
/usr/share/cowsay/cows/milk.cow
/usr/share/cowsay/cows/moofasa.cow
/usr/share/cowsay/cows/moose.cow
/usr/share/cowsay/cows/mutilated.cow
/usr/share/cowsay/cows/pony-smaller.cow
/usr/share/cowsay/cows/pony.cow
/usr/share/cowsay/cows/ren.cow
/usr/share/cowsay/cows/sheep.cow
/usr/share/cowsay/cows/skeleton.cow
/usr/share/cowsay/cows/snowman.cow
/usr/share/cowsay/cows/sodomized-sheep.cow
/usr/share/cowsay/cows/stegosaurus.cow
/usr/share/cowsay/cows/stimpy.cow
/usr/share/cowsay/cows/suse.cow
/usr/share/cowsay/cows/three-eyes.cow
/usr/share/cowsay/cows/turkey.cow
/usr/share/cowsay/cows/turtle.cow
/usr/share/cowsay/cows/tux.cow
/usr/share/cowsay/cows/unipony-smaller.cow
/usr/share/cowsay/cows/unipony.cow
/usr/share/cowsay/cows/vader-koala.cow
/usr/share/cowsay/cows/vader.cow
/usr/share/cowsay/cows/www.cow
/usr/share/doc
/usr/share/doc/cowsay
/usr/share/doc/cowsay/README
/usr/share/doc/cowsay/changelog.Debian.gz
/usr/share/doc/cowsay/changelog.gz
/usr/share/doc/cowsay/copyright
/usr/share/doc/cowsay/examples
/usr/share/doc/cowsay/examples/cowsay_random
/usr/share/man
/usr/share/man/man6
/usr/share/man/man6/cowsay.6.gz
/usr/share/man/man6/cowthink.6.gz
% dpkg -L clangsay | sort
/.
/usr
/usr/bin
/usr/bin/clangsay
/usr/share
/usr/share/clangsay
/usr/share/clangsay/compdef
/usr/share/clangsay/compdef/_clangsay.zsh
/usr/share/cowsay
/usr/share/cowsay/cows
/usr/share/cowsay/cows/charlie.cow
/usr/share/cowsay/cows/darvish.cow
/usr/share/cowsay/cows/drwtsn.cow
/usr/share/cowsay/cows/hand.cow
/usr/share/cowsay/cows/happy_mac.cow
/usr/share/cowsay/cows/hiyoko.cow
/usr/share/cowsay/cows/ibm.cow
/usr/share/cowsay/cows/iwashi.cow
/usr/share/cowsay/cows/karl_marx.cow
/usr/share/cowsay/cows/msdos.cow
/usr/share/cowsay/cows/null.cow
/usr/share/cowsay/cows/renge.cow
/usr/share/cowsay/cows/respawn.cow
/usr/share/cowsay/cows/sachiko.cow
/usr/share/cowsay/cows/shinsei.cow
/usr/share/cowsay/cows/steroid_hage.cow
/usr/share/cowsay/cows/threader.cow
/usr/share/cowsay/cows/vim.cow
/usr/share/cowsay/cows/yasuna.cow
/usr/share/cowsay/cows/yasuna_2.cow
/usr/share/cowsay/cows/yasuna_3.cow
/usr/share/cowsay/cows/yasuna_3a.cow
/usr/share/cowsay/cows/yasuna_4.cow
/usr/share/cowsay/cows/yasuna_5.cow
/usr/share/cowsay/cows/yasuna_6.cow
/usr/share/cowsay/cows/yasuna_7.cow
/usr/share/cowsay/cows/yasuna_8.cow
/usr/share/cowsay/cows/yasuna_9.cow
/usr/share/cowsay/cows/ymd_udon.cow
/usr/share/cowsay/cows/zen-noh-milk.cow
/usr/share/doc
/usr/share/doc/clangsay
/usr/share/doc/clangsay/AUTHORS
/usr/share/doc/clangsay/changelog.Debian.gz
/usr/share/doc/clangsay/copyright
/usr/share/man
/usr/share/man/ja
/usr/share/man/ja/man6
/usr/share/man/ja/man6/clangsay.6.gz
% ls -1 /usr/share/cowsay/cows | wc -l
82

結構溜まったし、そろそろ外しても問題ない・・・はず

cowファイルの提供について

初Issueです

現在メンテしてる844196/RengeSay ですが、機能自体はrenge.cowの同梱とcowsayのエイリアスなので、高機能版のclangsayに統合していただければそれはとっても嬉しいなって(MDK)

その他、charlie.cowも提供したく思います。同意が得られたらPRを切ります。

charlie.cow

2015-03-15_17-38-55 png


bxbza14cyaalsuc png-large

zshの補完ファイルで悩む

Makefileの21行目に定義されているCOWPATHを、make時に置き換えるようにし、
make installした時に、_clangsayも一括でインストールしたい。

悩み

  • $fpathが、zshのインストール方法によって左右される
    A. aptから入れれば/usr/share/zsh/site-function
    B. tar玉等から入れれば/usr/local/share/zsh/site-function
  • そもそも、zshを使っている人が少ない(bashとzshの補完関数には互換性が無い)

-R がセグフォで落ちる (Dockerコンテナビルド版)

844196さんからの報告。

  • -R がセグフォで落ちる(コンテナビルド版)
% docker run -it --entrypoint /bin/ash --rm clangsay:latest
/ # cd src
/src # clangsay hoge
 _____
< hoge >
 -----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
/src # clangsay -R 5 hoge
Segmentation fault
/src # echo $?
139

Debian GNU Linux (amd64, armhf) および、Travis CIでは再現性無し。
twitterでの報告からするに、recursive_msg()内で落ちているようなので、同関数内にbpを設定し追ってみたい所。画像をみた所、最初の子プロセス生成時には正しく動いているようであり、2回目で何らかの理由によりSIGSEGVが起きている模様。

Docker環境構築しないと再現しないのかね・・・?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.