どう書くの「出力の一時停止と再開」をperlのthreadで

書いてみた

最初に書いたのがこれ。

use strict;
use threads;
use threads::shared;

$| = 1; 

my $f : shared;
my $ob = threads->create(\&observe);
my $pr = threads->create(\&print_a); 

$ob->join();
$pr->join();

sub observe {
 my $i;
 while(1){
   $i = <STDIN>;
   chomp($i);
   exit if $i eq 'q';
   if ($i eq 'p'){
     $f == 1 ? $f-- : $f++;
   } 
 }
}

sub print_a {
 while(1){
   if($f == 1){
     print "a";
     sleep 1;
   } 
 }
}

Term::ReadLineがよくわからなかったので、あえて使わずに書いてみたら相当ダメな感じになってしまったので、Web+DB Pressを引っ張りだしてきて書き直して投稿。

つけ麺TETSU

品川駅の近くのとこのラーメン屋がいっぱいはいってるところ

1211631803 1211631809 1211631801

麺が太い、削り節が濃厚でうまい。ガシガシ食べる系。

SRM171-DIV2-250

"3d18"みたいな文字列を二つのintに分けるのにfindとsubstrを使ったが、

string dice = "3d18";
int j = dice.find("d");
int rolls = atoi(dice.substr(0,j).c_str());
int num = atoi(dice.substr(j+1,dice.length() - j - 1).c_str());

そういう場合にはsscanfでよいらしい。

string dice = "3d18";
int n,s;
sscanf( dice.c_str(), "%dd%d",&n,&s);

それにしてもsplitがないのが不便だな。

TopCoderをやってみたヨ

c++を学ぶのによさげなのでTopCoderのpracticeを解いていたんだけど、ちょうど深夜1時にSRM402があったので、ふと参戦してみようと思った。

で、参戦した。

250点と500点問題を解いた。250点問題は問題の意図を間違えていて、あわてて修正したのでかなりロスった。500はやけに簡単ダナァと思ったら、ダブルデータという落とし穴があった(僕を含め、何人かはこれで撃墜されてた)。

チャレンジタイムとかいう、バグリそうなテストデータを突っ込んでみようタイムがやたらと楽しい。見てただけだけど、ヒトのコードを見ながら色々考えるので、この時間は結構勉強になるな。

初参加の僕は真っ先に標的にされてあっさり500点問題を撃墜されたけど、いわゆる念の洗礼というやつか。

それから今回、同じ組には、初参加は僕の他に3人いたけど、そのうち2人は1問も解いてなかった。みんなそんな感じで参加しにくるのかと。

というわけで、緑色だ。

sortした時に最大値を得るのにnums[nums.size()-1]とやったけど、*--nums.end()でもいいのかね。最小値はnums[0]でも*nums.begin()でわかりやすいのに。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main () {
  vector <int> vec;
  vec.push_back(4);
  vec.push_back(7);
  vec.push_back(6);
  vec.push_back(3);
  sort(vec.begin(), vec.end());
  cout << *--vec.end() << endl; // 7
}

高砂と楯野川

最近飲んだやつ

高砂「純米」

1211631804

静岡の酒米「誉富士」を使用。誉富士はなんか酸味が足りないっていうか緩い感じになる気がする。高砂なのにどしっとした感じがしない。高砂の山廃はちょっと濃すぎる感があるので、このくらいがいいかも。

楯野川

1211631807

島田酒店で購入。すっきりしている感じ。

Catalystの7章

最近Jemplateを使っているので、RESTとJemplateでAjaxの章をもう一度やった。

サンプルは一カ所修正。

#__PACKAGE__->config->{serialize}{default} = 'JSON';
__PACKAGE__->config->{default} = 'text/x-json';

ProductName Catalyst: Accelerating Perl Web Application Development
Jonathan Rockway
Packt Publishing / 3545円 ( 2007-11-30 )


本を論文に読み替えるといい

本は「欲しい」という前に買え

結局、本に興味をもつ目、本を選ぶ目って、その人の好奇心の広さ・深さであり、その人の問題意識の広さ・深さなわけですよ。自分がどれだけ普段問題意識をもって生活できているか。そこです。問題意識をもたずに過ごしてたら、そりゃ成長しないですよね。

たしかに。

僕が会社に入った時に一緒に仕事をしてたウェットのヒトが、常に論文を積んでいてちょっとでも実験の空き時間があるとそれらの論文を片っ端から読むというヒトだったので、僕もなんとなく感化されて面白そうな論文は積んどいて乱読する癖がついた。感謝してます。

あと、仕事が忙しくて論文を読む暇がない(ので読んでません)ってのは言い訳かな?自分のキャリアをどう考えてんだろ?なんて思う事があるけど、よくわからない。

c++で文字列の繰り返し

perlだと

say "abc" x 3 # abcabcabc

と書けるところをc++だと

string ret = "";
for(int i=0;i<3;i++) ret += "abc";
cout << ret << endl;

と書かないといけないのか?

template toolkit mode

最近また、Catalystで色々作っているので、昔のエントリを探してTT modeの設定をした。

;;tt
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist
      (cons
       '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist
      (cons
       '("\\.tt2$" . html-helper-mode) auto-mode-alist))
(require 'html-tt)
(add-hook 'html-helper-mode-hook 'html-tt-load-hook)
(add-hook 'html-helper-mode-hook '(lambda () (font-lock-mode 1)))

そして、Jonathan Rockwayのトークは聴いておくべきだったかなとスライドみながら思った。

catalystのE-Bookは本を買うと安く買えたので、ついでに買っておいたけど、本を見るまでもないときなんかに調べものができたりとか、検索できるので意外と重宝している。