Limechatの複数行貼りつけでグレー文字を黒くする方法

July 19,2018 12:03 AM
Category:[Windows]
Tag:[]
Permalink

Limechatの複数行貼りつけでグレー文字を黒くする方法を紹介します。

1.問題点

Limechatの複数行貼りつけの場合、ペーストを実行すると、次の「貼り付け確認」画面が表示されるので「送信」をクリック。

「貼り付け確認」画面

これでペーストした文字が表示されますが薄いグレーになります。

ペーストした文字が薄いグレーで表示

このペースト文字を通常の黒色にしたいのですが、方法が分かりません。

ということで、Limechatの複数行貼りつけでグレー文字を黒くする方法を紹介します。

2.複数行貼りつけでグレー文字を黒くする

複数行貼りつけでグレー文字を黒くするには、ペースト実行で表示された「貼り付け確認」画面の「Noticeメッセージで送信」のチェックを外します。

Noticeメッセージで送信

これでペーストした文字が黒色で表示されます。

ペーストした文字が黒色で表示

Comments [0] | Trackbacks [0]

pg_ctlで「データベースクラスタのディレクトリではありません」というエラーになる場合の対処

July 12,2018 12:03 AM
Category:[PostgreSQL]
Tag:[PostgreSQL]
Permalink

PostgreSQLのpg_ctlで「データベースクラスタのディレクトリではありません」というエラーになる場合の対処方法について紹介します。

1.問題点

postgresqlのサーバ起動で

$ pg_ctl start
pg_ctl: ディレクトリ "/var/lib/pgsql/9.6/data" はデータベースクラスタのディレク トリではありません

というエラーになり、サーバの起動ができませんでした。

/var/lib/pgsql/9.6/data

というディレクトリは存在します。

ということで、「データベースクラスタのディレクトリではありません」というエラーになる場合の対処方法について紹介します。

2.対処

postgresユーザで、

$ pg_ctl start

の前に、init_dbを実行します。

以下、実施画面です。

$ initdb
データベースシステム内のファイルの所有者は"postgres"ユーザでした。
このユーザがサーバプロセスを所有しなければなりません。
 
データベースクラスタはロケール"ja_JP.UTF-8"で初期化されます。
したがってデフォルトのデータベース符号化方式はUTF8に設定されました。
initdb: ロケール"ja_JP.UTF-8"用の適切なテキスト検索設定が見つかりません
デフォルトのテキスト検索設定はsimpleに設定されました。
 
データベージのチェックサムは無効です。
 
ディレクトリ/var/lib/pgsql/9.6/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting dynamic shared memory implementation ... posix
設定ファイルを作成しています ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
データをディスクに同期しています...ok
 
警告: ローカル接続向けに"trust"認証が有効です。
pg_hba.confを編集する、もしくは、次回initdbを実行する時に-Aオプショ
ン、または、--auth-localおよび--auth-hostを使用することで変更するこ
とができます。
 
Success. You can now start the database server using:
 
    pg_ctl -D /var/lib/pgsql/9.6/data -l logfile start

このコマンドの実行後、サーバの起動ができました。

$ pg_ctl start
サーバは起動中です。
-bash-4.2$ < 2018-07-11 15:50:17.918 JST > LOG:  ログ出力をログ収集プロセスにリ ダイレクトしています
< 2018-07-11 15:50:17.918 JST > ヒント:  ここからのログ出力はディレクトリ"pg_log"に現れます。
Comments [0] | Trackbacks [0]

「PublishDraftプラグイン(MovableType7コンテンツデータ対応版)」リリース

July 10,2018 12:03 AM
Category:[コンテンツデータ]
Tag:[Movabletype, Plugin, PublishDraft]
Permalink

「PublishDraftプラグイン(MovableType7コンテンツデータ対応版)」をリリースしました。

1.追加機能

MovableType7対応で機能追加されたコンテンツタイプに対応します。

以下、機能追加後のスクリーンショットです。

公開(下書き)の場合、ステータスフィールドに状態を表示します。

公開(下書き)状態

公開フィールドのプルダウンには「公開(下書き)」を表示します。

公開(下書き)状態

また、コンテンツデータ一覧画面にも公開(下書き)状態を示すアイコンを表示しています。

公開(下書き)状態

その他、追加機能ではありませんが、記事・およびウェブページもこれまでどおり対応し、管理画面のデザインもあわせました。

2.プラグインのダウンロード

プラグインは下記のリンク先から評価版のダウンロードが可能です。

PublishDraftプラグイン
PublishDraftプラグイン

今のところ日時指定なし版のみですが、日時指定版も別途リリースする予定です。

Comments [0] | Trackbacks [0]

Wixストアの作り方

July 6,2018 12:03 AM
Category:[Wix]
Tag:[Wix]
Permalink

Wixストアの作り方を紹介します。

Wixストア

1.はじめに

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

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

2.Wixストアの機能・特徴

Wixストアは、選択したテンプレートを元にウェブページを直接編集するという操作と、いくつかの設定を行うことで、簡単にネットショップを開設することができます。

主な機能は次の通りです。

  • 500種類以上のネットショップ用無料テンプレート
  • スマホやタブレットに完全対応
  • 受注・在庫管理
  • 配送料と消費税を地域別に設定可能
  • 割引クーポン・メルマガ機能
  • 万全のセキュリティ対策
  • 充実した決済オプション
  • 24時間対応のカスタマーサポート

次項ではWixストアの具体的な作り方を紹介します。Wixのアカウントは予め登録した手順で説明します。

3.ストア作成フロー

Wixストアのページにアクセスして「ショップを始める」をクリック。

ショップを始める

右上の「新しいサイトを作成」をクリック。

新しいサイトとして作成

「ネットショップ」をクリック。

(画像はクリックで拡大、以下同様)
ネットショップ

「ネットショップ向けテンプレート」が表示されるので、好きなテンプレートを選択。

テンプレートを選択

ここでは腕時計のショップを選択します。

腕時計のショップ

マウスをポイントして「表示」をクリック。

表示

サンプルページが表示されるので、これでよければ右上の「編集」をクリック。

サンプルページ

Wixストアのエディタが開きます。ここでオンラインショップの見栄えを編集します。各項目が英語で表示されていますが、後述する支払方法の設定を行えば日本語で表示されるようになります。

Wixストアのエディタ

右上のプレビュー(目のアイコン)をクリックすると、サイトのプレビューが行えます。

サイトのプレビュー

プレビュー画面です。

プレビュー画面

プレビュー画面ではネットショップの動作をある程度確認することができます。ここではサンプルで表示されている「GENTS」という時計を選んでみます。

時計を選択

商品ページです。すでにそのまま使えるようにデザインされています。

商品ページ

色を選択して「ADD TO CART」をクリック。

ADD TO CART

カートに商品が入ったことを通知してくれます。

通知

右下の「VIEW CART」をクリック。

VIEW CART

別タブでカートのページが開きます。

カートのページ

「Checkout」をクリック。

Checkout

「To Checkout, Set a Payment Method(チェックアウトのための支払方法を設定してください))」というメッセージが表示されます。サンプルの動作確認はここまでとしてこのページを閉じ、トップページに戻ります。支払方法の設定は後述します。

メッセージ

編集画面に戻るには、右上の「エディタに戻る」をクリック。

エディタに戻る

編集画面に戻りました。デザインを編集するためのエディタの使い方については、以前エントリーした「Wixブログの作り方」が参考になると思いますので、ここでは割愛します。編集したデザインは、右上の保存アイコンをクリックするか、上部メニューの「サイト」→「保存」で行えます。

編集画面

ここではデザインを編集したことにして、一旦保存します。初回の保存では、サイトのドメインの入力が求められます。ここではデフォルトで入力されている「mysite-1」を消して「watch」と入力し、「保存して続行」をクリック。

サイトのドメインの入力

保存されました。URL右にある「編集」をクリックすれば、ドメインはあとで変更することができます。この画面は「閉じる」をクリックして、一旦閉じます。

保存

上部メニューの「サイト」→「エディタの終了」でエディタを終了します。

エディタの終了

エディタを終了すると「マイサイト」の画面に遷移します。さきほど作成したネットショップは一番左の「Watch」という名前で保存されています。

「マイサイト」の画面

続いて支払方法の設定を行います。「Watch」サイトをポイントしてクリック。

「Watch」サイト

左メニューの「設定」をクリック。

設定

「支払状況&決済方法」をクリック。

支払状況&決済方法

決済方法を選択して「接続する」をクリック。ここではデフォルトで選択されている「クレジット」「PayPal」を選択します。

決済方法を選択

支払方法の設定が完了しました。実際に決済を実行できるようにするにはプレミアムにアップグレードする必要がありますが、ここではアップグレードは行わず、このダイアログは一旦閉じます。

設定完了

クレジットの支払いを受け取るには、受注後 7 日以内に決済代行サービス Stripe のアカウント設定を完了してください。またPayPalの支払いを受け取るには、受注後 30 日以内に決済代行サービス PayPal のアカウント設定を完了してください。

アカウント設定

アカウント設定の詳細は下記のリンクを参考にしてください。

続いて配送料&消費税の設定を行います。設定は地域単位で行えます。左メニューの「配送料&消費税」をクリック。

配送料&消費税

地域が表示されるので、国内の「編集」をクリック。

編集

設定画面に遷移します。

設定画面

「47都道府県」をクリック。

47都道府県

このように地域を決め細かく設定することができます。

地域を決め細かく設定

配送料は、無料・一律など、種別ごとに設定が可能です。「サービスの表示名」に任意の名称を設定して、ここでは一律500円にしてみます。

配送料

消費税は「全域で同一の消費税を適用」の「8%」を設定しておきます。

消費税

全て設定したら右上または右下の「保存」をクリック。

保存

これで設定完了です。

設定完了

その他、「基本情報」メニューには、メールや請求書などで使用するサイト名など、「ショップ設定」メニューには、支払い画面の下部に表示する規約・ポリシーの選択など、「請求書」メニューには、請求書に記載するビジネス情報の設定などができるようになっています。

さきほどのプレビューのカート画面に戻ると、設定した情報が反映されていることがわかります。

カート画面

最後に、商品の管理方法について紹介します。「Watch」サイトをポイントしてクリックした画面から、左メニューの「ストア商品」をクリック。

ストア商品

右上の「商品を追加」をクリック。

商品を追加

「ダウンロード商品」または「通常商品」を選択します。ここでは「通常商品」を選択します。

通常商品

登録画面が開くので商品情報を入力します。

登録画面

商品を登録してみます。すべて登録したら右上の「保存」をクリック。

商品を登録

商品が登録されました。表示されているサンプル商品はあとで削除します。

登録完了

プレビュー画面に戻ると、さきほど追加した商品が選べるようになっています。

プレビュー画面

商品ページにも反映されました。

プレビュー画面

最後に「Watach」サイト選択→「サイト管理&編集」→「サイトを編集」の順でクリックして編集画面を開き、右上の「公開」をクリックしてサイトを公開します。

公開

これで公開されました。

公開完了

実際の公開画面です。

公開画面

ストア作成フローは以上です。

このように、デフォルトのテンプレートを選択し、支払方法や商品を登録するだけで簡単にオンラインショップを開設することができます。

Comments [0] | Trackbacks [0]

「Workflowプラグイン(MovableType7コンテンツデータ対応版)」リリース

July 4,2018 12:03 AM
Category:[ワークフロー]
Tag:[MovableType, Plugin, Workflow]
Permalink

「Workflowプラグイン(MovableType7コンテンツデータ対応版)」をリリースしました。

1.追加機能

MovableType7対応で機能追加されたコンテンツタイプに対応します。

以下、機能追加後のスクリーンショットです。

ライター・承認者のメニューには、作成したコンテンツタイプに対応するコンテンツデータを表示します。

コンテンツタイプ表示

ステータスフィールドには承認状態を表示します。アイコンはMT7のsvg画像に差し変わるかもしれません。

承認状態

ライターの公開フィールドのプルダウンには「未公開(承認待ち)」を表示します。

公開フィールド

承認者の公開フィールドのプルダウンには「承認」「差し戻し」を表示します。日時指定公開版の場合、最終承認者のプルダウンには「日時指定」も表示します。

公開フィールド

承認依頼(または差し戻し)フィールドやログイン権限のないユーザへのプレビュー依頼フィールドも従来通りです。

承認依頼(または差し戻し)フィールド・プレビュー依頼フィールド

コンテンツタイプ(カテゴリセット含む)向けのワークフロー機能ですが、

  • 承認・差し戻し(多段階含む)
  • プレビュー画面
  • プレビュー画面からの承認/差し戻し
  • メール送信
  • 更新履歴からのデータ差し替え

など、現状のWorkflowプラグインの機能はすべて対応する予定です。

その他、追加機能ではありませんが、記事・およびウェブページもこれまでどおり対応し、管理画面のデザインもあわせました。

たとえば記事一覧画面のアイコンはsvg画像に変更しています。

記事一覧画面

2.プラグインのダウンロード

プラグインは下記のリンク先から評価版のダウンロードが可能です。

Workflowプラグイン

今のところ多段階承認版のみですが、他のグレードも順次リリースする予定です。

Comments [0] | Trackbacks [0]

MTAssetsタグでフィルタープラグインを有効にする「Assetsプラグイン」

June 28,2018 12:03 AM
Category:[アイテム]
Tag:[Assets, MovableType, Plugin]
Permalink

MTAssetsタグでフィルタープラグインを有効にする「Assetsプラグイン」を作ってみました。

1.機能

MTEntriesタグでは次のようなフィルタープラグインを実装することができるようです(ちゃんと動くか未確認)。

name: AssetFilePathFilter
tags:
    filters:
        Entries:
            basename:
                handler: >
                    sub {
                        my ( $ctx, $args, $cond ) = @_;
                        $ctx->{ terms }->{ basename } = { like => $args->{ basename } };
                    }

が、他のブロックタグでは上記のようなフィルタープラグインが有効にならないようで、試しにMTAssetsタグでフィルタープラグインを(多分)有効にするようにしてみました。

2.プラグインのダウンロード・インストール

下記のリンクをクリックして、プラグインアーカイブをダウンロードします。

Assets_0_01.zip

プラグインアーカイブを展開し、中にあるAssetsフォルダごと、Movable Type のアプリケーションディレクトリのpluginsディレクトリにアップロードします。

システム管理画面のプラグイン設定画面で、「Assets~」が表示されればインストール完了です。

プラグイン設定画面

Comments [0] | Trackbacks [0]

Excelの「ブックの共有」を解除する方法

June 19,2018 12:03 AM
Category:[Excel]
Tag:[Excel, Office]
Permalink

Excelの「ブックの共有」を解除する方法を紹介します。

1.問題点

通常、Excelファイルのブックの共有を解除する場合、「ブックの共有」をクリック。

(クリックで拡大、以下同様)
ブックの共有

開いたウィンドウで「複数のユーザーによる同時編集と、ブックの結合を許可する」のチェックを外して「OK」をクリック。

チェックボックス

確認のダイアログが開くので「はい」をクリック。

確認のダイアログ

これでブックの共有が解除されます。

が、チェックボックスがグレーアウトされていて場合があります。

チェックボックスがグレーアウト

グレーアウトされている場合、共有を解除する方法が分かりません。

ということで、Excelの「ブックの共有」を解除する方法を紹介します。

2.Excelの「ブックの共有」を解除する

Excelの「ブックの共有」を解除するには、「共有ブックの保護解除」をクリック。

共有ブックの保護解除

これで「ブックの共有」をクリックすれば、1項の手順で解除できます。

ただし、パスワードで保護されている場合、「共有ブックの保護解除」をクリックしたあと、下のパスワード入力画面が表示されます。

パスワード入力画面

この場合、パスワードを設定した人にパスワードを教えてもらうか、その人に解除してもらうかのいずれかになります。

Comments [0] | Trackbacks [0]

Adobe Flash PlayerのアップデートでMcAfee Security Scan Plusをインストールしない方法

June 13,2018 12:03 AM
Category:[Adobe]
Tag:[Adobe, McAfee]
Permalink

Adobe Flash PlayerのアップデートでMcAfee Security Scan Plusをインストールしない方法を紹介します。

Adobe Flash Player

1.問題点

Adobe Flash Playerのアップデート通知がきて、インストールを実行すると、次のページが開きます。

インストールを実行

右側の「今すぐアップデート」をクリックしてインストールを開始。

今すぐアップデート

すると、McAfee Security Scan Plusまで一緒にインストールされてしまいます。

McAfee Security Scan Plusまで一緒にインストール

Adobe Flash Playerのアップデートの後、毎回McAfee Security Scan Plusをアンインストールするのですが、そもそもインストールしないようにする方法が分かりません。

ということで、Adobe Flash PlayerのアップデートでMcAfee Security Scan Plusをインストールしない方法を紹介します。

2.McAfee Security Scan Plusをインストールしないようにする

McAfee Security Scan Plusをインストールしないようにするには、最初のページの真ん中にある、「オプションのプログラム」のチェックボックスを外します。

オプションのプログラム

利用規約の表示が変わったことを確認して「今すぐアップデート」をクリック。

チェックした状態
チェックした状態

チェックを外した状態
チェックを外した状態

これで、McAfeeは最初からインストールされなくなります。

Comments [0] | Trackbacks [0]

MTContentFieldタグの使い方

June 7,2018 12:03 AM
Category:[テンプレートタグ]
Tag:[movabletype, MTContentField]
Permalink

MTContentFieldタグの使い方をまとめました。

1.MTContentFieldタグとは

作成したコンテンツデータの値を表示するためのブロックタグです。

2.MTContentFieldの必須モディファイア

MTContentFieldタグを利用する場合、content_fieldモディファイアに

  • ID
  • ユニークID
  • 名前

のいずれかを指定します。このモディファイアは必須です。

例:

<mt:Contents content_type="商品">
  <mt:ContentField content_field="商品名">
    :
 </mt:ContentField>
</mt:Contents>

3.MTContentFieldの中で使えるテンプレートタグ:MTContentFieldValue

MTContentFieldタグの中ではMTContentFieldValueタグが使えます。

例:

<mt:Contents content_type="商品">
  <mt:ContentField content_field="商品名">
    <mt:ContentFieldValue>
  </mt:ContentField>
</mt:Contents>

MTContentFieldValueは、コンテンツフィールドの値を表示するファンクションタグです。

4.MTContentFieldの中で使えるテンプレートタグ:コンテキストに応じた既存タグ

下記のフィールドの場合、MTContentFieldの中ではフィールドタイプに応じた既存テンプレートタグが使えます。

フィールドタイプ利用可能なテンプレートタグ
日付と時刻
日付
時刻
日付に関するテンプレートタグで利用できるモディファイアformat="%B %e, %Y %I:%M %p"
アセット
ビデオアセット
画像アセット
オーディオアセット
アセット関連のタグMTAssetURL
カテゴリカテゴリ関連のタグMTCategoryLabel
タグタグ関連のタグMTTagName

例:

<mt:Contents content_type="商品">
  <mt:ContentField content_field="カテゴリ">
    <mt:CategoryLabel>
  </mt:ContentField>
</mt:Contents>

5.参考サイト

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

Comments [0] | Trackbacks [0]

Movable Typeでコンテンツタイプのフィールド名を出力する「ContentFieldNameプラグイン」

June 1,2018 12:03 AM
Category:[拡張テンプレートタグ]
Tag:[]
Permalink

Movable Typeでコンテンツタイプのフィールド名を出力する「ContentFieldNameプラグイン」を公開します。

1.機能

本プラグインをインストールすることでMTContentFieldNameタグを提供します。

MTContentFieldValueというタグがコア機能にあるのですが、このタグで出力すると数字しか出力されないコンテンツタイプがあるので、とりあえず作ってみました。

たとえば、コンテンツタイプにタグフィールドを作って、適当なタグを設定します。

タグフィールド

これをMTContentFieldValueタグで出力してみます。

<mt:Contents content_type="foo">
<mt:ContentLabel>
  <mt:ContentField content_field="タグ">
    <mt:ContentFieldValue>
  </mt:ContentField>
</mt:Contents>

すると、タグにひもづけられた数字しか表示されません。

タグフィールド

代わりに、MTContentFieldNameタグを使います。

<mt:Contents content_type="foo">
<mt:ContentLabel>
  <mt:ContentField content_field="タグ">
    <mt:ContentFieldName>
  </mt:ContentField>
</mt:Contents>

タグフィールド

他に期待通りに出力できるテンプレートタグがあったらすいません。

2.プラグインのダウンロード・インストール

下記のリンクをクリックして、ContentFieldNameのプラグインアーカイブをダウンロードします。

ContentFieldName_0_01.zip

プラグインアーカイブを展開し、pluginsフォルダにあるContentFieldNameフォルダをMovable Typeのアプリケーションディレクトリのpluginsディレクトリにアップロードします。

システム管理画面のプラグイン設定画面で、「ContentFieldName〜」が表示されればインストール完了です。

タグフィールド

Comments [0] | Trackbacks [0]

C++でechoを使う方法

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

C++でechoを使う方法を紹介します。

1.問題点

/proc//coredump_filterの値を、C++で"33"から"3f"に書き替える必要が生じ、下記のプログラムを作りました。

#include <unistd.h>
#include <fstream>
#include <stdlib.h>
 
int main(int argc, char **argv) {
    pid_t pid;
    pid = getpid();
 
    FILE *fp;
    char data[100];
    sprintf(data, "%s%d%s", "/proc/", (int)pid, "/coredump_filter");
 
    fp = fopen(data, "w");
    if(fp != NULL){
        fprintf(fp, "%x", 0x3f);
        fclose(fp);
    }
    return 1;
}

が、このプログラムを実行しても"3f"ではなく、"3"にしか書き替わりません。

$ ps -ef |grep a.out
root      2356 26996  0 00:11 pts/25   00:00:00 ./a.out
$ cat /proc/2356/coredump_filter
00000003

プログラムの問題ではなく、どうやら「mmapしたメモリの値がcoreに出力されない場合の対処」で紹介したとおり、coredump_filterはechoコマンドで書き替えないと期待する結果にならないようです。

が、C++でのechoコマンドの使い方が分かりません。

ということで、C++でechoを使う方法を紹介します。

2.C++でechoを使う

C++でechoを使うには、system()を利用します。

#include <unistd.h>
#include <fstream>
#include <stdlib.h>
 
int main(int argc, char **argv) {
    pid_t pid;
    pid = getpid();
 
    char data[100];
    sprintf(data, "echo 63 > %s%d%s", "/proc/", (int)pid, "/coredump_filter");
    system(data);
 
    return 1;
}

このプログラムを実行することで、期待通りの"3f"になりました。

$ ps -ef |grep a.out
root      2356 26996  0 00:11 pts/25   00:00:00 ./a.out
$ cat /proc/2356/coredump_filter
0000003f
Comments [0] | Trackbacks [0]

C++でnullで区切られたファイルを読み込む方法

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

C++で、nullで区切られたファイルや文字を読み込む方法を紹介します。

1.問題点

プログラムを起動したときのオプションパラメータを/proc//cmdlineから取得する必要が生じました。

a.outに"a b c"というオプションパラメータを付与して起動すると、cmdlineには

# cat /proc/<PID>/cmdline
./a.outabc

となり、プログラム名とパラメータが表示されます。

lessで開くと

# less /proc/<PID>/cmdline
./a.out^@a^@b^@c

となり、各パラメータはnull文字で区切られているようです。

この1行を表示させようと思い、下記のサンプルを作ってみました。

#include <iostream>
#include <unistd.h>
#include <fstream>
 
int main(int argc, char* argv[]) {
 
    // プロセスIDを取得
    pid_t pid;
    pid = getpid();
 
    // cmdlineのパスを生成
    char str[100];
    sprintf(str,"%s%d%s","/proc/", (int)pid, "/cmdline");
 
    // ファイル読み込み
    std::ifstream ifs(str);
    char data[256];
    while (ifs.getline(str, 256 - 1)) {
        std::cout << str << std::endl;
    }
 
    return 1;
}

が、このプログラムを実行すると、

$ ./a.out a b c
./a.out

しか出力されず、nullで区切られたあとのオプションパラメータを出力できません。

ということで、nullで区切られたファイルを読み込む方法を紹介します。

2.nullで区切られたファイルを読み込む

nullで区切られたファイルを読み込むには、getline()の第3パラメータに区切り文字としてnull(\0)を設定します。

#include <iostream>
#include <unistd.h>
#include <fstream>
 
int main(int argc, char* argv[]) {
 
    // プロセスIDを取得
    pid_t pid;
    pid = getpid();
 
    // cmdlineのパスを生成
    char str[100];
    sprintf(str,"%s%d%s","/proc/", (int)pid, "/cmdline");
 
    // ファイル読み込み
    std::ifstream ifs(str);
    char data[256];
    while (ifs.getline(str, 256 - 1, '\0')) {
        std::cout << str << std::endl;
    }
 
    return 1;
}

これでプログラムを実行すると、次のようにnullで区切られたあとの文字も表示されます。

$ ./a.out a b c
./a.out
a
b
c

3.参考サイト

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

Comments [0] | Trackbacks [0]

mmapしたメモリの値がcoreに出力されない場合の対処

May 18,2018 12:03 AM
Category:[Linux]
Tag:[Linux]
Permalink

mmapしたメモリの値がcoreに出力されない場合の対処方法を紹介します。

1.問題点

C/C++プログラムがセグメンテーションフォルトしたとき、mmapしたメモリをgdbで参照したときに、値を設定しているにもかかわらず、0しか表示されない事象が発生しました。

2.対処方法

/proc/PID/coredump_filterを書き替えることで実現できるようです。

プログラム動作時のcoredump_filterは次のようになっています。

# cat /proc/6235/coredump_filter
00000033

33をビット展開すると

0011 0011

となります。

この0~6ビットで何を出力するかが決まります。

各ビットのそれぞれの意味は次の通りです。

  • 0ビット:無名のプライベートマッピング (anonymous private mappings) をダンプ
  • 1ビット:無名の共有マッピング (anonymous shared mappings) をダンプ
  • 2ビット:ファイルと関連付けられたプライベートマッピング (file-backed private mappings) をダンプ
  • 3ビット:ファイルと関連付けられた共有マッピング (file-backed shared mappings) をダンプ
  • 4ビット:ELFヘッダーをダンプ
  • 5ビット:プライベートなヒュージページ (private huge page) をダンプ
  • 6ビット:共有されたヒュージページ (shared huge page) をダンプ

mmapしたデータを出力するには2ビット目または3ビット目に1を設定する必要があるので、両方のビットに1を設定するには、

0011 1111

つまり000003fにする必要があります。

このファイル、vimでは書き替えられないようなので、リダイレクトで書き替えます。

# echo 63 > /proc/6235/coredump_filter
# cat /proc/6235/coredump_filter
0000003f
Comments [0] | Trackbacks [0]

gccのリンカオプションで引数を渡す方法

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

gccのリンカオプションで引数を渡す方法を紹介します。

1.問題点

gccに下記のようなマップを出力するオプション(リンカオプション)を付与したいと思っています。

-Map /home/foo/map.txt

-Mapオプションの引数として、出力するファイルのパス・ファイル名(/home/foo/map.txt)を指定します。

とりあえず-Wlオプションに次のように付与してみました。

$ g++ -Wl,-M /home/foo/map.txt test.cpp

が、このまま付与すると、

g++: エラー: /home/foo/map.txt: そのようなファイルやディレクトリはありません

と、正常に認識されません。

ということで、gccのリンカオプションで引数を渡す方法を紹介します。

2.gccのリンカオプションで引数を渡す

gccのリンカオプションで引数を渡すには、下記の2通りがあります。

まず、-Wlオプションで渡す方法です。

$ g++ -Wl,-Map,/home/foo/map.txt test.cpp

-Wlオプションの最初のカンマの後"-Map,/home/foo/map.txt"が、リンカに渡すオプションです。

また、2つめのカンマは複数のオプションとして分割されます。

もう一つの方法は-Xlinkerオプションで渡す方法です。

$ g++ -Xlinker -Map -Xlinker /home/foo/map.txt test.cpp

-Xlinkerオプションで引数を持ったオプションをリンカに渡したい場合は、-Xlinkerを2回使用します。

Comments [0] | Trackbacks [0]

JavaScriptの時間を0パディングする方法

May 16,2018 12:03 AM
Category:[JavaScript]
Tag:[JavaScript]
Permalink

JavaScriptの時間を0パディングする方法を紹介します。

JavaScriptの時間を0パディングする

1.問題点

下記の、今日の年月日を表示する簡単なサンプルを作ってみました。

var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
alert(year + '/' + month + '/' + day);

このスクリプトを実行すると、"2018/5/15"のように表示されます。

できれば、"2018/05/15"のように、月や日が1桁のときに0パディングしたいのですが、方法が分かりません。

ということで、JavaScriptの時間を0パディングする方法を紹介します

2.JavaScriptの時間を0パディングする

JavaScriptの時間を0パディングするには、スクリプトに赤色の2行を追加します。

var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
month = ('0' + month).slice(-2);
day = ('0' + day).slice(-2);
alert(year + '/' + month + '/' + day);

slice()は、文字列の中から、指定した開始位置から終了位置までの部分を返却するメソッドです。

foo = 'abc';
alert(foo.slice(0,2));

と書けば、変数fooの左から数えて0番目から2文字、つまり"ab"を取り出します。

このように、通常はslice()のパラメータに正の値を設定しましが、負の値を設定すれば、右側から取得してくれます。

foo = 'abc';
alert(foo.slice(-2));

と書けば、変数fooの右端から数えて2文字、つまり"bc"を取り出します。

この機能を利用して、

month = ('0' + month).slice(-2);

と書くことで、monthが1~9の場合は2桁になるよう0パディング、10~12の場合は加えた0をはずして2桁にします。

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