<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-511137994103847167</id><updated>2024-11-13T15:11:11.492+09:00</updated><category term="ファイル入力"/><category term="数値計算"/><category term="文字列操作"/><category term="ファイル出力"/><category term="ネットワーク"/><category term="ファイル操作"/><category term="プロセス起動"/><category term="トークン処理"/><category term="乱数発生"/><category term="引数解析"/><category term="コンソール入力"/><category term="動的確保"/><category term="ソート"/><category term="ダウンロード"/><category term="バイナリファイル"/><category term="ビット演算"/><category term="プロセス間通信"/><category term="画像処理"/><category term="クラス化"/><category term="メモリマッピング"/><category term="CSVファイル"/><category term="ソケット通信"/><category term="リダイレクション"/><category term="時間計測"/><category term="関数ポインタ"/><category term="Perl"/><category term="WAVEファイル"/><category term="libcurl"/><category term="シグナルハンドラ"/><category term="変換"/><category term="構造体"/><category term="計算機イプシロン"/><category term="誤り検出"/><category term="HTTPリクエスト"/><category term="Linux"/><category term="Makefile"/><category term="PNM画像"/><category term="libgd"/><category term="システムログ"/><category term="スクリプト"/><category term="スレッド処理"/><category term="ハッシュ"/><category term="バイトオーダー"/><category term="ビットマップ"/><category term="フォーマット"/><category term="基数"/><category term="時刻取得"/><category term="確率統計"/><category term="組み合わせ"/><category term="非線形方程式"/><category term="音声"/><category term="16進文字列"/><category term="2分木"/><category term="2進文字列"/><category term="CGI"/><category term="C言語"/><category term="HTTPS"/><category term="UNICODE"/><category term="cpp2html"/><category term="libavcodec"/><category term="アセンブラ"/><category term="ニュートン法"/><category term="ファイルサイズ"/><category term="フォント"/><category term="マクロ"/><category term="ユーティリティ"/><category term="平均値"/><category term="日本語処理"/><category term="最大・最小値"/><category term="標準偏差"/><category term="積分"/><category term="要望"/><category term="順列"/><category term="2分法"/><category term="2項分布"/><category term="64bit対応"/><category term="AAC"/><category term="ADTS"/><category term="Android"/><category term="FFMPEG"/><category term="FIFO"/><category term="GLUT"/><category term="JPEG"/><category term="Javascript"/><category term="NTP"/><category term="OpenGL"/><category term="STL"/><category term="Samba"/><category term="TCP FAST OPEN"/><category term="Twitter"/><category term="UDP"/><category term="USB"/><category term="asound"/><category term="curl"/><category term="html2txt"/><category term="oauth"/><category term="udev"/><category term="はさみうち法"/><category term="インストール"/><category term="インターバルタイマ"/><category term="エスケープシーケンス"/><category term="カーソル"/><category term="グラフ描画"/><category term="コンパイル"/><category term="シンプソンの公式"/><category term="スレッドセーフ"/><category term="セカント法"/><category term="チェックサム"/><category term="ヒストグラム"/><category term="ファイル一覧"/><category term="ベクトルデータ"/><category term="ベクトル演算"/><category term="メッセージキュー"/><category term="メール"/><category term="リエントラント"/><category term="レーベンシュタイン距離"/><category term="一時ファイル"/><category term="体積"/><category term="共有メモリ"/><category term="共用体"/><category term="再帰呼び出し"/><category term="可変引数リスト"/><category term="台形方式"/><category term="名前付きパイプ"/><category term="周期処理"/><category term="四面体"/><category term="多倍長演算"/><category term="排他処理"/><category term="掲示板"/><category term="文字列処理"/><category term="木構造"/><category term="検索"/><category term="標準関数"/><category term="正規化"/><category term="環境変数"/><category term="直線近似"/><category term="相関係数"/><category term="絵文字"/><category term="行列"/><category term="質問"/><category term="面積"/><title type='text'>謎のC言語ブログ</title><subtitle type='html'>&lt;a href=&quot;http://hatenaclang.blogspot.com/2011/03/c.html&quot;&gt;はじめに&lt;/a&gt;、&lt;a href=&quot;http://akigamyl.bbs.fc2.com/&quot;&gt;掲示板&lt;/a&gt;、&lt;a href=&quot;http://hatenaclang.blogspot.com/2011/03/c_12.html&quot;&gt;標準関数一覧&lt;/a&gt;、&lt;a href=&quot;http://hatenaclang.blogspot.com/2011/04/thema.html&quot;&gt;テーマ別分類&lt;/a&gt;&#xa;&lt;br&gt;ラベルから目的の例題を探せます（検索の際には「C言語」の文字は必要ありません）。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>182</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-378152745084791913</id><published>2021-07-31T23:06:00.002+09:00</published><updated>2021-07-31T23:06:46.026+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="スクリプト"/><title type='text'>動画ファイルの一覧を作成し、ファイルサイズ順に並べ替えて出力するスクリプト</title><summary type="text">容量の大きな動画ファイルに ffmpeg で再エンコードを掛けたい場合等に、ファイルの一覧を作成して容量順にソートするスクリプトです。
カレントフォルダ以下の動画ファイルを並べ替えて出力します（対応する拡張子は @mvext で指定）。


#!/usr/bin/perl -w

use strict;
use Cwd;
use Getopt::Std;
use File::Basename;

my @mvext = (&#39;mp4&#39;,&#39;avi&#39;,&#39;mkv&#39;,&#39;wmv&#39;);
my $cwd = getcwd();
my %opts; getopts(&quot;hl:&quot;, \%opts) or die usage();
my $limit = 0;
for my $opt (keys %opts) {
    if ( $opt eq &#39;h&#39;) { usage(); }
	elsif ($opt </summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/378152745084791913/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/378152745084791913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/378152745084791913'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/blog-post.html' title='動画ファイルの一覧を作成し、ファイルサイズ順に並べ替えて出力するスクリプト'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-2811819659945025474</id><published>2021-07-17T00:11:00.006+09:00</published><updated>2021-07-17T00:14:53.393+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="スクリプト"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル一覧"/><title type='text'>VLC用のプレイリストを作成するスクリプト</title><summary type="text">色んな環境で利用できる VLC ですが、サブフォルダの展開が行われず、ランダム再生しようとしてもトップのフォルダしか再生されないと言うことが多々あります。
サブフォルダを一つ一つリストからクリックして展開すると利用可能になりますが、あまりにも使い勝手が悪いので、その手間を省く方法を考えてみました。

以下のスクリプトを実行すると、XSPF と言う XML形式のプレイリストが出力されます。
出力される内容をファイル保存し、VLC で再生するとサブフォルダの内容もはじめから展開された形で再生が可能になります。


#!/usr/bin/perl -w

use strict;
use Cwd;
use URI::Escape;

my @mvext = (&#39;mp4&#39;,&#39;avi&#39;,&#39;mkv&#39;,&#39;wmv&#39;);
my @movies = ();
my $cwd = getcwd();

# 引数が</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/2811819659945025474/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/vlc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/2811819659945025474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/2811819659945025474'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/vlc.html' title='VLC用のプレイリストを作成するスクリプト'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-1618558391531618739</id><published>2021-07-09T21:19:00.003+09:00</published><updated>2021-07-09T21:20:32.776+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="スクリプト"/><title type='text'>自宅PCのグローバルIPアドレスをメール送信するスクリプト</title><summary type="text">自宅PCのSFTP等にアクセスしたいとき、自宅サーバーのアドレスを外部サーバー等を利用せずに定期的に知らせてくれるスクリプトを書いてみました。
Postfix で Gmail へ送信できる環境を整えておき（OSX postfix 等参照）、グローバルIPが変更される度にメールを送信してくれるスクリプトになります。

  スクリプトを実行すれば curl が http://ifconfig.co/ にアクセスしてIPアドレスを取得し、その結果をコンフィグファイルに書き出します。
  その結果が変更されればメールを送信します。
  crontab に登録しておけばアドレスが変更されても自宅PCにアクセスすることができます（まだ未検証ですが）。



#!/usr/bin/perl -w

use strict;

my $mail = &quot;#####\@gmail.com&quot;;
my $</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/1618558391531618739/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/pcip.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1618558391531618739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1618558391531618739'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2021/07/pcip.html' title='自宅PCのグローバルIPアドレスをメール送信するスクリプト'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-4466538498998597789</id><published>2020-01-03T23:57:00.001+09:00</published><updated>2020-01-04T00:07:11.483+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libcurl"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><title type='text'>libcurl を用いた画像のPOST(multipart/form-data or raw 形式)</title><summary type="text">libcurl を用いて画像をPOST(multipart/form-data or raw 形式)する例題です。


multipart/form-data にて Base64化された送信（CURL_PostFormMedia）と、バイナリ形式での送信（CURL_PostRawMedia）をそれぞれ切り替えて利用することが出来ます。
サーバー側の実装例も合わせて記載（CGIを実行する際の引数で受信する形式を切替）。

multipart/form-data で送信する際には、ファイルが埋め込まれたフィールド名(&amp;lt;input type=&quot;file&quot; name=&quot;file&quot; /&amp;gt;)を送受信側で合わせる必要があります。
サーバー側の form 内に、&amp;lt;input type=&quot;file&quot; name=&quot;file&quot;&amp;gt; と記載されている場合には name で指定されている &quot;</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/4466538498998597789/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2020/01/libcurl-postmultipartform-data-or-raw.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4466538498998597789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4466538498998597789'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2020/01/libcurl-postmultipartform-data-or-raw.html' title='libcurl を用いた画像のPOST(multipart/form-data or raw 形式)'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-3565028357912667652</id><published>2019-01-01T00:35:00.001+09:00</published><updated>2019-01-01T01:09:11.503+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libgd"/><category scheme="http://www.blogger.com/atom/ns#" term="UNICODE"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル出力"/><category scheme="http://www.blogger.com/atom/ns#" term="フォント"/><category scheme="http://www.blogger.com/atom/ns#" term="文字列処理"/><category scheme="http://www.blogger.com/atom/ns#" term="画像処理"/><title type='text'>フォントを指定して文字列画像の作成（libgd）：絵文字対応</title><summary type="text">フォントを指定して文字列画像の作成（libgd）する例題です。

文字列中の絵文字を、twemoji にて用意されている絵文字画像で置き換えながら描画していきます。
指定されたフォントで割り当てられていない文字や絵文字は「?」で表示されます。
また、UTF-8 文字列を UNICODE化（32bit）し、Freetype により一文字ずつ描画可能な文字かどうかを判定しています（FT_Get_Char_Index）。

ビルドするには libgd/freetype2/libpng が必要となります。
実行ファイルと同じパスに NotoSansCJKjp-Regular.otf と、twemoji からダウンロードした絵文字画像を配置してください。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/3565028357912667652/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2019/01/libgd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/3565028357912667652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/3565028357912667652'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2019/01/libgd.html' title='フォントを指定して文字列画像の作成（libgd）：絵文字対応'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGNDqy2gxyQNz19FNsJhjvUhqonbnJpL68ZcDnrUyh2E74_Tj65OBtGtgu0V_ZXUeA59Zk9Bw96hbFXIf-SGgFdp4Le6ruCcCCi9bXftY8wlwJrzdgKDK_EulzLG1hkS-p4Iujq_K0TBU/s72-c/center.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-197151994661913668</id><published>2018-12-29T12:33:00.002+09:00</published><updated>2019-01-01T00:41:30.442+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="UNICODE"/><category scheme="http://www.blogger.com/atom/ns#" term="文字列操作"/><category scheme="http://www.blogger.com/atom/ns#" term="絵文字"/><title type='text'>UTF-8文字列をUNICODE化し、絵文字判別</title><summary type="text">UTF-8で指定された文字列をUNICODE化し（32bit）、絵文字かどうかを判定する例題です。

絵文字かどうかの議論は色々あるかと思いますが、twemoji 内に格納されている絵文字を基準としています。
→ emoji-png フォルダに png として保存し、ファイルを検索してチェック

絵文字かどうかを判定した後は元のUTF-8に戻し、標準出力へ出力しています。
絵文字に対応していないフォントを用いているUI等では、絵文字が表示されない場合がありますので、絵文字の部分は twemoji 内の png で置き換えて表示したりすることができます。


#include 
#include 
#include 
#include         // uint*_t
#include 
//-----------------------------------------------</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/197151994661913668/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2018/12/utf-8unicode.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/197151994661913668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/197151994661913668'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2018/12/utf-8unicode.html' title='UTF-8文字列をUNICODE化し、絵文字判別'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-3990094352885939162</id><published>2018-09-23T04:14:00.002+09:00</published><updated>2018-09-25T23:31:32.108+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WAVEファイル"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル入力"/><category scheme="http://www.blogger.com/atom/ns#" term="音声"/><title type='text'>Broadcast Wave Format に対応した WAVE 音声の読み込み</title><summary type="text">Broadcast Wave Format に対応した WAVE 音声の読み込みの例題です。
Broadcast Wave Format (BWF) は、マイクロソフトのWAV音声ファイルフォーマットの拡張であり、映画やテレビで使われているノンリニアデジタルレコーダーの録音フォーマットとしてよく使われている。 

WAVEファイルの読込み/再生 での例題で WAVEファイルを読み込んだ際、ヘッダ部分がうまく取得できないWAVEファイルが存在していました。
中身を見ると、フォーマット用のチャンク部分に「fmt 」ではなく、「bext」と記載されているファイル形式のファイルでした。
PCMの音声データ部分のチャンクは「data」から始まり、PCM音声部分の抜き取りは正常に動作していたのですが、元の音声の形式がどのようなものかを正常に取得できていないので困ることになります。

なので、この「</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/3990094352885939162/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2018/09/broadcast-wave-format-wave.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/3990094352885939162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/3990094352885939162'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2018/09/broadcast-wave-format-wave.html' title='Broadcast Wave Format に対応した WAVE 音声の読み込み'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-4125552351207496607</id><published>2017-09-02T22:12:00.001+09:00</published><updated>2017-09-02T22:15:24.174+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTTPS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTPリクエスト"/><category scheme="http://www.blogger.com/atom/ns#" term="libcurl"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><category scheme="http://www.blogger.com/atom/ns#" term="排他処理"/><title type='text'>libcurl による連続取得における排他処理</title><summary type="text">HTTPS コネクション時の libcurl による連続GET にて HTTPS への GET リクエストを行う際、curl ハンドラを初期化せずに利用した方が高速にダウンロードされると言う例題を記載しましたが、別のスレッドでタイミングがバラバラに GET したい場合、排他処理にて安全性を確保するための例題です。

libcurl 自体はスレッドセーフ化されているので、curl_easy_init にて毎回ハンドラを初期化し利用すれば何の問題もなく別のスレッドで GET リクエストを行えますが、同じハンドラを使いまわしたい場合には同じタイミングで同じハンドラが利用されないように排他処理を行っておく必要があります（今回のような特別な用途でないかぎりは全く必要のない例題です）。

pthread_mutex_lock にて排他処理を行っているので、GET リクエストが並列化されるわけではない</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/4125552351207496607/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/09/libcurl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4125552351207496607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4125552351207496607'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/09/libcurl.html' title='libcurl による連続取得における排他処理'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-7359877927398294196</id><published>2017-08-14T14:00:00.000+09:00</published><updated>2017-08-15T09:33:44.037+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libcurl"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><title type='text'>libcurl-multi による並行GETリクエスト</title><summary type="text">libcurl-multi による並行GETリクエストを行う例題です。

例題では複数のURLを指定し並列にGETリクエストを行い、その結果を用意した char 型のバッファ内に格納しています。
HTTPS で連続取得を行う場合にはこちらで試した方法の方が高速な場合があります。

#include 
#include 
#include 
#include 
#include 
#include 
//----------------------------------------------------------------------------------------------------
#define HTTP_BUFFER    (65536*2)
struct HttpInfo { int status; char url[256], buffer[</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/7359877927398294196/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/08/libcurl-multi-get.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7359877927398294196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7359877927398294196'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/08/libcurl-multi-get.html' title='libcurl-multi による並行GETリクエスト'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-7013870668878262059</id><published>2017-08-11T20:11:00.001+09:00</published><updated>2017-08-12T23:23:48.267+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTTPS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTPリクエスト"/><category scheme="http://www.blogger.com/atom/ns#" term="libcurl"/><category scheme="http://www.blogger.com/atom/ns#" term="TCP FAST OPEN"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><category scheme="http://www.blogger.com/atom/ns#" term="時間計測"/><title type='text'>HTTPS コネクション時の libcurl による連続GETリクエストの高速化の検討</title><summary type="text">HTTPS コネクション時の libcurl による連続GETリクエストを高速化するための検証用の例題です。

libcurl による GET 取得時の高速化手段として以下のサイトでまとめられています。
https://moz.com/devblog/high-performance-libcurl-tips
（c-ares/PowerDNS 等により DNSのリスポンスを良くするとか libcurl-multi による並列処理化等、上記サイトには書かれていませんが TCP FAST OPEN に対応しているサーバーであれば libcurl からオプションを指定して利用できます）

一方、HTTPS でのリクエストでは証明書の検証等で、単純なデータやり取り以外の部分で内部的に処理が食われてしまうことがあります。
下記の例題では HTTPS にてデータ取得を行うサイトが信頼のあるサイトで</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/7013870668878262059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/08/https-libcurl-get.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7013870668878262059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7013870668878262059'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/08/https-libcurl-get.html' title='HTTPS コネクション時の libcurl による連続GETリクエストの高速化の検討'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-7849916861856214558</id><published>2017-07-15T10:34:00.002+09:00</published><updated>2017-07-17T23:30:18.438+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libgd"/><category scheme="http://www.blogger.com/atom/ns#" term="グラフ描画"/><category scheme="http://www.blogger.com/atom/ns#" term="数値計算"/><category scheme="http://www.blogger.com/atom/ns#" term="直線近似"/><category scheme="http://www.blogger.com/atom/ns#" term="計算機イプシロン"/><title type='text'>GDによるグラフ描画（最小二乗法による直線近似）</title><summary type="text">libgd によるグラフ描画の例題です（最小二乗法による直線近似）。

文字列画像の作成 にて用意したフォントを用い、sin関数により生成したデータのグラフを作成しています。
graphInit 関数にてグラフ作成時のオプションを指定していますが、グラフの横幅（graw）、縦幅（grah）、余白（padding）、グラフ描画オプション（DrawType BASE_UNDER:最小値を基準としてグラフを作成する BASE_ORIGIN:原点を基準としてグラフを作成する）等を指定できます。

genData の type にて最大値や最小値が異なるデータを生成していますが、グラフは枠内に収まるよう自動的にスケーリングして描画され、縦横軸のラベルもそれに応じて描画されます。

データのグラフ化のついでに、最小二乗法による直線近似も行っています。グラフ化に用いるデータから傾き、切片を計算し、近似</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/7849916861856214558/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/07/gd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7849916861856214558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7849916861856214558'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/07/gd.html' title='GDによるグラフ描画（最小二乗法による直線近似）'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsyWwoYRS_8s6yuqdm1UeZgcRp-Bj8pU7zVwUKN8TZffJn7maPDPWZ4Smi4iX6y2HPkG0yvINX4otw9fyvs0CSfWjsariQN_TQw9oAerqT62lXjTCeOj4HaTXnaI-CWzS536DnreEUm4U/s72-c/graph.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-8386435984236505463</id><published>2017-07-02T20:39:00.001+09:00</published><updated>2017-07-02T20:49:55.881+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="libgd"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル出力"/><category scheme="http://www.blogger.com/atom/ns#" term="フォント"/><category scheme="http://www.blogger.com/atom/ns#" term="画像処理"/><title type='text'>フォントを指定して文字列画像の作成（libgd）</title><summary type="text">libgd を利用しフォントを指定して文字列画像を作成する例題です。
OpenType のフォントが Google から配布されていますのでそれをダウンロードし、実行ファイルと同じフォルダ内に保存します（例として NotoSerifCJKjp-[weight].otf を利用）。

libgd のインストールはこのような感じです（OSX、freetype や libjpeg/libpng も予めインストール）。

% ./configure --prefix=/usr/local --with-png=/usr/local --with-freetype=/usr/local 
% make


例題では、余計な余白や画像サイズを手入力で計算する必要がないように、予め文字列の描画に必要な領域を計算しておき画像のサイズを決定しています。
複数行にて表示していますが、行間を広げたい場合等には</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/8386435984236505463/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/07/libgd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8386435984236505463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8386435984236505463'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/07/libgd.html' title='フォントを指定して文字列画像の作成（libgd）'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVFTKA65rZV0DSbqmKy4hmu9lE6I0i1BLYrU-a4TgNQen-ALFdOISXgD7ZyAWkDmLQb5HNO85GdJ2SXcXm8D6jNO_qxs2U8-jfpV4Q9zALQM6cl-DLie04rTOi6tflt2RyUxfzhdy9m6A/s72-c/font.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-4774600774500497024</id><published>2017-06-22T00:16:00.002+09:00</published><updated>2017-06-22T00:17:37.648+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asound"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="WAVEファイル"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル出力"/><category scheme="http://www.blogger.com/atom/ns#" term="音声"/><title type='text'>libasound によりPCM音声録音</title><summary type="text">libasound によるPCM音声録音の例題です。

Linux や Raspberry にてコマンドラインからマイクに接続し音声を WAVE ファイルとして保存します。
libasound がインストールされていない場合、下記のコマンドによりインストールしてください。

% apt-get install libasound2-dev

また、例題のような自分で録音用のコーディングをしなくてもツール群が提供されています。

% sudo apt-get install alsa-utils

alsa-utils に含まれる arecord コマンドにて録音、aplay コマンドにより再生が可能です。
この arecord コマンドにより、PC にマイク機器が接続されているかを確認することができます。

% arecord -l
**** ハードウェアデバイス CAPTURE の</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/4774600774500497024/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/libasound-pcm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4774600774500497024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4774600774500497024'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/libasound-pcm.html' title='libasound によりPCM音声録音'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-1333148587124769878</id><published>2017-06-21T12:23:00.002+09:00</published><updated>2017-06-21T12:25:00.722+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WAVEファイル"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル出力"/><category scheme="http://www.blogger.com/atom/ns#" term="音声"/><title type='text'>WAVE/PCM 音声の生成</title><summary type="text">WAVE/PCM 音声を生成する例題です。
WAVE 音声に関して以前まとめたものはこちら（WAVEファイルの読込み/再生）

WAVE 音声のフォーマットに合わせてヘッダを書き込み（2ch, 44100Hz）、sin 波形の振幅を徐々に大きくした音声を生成しています。

#include 
#include 

static void write_word(FILE* fp, unsigned long value, unsigned size)
{
    for ( ; size; --size, value &gt;&gt;= 8 ) { char v = static_cast(value &amp; 0xFF); fwrite(&amp;v,1,1,fp); }
}
int main(int argc, char* argv[])
{
    FILE* fp = fopen(&quot;sinwave.wav&quot;</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/1333148587124769878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/wavepcm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1333148587124769878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1333148587124769878'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/wavepcm.html' title='WAVE/PCM 音声の生成'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-Lfoy8biub4d5ctCZ-6PvyfEIRASZdZDdV4IQGTr2HzP1zSNuhUghqFtlJxDF5tC7mFq3Tb6Rmlm2Ut2re49uwnc5rIYw5gsnRrECltiUEJupKvB8edqUfj94sZslO5pdWFf47h3ZOfU/s72-c/untitled.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-4380439006604218699</id><published>2017-06-21T00:47:00.004+09:00</published><updated>2017-06-21T00:52:25.967+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Samba"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><title type='text'>ローカルネットワークから NetBios 名の取得</title><summary type="text">ローカルネットワークから Windows および Samba でのファイル共有を行っているマシンの NetBios 名を取得する例題です。

例題では、自機のIPアドレスからスキャンを行うIPアドレスの範囲を設定し、それぞれのアドレスに対して NetBios 名を取得しています。
NetBios 名を解決するための手順を省略している部分もあるため上手く取得できない場合もありますが、Windows マシンでは概ね正常に動作しています（Samba のネームサーバー/nbmd に対して取得できない場合も）。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//--------------------------------</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/4380439006604218699/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/netbios.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4380439006604218699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/4380439006604218699'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/netbios.html' title='ローカルネットワークから NetBios 名の取得'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-5302620647953497720</id><published>2017-06-20T17:11:00.003+09:00</published><updated>2017-06-21T00:54:03.638+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CGI"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTPリクエスト"/><category scheme="http://www.blogger.com/atom/ns#" term="ソケット通信"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル出力"/><title type='text'>CGI に対応した HTTP リクエストによるファイル保存</title><summary type="text">CGI に対応した HTTP リクエストによるファイル保存の例題です。

ソケット通信を用いて HTTP リクエストを行う場合、レスポンスヘッダに含まれる Content-Length が 0 となり正しく本文が取得できない場合があります（libcurl 等を用いるとその辺の処理は自動的に行ってくれます）。
Apache サーバーに index.html 等のファイルを直接要求した場合にはそのようなことはありませんが、リクエストしたページが CGI で構成されている場合にそういう状況が発生します。
CGI はファイルの読み出しやページの生成の都合に応じて、逐次転送を行いますので、Content-Length の代わりにこれから送信するバイト数を16進数字にて送信しその本文を送信した後、転送が終われば 0 の文字列を送信します。
CGIによるファイル送信の流れ

レスポンスヘッダ
9bd9</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/5302620647953497720/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/cgi-http.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/5302620647953497720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/5302620647953497720'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/cgi-http.html' title='CGI に対応した HTTP リクエストによるファイル保存'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-8344395439773665237</id><published>2017-06-20T13:52:00.000+09:00</published><updated>2017-06-20T13:52:42.449+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JPEG"/><category scheme="http://www.blogger.com/atom/ns#" term="画像処理"/><title type='text'>libjpeg によるカラーバーの作成</title><summary type="text">libjpeg により JPEG 画像でのカラーバーを作成する例題です。
apt-get や brew（OSX）等により libjpeg をインストール後、libjpeg へのリンク（-ljpeg）を追加しビルドしてください。
例題では、128x32 のサイズの RGB画像が作成され、JPEGファイルとして保存されます。
HDDの使用率等を示すようなカラーバーが作成されます（例題では50％の使用率）。


#include 
#include 
#include 
 
int main(int argc, char* argv[])
{
    struct jpeg_error_mgr jerr;
    struct jpeg_compress_struct cinfo;
    cinfo.err = jpeg_std_error(&amp;jerr); // エラーハンドラにデフォルト値</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/8344395439773665237/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/libjpeg.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8344395439773665237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8344395439773665237'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/libjpeg.html' title='libjpeg によるカラーバーの作成'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj91x_I9ygBGfxoL9dWYD9rmLiR2Sr9SlA_pL3Sbq-R73Wdq3_yYWeqiEaAxHZp3U9PDLsSDNuBOKpyCQP8j1INl350o1g2rjUMEI40fMSJJk8k0YQ6XhGw9WJAwAY1A1w7Vw1YNiAA56Q/s72-c/colorbar.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-332360797775663303</id><published>2017-06-20T11:04:00.000+09:00</published><updated>2017-06-21T00:54:26.426+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NTP"/><category scheme="http://www.blogger.com/atom/ns#" term="UDP"/><category scheme="http://www.blogger.com/atom/ns#" term="ソケット通信"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><title type='text'>NTPサーバーからの時刻取得</title><summary type="text">NTPサーバーから時刻を取得し表示する例題です。
NTPサーバー（time.asia.apple.com）は適宜変更してください。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//----------------------------------------------------------------------------------------------------
#define JAN_1970    0x83aa7e80 // 2208988800 1970 - 1900 in seconds
#define NTP_PORT    (123)
#define NTPFRAC(x)  (4294*(x) + ((1981*(x))&gt;&gt;11))
//--</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/332360797775663303/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/ntp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/332360797775663303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/332360797775663303'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/ntp.html' title='NTPサーバーからの時刻取得'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-9203621366694572570</id><published>2017-06-20T04:26:00.000+09:00</published><updated>2017-06-20T04:36:54.341+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ソート"/><category scheme="http://www.blogger.com/atom/ns#" term="レーベンシュタイン距離"/><title type='text'>レーベンシュタイン距離により名前の類似度順に並べ替え</title><summary type="text">レーベンシュタイン距離により名前の類似度順に並べ替え表示する例題です。
例題では、「佐藤浩市」と言う名前に対する類似度をレーベンシュタイン距離により計算し、その距離に応じて qsort により近い順に並べ替えて表示しています。

#include 
#include 
#include 

struct PLabel { int id, dis; char name[128]; };
// ソート関数
static int name_sort(const void* a, const void* b)
{
    if ( ((PLabel*)a)-&gt;dis &lt; ((PLabel*)b)-&gt;dis ) return -1;
    else if ( ((PLabel*)a)-&gt;dis == ((PLabel*)b)-&gt;dis ) return 0;
    return 1;
}
//</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/9203621366694572570/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post_20.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/9203621366694572570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/9203621366694572570'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post_20.html' title='レーベンシュタイン距離により名前の類似度順に並べ替え'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-1360264002173374701</id><published>2017-06-20T04:00:00.002+09:00</published><updated>2017-06-20T04:31:03.863+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="FIFO"/><category scheme="http://www.blogger.com/atom/ns#" term="スレッド処理"/><category scheme="http://www.blogger.com/atom/ns#" term="プロセス間通信"/><category scheme="http://www.blogger.com/atom/ns#" term="名前付きパイプ"/><title type='text'>UNIX名前付きパイプによるスレッド間通信</title><summary type="text">FIFO（名前付きパイプ）によりスレッドやプロセス間の通信を行う例題です。
FIFO は UNIX 上ではファイルとして作成することができますので、スレッドやプロセス間等様々な状況において簡単に通信を行うことができます。
例題ではソースを分割して用意すると分かりにくくなりますので、main 関数から読み込み用のスレッドに対して文字列を送信すると言う形になっています。


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void* readFIFO(void* argv)
{
    char* path = (char*)argv;
    char  buf[BUFSIZ];
    
    int fd, len;
    if ( (fd=open</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/1360264002173374701/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/unix.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1360264002173374701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1360264002173374701'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/unix.html' title='UNIX名前付きパイプによるスレッド間通信'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-1310256088758727807</id><published>2017-06-17T13:50:00.003+09:00</published><updated>2017-06-20T04:30:54.653+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="乱数発生"/><title type='text'>重複なしの乱数発生（初期値の指定）／Javascript・Perl版</title><summary type="text">重複なしの乱数発生 を修正し、100〜200までの値を発生する等、初期値を指定した乱数を発生させる例題です（初期値100、個数100での乱数発生）。
エクセルや既存のサイトのCGI等でそのようなことは可能かもしれませんが、5000個、10000個ともなってくるとスクリプトや従来の重複なしの方法では相当に時間がかかってしまうので、コマンドラインツールとして利用することが主な目的になります。
また、Javascript・Perl版も用意しています。
10000個の乱数発生では、Cで作成した場合には0.1秒、Perlで作成した場合には5秒近くと速度は圧倒的に違いますが、CGI等で利用するための参考として。

randtable.cpp

#include 
#include 
#include 
#include 

// 0〜max までの乱数の発生(int型)
static int </summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/1310256088758727807/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post_17.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1310256088758727807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/1310256088758727807'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post_17.html' title='重複なしの乱数発生（初期値の指定）／Javascript・Perl版'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-5295177503931767718</id><published>2017-06-02T19:35:00.001+09:00</published><updated>2017-06-17T01:39:52.219+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="スレッドセーフ"/><category scheme="http://www.blogger.com/atom/ns#" term="トークン処理"/><category scheme="http://www.blogger.com/atom/ns#" term="ハッシュ"/><category scheme="http://www.blogger.com/atom/ns#" term="ファイル入力"/><category scheme="http://www.blogger.com/atom/ns#" term="リエントラント"/><title type='text'>strtok_r によるネスト化されたトークンの切り出し</title><summary type="text">strtok_r によるネスト化されたトークンの切り出しの例題です。
テキストファイルを読み込み、単語ごとにハッシュ表を作成し、出現する頻度を表示する例題も兼ねています。

strtok 関数はスレッドセーフ化されておらず、再入可能（リエントラント）な利用には向いていません。
strtok 自体が最初の引数で与えられた文字列を変更してしまうためや、内部で確保された文字列の中身を変更してトークンとして切り出しているためです。
while 内に while 文で strtok を呼び出したり、別のスレッドで strtok を呼び出した場合、最後に呼び出された strtok により内部の文字列が変更され、思い通りの結果が得られないと言う状況が発生します。
また、ある関数で strtok を使っていて、その結果から別の関数を呼び出した場合、ソース上からは見えない状況で正しい結果が得られないと言う</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/5295177503931767718/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/5295177503931767718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/5295177503931767718'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2017/06/blog-post.html' title='strtok_r によるネスト化されたトークンの切り出し'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-2608707354495973518</id><published>2015-10-10T00:03:00.000+09:00</published><updated>2015-10-10T00:27:46.617+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AAC"/><category scheme="http://www.blogger.com/atom/ns#" term="ADTS"/><category scheme="http://www.blogger.com/atom/ns#" term="ビット演算"/><title type='text'>複数バイトにまたがるビット演算</title><summary type="text">ADTS形式のAACファイルのヘッダ解析等において、複数バイトにまたがるビット列を解析したい場合があります。
今回はそのような場合におけるビット列の読み込み・書き込みの例題を示します。
bitbuffer.h/bitbuffer.cpp がビット演算を行うヘッダ及びソース。
sample.cpp にて ADTS形式のヘッダを生成するための例を用意しています（AAC LC 形式のヘッダ）。
また、生成した ADTS形式のヘッダの内容を解析して構造体に読み込み直すための例（ParseAdtsHeader 関数）も用意しています。
適当なADTS形式のAACファイルの解析を行う場合には、syncword 等により ADTSヘッダの先頭位置を検索し、ParseAdtsHeader 関数によりヘッダを読みこめば AACファイル内のチャンネル数やサンプリングレート等の情報を読み込むことができます。
</summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/2608707354495973518/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2015/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/2608707354495973518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/2608707354495973518'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2015/10/blog-post.html' title='複数バイトにまたがるビット演算'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-8374182923464223823</id><published>2014-12-20T08:15:00.001+09:00</published><updated>2017-06-21T00:55:06.961+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="curl"/><category scheme="http://www.blogger.com/atom/ns#" term="oauth"/><category scheme="http://www.blogger.com/atom/ns#" term="Twitter"/><category scheme="http://www.blogger.com/atom/ns#" term="ネットワーク"/><title type='text'>libcurl/liboauth を用いて Twitter API からの結果を取得</title><summary type="text">libcurl/liboauth を用いて Twitter API からの結果を取得する例題です。


他サイトで散々説明されているとは思いますが、簡単な手順は以下になります。
・libcurl の準備
　Twitter API 1.1 からは、https 接続が必要となるため、libcurl には ssl 対応のものが必要となります。
・liboauth の準備
　Twitter API との認証を行うためのライブラリです。
・Twitter API の利用開始
　TwitterDevelopers にてアプリケーション登録を行い、コンシューマーキーやアクセストークンを取得します。




#include 
#include 
#include 
#include &quot;oauth.h&quot;
#include 

int main(int argc, char* argv[])
{
    </summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/8374182923464223823/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2014/12/libcurlliboauth-twitter-api.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8374182923464223823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/8374182923464223823'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2014/12/libcurlliboauth-twitter-api.html' title='libcurl/liboauth を用いて Twitter API からの結果を取得'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-511137994103847167.post-7842009360527461398</id><published>2014-11-24T12:01:00.003+09:00</published><updated>2014-11-24T13:01:07.813+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ファイル入力"/><title type='text'>行数を指定してテキストファイルの内容を反転表示</title><summary type="text">行数を指定し、テキストファイルの内容を反転表示する例題です（１行毎の内容は反転しない）。

行の先頭ファイル位置を記憶するための配列を準備し、ファイル全体を読み込んで先頭位置を記憶後、順番に読み込んで出力を行っています。

表示する行数を指定するため、配列の内容は上書きして循環的に利用しています。


#include 
#include 
#include 
#include 
#include 

static void printReverse(int nLines, const char* fileName)
{
    int fd = open(fileName, O_RDONLY);
    if ( fd == -1 ) return;

    char buffer[BUFSIZ];
    int maxLines = (nLines + 1), </summary><link rel='replies' type='application/atom+xml' href='http://hatenaclang.blogspot.com/feeds/7842009360527461398/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hatenaclang.blogspot.com/2014/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7842009360527461398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/511137994103847167/posts/default/7842009360527461398'/><link rel='alternate' type='text/html' href='http://hatenaclang.blogspot.com/2014/11/blog-post.html' title='行数を指定してテキストファイルの内容を反転表示'/><author><name>GAMI</name><uri>http://www.blogger.com/profile/10115765732273048987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyQO-kq1iK5xtcr4skLrUoYKr4L_ivcPzHDrIv3HBGb4CEbMhwGZ3kmk2dVS28PQPnoXrqSlBL-72MmxmwiXSB-e1RvONk6CylCAd_qi-20PN4ETVttDkNxbMGawafkQ/s220/neko.jpg'/></author><thr:total>0</thr:total></entry></feed>