タグ

ブックマーク / www.clear-code.com (26)

  • ノータブルコード16 - APLプログラマはいかにC言語を書くのか - 2021-06-23 - ククログ

    あまり世の中で知られてない言語として配列処理(Array-Processing)言語という一群の言語があります。いずれもAPLというプログラミング言語から発展したもので、J・Q・Kといった言語が代表的です。これらの言語は「Array Processing」の名前の通り、配列、とくに多次元配列の処理に特化しています。 APLの流れをくむ言語の最大の特徴は、極限までに切り詰められた簡潔さです。この言語を使うといくつかの記号を組み合わせることで、複雑な配列操作を表現することができます。例えば、フィボナッチ数列を生成する関数を例にとると、Kでは{x{x,+/-2#x}/!2}という16文字で表現できます。もっと複雑な例を出すと、ライフゲームは、わずか138バイトで実装できます。 APLはどこで使われているのか この言語はどこで使われているのかというと、これは圧倒的に金融です。例えば、APLは198

    ノータブルコード16 - APLプログラマはいかにC言語を書くのか - 2021-06-23 - ククログ
    masterq
    masterq 2021/06/23
    "APLの世界では、Cの書き方もAPL風になるという点です。つまり、APLプログラマはC言語を普通のプログラマとは全く違うやり方で扱います。" 面白かった。そして読めない。世界は広い
  • ノータブルコード3 - 危険なバグを仕組みで予防する - 2020-02-12 - ククログ

    第三回目のノータブルコードで取り上げるのは、分散バージョン管理システムGitのヘッダファイル「banned.h」です。 banned.h とは何か? これは何かと言うと、その名前の通り「危ない関数の利用を禁止する」ためのヘッダです。実際にコードを見てみましょう。 #ifndef BANNED_H #define BANNED_H /* * This header lists functions that have been banned from our code base, * because they're too easy to misuse (and even if used correctly, * complicate audits). Including this header turns them into compile-time * errors. */ #define

    ノータブルコード3 - 危険なバグを仕組みで予防する - 2020-02-12 - ククログ
    masterq
    masterq 2020/02/13
    [functional[verify]使用禁止にしたい関数をマクロで別名にすることでコンパイルエラーにする話
  • GitHub Actionsを使ったパッケージ作成の自動化 - 2020-01-23 - ククログ

    2019年の11月にGitHub Actionsが正式にリリースされました。 GitHub ActionsはGitHubに組み込まれたCI/CD機能でpush等のGitHub上のイベントをトリガーに任意のアクションを実行できるものです。 GitHub ActionsではDockerが使用できるので、様々な環境上でテストの実行やビルドなどができます。 CIサービスは、他にもAppVeyorやTravis CIがありますが、AppVeyorは無料のプランだと、ワーカーがプロジェクトにつき1つなので、Groongaのように複数のパッケージを作成するためにジョブが多くなるプロジェクトだと、ビルドとテストの完了に時間がかかってしまい効率的ではありませんでした。 GitHub Actionsでは、リポジトリーにつき20まで並列で実行できます。 また、Travis CIでは、ビルドした成果物を保存する場

    GitHub Actionsを使ったパッケージ作成の自動化 - 2020-01-23 - ククログ
  • 片手でのキーボード入力を支援するソフトウェアについて - ククログ(2018-11-21)

    はじめに 怪我などで手首などを負傷してしまうと、満足に両手でのタイピングが行えない事態に陥ることがあります。 今回は、そんなときでも怪我した側の手にあまり負担をかけずに入力するための方法を紹介します。1 Half KeyboardもしくはHalf QWERTY 片手だけで入力できるようにしようというアイデアはそう目新しいものではなく、昔からあるようです。 Matias, E., MacKenzie, I. S., & Buxton, W. (1993). Half-QWERTY: A one-handed keyboard facilitating skill transfer from QWERTY Half KeyboardもしくはHalf QWERTYなどで検索するといろいろでてくるので興味があれば調べてみるのもよいでしょう。 専用のキーボードが製品化されていたり、ソフトウェアで特定

    片手でのキーボード入力を支援するソフトウェアについて - ククログ(2018-11-21)
    masterq
    masterq 2018/11/24
    片手入力ならqwertyじゃない別の解がありそうですね
  • Firefoxのメモリ消費量が右肩上がりで増加する場合の対策 - ククログ(2018-10-24)

    FirefoxをWindows Serverベースのシンクライアント環境で使っている組織において、Firefoxを更新したりWindows Serverをリプレースしたりといったタイミング以降で、急にパフォーマンスが低下しだしたというお問い合わせを複数頂きました。調査の結果、それらの現象は同一の原因である可能性が高い事、同様の対策が有効に作用する事が分かりましたので、その際に得られた調査結果を知見としてご紹介します。 なお、エントリで紹介する設定はすべてFirefox ESR52とFirefox ESR60向けの物です。 将来のバージョンのFirefoxでは有効でない可能性がありますので、ご注意下さい。 パフォーマンス低下の原因 お問い合わせを頂いた複数の事例において、サーバー全体のリソース状況を監視して頂いた所、業務の開始と共にメモリの消費量が右肩上がりに増大しており、退勤時刻になって

    Firefoxのメモリ消費量が右肩上がりで増加する場合の対策 - ククログ(2018-10-24)
    masterq
    masterq 2018/10/26
    Rustになっても空間効率は悪化するんですか。。。悲しいです。。。
  • GTK-Docの使い方 - 2013-12-02 - ククログ

    GNOME Advent Calendar 2013 2日目の記事です。1日目はmyokoymさんの「Ruby/GTK3で作るカレンダーアプリ」でした。 C言語で書かれていて、Autotoolsでビルドシステムを構築しているプロジェクトがあるとします。このプロジェクトのドキュメントツールとしてGTK-Docを使う方法を説明します。 長いです。 GTK-Docについて GTK-Docはその名の通りGTK+用のドキュメントツールです。GTK-Docは、公式サイトにも書いてある通り、一般的なドキュメントツールではなくGTK+に特化したドキュメントツールです。もう少し細かくいうと、GObjectに特化したドキュメントツールです。 「GObjectに特化している」というのは、次の機能を備えているからです。 GObjectのプロパティー専用のドキュメント機能 GObjectのシグナル1専用のドキュメン

    GTK-Docの使い方 - 2013-12-02 - ククログ
    masterq
    masterq 2018/05/21
    なんと、、、doxygenの亜種だとばかり思ってました。どこまで進んでいく気なんだGTK+
  • Gecko Embedded 次期ESR対応 - 2018-03-30 - ククログ

    はじめに これまでにも何度か紹介してきましたが、クリアコードではGecko(Firefox)を組み込み機器向けに移植する取り組みを行っています。 Gecko Embeddedプロジェクト Gecko Embeddedプロジェクト 11月時点のステータス 当プロジェクトでは移植コストを少しでも低減するために、Firefoxの延長サポート版(ESR)のみを対象としています。これまではESR45やESR52をベースにハードウェアアクセラレーションに対応させるための作業を行ってきましたが、現在は5月にリリース予定の次期ESR(ESR60)に対応するための作業を進めています。 今回は、この作業の現在のステータスと、そのビルド方法ついて紹介します。 現在のステータス 現在はFirefox 60のβ版をもとに開発を進めています。ビルドは通るようになり、ソフトウェアレンダリングでの描画もある程度安定して動

    Gecko Embedded 次期ESR対応 - 2018-03-30 - ククログ
    masterq
    masterq 2018/03/31
    "現時点ではRenesas RZ/G1Mでのみ動作を確認" ひぇぇ
  • Emacs実践入門 - おすすめEmacs設定2012 - 2012-03-20 - ククログ

    2012年3月にEmacsの入門書が技術評論社から出版されました。 https://amazon.co.jp/dp/9784774150024 インストール方法やファイルの開き方などから始まっていて初心者向けの始まり方になっています。それでは初心者向けなのかというとそうでもなく、中盤から後半はrequireしないと使えないElispを使った拡張方法の紹介になっています。 おそらく、初心者の人は1/3か1/2くらい進んだところで一度脱落するのではないでしょうか。逆に、ある程度知っている人は中盤から後半にかけて興味のある話題が増えていくことでしょう。脱落してしまった人は、しばらく前半の機能でEmacsを使って、慣れてきてから再挑戦するとよいでしょう。 後半の拡張方法の紹介部分では多くの方法を紹介するためか、1つ1つの方法については簡単に紹介する程度にとどまっています。よりつっこんだ使い方までは

    Emacs実践入門 - おすすめEmacs設定2012 - 2012-03-20 - ククログ
  • Debianパッケージのメンテナンスをsalsa.debian.orgに移行するには - 2018-03-24 - ククログ

    はじめに これまでDebian関連の開発プラットフォームとしては、Aliothと呼ばれるFusionForgeを使ったサービスが提供されていました。1 最近では、Aliothの後継としてSalsaと呼ばれるGitLabを使ったサービスへの移行が進んでいます。2 今回は、メンテナンスしているパッケージをgit-buildpackage(gbp)のやりかたに合わせつつsalsa.d.oへと移行する方法を紹介します。 salsa.d.oへなぜ移行するのか libhinawaを例に紹介します。libhinawaパッケージのメンテナンスでは、これまでアップストリームがdebianディレクトリをあらかじめ用意してくれていたので、そちらに都度フィードバックする方法で実施していました。 このままGitHubのリポジトリでメンテナンスし続けてもよいのですが、アップストリームの側ではソフトウェアそのものの開発

    Debianパッケージのメンテナンスをsalsa.debian.orgに移行するには - 2018-03-24 - ククログ
    masterq
    masterq 2018/03/25
    ピンポイントの記事が来た。ありがたや
  • go-apt-cacherによるお手軽APT専用キャッシュサーバーの導入方法 - 2018-03-06 - ククログ

    はじめに DebianでDockerのイメージを検証用に作っては破棄するような使い方をする場合には、ネットワーク経由でのパッケージのインストールやアップデートの遅さが気になることがあります。 そういうときには、APTリポジトリのキャッシュが欲しくなります。定番どころでは apt-cacher-ng がありますが、今回は go-apt-cacher を導入する方法1を紹介します。 go-apt-cacherが開発された背景やその利点については以下の記事が詳しいのでそちらを参照されることをおすすめします。 アーティファクトの管理について、あるいは go-apt-cacher / go-apt-mirror の紹介 go-apt-cacherのインストール すでにGoを導入している環境であれば、go getでインストールすることができます。 go get -u github.com/cybozu

    go-apt-cacherによるお手軽APT専用キャッシュサーバーの導入方法 - 2018-03-06 - ククログ
    masterq
    masterq 2018/03/15
    "APTリポジトリのキャッシュが欲しくなります。定番どころでは apt-cacher-ng がありますが、今回は go-apt-cacher を導入する方法を紹介します。"
  • TravisCI上で複数のLinuxディストリビューションのテストをする方法 - 2017-07-27 - ククログ

    クリアコードでは、独立行政法人情報処理推進機構(IPA)平成20年度オープンソフトウェア利用促進事業「迷惑メール対策を柔軟に実現するためのmilterの開発」の一環としてmilter managerの開発を行なって以来、milter managerの開発を継続しています。 最初のコミットを見ると2008年9月1日なので、約9年開発を続けています。 milter managerは、記事執筆時点では以下のLinuxディストリビューション向けにパッケージを作成しています。 CentOS 6 CentOS 7 Debian Jessie 1 Debian Stretch Debian Buster Debian Sid Ubuntu 14.04 LTS Ubuntu 16.04 LTS Ubuntu 16.10 Ubuntu 17.04 CentOS 7以外はi386とx86_64(amd64)向

    TravisCI上で複数のLinuxディストリビューションのテストをする方法 - 2017-07-27 - ククログ
  • lessの既定のオプションを変えて快適なCLI生活を手に入れる - 2017-06-27 - ククログ

    その時表示している内容を消さずにlessを終了するには? 何かのコマンドの実行結果が長くなって画面外に溢れてしまう場合でも、grep ... | less という風にパイプライン経由でlessコマンドに結果を渡すと、結果を自由にスクロールしながら落ち着いてゆっくり読むことができます。 しかし、「q」でlessを終了すると、その時表示されていた内容は画面から消えてしまいます。コマンドの出力結果を見ながら次の作業をしようと思うと、以下のような工夫をしないといけません。 Ctrl-Zでlessをバックグラウンドに切り替えて、また参照したくなったらその都度fgコマンドで復帰させる。 tmuxなどのターミナルマルチプレクサを使い、画面を分割して片方の画面でlessの結果を表示しながら、もう片方の画面で操作を行う。 コマンドの出力を直接lessに渡して表示するのではなく、一旦リダイレクトでファイルに保

    lessの既定のオプションを変えて快適なCLI生活を手に入れる - 2017-06-27 - ククログ
    masterq
    masterq 2017/07/18
    そろそろlvからlessに戻ろうかな。。。
  • LibreOffice Calcのスプレッドシートの変更点をgit diffで見られるようにする - ククログ(2017-04-24)

    プログラマーは基的にプレーンテキスト形式が好きな生き物で、ドキュメントならMarkdown、表形式のデータならCSVが定番です。プレーンテキスト形式だとシェルのコマンドや簡単なスクリプトで容易に加工できますし、Gitリポジトリなどに格納した状態でも変更点を追いやすいです。 しかし、たまにどうしても、もうちょっとリッチな形式のバイナリファイルをマスターデータとして持っておかないといけないことがあります。Microsoft ExcelやLibreOffice(OpenOffice.org)Calcなのスプレッドシートもそのひとつです。 Microsoft Excelの場合、悩みを抱える人が多いためか、すでに色々な方が解決策を公開されています。例えばGitで管理しているExcelファイルの差分を見るという記事では、Go言語製のツールを併用する手順が紹介されています。 一方、ODF(OpenDo

    LibreOffice Calcのスプレッドシートの変更点をgit diffで見られるようにする - ククログ(2017-04-24)
  • GObject Introspection対応ライブラリーの作り方 - 2013-12-16 - ククログ

    require "gobject-introspection" module Sample loader = GObjectIntrospection::Loader.new(self) loader.load("Sample") end greeter = Sample::Greeter.new puts(greeter.greet) # -> Hello! どちらの場合も、「Greeterクラスを定義、Greeterクラスにはgreetメソッドを定義」ということを指定していません。「Sampleライブラリーを使う」と指定しているだけです。 SampleライブラリーのAPIは2つの関数しか提供していませんが、通常、ライブラリーのAPIはもっと多くの関数を提供しています。ライブラリーがGObject Introspectionに対応していると、それらの関数をどのように使うかを1つずつ定義し

    GObject Introspection対応ライブラリーの作り方 - 2013-12-16 - ククログ
  • Redmineで高速に全文検索する方法 - 2016-04-11 - ククログ

    Redmineで全文検索するとかなり時間がかかります。 クリアコード社内でもRedmineを使用しており、全文検索が遅いことは以前から問題視していました。 最近Redmineでの全文検索を高速に実行できるようになるプラグインを開発したので紹介します1。 リンク先を見てもらえばわかるとおり、PostgreSQLMySQL(MariaDB)に対応しています。 それぞれPGroongaとMroongaを使用しています。 このプラグインを使うと、デフォルトの全文検索と比較して以下のメリットがあります。 高速 Ruby on RailsでPostgreSQLとPGroongaを使って日語全文検索を実現する方法 PostgreSQLで日語全文検索 - LIKEとpg_bigmとPGroonga Ruby on RailsMySQLとMroongaを使って日語全文検索を実現する方法 MySQL

    Redmineで高速に全文検索する方法 - 2016-04-11 - ククログ
  • Debianの移植作業用のインフラを借りるには - 2016-02-24 - ククログ

    はじめに Debianプロジェクトでは、移植作業用のインフラが各アーキテクチャごとに用意されています。 それらのインフラはDebian開発者向けに提供されているものですが、開発者だけに限定されているわけではありません。 今回は、移植作業用のインフラをDebian開発者でない人が借りる方法について紹介します。 porterboxとは 移植作業用のインフラのことをporterboxと呼んでいます。それらはdebian.org配下のドメインで提供されています。 どんなものが提供されているかはdebian.org Developer Machinesから一覧できます。 移植作業用に使われるのは、この一覧のうちpurpose欄がporterboxとなっているものです。 しかし、多種多様な目的のマシンが混在しているのでややわかりづらいです。 そこで便利なのがporterboxコマンドです。 これはPy

    Debianの移植作業用のインフラを借りるには - 2016-02-24 - ククログ
  • C/C++のソースコードをCppcheckで静的解析してみよう - 2016-02-03 - ククログ

    % sudo make PREFIX=/usr/local SRCDIR=build CFGDIR=/usr/local/share/cppcheck/cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG -Wall -Wno-sign-compare -Wno-unused-function" install readme.mdではインストールせずに使う想定ですが、今回は/usr/localにインストールするものとします。1 Cppcheckを使ってみる Cppcheckのセットアップができたので、実際に使ってみましょう。 例として、ククログでも何度もとりあげている、全文検索エンジンGroongaでやってみましょう。 すでに、Groongaのリポジトリをgroonga.cleanディレクトリへとcloneしてあるものとします。 Cppcheckのヘルプにもあ

    C/C++のソースコードをCppcheckで静的解析してみよう - 2016-02-03 - ククログ
  • Sylpheedのプラグインの作り方(2015年版) - 2015-11-30 - ククログ

    はじめに Sylpheedという「軽快で使いやすいオープンソースのメールソフト」があります。 以前、Sylpheed向けにプラグインを作る方法をWindows版を前提に紹介しました。 Sylpheedのプラグインの作り方 もう2年以上前の記事となり、内容の一部が若干古くなっていることから、改めてソースコードに添付されているプラグインを作る手順を紹介します。1 対象とするSylpheedのバージョン Sylpheedには、バージョン3.0から正式に導入されたプラグインの仕組みがあります。 このプラグインの仕組みはしばしば改訂2されています。 そのため、記事で対象とするSylpheedのバージョンは現在リリースされている最新の安定版である3.4.3 Windows版とします。3 もう間もなく3.5.0が正式リリースされますが、記事の内容はそのまま使えるはずです。 Sylpheedのプラグイ

    Sylpheedのプラグインの作り方(2015年版) - 2015-11-30 - ククログ
  • gettextとバージョン管理システムの相性の悪さを解消する案 - 2013-11-14 - ククログ

    Gettextという翻訳の仕組み1はフリーソフトウェアではよく使われています。いくつか不便な点はありますが、長年使われている仕組みでツールが揃っていることが理由でしょう。不便な点の1つである、「バージョン管理システムとの相性の悪さ」を解消する案が浮かんだので紹介します。 どうしてバージョン管理システムと相性が悪いか gettextでは.poファイルに翻訳したテキストを書きます。翻訳したテキストは自動生成ではない情報なのでバージョン管理対象です。ということで、.poファイルはリポジトリーに入れます。 バージョン管理システムと相性が悪い原因は、.poファイルに翻訳したテキスト以外のいろいろな情報が入っていることです。中でも、「どこに翻訳対象のメッセージがあったか」は自動生成できる情報で、量も多く、通常であればバージョン管理しない情報です。しかし、バージョン管理したい.poファイルの中に含まれて

    gettextとバージョン管理システムの相性の悪さを解消する案 - 2013-11-14 - ククログ
    masterq
    masterq 2013/11/16
    案外良いかもしれない。あとは周辺環境の整え方か
  • GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ

    RubyPythonなどのスクリプト言語では実行中に例外が発生するとバックトレースを出力してくれます。バックトレースがあるとどこで問題が発生したかがわかるためデバッグに便利です。一方、CやC++では不正なメモリアクセスをすると、バックトレースではなくcoreを残して1終了します2。デバッガーでcoreを解析するとバックトレースを確認できます。 このように、CやC++でデバッグするときにデバッガーはなくてはならない存在です。スクリプト言語にもデバッガーはありますが、デバッガーを使わなくてもデバッグできる範囲が広いため、CやC++をデバッグするときのほうがデバッガーのありがたさがわかります。 この記事では、広く使われているデバッガーであるGDBをもっと便利に使うためのGCCのコンパイルオプション-g3を紹介します。 サンプルプログラム まず、この記事で使うサンプルプログラムを示します。マクロ

    GDBでデバッグするなら-g3オプション - 2013-05-08 - ククログ
    masterq
    masterq 2013/05/09