2016年9月25日日曜日

C言語のブロックの値

とある本を読んでいて、C言語でブロックの値を変数に代入することができることを知った。

たとえば、以下のようなプログラム。

#include <stdio.h>
int main(void)
{
    int i = 0;
    i = ({
        int j = 1;
        j + 1;
    });
    printf("i = %d\n", i);
    return 0;
}

実行結果は以下のとおり。
$ gcc t.c
$ ./a.out
i = 2

少しプログラムを変えて、ブロックの最後が変数への代入文だったらどうなるか。

#include <stdio.h>
int main(void)
{
    int i = 0;
    i = ({
        int j = 1, k; /* modified */
        k = j + 1;    /* modified */
    });
    printf("i = %d\n", i);
    return 0;
}
実行結果は最初のプログラムと同一。
$ gcc t.c
$ ./a.out
i = 2
今まで気にしたことがなかったが、ブロックの値は最後の式の値になるということか。
今度調べてみることにしよう。

2016年7月2日土曜日

Windows7でポート転送

IPv4でローカルホストの80を別のホストの80に転送

追加
netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=80 connectaddress=xxx.xxx.xxx.xxx

設定一覧表示
netsh interface portproxy show v4tov4

削除
netsh interface portproxy delete v4tov4 listenport=80 listenaddress=127.0.0.1


参考サイト
http://windyakin.hateblo.jp/entry/2014/10/10/163733

2016年2月7日日曜日

gitのpushに失敗する

これまで特に問題がなかったが、突然以下のエラーが出てコミットできない。

fatal: The remote end hung up unexpectedly

サーバ側のログを見るとPOSTリクエストは届いている。
pushするサイズが10MB近くあるのでその辺りが関係してそう。

http://shinriyo.hateblo.jp/entry/2015/05/07/git%E3%81%A7%E3%81%AE_fatal%3A_The_remote_end_hung_up_unexpectedly

より、

$ git config http.postBuffer 524288000

とすることで解決。


2016年1月30日土曜日

Windows8.1インストール済みソフトウェアメモ

★書きかけです

Windows8.1とは折り合えないことを確信したため、Windows7に戻すことに決定。

インストール済みのソフトウェアのメモ


  • CDex

http://sourceforge.jp/projects/cdexos/

  • MakeMKV

http://www.makemkv.com/

  • DVD Fab9

http://ja.dvdfab.cn/download.htm
Exact Audio Copy
MinGW
DeepBurner



    CDBurnerXP

    fedora22のnginxのパッケージ再作成

    ★書きかけです

    準備
    $ sudo dnf install -y git wget
    $ sudo dnf install -y @development-tools fedora-packager rpmdevtools


    $ git clone http://pkgs.fedoraproject.org/git/nginx.git
    $ cd nginx
    $ git checkout remotes/origin/f22


    参考サイト
    https://fedoraproject.org/wiki/Packaging/Guidelines/ja
    https://fedoraproject.org/wiki/How_to_create_an_RPM_package#Building_the_binary_package

    http://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/
    http://blog.tnmt.info/2010/03/10/rpm-build-tips-yum-builddep/

    Linuxカーネルモジュール関連コマンド

    モジュールのリスト
    lsmod

    モジュールを読み込む
    modprobe

    2014年12月29日月曜日

    FreeBSDにgitbucketをインストールする

    以下のサイトを参考にしてインストール
    http://qiita.com/kkimura/items/f51303d3beba02e3e781


    以下のサイトを参考にして初期設定
    http://qiita.com/petitviolet/items/479f439bff0c714c32bb


    • 初期状態ではユーザ名「root」、パスワード「root」でログインできる
    • ユーザにアカウント登録を許可する
    「SystemSettings」->「Account registration」をAllowに設定する
    ユーザにアカウント登録を許可する
    「SystemSettings」->「SSH access」の「Enable SSH access to git repository」にチェックをつける


    2014年10月25日土曜日

    Windows8.1でHDDのデータを完全消去する

    diskpart.exeを使ってHDDのデータを完全消去する

    • DISKPARTを起動する
    > diskpart
    • ディスクの一覧を表示する(選択済みのディスクがある場合は先頭に「*」が付く)
    DISKPART> list disk
    • ディスクを選択する
    DISKPART> select disk <ディスク番号>
    • パーティション情報を見る
    DISKPART> list partition
    • ディスクのデータを完全消去する
    DISKPART> clean all
    • DISKPARTを終了する
    DISKPART> exit

    参考サイト
    http://www.atmarkit.co.jp/ait/articles/1004/16/news101.html


    2014年2月2日日曜日

    Windows8.1でVMware Playerを使ってみる(ゲストOS:FreeBSD 10.0-RELEASE)


    • 「VMware Player and VMware Player Plus for Windows」をダウンロードしてインストール
    https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/6_0
    • 「FreeBSD 10.0-RELEASEインストーラのISOイメージファイル」をダウンロード
    ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.0/FreeBSD-10.0-RELEASE-amd64-dvd1.iso
    • 「VMware Player」を起動
    • 「新規仮想マシンの作成」を選択し、ダウンロードしたISOイメージを選択
    • 仮想マシン名、ディスク容量等を指定
    (今回の主な指定)
    ディスク最大サイズ:80.0GB
    仮想ディスクを単一ファイルとして格納
    この仮想マシンを作成後にパワーオンする:チェック有
    • 「VMware Tools FreeBSD版」がダウンロード可能と表示されるので、「ダウンロードしてインストール」を選択
    • 「VMware Player」上でFreeBSDのインストールを実施
    (インストール時のメモ)
    powerdの設定は起動しないように設定
    • FreeBSDのインストールが完了したら、「VMware Player」上に表示されている「インストールを完了しました」をクリック



    Windows8.1でハードリンクを設定する

    以下のコマンドで設定可能。
    > mklink /h <リンク先(既存のファイル)> <リンク元>

    2013年12月21日土曜日

    Windows8.1セットアップ時のメモ

    Windows8.1の設定を自分仕様にするためのメモ。

    基本的な方針は、

    • とにかく軽く
    以上。(笑)

    • パフォーマンスを優先した設定にする
    1. コントロールパネルを開く(表示方法:小さなアイコン)
    2. 「システムとセキュリティ」->「システム」を選択
    3. 「システムの詳細設定」を選択 
    4. パフォーマンスの「設定(S)」を選択
    5. 「視覚効果」のタブで「パフォーマンスを優先する」を選択 
    • キーボードの設定
      1. コントロールパネルを開く(表示方法:小さなアイコン)
      2. 「キーボード」を選択
      3. 「表示までの待ち時間」を「短く(一番右側)」に設定
      4. 「表示間隔」を「速く(一番右側:デフォルト)」に設定
      5. 「カーソルの点滅速度」を「なし」に設定
      • テーマを変更(デフォルトは赤系なの青系に変更)
      1. コントロールパネルの「個人設定」を選択
      2. Windowsの標準テーマの「ラインと色」を選択
      • スライドショーの無効化
      1. コントロールパネルの「個人設定」を選択
      2. 「デスクトップの背景」を選択
      3. 「画像の場所」の「単色」を選択 
      4. 背景色を選択してスライドショー機能をOFFにする 
      • タスクバーを隠す
      1. タスクバーのプロパティを表示
      2. 「タスクバーを自動的に隠す」をチェック
      • サインイン時にデスクトップを表示
      1. タスクバーのプロパティを表示
      2. 「サインイン時または画面上のすべてのアプリを終了したときに、スタート画面ではなくデスクトップに移動する」をチェック 
      • ゴミ箱のプロパティ
      ※設定なし
      • Windows8.1ではデフォルトで「削除の確認メッセージを表示する」のチェックが外れている
      • CDなどの自動再生をOFFにする
      1. コントロールパネルを開く(表示方法:小さなアイコン)
      2. 「自動再生」を選択
      3. 「すべてのメディアとデバイスで自動再生を使う」のチェックをはずす
      4. 「保存」を選択 
      • 電源関連の設定
      コントロール パネル\すべてのコントロール パネル項目\電源オプション\プラン設定の編集
      ディスプレイを暗くする:15分
      ディスプレイの電源を切る:15分
      コンピュータをスリープ状態にする:30分
      1. 「詳細な電源設定の変更」を選択する
      2. 「詳細設定」タブを選択する
      • Windows Updateを実行する
      1. Windowsキー+Wを押す
      2. 「Windows Update」で検索し、「Windows Updateの設定」を選択
      3. 「今すぐチェック」を選択
      • Windows Security Essentialsをインストールする

      2013年11月3日日曜日

      Subverion1.8で作成したリポジトリを1.7用にダウングレードする

      JenkinsのSCMポーリングで失敗するため、Subverionを1.8から1.7に入れ替えた。
      その際、リポジトリがそのままでは使えなかったため、行った内容をメモしておく。

      もっとスマートな方法があるかもしれないが、今回はdumpコマンドを使って行った。

      まず、1.8で以下のコマンドを実行して、リポジトリ全体をファイルにダンプする。
      # svnadmin dump <リポジトリ> > <ダンプファイル>
      次に、1.7で以下のコマンドを実行して、ダンプしたリポジトリを復元する。
      # svnadmin create <新しいリポジトリ>
      # svnadmin load <新しいリポジトリ> < <ダンプファイル>

      JenkinsのSCMポーリングでエラーが出力される

      JenkinsでSCMのポーリングを設定したところ、以下のようなエラーが出る。
      ERROR: Failed to check repository revision for <リポジトリ>
      org.tmatesoft.svn.core.SVNException: svn: E210004: Number is larger than maximum
      at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
      at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:400)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:456)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readTuple(SVNReader.java:288)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.parse(SVNReader.java:241)
      at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.read(SVNConnection.java:272)
      at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.read(SVNRepositoryImpl.java:1290)
      at org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryImpl.info(SVNRepositoryImpl.java:1203)
      at org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteGetInfo.run(SvnRemoteGetInfo.java:65)
      at org.tmatesoft.svn.core.internal.wc2.remote.SvnRemoteGetInfo.run(SvnRemoteGetInfo.java:31)
      at org.tmatesoft.svn.core.internal.wc2.SvnOperationRunner.run(SvnOperationRunner.java:20)
      at org.tmatesoft.svn.core.wc2.SvnOperationFactory.run(SvnOperationFactory.java:1235)
      at org.tmatesoft.svn.core.wc2.SvnOperation.run(SvnOperation.java:291)
      at org.tmatesoft.svn.core.wc.SVNWCClient.doInfo(SVNWCClient.java:2461)
      at hudson.scm.SubversionSCM.parseSvnInfo(SubversionSCM.java:1122)
      at hudson.scm.CompareAgainstBaselineCallable.call(CompareAgainstBaselineCallable.java:71)
      at hudson.scm.CompareAgainstBaselineCallable.call(CompareAgainstBaselineCallable.java:26)
      at hudson.remoting.LocalChannel.call(LocalChannel.java:45)
      at hudson.scm.SubversionSCM.compareRemoteRevisionWith(SubversionSCM.java:1278)
      at hudson.scm.SCM._compareRemoteRevisionWith(SCM.java:356)
      at hudson.scm.SCM.poll(SCM.java:373)
      at hudson.model.AbstractProject._poll(AbstractProject.java:1548)
      at hudson.model.AbstractProject.poll(AbstractProject.java:1473)
      at hudson.triggers.SCMTrigger$Runner.runPolling(SCMTrigger.java:439)
      at hudson.triggers.SCMTrigger$Runner.run(SCMTrigger.java:468)
      at hudson.util.SequentialExecutionQueue$QueueEntry.run(SequentialExecutionQueue.java:118)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
      at java.util.concurrent.FutureTask.run(FutureTask.java:166)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:679)
      Caused by: svn: E210004: Number is larger than maximum
      at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:208)
      at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:154)
      at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:97)
      at org.tmatesoft.svn.core.internal.io.svn.SVNReader.readItem(SVNReader.java:399)
      ... 33 more
      Done. Took 1 sec
      No changes
      以下のサイトに同様の現象が報告されていた。
      https://issues.jenkins-ci.org/browse/JENKINS-18844

      どうもSubversion 1.8を使っていることが関連しているらしい。
      現状は1.8を使わなければいけない理由はないため、1.7にダウングレードしてみる。

      その結果、正常にポーリングができた。
      Subversionのポーリングログ
      Started on Nov 3, 2013 8:31:46 PM
      Received SCM poll call on  for MediaCollect on Nov 3, 2013 8:31:46 PM
      <リポジトリ> is at revision 14
      Done. Took 0.2 sec
      No changes

      Tera Termから公開鍵を使ってパスワード入力なしでSSHログインする

      Tera TermはVer.4.79を使用した。

      まずは、秘密鍵と公開鍵を作成する。
      Tera Termのメニューから「設定」->「SSH鍵生成」を選択。
      設定はデフォルトの
      鍵の種別:RSA
      ビット数:2048
      で「生成」を選択する。
      「公開鍵の保存」と「秘密鍵の保存」でそれぞれ生成した鍵を保存する。
      秘密鍵の保存ではパスフレーズなしでよいかと確認が出るのでOKを選択する。

      生成した「公開鍵」をログイン先のホストに転送する。
      転送したら、.sshフォルダに「authorized_keys」というファイル名で保存する。
      以下のパーミッションを変更する。
      %chmod 600 .ssh/authorized_keys
      Tera Termのメニューから「設定」->「SSH認証」を選択する。
      『「RSA/DSA」鍵を使う』の「秘密鍵」を選択肢、さきほど生成した秘密鍵を選択する。
      「設定」->「設定の保存」でこれまでの設定を保存する。

      あとはTera Termでログインするときにパスフレーズを入力しないでも「OK」を選択すればログインできるようになる。

      <補足>
      パスワードなしでログインできるようになったら、Tera Termを起動直後にログインしてほしくなる(かも)。
      コマンドラインから以下のオプションをつけて起動することでそれが可能になる。
      > ttermpro.exe <ログイン先のホスト名> /auth=publickey /keyfile=<生成した秘密鍵>
      ショートカットの設定に記載してもOK。

      FreeBSDでファイルの文字コードを調べる

      「nkf」インストールする。
      # pkg_add -r ja-nkf
      以下のオプションを指定して実行すると文字コードを確認できる。
      % nkf -g <ファイル名>
      以下のオプションを指定すると文字コードと改行コードを確認できる。
      % nkf --guess <ファイル名> 
      参考サイト
      http://www.atmarkit.co.jp/flinux/rensai/linuxtips/980nkfguess.html

      補足
      ファイルの文字コードを上書きでUTF-8(BOMなし)に変更する。
      % nkf -w --overwrite <ファイル>

      Vim Tips

      Vimのスクリプトを実行する
      :source <スクリプト名>

      2013年10月27日日曜日

      Jenkinsからdoxygenを使う

      Jenkinsで「Doxygen Plugin」をインストール
      「Jenkinsの管理」->「プラグインの管理」->「利用可能」->「Jenkins Doxygen Plug-in」
      Jenkinsでプロジェクトを作成

      「/usr/local/jenkins/jobs/<プロジェクト名>/workspace/」に<doxygenのconfigファイル>を格納する

      doxygenの出力ファイルを格納するフォルダを作成する
      % mkdir /usr/local/jenkins/jobs/<プロジェクト名>/workspace/doxygen
      <doxygenのconfigファイル>をJenkinsのフォルダ構成にあわせて変更する
      OUTPUT_DIRECTORY       = doxygen
      INPUT                  = trunk
      プロジェクトの設定を変更する。
      「ソースコード管理」->「ローカルモジュールディレクトリ (オプション)」
      ※workspace配下にdoxygenの出力ファイルを置くために、ソースをチェックアウトするフォルダを変更
      trunk 
      「ビルド」->「シェルの実行」
      doxygen <doxygenのconfigファイル>
      「ビルド後の処理」->「Publish Doxygen」->「Doxyfile path」
      <doxygenのconfigファイル>
      ビルドを実行する。
      成功するとプロジェクトに「DoxyGen HTML」へのリンクが表示される。



      参考サイト
      http://hidari-lab.hatenablog.com/entry/doxygen_and_jenkins

      課題
      ソースのチェックアウトにやたら時間がかかるのが気になった。
      どうやら、ソースに画像や動画が含まれているときJenkinsの動作に課題があるらしい。
      参考サイト
      http://kkkon.sakura.ne.jp/wp3/2012/08/27/jenkins-subversion-plugin-is-stoick/

      FreeBSDでdoxygenを使ってみる

      まずはインストール。
      # pkg_add -r doxygen
      図を作成するためのツールをインストール。
      # pkg_add -r graphviz 
      コンフィグファイルを生成する。
      % doxygen -g <コンフィグファイル名>
       生成したコンフィグファイルを編集する。
      % vi <コンフィグファイル名>
      コンフィグファイルで変更した箇所とメモ
      PROJECT_NAME           = <プロジェクト名>
      OUTPUT_DIRECTORY       = <出力先のディレクトリ>
      CREATE_SUBDIRS         = YES
      OUTPUT_LANGUAGE        = Japanese
      EXTRACT_ALL            = YES
      EXTRACT_PRIVATE        = YES
      プライベートメソッドをドキュメント化する 
      INPUT                  = <ソースコードの場所>
      RECURSIVE              = YES
      サブフォルダのファイルもINPUTにする 
      SOURCE_BROWSER         = YES
      INLINE_SOURCES         = NO
      モジュール一覧と一緒にソースを表示したい場合は「YES」を設定 
      REFERENCED_BY_RELATION = YES
      REFERENCES_RELATION    = YES
      GENERATE_LATEX         = NO
      LATEXファイルは生成しない 
      MSCGEN_PATH            = /usr/local/bin
      シーケンスを使う場合はmscgenの場所を指定 
      HAVE_DOT               = YES
      図を描画するための設定(graphvizが必要) 
      DOT_FONTNAME           = Sazanami Gothic
      図で使用するために日本語のフォントを指定 
      CALL_GRAPH = YES
      CALLER_GRAPH = YES


      参考サイト
      http://www.doxygen.jp/config.html
      http://watcher.moe-nifty.com/memo/2005/08/doxygen__graphv_96cf.html








      よく使うscreenのコマンド

      C-a c
      スクリーンを追加する
      C-a w
      スクリーンの情報を表示する 
      C-a 数字
      指定した数字のスクリーンに切り替える
      C-a S
      ウインドウを横に2分割する
      C-a X
      分割したウインドウを閉じる
      C-a TAB
      アクティブなウインドウを切り替える
      C-a |
      ウインドウを縦に2分割する(バージョン4.1.0から使えるらしい)