Windows+Chromeで「この接続ではプライバシーが保護されません」となる場合の対処

June 21,2017 12:03 AM
Category:[Google Chrome]
Tag:[GoogleChrome]
Permalink

Windows+Chromeで「この接続ではプライバシーが保護されません」となる場合の対処方法について紹介します。

1.問題点

Google ChromeであるSSLなページを開くと「この接続ではプライバシーが保護されません」となる場合」があります。

が、対処方法が分かりません。

ということで、「この接続ではプライバシーが保護されません」となる場合の対処について紹介します。

ここではWindowsの対処方法になります。

2.対処方法1

IEを開き、ツールアイコンをクリックして「インターネットオプション」をクリック。

「詳細設定」タブをクリック。

SSLおよびTLS関連の項目をすべてチェックして「OK」をクリック。

これで冒頭のメッセージが表示されなくなり、正常に接続できるようになる可能性があります。

3.対処方法2

Chromeのアドレスバーに下記を入力。

chrome://net-internals/#hsts

「Delete domain」にドメインを入力して「Delete」をクリック(実行しても画面に変化はありません)。

これでエラーが発生したページを再読み込みすれば、正常に接続できるようになる可能性があります。

4.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

shmgetの"0x1b6"の意味

June 16,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

shmgetの"0x1b6"の意味について調べてみました。

1.はじめに

Linuxには、共有メモリーセグメントを割り当てるshmget()というシステムコールがあります。

shmid = shmget(key, sizeof(pthread_mutex_t), IPC_CREAT | IPC_EXCL | 0x1b6);

こういうサンプルをみかけるのですが、第3パラメータにある"0x1b6"の意味が分かりません。

ということで、shmgetの"0x1b6"の意味について調べてみました。

2."0x1b6"の意味

manコマンドによると、shmgetの第3パラメータはshmflgといい、動作を決めるための各フラグを設定します。

上記のサンプルにある、IPC_CREATとIPC_EXCLの意味は次のとおりです。

IPC_CREAT

新しいセグメントを作成する。このフラグが指定されなかった場合、 shmget() は key に対応するセグメントを探し、 ユーザーがそのセグメントにアクセスする許可があるかどうかをチェックする。

IPC_EXCL

このフラグは IPC_CREAT とともに使用し、 この呼び出しで確実にセグメントが作成されるようにする。 セグメントが既に存在した場合には、 呼び出しは失敗する。

この2つの値はOR条件で組み合わせられます。ちなみに16進数表記の値はそれぞれ下記のとおりです。

  • IPC_CREAT:0x200
  • IPC_EXCL:0x400

manの説明は、次のように続いています。

上記のフラグに加えて、 shmflg の下位 9 ビットは、所有者、グループ、その他への許可を指定する。 これらのビットは open(2) の mode 引き数と同じ形式で同じ意味を持つ。 今のところ、システムは実行 (execute) 許可を参照しない。

「下位 9 ビット」がどうやら"0x1b6"を指すようです。

"0x1b6"を2進数に分解すると、0001 1011 0110になります(下位9bitなので上位3bitの"000"は無視)。

下位9bitを3ビットずつ区切ると、110 110 110になります。

10進数に直すと「666」になり、これでパーミッションの指定を行っているようです。

つまり"0x1b6"は「666」というパーミッションの設定を行っているということですね。

Comments [0] | Trackbacks [0]

C++のクラス変数にstaticにして「~に対する定義されていない参照です」というエラーになる場合の対処

June 15,2017 12:03 AM
Category:[C/C++]
Tag:[C++]
Permalink

C++のクラス変数にstaticにして、「~に対する定義されていない参照です」というエラーになる場合の対処について紹介します。

1.問題点

下記のサンプルを作りました。

このサンプルのポイントは、クラス変数fooをstaticで定義している点です。

sample.h

class Sample {
private:
    int foo;
public:
    Sample(int number);
    void display();
};

sample.cpp

#include <iostream>
#include "sample.h"
 
Sample::Sample(int number) {
    foo = number;
}
void Sample::display() {
    std::cout << foo << std::endl;
}

test.cpp

#include "sample.h"
 
int main() {
    Sample test(100);
    test.display();
    return 0;
}

実行結果

% g++ sample.cpp test.cpp
% ./a.out
100

次に、クラス変数fooをstaticに変更してみます。staticを付与することで、メンバ変数は実体が1つだけになります。

sample.h

class Sample {
private:
    static int foo;
public:
    Sample(int number);
    void display();
};

このサンプルをコンパイルすると、リンケージで下記のエラーが発生します。

% g++ sample.cpp test.cpp
/tmp/ccFBFNh2.o: 関数 `Sample::Sample(int)' 内:
sample.cpp:(.text+0x10): `Sample::foo' に対する定義されていない参照です
/tmp/ccFBFNh2.o: 関数 `Sample::display()' 内:
sample.cpp:(.text+0x24): `Sample::foo' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました

クラス変数fooの定義がされていないというエラーのようですが、対処方法が分かりません。

ということで、「~に対する定義されていない参照です」というエラーになる場合の対処について紹介します。

2.原因と対処

原因はエラーメッセージのとおりです。

対処方法は、sample.cppに赤色で示したクラス変数の定義を追加します。

#include <iostream>
#include "sample.h"
 
int Sample::foo;
 
Sample::Sample(int number) {
    foo = number;
}
void Sample::display() {
    std::cout << foo << std::endl;
}

これで正常にコンパイルが完了します。

実行結果

% g++ sample.cpp test.cpp
% ./a.out
100
Comments [0] | Trackbacks [0]

Finaleで曲の途中で二段譜から一段譜に変更する方法

June 11,2017 12:03 AM
Category:[Finale]
Tag:[Finale]
Permalink

Finaleで曲の途中で二段譜から一段譜に変更する方法を紹介します。

変更前
変更前

変更後
変更後

1.はじめに

Finaleでパート譜を作りました。

パートが上下で分かれているため2段で表示されるのですが、片方のパートの休符が多いところは1段で表示したいのですが、設定方法が分かりません。

ということで、曲の途中で二段譜から一段譜に変更する方法を紹介します。

2.曲の途中で二段譜から一段譜に変更する

曲の途中で二段譜から一段譜に変更するには、「五線ツール」のアイコンをクリック。

五線ツール

変更したい小節を選択して右クリック。

(クリックで拡大)
変更したい小節を選択

「五線」→「空の五線を隠す」をクリック。

空の五線を隠す

これで休符の小節が非表示になりました。

(クリックで拡大)
休符の小節が非表示

Comments [0] | Trackbacks [0]

ネットで郵便転送を依頼する方法

June 9,2017 12:03 AM
Category:[その他]
Tag:[Service]
Permalink

ネットで郵便転送を依頼する方法を紹介します。

1.はじめに

郵便転送を依頼することになりました。

以前であれば郵便局に行って転送依頼の手続きをしていたのですが、調べたところ、ネットで郵便転送を依頼できることが分かりました。

ということで、ネットで郵便転送を依頼する方法を紹介します。

2.郵便転送を依頼する

e転居のページにアクセスして、PCの場合は「e転居のお申込みはこちらから」、スマホの場合は「スマートフォンご利用の方はこちらから」をクリック。ここではPCの場合で説明を進めます。

e転居のページ

利用確認画面が表示されるので「同意する」をチェックして「次へ進む」をクリック。

(クリックで拡大、以下同様)
利用確認画面

氏名・フリガナ・メールアドレスを入力して「次へ進む」をクリック。

メールアドレス入力画面

表示された氏名・フリガナ・メールアドレスを確認し、問題なければ「次へ進む」をクリック。

メールアドレス確認画面

登録したメールアドレスに確認メールが送信されるので、メールに記載されたURLにアクセス。

確認メール画面

旧住所・新住所を入力して「次へ進む」をクリック。

住所情報入力画面

表示された住所情報を確認し、問題なければ「次へ進む」をクリック。

住所情報入力画面

転居する人の氏名と旧住所に残る人数、転送開始日を入力して「次へ進む」をクリック。

転居者情報入力画面

表示された転居者と旧住所に残る人数、転送開始日を確認し、問題なければ「次へ進む」をクリック。

転居者情報確認画面

登録した電話番号から表示された番号に電話し、自動音声にしたがって画面に表示されている「確認番号(6ケタ)を入力します。自動音声が正常に終了したら画面下にある「申請登録」をクリック。

届出者確認入力画面

これで転送の申請完了です。

受付完了画面

Comments [0] | Trackbacks [0]

C/C++で16進数の文字列を16進数の整数に変換する方法

June 6,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C/C++で16進数の文字列を16進数の整数に変換する方法を紹介します。

1.問題点

下記の、16進数を変数に代入し、それをさらに別の変数に代入して表示するプログラムを作りました。

#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int data, result;
    data = 0x0a; // 16進数
    result = data;
    printf("data:%#.2x(%d)\n", result, result);
    return 0;
}

実行結果

% ./a.out
data:0x0a(10)

プログラムの中で16進数を代入した場合、期待通りに代入および表示することができますが、引数で16進数を受け取った場合、文字列として扱われるため、プログラム内で整数に変換する方法が分かりません。

2.16進数の文字列を16進数の整数に変換する

16進数の文字列を16進数の整数に変換するにはsscanf()を利用します。

#include <stdio.h>
 
int main(int argc, char *argv[]) {
    int data, result;
    sscanf(argv[1], "%x", &data);
    result = data;
    printf("argv[1]:%s => data:%#.2x(%d)\n", argv[1], result, result);
    return 0;
}

実行結果(第1パラメータに16進数指定)

% ./a.out 0x0a
data:0x0a(10)

sscanf()は、第1パラメータで示す文字列ポインタからの入力を読み込み、第2パラメータのフォーマットで第3パラメータ以降の変数に代入する関数です。

第3パラメータ以降はアドレス指定でなくてはいけません。

Comments [0] | Trackbacks [0]

Outlookでメールメッセージのヘッダを表示する方法

June 2,2017 12:03 AM
Category:[Outlook]
Tag:[Outlook]
Permalink

Outlookでメールメッセージのヘッダを表示する方法を紹介します。

1.問題点

会社でMLを使っているのですが、ML宛のメールの返信時に送信者(MLメンバーではない)のアドレスがTo:に設定されないことがあります(多分MLの仕様)。

で、メールのヘッダを確認しようと思ったのですが、利用しているOutlookでメールヘッダを表示する方法が分かりません。

ということで、Outlookでメールヘッダを表示する方法を紹介します。

この記事はOutlook 2010以降が対象です。

2.メールヘッダを表示する

メールヘッダを表示するには、該当のメッセージをウィンドウで開き、「ファイル」タブをクリック。

「情報」タブの「プロパティ」をクリック。

(クリックで拡大)

画面が開くので、一番下にある「インターネットヘッダー」にメールヘッダーが表示されます。

Outlook 2010以前のバージョンでは手順が異なるようなのでご注意ください。

Comments [0] | Trackbacks [0]

Wixブログの作り方

May 31,2017 12:55 AM
Category:[Wix]
Tag:[Wix]
Permalink

Wixブログの作り方を紹介します。

Wixブログ

1.はじめに

Wix(ウィックス)は、2006年に設立された企業で、Wix.comではドラッグ&ドロップ形式の無料ホームページ作成ツールを提供し、世界で1億人以上が利用するオンラインプラットフォームとなっています。

本エントリーではWixブログの基本的な機能と、簡単な作成フローについて紹介します。

2.Wixブログの機能・特徴

Wixブログは、選択したテンプレートを元にウェブページを直接編集するという操作で、記事やデザインを作成することができます。HTMLを書く必要は一切ありません。

選択するテンプレートもデザイナーが手がけたもので非常に美しいものばかりです。これらのテンプレートはすべて無料で使えます。

記事やテンプレートで利用する画像も、切り抜き・反転・フィルタ・明るさ・キズ補正など、ページ上で編集できます。

作成したページは、スマホ・タブレットなどのレスポンシブデザインにも自動的に対応します。

無料で利用することもできますが、独自ドメインを登録することも可能です。

次項ではWixブログの具体的な作り方を紹介します。

3.ブログ作成フロー

Wixブログのページにアクセスして「いますぐはじめる」をクリック。

(クリックで拡大、以下同様)
いますぐはじめる

メールアドレス・パスワードを入力して「新規登録」をクリック。

新規登録

登録が完了するとテンプレート選択画面が表示されます。

テンプレート選択画面

テンプレートは、

  • ファッションブログ
  • フォトブログ
  • デザイナーブログ
  • ジャーナリストブログ
  • フードブログ
  • 書籍ブログ
  • ビジネスブログ

など数十種類のカテゴリーから選択することができます。

ここでは先頭に表示されている「ファッションブログB」を選択してみます。

ファッションブログB

スクリーンショットにマウスをポイントすると、「編集」と「表示」のボタンと「詳細」のリンクが表示されます。

スクリーンショットにマウスをポイント

「詳細」のリンクをクリックすると、テンプレートの説明が表示されます。

テンプレートの説明

「表示」をクリックすると、新しいタブにサンプルデータでテンプレートが表示されます。サンプルデータ上部にある「編集」をクリックすると、そのままテンプレート編集画面に移動することができます。

テンプレート編集画面

「編集」をクリックして編集画面に移動します。なおテンプレートを後から変更すると記事データが消えてしまうようなので、注意しましょう。

編集

これがテンプレート編集画面です(この画面に遷移するまでちょっと時間がかかるようです)。さきほどのサンプルページと似ていますが、編集用のアイコンが表示されていることがわかります。

テンプレート編集画面

それではこの画面を使って、まず新しい記事を作成してみます(テンプレートの編集はこの後行いますが順番はどちらでも構いません)。

記事タイトル・記事本文を編集するには、記事部分をクリック。

記事部分をクリック

ボタンが表示されるので、「新しい記事を追加」をクリック。

新しい記事を追加

これで記事作成画面に移動します。

編集画面

「タイトルを入力してください」の部分をクリックして記事タイトルを入力します。

記事タイトルを入力

同様にして、本文も入力します。

記事本文を入力

画像を挿入するには上部の「画像」をクリック。

画像を挿入

右側の大きな点線の枠内に画像をドラッグします。

画像をドラッグ

アップロードできたら「完了」をクリックして、右下にある「ファイルを追加」をクリック。

ファイルを追加

これで記事に画像が追加されました。追加した画像の上部には代替テキストのテキストフィールド、位置揃え、画像リンク、画像の回転、削除のアイコンが表示されます。

アイコン表示

画像をクリックして少しドラッグする操作をすれば上部のアイコンが消えます(ここの切り替えはちょっと分かりにくいかもしれません)。

アイコンを非表示

これで記事ができあがったので、右側の「記事を公開」をクリック(右の▽をクリックすれば予約投稿もできます)。

記事を公開

ブログ記事一覧画面に遷移します。ちなみにこの状態では「ブログ記事はサイトを公開するまで公開されません」というアラートが上部に表示され、まだ記事は公開されていません。

ブログ記事一覧画面

ブログ記事一覧画面右上の×印をクリックすると下記のように、作成した記事が表示された状態でのテンプレート編集画面になります。

テンプレート編集画面

続いてブログタイトルを変更します。タイトル部分にマウスをポイントすると「テキスト」という枠が表示されるので、枠内の任意の位置でクリック。

タイトル部分にマウスをポイント

表示された「テキストを編集」をクリックすれば編集モードになります(前の画面でダブルクリックしても編集モードになります)。

編集モード

ブログタイトル部分が反転されるので消去し、任意のテキストを入力します。

任意のテキストを入力

右側に表示されているウィジェットからスタイルやフォント・フォントサイズを変更できます。

ウィジェット

フォントを変更しました。なおスタイルを後から選び直すとフォントがデフォルトに戻ってしまうようなので注意しましょう。

フォントを変更

表示されたウィジェットは、右上の×をクリックするか、ページ上のどこかをクリックすれば非表示になります。

ウィジェットを非表示

同様の手順で、ブログタイトル下にあるサブタイトルも変更します。

サブタイトルも変更

テキストの位置修正は、オブジェクトをシングルクリックした状態でドラッグすれば移動できます。

テキストの位置修正

ちょうどいいところにくると補助線が表示されます。

補助線

ブログタイトルとサブタイトルはこのようになりました。

ブログタイトルとサブタイトル

最後にページの背景を追加してみます。左側にあるアイコンの一番上にある「背景」をクリック。

背景

背景の候補がずらっと表示されるので、その中から任意の1枚を選択。わかりにくいですがサンプルにビデオのアイコンが表示されているのは動画です。

背景の候補

これで背景が設定されました。

背景が設定

さらに背景選択画面上部の「設定」をクリックして、選択した背景の詳細設定を行います。

背景の詳細設定

詳細設定用のウィジェットが開くので、ここでは「スクロールエフェクト」の「フリーズ」をクリックして背景を固定します。その他、画像の透明度や表示方法(拡大・原寸・タイル等)や表示位置も修正することができます。

詳細設定

拡大表示されていた画像がブラウザのサイズにおさまりました。

背景を固定

設定が終わったら、各ウィジェットの×印をクリックして閉じます。

ウィジェットを閉じたところ

ざっくりですがこれで最低限の準備ができたので、右上の「公開」をクリックします。

これでブログが公開されました。「サイトを見る」をクリック。

サイトを見る

今回の出来上がりはこのような感じになりました。左サイドバーの著者画像は手順を省略していますが差し替えています。

ブログ

公開後の記事の追加や管理は、テンプレート選択画面の上部にある「マイサイト」をクリック。

マイサイト

マイアプリの「ブログ」をマウスでポイントして表示された「ブログを管理」をクリック。

ブログを管理

これで記事一覧画面が表示されます。テンプレート選択時にデフォルトで用意されていた記事は削除しておきましょう。

ブログ

4.感想

実際にWixブログを作成してみて感じたことは、まずウェブデザインが素人の私でも、HTMLを一切書かずにここまで綺麗なブログを作れることに驚きました。

今回は画面をキャプチャしながらの作業だったため多少時間がかかりましたが、そうでなければかなり短時間でブログを作成できるのではないかと思います。

また管理画面は記事やカテゴリ・タグなどの必要最低限のデータしかなく、画像などは記事作成画面で編集できるようになっているため、シンプルで分かりやすいです。

不満な点は、非力なPCで操作したせいかもしれませんが、エディタに遷移するときにやや時間がかかってしまう点です。

それからテンプレートを再編集するときのリンクが不明なことでしょうか。マイアプリから起動できるのは前述の記事・カテゴリ・タグの管理のみで、記事の作成や更新画面でもテンプレート編集画面には遷移できないようです。

テンプレートを後で編集したい場合、テンプレート編集時のURLをブックマークしておく必要があるかもしれません(ちなみにテンプレート選択画面から同じテンプレートを選択しても元の編集画面には戻れないようです)。

2017.6.6追記
テンプレートを再編集するときは、「マイアプリ」が表示されている画面左上の「サイトを管理」をクリック。

サイトを管理

左側にある「サイトを編集」をクリック。これでテンプレート編集画面に遷移します。

サイトを編集

以上です。
これからWixブログでブログを始めたい方の参考になれば幸いです。

Comments [0] | Trackbacks [0]

WordPressのファイルアップロードでファイル名をリネームする方法

May 30,2017 1:11 AM
Category:[画像]
Tag:[WordPress]
Permalink

WordPressのファイルアップロードでファイル名をリネームする方法を紹介します。

1.問題点

WordPressのファイルをまとめてアップロードしたいのですが、ファイル名をアップロード時のタイムスタンプに統一したいと思ってます。

ということで、ファイルアップロードでファイル名をリネームする方法を紹介します。

参考までに、WordPressのアップロード先は、

wp-content/uploads/YYYY/MM

です。

2.ファイルアップロードでファイル名をリネームする

ファイル名をリネームするには、function.phpに下記のコードを追加します。

function rename_file($filename) {
    $pathinfo = pathinfo($filename);
    return date("YmdHis") . "." . $pathinfo['extension'];
}
add_filter('sanitize_file_name', 'rename_file', 10);

これでファイル名が「20170506104946.jpg」という風にリネームされます。

pathinfo()はファイルパスに関する情報を返却する関数です。$pathinfo['extension']で、ファイルの拡張子を取得できます。

time()は現在時刻を取得する関数です。

なお、「All in One SEO」プラグインのXMLサイトマップ機能を使っている場合、sitemap.xmlというファイルへの干渉をなくすため、赤色の3行を追加します。

function rename_file($filename) {
    $pathinfo = pathinfo($filename);
    if ($info['filename'] == 'sitemap') {
        return $filename;
    }
    return date("YmdHis") . "." . $pathinfo['extension'];
}
add_filter('sanitize_file_name', 'rename_file', 10);

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

C/C++で関数名(シンボル名)から関数アドレスを取得する方法

May 29,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

関数名(シンボル名)から関数アドレスを取得する方法を紹介します。

1.問題点

関数名(シンボル名)から関数アドレスを取得する処理を実装する必要が生じましたが、実装する方法がわかりません。

ということで、実装方法を紹介します。

2.関数名から関数アドレスを取得する

関数名から関数アドレスを取得するにはdlsym()を利用します。

サンプルを以下に示します。

sample.cc

#include <stdio.h>
#include <dlfcn.h>
 
int main() {
    void    *handle;
    int     (*fptr)(int);
  
    handle = dlopen("/home/foo/a.out", RTLD_LAZY);
    fptr = (int (*)(int))dlsym(handle, "main");
    printf("function addr: %p\n", fptr);
 
    return 0;
}

実行結果

g++ -ldl -rdynamic sample.cc
% ./a.out
function addr: 0x400880

まず、dlopen()で関数アドレスを取得したい関数が含まれるライブラリを指定します。"RTLD_LAZY"は、ライブラリのコードが実行される際に未定義シンボルを順次解決していくことを示すオプションです。

handle = dlopen("/home/foo/a.out", RTLD_LAZY);

dlsym()の第1パラメータにでライブラリのファイルハンドル、第2パラメータにアドレスを取得したい関数名(シンボル名)を設定します。

fptr = (int (*)(int))dlsym(handle, "main");

その他、ビルド時のポイントとして、"-ldl -rdynamic"が必須パラメータになります。

"-ldl"は動的ロードライブラリへのリンク、"-rdynamic"はすべてのシンボルを動的シンボルテーブルに追加するパラメータです。

"-ldl"を付与せずにビルドすると下記のエラーが発生します。

% g++ -rdynamic sample.cc
/tmp/cc8BV6Dq.o: 関数 `main' 内:
sample.cc:(.text+0x13): `dlopen' に対する定義されていない参照です
sample.cc:(.text+0x28): `dlsym' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました

"-rdynamic"を付与せずにビルドすると、ビルドは成功しますがdlsym()で期待する結果が得られません。

% g++ -ldl sample.cc
% ./a.out
function addr: (nil)

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

gcc/g++のコンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処

May 26,2017 12:03 AM
Category:[C/C++]
Tag:[C++]
Permalink

gcc/g++のコンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処方法を紹介します。

1.問題点

g++のコンパイルで下記のエラーが発生しました。

% g++ sample.cc
g++: コンパイラ内部エラー: Segmentation fault (プログラム cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.

数日前に同じファイルをコンパイルしたときには正常に終了しました。

が違いが分かりません。

ということで、コンパイルで「コンパイラ内部エラー: Segmentation fault」になる場合の対処方法を紹介します。

2.原因

原因は2つあり、1つはコンパイルしたファイルのサイズがかなり大きかったことでした。

そしてもうひとつは、別の作業でulimitコマンドでスタックサイズの上限を小さく(1000)していたためのようです。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimite

3.対処

スタックサイズを無制限に変更することでエラーが解消しました。

# ulimit -s unlimited
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Comments [0] | Trackbacks [0]

Linuxでコアダンプを出力する方法

May 25,2017 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxでコアダンプ(core)を出力する方法を紹介します。

1.問題点

Segmentation faultを発生させるC++プログラムを実行しました。

% ./a.out
Segmentation fault (コアダンプ)

が、ディレクトリにはcoreが出力されていませんでした。

出力されていない原因が分かりません。

ということで、coreを出力する方法を紹介します。

2.coreを出力する

coreを出力するには、まずulimitコマンドで現在の設定を確認します。ulimitはシステムリソースの上限を設定するためのコマンドで"-a"オプションで設定を確認できます。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 14622
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14622
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

赤字の部分がcoreの出力設定です。"0"になっているので出力できない状態になっています。

"ulimit -c"でコアダンプの出力サイズを設定します。

# ulimit -c unlimited

"unlimited"は無制限を意味します。

サイズを設定したい場合は、

# ulimit -c 1000000

のようにします。

再度、ulimitコマンドで現在の設定を確認します。

# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
 :

これでcoreが出力できる準備ができました。

もう一度Segmentation faultを発生させてみます。

% ./a.out
Segmentation fault (コアダンプ)
% ls -l
-rwxr-xr-x 1 hoge hoge   10419  5月 24 08:49 a.out
-rw------- 1 hoge hoge  425984  5月 24 09:03 core.18212

coreが出力できました。

Comments [0] | Trackbacks [0]

Firefox/Chromeでtable要素の「position: sticky」が動作しない問題の対処

May 23,2017 12:03 AM
Category:[Google Chrome]
Tag:[]
Permalink

Firefox/Chromeでtable要素の「position: sticky」が動作しない問題の対処方法を紹介します。

1.問題点

テーブルのヘッダ部分がページの上部にさしかかると「position: sticky」で表示が固定されるサンプルを作りました。

<style>
table {
  border-collapse: collapse;
  width: 600px;
}
thead {
  position: sticky;
  top: 0px;
  background: grey;
}
th, td {
  border: solid 1px #00
0000;
}
</style>
<body>
<p>1</p>
<table>
  <thead>
    <tr>
      <th>1-1</th>
      <th>1-2</th>
      <th>1-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>2</p>
<table>
  <thead>
    <tr>
      <th>2-1</th>
      <th>2-2</th>
      <th>2-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>3</p>
<table>
  <thead>
    <tr>
      <th>3-1</th>
      <th>3-2</th>
      <th>3-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
<p>4</p>
<table>
  <thead>
    <tr>
      <th>4-1</th>
      <th>4-2</th>
      <th>4-3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
    <tr>
      <td>abc</td>
      <td>def</td>
      <td>ghi</td>
    </tr>
  </tbody>
</table>
</body>

サンプル1

少し前のバージョンのFirefoxやChromeであればこれでヘッダ部分が固定されたのですが、いつの間にか固定されなくなりました。

ということで、tableで「position: sticky」を有効にする方法を調べました。

確認したブラウザのバージョンは下記です。

  • Chrome:58.0.3029.110
  • Firefox:53.0.3

2.tableで「position: sticky」を有効にする

tableで「position: sticky」を有効にするには、下記のCSSを追加する必要があります。

thead, tbody {
  display: table;
}
th, td {
  width: 200px;
}

解説ですが、まずthead要素に「display: table」を追加すればヘッダは固定されるようになります。

thead {
  display: table;
}

ただしこれだけでは幅のレイアウトが崩れてしまうため、tbody要素にも「display: table」を追加し、さらに各th,td要素にwidthプロパティを追加してセル幅を調整します。

このサンプルでは各列のセルが均等幅なので対応できましたが、列ごとにセル幅が異なると厳しいかもしれません。

あと、firefoxでは、

table, tr {
  display: table;
}

も必要っぽいです。

これがないと、スクロールアップしたときに一番上のテーブルのヘッダがきれいに戻らないようです。

サンプル2

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

VBAでセルの罫線に描画する方法

May 17,2017 12:03 AM
Category:[VB/VBA]
Tag:[Excel, VBA]
Permalink

VBAでセルの罫線に描画する方法を紹介します。

VBAでセルの罫線に描画する

1.問題点

VBAでセルの罫線上に、冒頭のスクリーンショットのように矢印を描画する作業が発生しました。

描画する際に分かっている情報は、セルの番地ではなく、開始点および終点の行と列の番号(「3,2」や「3,5」など)ですが、この情報を元に描画する方法が分かりません。

ということで、セルの罫線に描画する方法を紹介します。

2.セルの罫線に描画する

描画するサンプルを下記に示します。

Sub Test()
    Dim start_cell As String
    Dim end_cell As String
    Dim myRange As Range
 
    start_cell = Cells(3, 2).Address
    end_cell = Cells(3, 5).Address
    Set myRange = Range(start_cell, end_cell)
 
    With ActiveSheet.Shapes.AddLine(myRange.Left, myRange.Top, myRange.Left + myRange.Width, myRange.Top).Line
       .ForeColor.RGB = vbBlack
       .EndArrowheadStyle = msoArrowheadTriangle
    End With
End Sub

以下、コードの解説です。

開始点となるセルの番地をCellsプロパティで取得します。セルの番地が予め分かっていればこの行は不要です。

start_cell = Cells(3, 2).Address

同様に、終点となるセルの番地を取得します。

end_cell = Cells(3, 5).Address

Rangeプロパティで2つのセルの範囲を取得します。

Set myRange = Range(start_cell, end_cell)

下のように、Cellsプロパティとあわせて1行にまとめることもできます。

Set myRange = Range(Cells(3, 2), Cells(3, 5))

最後にShapes.AddLineメソッドで線を描画します。

With ActiveSheet.Shapes.AddLine(myRange.Left, myRange.Top, myRange.Left + myRange.Width, myRange.Top).Line
   .ForeColor.RGB = vbBlack
   .EndArrowheadStyle = msoArrowheadTriangle
End With

AddLineメソッドのパラメータは次のとおりです。

  • 第1パラメータ:開始点のX座標
  • 第2パラメータ:開始点のY座標
  • 第3パラメータ:終了点のX座標
  • 第4パラメータ:終了点のY座標

上記のサンプルでは、各パラメータに次のようにあてはめています。

  • 第1パラメータ(開始点のX座標):Rangeプロパティの左端
  • 第2パラメータ(開始点のY座標):Rangeプロパティの上端
  • 第3パラメータ(終了点のX座標):Rangeプロパティの左端に横幅を加えたもの
  • 第4パラメータ(終了点のY座標):Rangeプロパティの上端

また、

  • ForeColor.RGB
  • EndArrowheadStyle

は、線の色および終点のスタイル(矢印)を指定しています。

これで冒頭のスクリーンショットのような線を描画することができます。

点線の場合はAddLineメソッドに下記を追加します。

.DashStyle = msoLineDash
Comments [0] | Trackbacks [0]

C++で「Enable multithreading to use std::thread: Operation not permitted」というエラーになる場合の対処

May 12,2017 12:03 AM
Category:[C/C++]
Tag:[C/C++]
Permalink

C++で「Enable multithreading to use std::thread: Operation not permitted」というエラーになる場合の対処について紹介します。

1.問題点

C++11で実装されたstd::threadを使ったプログラムを作ってみました。

sample.cpp

#include <cstdlib>
#include <iostream>
#include <thread>
 
void task(const std::string msg) {
    std::cout << msg << std::endl;
}
 
int main(int argc, char **argv) {
    std::thread t(task, "Hello World!!");
    t.join();
    return 0;
}

が、このプログラムを実行すると下記の「Enable multithreading to use std::thread: Operation not permitted」というエラーが発生します。

% g++ -std=c++11 sample.cpp
% ./a.out
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
中止 (コアダンプ)

が、このエラーが発生する理由がわかりません。

ということで、このエラーになる場合の対処について紹介します。

2.原因と対処

原因は、コンパイル時に"-pthread"オプションを付与していないためです。

std::threadを利用したプログラムで"-pthread"オプションなしでコンパイルすると、コンパイル時にはエラーにならずに実行時エラーになります。

ということで、"-pthread"オプションを付与してコンパイルすればOKです。

% g++ -std=c++11 -pthread sample.cpp
% ./a.out
Hello World!!

3.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages