命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

源泉徴収票には賞与が含まれる。

久々の記事でまったくコンテンツ性のないタイトル落ちの記事です。 本文を見ている方には申し訳がありません。 ふと思い立って検索するとタイトルで人を寄せて内容を読ませるタイプの記事が多かったのでタイトルだけで終わる記事もいいのでは?と書きました。

以上!

「画像を表示」を復活させるブックマークレットを作ってみたらもっといいものが既にあった

あらすじ

該当記事

forest.watch.impress.co.jp

私の作ったもの

2018/02/20 版

javascript:(function(){
    function convertHref2Url(href){
        var startTag = "/imgres?imgurl=";
        var endTag   = "&imgrefurl=";
        return decodeURIComponent(href.substring(href.indexOf(startTag) + startTag.length, href.indexOf(endTag)));
    };
    Array.from(document.querySelectorAll("a[jsname='hSRGPd']"),  e => {
        var imageLink = document.createElement("a");
        imageLink.setAttribute("target","_blank");
        imageLink.style ="height:30px;width:80px;" +
            "background-color:rgba(130, 130, 255, 0.8);" +
            "color:rgba(255, 255, 255, 1.0);" +
            "z-index:1;" +
            "border-radius: 10px;" +
            "display: flex;" +
            "flex-direction: column;" +
            "justify-content: center;" + 
            "align-items: center;" +
            "position: absolute;" +
            "text-decoration: none;";
        imageLink.href = convertHref2Url(e.href);
        var linkTitle = document.createElement("div");
        linkTitle.style = "color:black;font-size:5px;";
        linkTitle.innerText = "View image";
        imageLink.appendChild(linkTitle);
        e.parentNode.appendChild(imageLink);
    });
})();

2018/02/21 版

面白そうだったので色々試した

  • スクロールした後、リンクのついてない画像が出て来る。 何度も実行することを考慮して重複しないようにした。
  • すべての追加される要素にstyle属性を直書きすると文字数がすごいことになる(影響不明)のでstyle要素を追加した。 style要素も重複対応済。
javascript: (function () {
    function convertHref2Url(href) {
        var startTag = "/imgres?imgurl=";
        var endTag = "&imgrefurl=";
        return decodeURIComponent(href.substring(href.indexOf(startTag) + startTag.length, href.indexOf(endTag)));
    };

    var styleId = "gas_view-image_style";
    var labelClass = "gas_view-image_label";
    var linkClass = "gas_view-image_link";
    var s = document.querySelector("#" + styleId);
    if (s === null) {
        var style = document.createElement("style");
        style.setAttribute("id", styleId);
        style.nodeType = "text/css";
        style.appendChild(document.createTextNode(`
        .${labelClass} {
            height:30px;
            width:80px;
            background-color:rgba(130, 130, 255, 0.9);
            color:rgba(255, 255, 255, 1.0);
            z-index:1;
            border-radius: 10px;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            position: absolute;
            text-decoration: none;
        }
        .${linkClass}{
            color:black;
            font-size:8px;
        }
        `));
        document.head.appendChild(style);
    }

    Array.from(document.querySelectorAll("a[jsname='hSRGPd']"), e => {
        if (e.parentNode.querySelector("." + labelClass) === null) {
            var imageLink = document.createElement("a");
            imageLink.setAttribute("target", "_blank");
            imageLink.setAttribute("class", labelClass);
            imageLink.href = convertHref2Url(e.href);

            var linkTitle = document.createElement("div");
            linkTitle.innerText = "View image";
            linkTitle.setAttribute("class", linkClass);
            imageLink.appendChild(linkTitle);
            e.parentNode.appendChild(imageLink);
        }
    });
})();

あと記事の問題ですが、コードハイライトが有効になるように修正。 (javascript を js にしていた。)

動作

こんな感じに「View image」のリンクが作られます。

f:id:NotShown:20180221002250p:plain

Google 画像検索 動作結果

javascriptどころかweb系全然触れてない(言い訳)のでコードの適当さがあります。

以上!

日経BP-IT PRO Activeの記事を印刷用にするブックマークレット

もくじ

  • 前置き
  • 環境
  • ソース
  • 使うとどうなるか
  • 感想

前置き

最近チーム全体が情報収集する気風になってきていて、日経関連の記事を見る機会が多くなりました。

PDF込みで記事になっていたり、印刷ビューになるものはいいのですが、それ以外はページ全体を紙に印刷して情報共有することになっています。

で、毎度開発者ツールで無駄なものを削除していたのですが、面倒なのでブックマークレットにしてみました。

ブックマークレットとはなんぞや」についてはググってください。

環境

以下の環境で動かしてます。

  • Windows7 32bit
  • Chrome バージョン: 62.0.3202.94(Official Build) (32 ビット)

ソース

本業じゃないのでおそらく美しくないコードになっています。

javascript: (function() {
    ["#bpGlobalHeader","#wrapper>header","#wrapper>footer","#wrapper>div>aside",".content>article>footer>section",".tools",".breadcrumb"].forEach(function(val, index, ar) {
        Array.from(document.querySelectorAll(val),  e => e.remove());
    });
    document.querySelector("article").style.width="auto";
})()

使うとどうなるか

実行前

f:id:NotShown:20171204104957j:plain

実行後

f:id:NotShown:20171204105004j:plain

感想

Outlookのクイック操作のエクスポート/インポートをする方法

もくじ

  • 前置き
  • クイック操作のエクスポート
  • クイック操作のインポート
  • 注意点

前置き

日本語でググると古い記事がトップに出て エクスポート不可能 という結論になり、 英語でググると新しい記事がトップに出て エクスポート可能 という結論にになるという切ない感じだったので書きました。

outlook クイック操作 エクスポート」 とかググったら一番目に下記URLがヒットします。 2011年の古い記事なのですが、結論としてはエクスポート不可ということになっています。

Microsoftコミュニティ-作成したクイック操作の設定をエクスポートしたい
作成したクイック操作の設定をエクスポートしたい - マイクロソフト コミュニティ

outlook quick step export」とググれば今年の記事が出てきます。 結論としては ツールを使えば可能 とのこと。

How can I export quick steps
How can I export quick steps - Microsoft Community

やっぱり日本語の情報だけでなく英語でもググる必要がありますね。 クイック操作は英語でquick stepと呼ぶそうです。Officeの日本語から英語で検索する時に下記の記事が参考になりました。

qiita.com

クイック操作のエクスポート

mfcmapi のダウンロード

mfcmapiというツールを使用します。 下記URLから最新のバイナリをダウンロードします。 古いバージョンだと日本語(マルチバイト文字)が正しく扱えず、文字化けします。

github.com

mfcmapiによるエクスポート

英語の記事と同様の手順となりますが、

  • [Session]->[Logon] を選択する。
  • 自分のメールアドレスをダブルクリックします。
  • [Root Container]先頭の三角をクリックして開く。
  • [インフォメーション ストアの先頭]先頭の三角をクリックして開く。
  • [クイック操作設定]を右クリックして[Export Folder]->[AS MSG files...]
  • 出力先のディレクトリを指定して、エクスポート完了

クイック操作のインポート

mfcmapiによるインポート

  • [Session]->[Logon] を選択する。
  • 自分のメールアドレスをダブルクリックします。
  • [Root Container]先頭の三角をクリックして開く。
  • [インフォメーション ストアの先頭]を右クリックして[Open associated contents table]を選択。
  • [Folder]->[Import]->[From MSG...]を選択肢、インポートするMSGファイルを指定する。
  • インポート完了

注意点

検証の前提

  • マシン環境
    • Windows 7 32bit
    • Office2010
    • MFCMapi.exe.17.0.17099.01
  • 試した事
    1. 自分のPCから[エクスポート]->[クイック操作削除]->[インポート]
    2. 自分のOutlook2010からエクスポートしたクイック操作を他のOutlook2013にインポート

念のためクイック操作を複製したり、消えても問題ないクイック操作でお試しすることを推奨します。

PowershellでCSVをExcelファイルに転記する

状況

DBの特定のテーブルをちょっと結合したりなんかして特定フォーマットのExcelに出力して欲しい

こんな要件が結構あります。

私が入る前はこんな感じの要件1つに付き1つアプリ組んでたんですね。

今回そんな感じのを頼まれたので、できるだけアプリを組まないようにスクリプトで完結させました。

本記事はその時の成果物です。

転記ツール

構成

  • Csv2Excel.ps1
  • /lib
    • EPPlus.dll

フォルダ構成書きにくい。 今回EPPlusを使っていて、理由は以下です。

  • 以前PowershellでComObjectからExcelを使ったところ、色々やってもプロセスが消えなかった。
  • サーバー上でロックしている状態で動くので、Comの方のExcelを使うと正常に動かない。

スクリプト

引数

引数名 説明
sourceDataPath CSVのパス
templatePath テンプレートとなるファイルのパス
destinationPath 出力先パス
configPath 設定ファイルのパス(json)

設定ファイル

バッチからPowershellスクリプトを実行するので、列になるオブジェクトやバッチ本体を修正せずに調整したい項目はjsonにしました。

{
  "delimiter":",",  # 区切り文字
  "start_location": { # 開始位置
    "row": "2",
    "column": "1"
  },
  "numeric_columns": [10,11] # 数字のカラム(Stringそのまま入れたくない場合指定)
}

ソースコード

param(
    [parameter(mandatory=$true)][string]$sourceDataPath,
    [parameter(mandatory=$true)][string]$templatePath,
    [parameter(mandatory=$true)][string]$destinationPath,
    [parameter(mandatory=$true)][string]$configPath
)

<# ライブラリ参照 #>
[System.Reflection.Assembly]::LoadFrom((Join-Path (Split-Path $MyInvocation.MyCommand.Path) "\lib\EPPlus.dll")) | Out-Null

<# 設定ファイル読む #>

$cfg = Get-Content -Path $configPath -Raw | ConvertFrom-Json

<# Excelのフォーマットに転記して、出力先に名前を付けて保存する #>
$pkg  = New-Object OfficeOpenXml.ExcelPackage -ArgumentList $templatePath
$sht  = $pkg.Workbook[0].Worksheets[1]

$csvRows= Get-Content -Path $sourceDataPath -Encoding Default

for($ri=0; $ri -lt $csvRows.length; $ri++) {
    $csvRowData = ($csvRows[$ri]) -split $cfg.delimiter
    for($ci=0; $ci -lt $csvRowData.length; $ci++) {

        $row = $ri + $cfg.start_location.row
        $col = $ci + $cfg.start_location.column
        $value = if($cfg.numeric_columns.Contains($col)){ [double]($csvRowData[$ci]) } else { [string]$csvRowData[$ci] }
        $sht.Cells.Item($row, $col).Value = $value
    }
}

$pkg.SaveAs($destinationPath)
$pkg.Dispose()

以上!

情報リテラシーとは何か。英国図書館情報専門家協会の記事を参考に。

新入社員の教育のため、「情報リテラシー」というネタが振られたので、調べてみました。

参考にしたのは information literacy meaning でググってヒットした CILIP(英国図書館情報専門家協会)の記事です。

以下、下手っぴ翻訳で読んだ内容を書いていきます。

URL https://www.cilip.org.uk/cilip/advocacy-campaigns-awards/advocacy-campaigns/information-literacy/information-literacy

曰く、情報リテラシーの定義は以下のようです。

Information literacy is knowing when and why you need information, where to find it, and how to evaluate, use and communicate it in an ethical manner.

自分の中で翻訳したのが以下(間違ってるかも)

情報リテラシーとは、いつ・なぜ情報が必要か、どこで見つけるか、どうやって倫理的な方法で評価・使用・伝達するか、を知る事です。

続けて情報リテラシーのわかる人になるための必要な理解についても記載されています。

以下の項目への理解が必要だそうです。 ・情報の必要性 ・使用できる資源 ・情報の見つけ方 ・結果を評価する必要性 ・結果を利用する方法 ・使用における倫理や責任 ・発見したものを伝達・共有する方法 ・発見したものを管理する方法

これらの項目の詳細は「Related Documents」のPDFファイルに記載されています。

https://www.cilip.org.uk/sites/default/files/documents/Information%20literacy%20skills.pdf

曖昧になっていた言葉の定義を調べる事である程度腑に落ちたかなと思いました。