8/8 最近のお勉強

最近の業務外で勉強していることを。

 

Atcoder
気が向いたらやっている。とにかく基礎的な実装力が足りないので、終わった後に上級者のコードを模写している。
あとDPという概念を知ったのでそのうち書いてみる。

 

デザインパターン

 この前この本を買って早速勉強している。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

 

全23章あってまだ3章までしか進んでいないけど、なかなか面白い。

Javaの実行環境(Eclipse)を前もって作っておいてよかった。

結城先生って失礼ながらTwitterでは数学ガールのRTしかしていないイメージだけど、実はとてもすごい人だったのでは。

 

IPA
去年秋にFE、今年春にAPときたので次何か高度情報のセキュリティを受けることにした。
試しに参考書を電子書籍で買ってみたが、とても読みづらい。字が小さいし目が疲れる。
タブレットKindle Fire)が悪いのか、俺に電子書籍は合わないのか……。

 

各ディレクトリ内のファイル数を一覧表示する

突然ですが、僕は東方Projectというゲームが好きです。

2007年頃に遊びはじめたのでまる9年になります。

このゲームではたくさんの女の子キャラが出ています。昔の僕はいろんなサイトをめぐってイラストを集めていました。

これがその画面です。キャラクター別にフォルダ名をつけていて、中に画像ファイルが収まっています。

f:id:alek3:20160719000814p:plain

東方画像
 └⑨
  └画像ファイル(複数)
 └akyu
 └alice

 …

フォルダ自体、結構な数(50近く)あります。

 ところで、各フォルダに何枚画像が入っているか調べる場合、とりあえずダブルクリックして開いてみるか、さもなくば右クリック→プロパティが一般的かと思います。

 しかし、たくさんのフォルダについてざっと見たい場合は、上記のいちいち開く方法は使えません。

 さすがに、ウィンドウズのエクスプローラーに標準で備わっているだろうと思ってそれっぽいのを試してみました。

f:id:alek3:20160719000917p:plain
f:id:alek3:20160719000928p:plain

でませんね……。なんでしょうねこの機能は。

しょうがないので自分で作りました。

import java.io.*;
import java.nio.file.*;
import java.util.*;

public class TouhouPic{
    static int allpic = 0;
    static int filecount = 0;
    static String nowdirname = "temp";
    static boolean eachdir_kaishi_delete = false; /* 初期値falseにより上書き */

    public static void main(String[] args) throws IOException {
        File th_dir = new File("-ここにパスを記入-");
        
        System.out.println("ディレクトリ内全ファイル数");
        count_all(th_dir.listFiles(), th_dir.getName());
        System.out.println("Allfile:" + allpic);
    }
    
   private static void count_all(File[] list, String dirname){
       
       for (File f : list){
           if (f.isDirectory()){
               try{
                Writer w = new FileWriter("hoge.csv", eachdir_kaishi_delete );
                w.write(nowdirname);
                w.write(",");
                w.write(String.valueOf(filecount));
                w.write("\r\n");
                w.flush();
                w.close();
                eachdir_kaishi_delete = true;
                }
                catch (IOException e){
                System.out.println( "多分ファイル書き込みエラー" );
                }
               nowdirname = f.getName();
               filecount = 0;
               
               /* 入れ子にして各サブディレクトリ内のファイス数を計上 */
               count_all(f.listFiles(), nowdirname);
			} else {
                filecount++;
				allpic++;
            }
        }
    }  
}

ソースにスクロールバーつけようとしたけどやり方分からん(すみません)。

出力したcsvが以下
f:id:alek3:20160719001055p:plain

ざっと見れるようにはなりました。ただcsvのせいかExcelのせいか若干見づらいですね。

ちなみに一番上の”temp”はそういうディレクトリが”東方画像”内にあるわけではなくプログラムが動くために置いています。

ついでに、allpicで画像ファイルが全部で何枚あるのかざっと分かるようにしました。

「ざっと」というのは各画像フォルダの中にあるThumbs.dbも数え上げられているため、正確ではないという意味です。

色々不完全すぎていつか直そうかなと思っていましたが、本人にモチベがないのでこれで上げる事にします。

【C】構造体における.と->の区別(+関数引数との関連)

 自分が初めてプログラム書いた時、.(ドット演算子)と->(アロー演算子)の区別があまりついておらず苦労しました。
 復習してみるととても単純でしたが……。
 当時ググったり本を探したりしていたときは、わかりやすい例文を見つけられなかったので、備忘も兼ねて自分で書くことにしました。

・説明
・.は、通常の構造体変数の要素にアクセスするときに使用します。
・->は、ポインタ変数として宣言した構造体変数の要素にアクセスするときに使用します。
・ポインタ変数として宣言された構造体変数hogeについて、hoge->fugaの型は構造体タグ名を宣言したときの型と同じです。
 (僕はint→int*になると最初思ってました。(バカ)
 したがって関数の引数にポインタ変数が指定されているときにhoge->fugaをいれたいときは、&をつけます。

あとは例文を見てください。

ソースコード

#include <stdio.h>
typedef struct{
    int year;
    int classno;
}CLASSNAME;

void hyoji(int *);
void hyojis(CLASSNAME *);

int main(void){
    CLASSNAME cn1;
    CLASSNAME *pcn;
    pcn = &cn1;
    
    cn1.year = 3;
    printf("①:%d\n", cn1.year);
    pcn->classno = 4;
    printf("②:%d\n", pcn->classno);
    
    printf("③:");
    hyoji(&cn1.year);
    printf("④:");
    hyoji(&pcn->classno);
    
    printf("⑤:");
    hyojis(pcn);
    printf("⑥:%d\n", pcn->classno);
}

void hyoji(int *year){
    *year = 5;
    printf("%d\n", *year);
}

void hyojis(CLASSNAME *stp){
    stp->classno = 6;
    printf("%d\n", stp->classno);
}

出力結果

①:3
②:4
③:5
④:5
⑤:6
⑥:6

・参考
C言語関連
異なる型の変数をまとめる
構造体の引数

はてな記法(今回はじめて使いました)
sue445.hatenablog.com

ブログを始める理由と記事の内容について

ブログが日記と違うのは不特定多数の誰かに向けて発信できることにあります。そのため「ブログを始めたい!」という思いには、不特定多数に発信したいという気持ちがほぼ確実に含まれているといえます。


 僕が発信したいのは仕事に関することです。まあ会社員なので話せないことは多いし、具体的な内容は定まっていないですが。


 僕がブログを書き始めようとした根底には不安があります。僕は新卒でSIerに入社しました。SIerは「インターネット」上で悪評が高い業界です。やれブラックだの衰退するだの、言われたい放題です。またSE(システムエンジニア)と聞くとすなわち長時間残業なブラック職種というイメージをされます。


 そう言われれば誰でも不安になりますね。今の自分、本当に大丈夫かということを、まずは発信していきたいと思います。