18
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2年目プログラマがQiitaに週一投稿して1年が過ぎ更に1年が過ぎました

Last updated at Posted at 2017-05-30

総括

昨年は、自身を振り返るとともに、他の人にもITエンジニアとしてのアウトプットを(暗にすべて)Qiitaに書くことを勧めていました。
が、自身の振り返りはプログラミング的ではなく、また昨年のように無責任にQiitaに記事を書くことを勧めにくくなったので、自分のアウトプットをどこにまとめるか・分散させるかはよくよく考えましょう。
Qiitaを使うにしても、流れを読み切り清く楽しく活動しましょう。

前書き

一年間の活動を振り返る良いタイミングなので、記録的なものを残そうと思っていました。

去年はこちら。
2年目プログラマがQiitaに週一投稿して1年が過ぎました - Qiita

タグは去年と流用で。


Qiitaや1年間の社内活動でのしくじり先生などをいろいろポエットに振り返ろうと思ってましたが、昨今Qiitaとはを考えさせられるサツバツさを感じてましたし、ちょうど

も公開されたので、萎えて控えめに。
昨年も今年もモデルケースとしての記録なら良いかと思ってましたが、「プログラミング」に関してはいませんでしたしね。

新人プログラマ応援タグのおさらい

通年も今春も活動的なのは喜ばしいですね。
タグの使い方は
Qiitaで春の新生活を応援しましょう! - Qiita Blog
をどうぞ。
去年は

新人プログラマや開発環境が変わったプログラマが役に立つと思う記事ならばなんでも構いませんが、

を御旗に、プログラマ目線のコードも無いポエム記事でしたが、最近の風潮(自浄)およびコミュニティガイドラインを見るに

Qiitaは「プログラミングに関する知識を記録・共有するためのサービス」ですので、再利用性・汎用性の高い情報が多く集まっている場をつくっていきたいと考えています。

プログラマーが興味を持つものではなく、プログラミングに関する記事を投稿しましょう。

と「プログラミング」偏重に見受けられますので、新人プログラマ応援タグにかぎらず、投稿は気をつけましょうといったところでしょうか。
(長音記号の表記ゆれだ)

「プログラマが役に立つこと≠プログラミングに関する知識」
自分は左辺を意識していましたが、右辺への意識改革が残念だけど必要なのかなと悲しくなっております。1

Qiita自体が最近変わったわけではなく、今までは黙認されてた雰囲気がなくなってきたのかな?

と下書きを書いていたのですが
さらに
コミュニティガイドラインについての補足説明 - Qiita Blog
が投下され、プログラマのためのポエムが小さく再燃しそうだったりしなさそうだったり、「プログラミング」や「技術的」の解釈が難しい状態です。

投稿アクティビティ

ただ、投稿記録とContributeぐらいは記録比較用に置こうかな。

Qiitaの投稿アクティビティをGitHubのように表示するヤツ - Qiita

image.png

一年間の投稿記事

を検索するのも面倒だし、それのリンク集を作るのも面倒なので、車輪の再発明&単用途なコードでテーブルを作ります。
小さな目標は
ソースコード(markdown)レベルできれいなテーブル
でした。
タグとかいいね数は大変なのでパス…
これで最低限プログラミング記事になればいいな。

Qiita API v2ドキュメント - Qiita:Developer

var request = require('request');

// 方針
// テーブル記法の見栄え優先で、リンクは分離式でいく
// タイトルの最大文字数によってヘッダーのセパレーターや各行の余白が異なるので、最後に出力する。
// タイトルの最大長は[]を含めたものとするが、左右の見栄えのための空白は含めないものとする
// 表示は等幅フォントを想定し、長さをカウントするときは、全角文字を2とカウントする

// 全角を2とカウントする http://blog.tofu-kun.org/070627210315.php
const strLength = (strSrc) => {
    var len = 0;
    strSrc = escape(strSrc);
    for(var i = 0; i < strSrc.length; i++, len++){
        if(strSrc.charAt(i) == '%'){
            if(strSrc.charAt(++i) == 'u'){
                i += 3;
                len++;
            }
            i++;
        }
    }
    return len;
};

const createHeader = (maxTitleLength) => {

    const marginLength = 2;
    const dateLength = 14; // XXXX年XX月XX日(全角は2)
    const titleLabel = 'タイトル';
    const dateLabel  = '投稿日時';

    var header =
    '| '  + titleLabel + ' '.repeat(maxTitleLength - strLength(titleLabel)) +
    ' | ' + dateLabel  + ' '.repeat(dateLength     - strLength(dateLabel)) + ' |';

    var separator =
    '|' + '-'.repeat(marginLength + maxTitleLength) +
    '|' + '-'.repeat(marginLength +  dateLength)  + '|';

    return header + '\n' + separator;
};

const createRow = (maxTitleLength, item) => {
    var date = new Date(item.created_at);
    date = date.getFullYear() + '' + ('0' + (date.getMonth() + 1)).slice(-2) + '' + ('0' + date.getDate()).slice(-2) + '';
    var padding = maxTitleLength - strLength(item.title) -2; // maxに[]は含まれているので、ここで差っ引く
    return '| [' + item.title + ']' + ' '.repeat(padding) + ' | ' + date + ' |';
};


// maxTitleLengthは4以上を想定している
const createTable = (maxTitleLength, items) => {
    var table = '';
    table = createHeader(maxTitleLength, items);
    for (var i in items) {
        table = table + '\n' + createRow(maxTitleLength, items[i]);
    }
    return table;
};



const userId   = 'khsk';
const dateFrom = '2016-05-30'; // fromは予約語かな
const dateTo   = '2017-05-30';
// 48投稿前後なのでページ処理はしない
const url = 'https://qiita.com/api/v2/items?per_page=100&query=user:' + userId + '+created:>' + dateFrom + '+created:<' + dateTo;

request.get(url ,(error, response, body) => {
    var obj = JSON.parse(body);
    console.log(obj.length + '投稿\n');

    // タイトルの最大長と分離リンクを作成するループ
    var linkList = []; // リンク先のURL参照を持つ配列
    var max = 0; // タイトル最大長
    for (var i in obj) {
        var item = obj[i];
        var date = new Date(item.created_at);
        max = Math.max(max, strLength(item.title));
        linkList.push('[' + item.title + ']: ' + item.url);
    }
    max = max + 2; // タイトルを囲む[]分を加算

    // 2回ループ回すの気持ち悪いなあ
    var table = createTable(max, obj);

    // リンク出力
    linkList.forEach((e) => {
        console.log(e);
    });
    console.log('\n');

    console.log(table);
});

結果
タイトルに[]が含まれているものだけ手動で修正…

58投稿

タイトル 投稿日時
throwより後ろのコードへは到達しない 2017年05月22日
波括弧(brace{})を使った文字列リテラル"外"での変数展開(変数のパース)について 2017年05月15日
fishは一文字の改行なし出力をプロンプトで消してしまう 2017年05月12日
PhpStormでシングル・ダブルクォーテーションを変換するPHP 1Up! プラグイン 2017年05月02日
fishでlistのindexを確認するtestにはcontainsが使える 2017年04月25日
rss-phpの認証方式を拡張する 2017年04月21日
SAML認証を勉強せずに理解したい私から勉強せずに理解したい私へ 2017年04月14日
HTTP PHPのGETパラメーターの長さが512文字より大きいと消える 2017年04月03日
シェルスクリプトの途中で実行するシェルを変えることはできそうにない…かも 2017年03月29日
fishでnode.jsで言うところのnpmみたいなところのFisheryはもうない 2017年03月27日
デフォルトshellをフルパスでなくwhichで名前だけで設定するchshはxargsで 2017年03月27日
変数名自体を取得する の理解のためのメモ 2017年03月21日
Qiitaのフィードのタグアイコンをホバー時ユーザーアイコンに切り替えついでに名前とかをポップアップするユーザースクリプト 2017年03月13日
Qiitaのフィードに記事投稿者の名前を表示するユーザースクリプト 2017年03月06日
LaravelのTaskを上書きする 2017年03月02日
Qiitaの記事コメントへのリンクURL取得方法 2017年02月20日
0 ~ 65535.65535.65535.65535 までのバージョン表記を正規表現+αで調べたい 2017年02月16日
qrank add hatebu link 2017年02月15日
Sublime Text3 ESLint Local Windows Local installのESLintとの連携 2017年02月13日
多次元連想配列に対してキーを基準にunsetする関数が欲しい 2017年02月06日
そこそこな線画を目指す OpenCV 2017年01月30日
継承によるカスタマイズの悩み。嘘かコピペか。命名の大切さ 2017年01月23日
PHPUnitのsetUpでPostgreSQLの外部キー制約がついたテーブルをクリーンアップしフィクスチャに初期化する 2017年01月18日
【失敗則】【アホな勘違い】Promiseで ReferenceError: resolve is not defined と出たら 2017年01月17日
MVCのモデルの誤解を解くためにフレームワークを例に挙げようとしたら誤解してもしゃーないなって思った 2017年01月11日
CSS invalidな 3.3.7 2017年01月06日
Bootstrap3でカーソルをpointerにする 2016年12月26日
書籍検索に使える登録不要APIちゃんはちょっと足りない 2016年12月20日
GIFアニメーションを再生し終えてから次のGIFを表示するElectronアプリを作っていました 2016年12月14日
Python3をインストールしてから実行するshかつpy 2016年12月06日
apache「mountしたよ!」root「してないんだよなあ」apache「してるじゃん!ファイルも見れるよ!」 2016年11月30日
「Markdownを表示する」ボタンを追加するユーザースクリプト 新レイアウト版 2016年11月21日
Skype for Business (Lync) の会話履歴の文字化けを直す 2016年11月15日
Qiitaのフィードから特定ユーザーの投稿を非表示にするユーザースクリプト 2016年11月09日
tar: lzop: Cannot exec: No such file or directory 2016年11月01日
Reactの翻訳チュートリアルが消えました 2016年10月27日
Qiitaのdetails,summary要素とMarkdownの相性調査 2016年10月21日
React.jsを使う前に公式を見ずQiitaなどを流し見してさらっと考えた 2016年10月14日
window.open(undefined)はブラウザによって結果が異なる 2016年10月07日
Firefox 開発者ツール ネットワークタブ 詳細ペイン はレスポンシブでなく、一定の横幅が必要 2016年09月28日
区間内の経過時間をとる簡単なログ出力クラス 2016年09月21日
placeholderとautofocusの併用時はIEに注意する 2016年09月13日
配列でなければ配列にする処理にarray($value)は不要か?(array)キャストではダメなの? 2016年09月05日
PHPとPythonのfinallyとexitの関係の違い 2016年09月01日
PHPのトレイトが怖くて使えない 2016年08月24日
Apache Solrから「全てのドキュメント」を指定して一発で取得することはできない 2016年08月19日
PHPにPECLでSolr extentionを導入する 2016年08月12日
URLに日本語を使うときに気をつけること 2016年08月05日
ランダムに二人組を作りお昼ごはんのお相手を決める 2016年08月02日
Electron終了時にCacheを消す 2016年07月27日
PHPの配列の作成は初期化と代入のどちらが速いのか 2016年07月21日
dots.の特定のタグを非表示にするユーザースクリプト 2016年07月15日
PythonのzipをPHPで 2016年07月08日
Vagrantの共有フォルダにアクセスできなかったら 2016年06月28日
Electronのレンダラーでうっかりメイン側node.jsのrequestを使っちゃったら 2016年06月20日
WindowsのPhpStormでSexy Editor 2.0 を使うには 2016年06月16日
フォーカス時かつトレイクリックができない 2016年06月10日
2年目プログラマがQiitaに週一投稿して1年が過ぎました 2016年05月30日

ソースは「Markdownから本文を見る」で。
これも最近追加された良い機能ですよね。
コンソールでは揃って見えたけどQiitaではずれて見える…フォント次第なのか。CSSをMonospaceに書き換えるといい感じ。

Contribute

image.png

アウトプットの質の低下とともに増加も鈍化し、順当です。
が、去年ほど執着しなくなりました。

Contributeが気になる方へ

Qiitaの統計については去年の記事の資料に加え、
Qiitaに投稿した記事のストック数が知りたかったから簡単にWPFで作ってみた - Qiita

Qiitaのデータを眺めてみる - Qiita

あなたのQiita力はどれくらい?データで見るContribute数の統計 - Qiita

Qiitaの投稿の推移 - Qiita

などが参考になると思います。
これらを駆使してQiitaマスターを目指すのも一興。

印象深いあれこれ

あとはじゃゔぁなんとかとか…



  1. mizchi氏のツイートを見かけたところではQiitaの「プログラミング関係」の定義にいささか不安を覚えますが

18
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?