39Si

プログラミング関連の勉強した内容を簡単にまとめておきます

コマンドプロンプトでよく使いそうなコマンドだけメモ

ウィンドウズはあまり使いませんが、
最近ちょくちょく使っているので
自分が使う最小限のものだけメモ書き

よく使う

移動(フォルダを指定しなければカレントディレクトリを表示する)

> cd [Folder name]

ファイルとフォルダ―の一覧の表示

> dir

dir のオプション - /ah - 隠しファイルやシステムファイルも表示 - /ad - フォルダーのみを表示 - /a-d - ファイルのみを表示

コマンドプロンプトの終了

> exit

画面の消去

> cls

ファイルの操作

ファイルの削除

> del [file name]

フォルダの操作

フォルダの作成

> mkdir [folder name]

フォルダの削除

> rmdir [folder name]

ネットワーク関連

IPアドレスを調べる

> ipconfig

その他

コマンドのヘルプ

> [cmd] /?

参考

参考ページ

Markdown を HTML に変換【Python3】

Python3 で Markdown ファイルを HTML に変換する

hatena ブログを書き始めた時に知った Markdown ですが、とても気にいっていろんなファイルを Markdown 形式で作っています。
今回は、 Markdown から HTML への変換を Python で行いました。
Python で変換するモジュールは色々あると思いますが、 今回は markdown, markdown2, gfm の3つを試してみました。

環境

Markdown ファイル

今回、変換する Markdown ファイルは以下のものを使用した。
Markdown のファイル中の 「{ ``` }」はバッククオート三つです。 hatena の Markdown 記法ではうまく表示できなかったのでこのような形に変更している。

input.md

# 見出し1
## 見出し2

1. 番号付きのリスト
2. **太字**
3. _イタリック_
    - リスト

## Code1

    # code sample
    str = 'Hello world!'

    print(str)

## Code2

{ ``` }
# code sample
str = 'Hello world!'

print(str)
{ ``` }

## Link
[Github Flavored Markdown](https://www.google.com)

## Image
![Image file](hoge.png)

markdown モジュール

ソースコード

# markdown
import markdown

# markdown file の読み込み
f = open('input.md', 'r', encoding='utf-8')
text_md = f.read()
f.close()

# markdown file -> html file
md = markdown.Markdown()
html = md.convert(text_md)

print(html)

実行結果

<h1>見出し1</h1>
<h2>見出し2</h2>
<ol>
<li>番号付きのリスト</li>
<li><strong>太字</strong></li>
<li><em>イタリック</em><ul>
<li>リスト</li>
</ul>
</li>
</ol>
<h2>Code1</h2>
<pre><code># code sample
str = 'Hello world!'

print(str)
</code></pre>
<h2>Code2</h2>
<p>```</p>
<h1>code sample</h1>
<p>str = 'Hello world!'</p>
<p>print(str)[改行]```</p>
<h2>Link</h2>
<p><a href="https://www.google.com">Github Flavored Markdown</a></p>
<h2>Image</h2>
<p><img alt="Image file" src="hoge.png" /></p>

※ 上の中の[改行]は改行が入ってます。

参考ページ

Python で Github Flavored Markdown をレンダリングする - tototoshi の日記

markdown2 モジュール

import markdown2

# markdown file の読み込み
f = open('input.md', 'r', encoding='utf-8')
text_md = f.read()
f.close()

html = markdown2.markdown(text_md, extras=['fenced-code-blocks'])

print(html)

実行結果

<h1>見出し1</h1>

<h2>見出し2</h2>

<ol>
<li>番号付きのリスト</li>
<li><strong>太字</strong></li>
<li><em>イタリック</em>
<ul>
<li>リスト</li>
</ul></li>
</ol>

<h2>Code1</h2>

<pre><code># code sample
str = 'Hello world!'

print(str)
</code></pre>

<h2>Code2</h2>

<pre><code># code sample
str = 'Hello world!'

print(str)
</code></pre>

<h2>Link</h2>

<p><a href="https://www.google.com">Github Flavored Markdown</a></p>

<h2>Image</h2>

<p><img src="hoge.png" alt="Image file" /></p>

参考ページ

ブログ記事: Markdown の方言|ニモニク - 株式会社ニーモニック

Markdown 処理系の比較 - build error

gfm モジュール

ソースコード

# gfm module
import gfm

# markdown file の読み込み
f = open('input.md', 'r', encoding='utf-8')
text_md = f.read()
f.close()

# html = gfm.gfm(text_md)
html = gfm.markdown(text_md)
print(html)

実行結果

<h1>見出し1</h1>
<h2>見出し2</h2>
<ol>
<li>番号付きのリスト  </li>
<li><strong>太字</strong>  </li>
<li><em>イタリック</em>  <ul>
<li>リスト</li>
</ul>
</li>
</ol>
<h2>Code1</h2>
<pre><code># code sample
str = 'Hello world!'

print(str)
</code></pre>
<h2>Code2</h2>
<p>```</p>
<h1>code sample</h1>
<p>str = 'Hello world!'</p>
<p>print(str)<br />[改行]```</p>
<h2>Link</h2>
<p><a href="https://www.google.com">Github Flavored Markdown</a></p>
<h2>Image</h2>
<p><img alt="Image file" src="hoge.png" /></p>

※ 上の中の[改行]は改行が入ってます。

参考ページ

gfm 0.0.3 : Python Package Index

まとめ

3 つの Markdown のモジュールを簡単に試してみた。
一番差が出たのは 「```」による pre 記法の箇所でした。
もともと Markdown ではスペース4つやタブで行いますが、
自分はてななどではよく「```」をよく使うので、 個人的には markdown2 のモジュールが使いやすいように感じた。
細かいオプションなどもあるかもしれないが、 今回は簡単に使ってみてこのような結果になった。
以上。

configparser モジュールを使う【Python3】

configparser を利用

configparser とは

  • Python の Module
  • 設定言語を実装したクラス
  • Windows の ini ファイルに似た構造を持っている。
  • 簡易的な設定ファイルを作るときに便利

Python version

設定ファイルの構造例

設定ファイルの構造の例を示す。 記号は 「=」と「:」のどちらでも OK。 また、記号の前後にスペースを入れても入れなくてもどちらでもいい。

config.txt

[defalt]
user = inner

[info]
directory : dir
mode : 0

ファイルの作成

config.txt と同じファイルを作成する。

config_write.py

import configparser

default = {'user': 'inner'}
info = {'directory': 'dir', 'mode': }

config = configparser.ConfigParser()
config['default'] = default
config['info'] = info

with open('config.txt', 'w') as configfile:
    config.write(configfile)

ファイルの読み込み

作成したファイルを読み込んでいく。
読み込むときは数値などは文字列として扱われるようです。

config_read.py

import configparser

config = configparser.ConfigParser()
config.read('config.txt')

user = config['default']['user']
print(user)  # inner と表示される

# info の中の要素を全て取り出す
for i in config['info']:
    print(i)
    print(config['info'][i])

実行結果

inner
mode
0
directory
dir

参考

14.2. configparser — 設定ファイルのパーサー — Python 3.4.3 ドキュメント

テキストファイルの操作【Python3】

python3 でテキストファイルの操作

最近よく使うのでメモ

環境

Python version

書き込み

write_file = 'hello.txt'
text = 'hello'
f = open(write_file, 'w')  # 'w' は書き込み専用
f.write(text)
f.close()

読み込み

readfile = 'hoge.txt'
f = open(readfile, 'r')  # 'r' は読み取りモード
str = f.read()  # readline を使うと1行ずつ読み込める
f.close()
print(str)

mode 引数について

'w' : 書き込み専用(既存ファイルがあれば消去)
'r' : 読み取り専用
'a' : ファイルに追記する
'r+' : 読み書きの両方をする
省略も可能 : 省略時には 'r' と仮定

Encoding

WindowsMac など環境が変わるとエンコードの違いでエラーがよく出る。
そのため、書き込みや読み込み時に指定しておくと問題を回避できるだろう。
以下に例を示すが、読み込みでも書き込みでも要領は同じ。

file_name = 'hello.txt'
f = open(file_name, 'r', encoding='utf-8')
f.close()

参考

7. 入力と出力 — Python 3.4.3 ドキュメント

Python入門[2&3対応]

Python入門[2&3対応]

自分用Markdownエディタを作ってみた【Windows用】

作ったもの

Windows 環境で動作する Markdownエディタ。
使い方はシンプルでテキストボックスに文章を入力し、ボタンを押すとHTMLが表示されるだけのプログラム。(保存機能はつけてない。)
見た目は以下のような感じ ↓↓

f:id:inner2:20150302011507p:plain

環境

Windows 8.1 Pro
Visual studio 2012 for Windows Desktop
Python 3.3.1

大まかな流れ

Windows用に作るため UI はVisual C# を使い、markdownファイルを HTML に変換する部分は Python で作成した。
Visual C# には markdownsharp というものがあるらしいが、Python を使ったのは手軽そうなのと好みの問題です。

markdown の導入

Markdownで書かれたファイルを HTML に変換するために今回は Python の markdown のモジュールを使用した。
markdown は以下のページよりダウンロードし、解凍したのちにインストールした。

http://docs.python.jp/2.7/install/index.html

インストール。

$ python setup.py build
$ python setup.py install

HTML に変換する

使い方は以下のページを参考にした。
ここでは、input.txt を output.html に変換している。

Markup Language「Markdown」をPythonで使う - ctrlshiftの日記

pythonでmarkdownを扱う - Qiita

makehtml.py

import markdown

md = markdown.Markdown()
md.convertFile(input="input.txt", output="output.html", encoding="shift_jis")

エディタを作る

Markdown エディタの UI の部分は Visual C# で作っていく。
大まかな流れは、 まず、新しくWindowsフォームアプリケーションを作成し、以下のようにテキストボックス、ウェブブラウザー、ボタンを配置した。

f:id:inner2:20150302010032p:plain

次に、ボタンをクリックしたときにテキストボックスの内容を HTML に変換し、ウェブブラウザで表示するプログラムを作成した。
C#からPythonを動かすために以前書いた記事を参考にした。

コマンドプロンプトを使う[Visual C#] - プログラミングノート

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace markdowneditor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void makehtml(string cmd)
        {
            //Processオブジェクトを作成
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            //ComSpec(cmd.exe)のパスを取得して、FileNameプロパティに指定
            p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
            //出力を読み取れるようにする
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardInput = false;
            //ウィンドウを表示しないようにする
            p.StartInfo.CreateNoWindow = true;
            //コマンドラインを指定("/c"は実行後閉じるために必要)
            p.StartInfo.Arguments = @"/c " + cmd + " /w";
            //起動
            p.Start();
            //プロセス終了まで待機する
            //WaitForExitはReadToEndの後である必要がある
            //(親プロセス、子プロセスでブロック防止のため)
            p.WaitForExit();
            p.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Shift JISで書き込む
            //書き込むファイルが既に存在している場合は、上書きする
            System.IO.StreamWriter sw = new System.IO.StreamWriter(@"input.txt",false,System.Text.Encoding.GetEncoding("shift_jis"));
            //TextBox1.Textの内容を書き込む
            sw.Write(textBox1.Text);
            //閉じる
            sw.Close();

            makehtml("python makehtml.py");
            System.Threading.Thread.Sleep(500);

            // カレントディレクトリを取得する
            string stCurrentDir = System.IO.Directory.GetCurrentDirectory();
            // ナビゲート 
            this.webBrowser1.Navigate(stCurrentDir + @"\output.html");
        }
    }
}

参考ページ

10 行でズバリ!! 簡単 WebBrowser の作成 (C#) in C#

VB.NET - カレントディレクトリを取得する

Github を使う

前回に Git の最低限の使い方だけ覚えたので、次はGithubの使い方を覚えることにした。
これも前回と同様に難しいので必要最低限だけ覚えておくことにした。
(本当はしっかり理解したいけどね)

前回のGitに関する記事↓

Github とは

 簡単に言うと Github は Git で利用しているローカル環境の内容ををウェブ上で保存や公開を行うことができるサービスの事です。
 詳しくは他の方のページを見た方がいいと思います。

GitHubを使ってみよう!導入と簡単な流れ、よく使うコマンドなど。 - YATのBLOG

「そもそもGitって何?」、「GitとGitHubは何が違うの?」にシンプルに答えるよ - Six Apart ブログ

基本は pull と push

 Git のローカルリポジトリGithubリポジトリとの連携を取るために必要なコマンドが pull と push でしょう。 pull は Githubリポジトリの変更点をローカルリポジトリに統合し、push は逆のようです。

  pull : Github → ローカル
  push : ローカル → Github

・ push する ([user] と [repository] は変更が必要。)

$ git push https://github.com/[user]/[repository].git

・pull する ([user] と [repository] は変更が必要。)

$ git pull https://github.com/[user]/[repository].git

一連の流れ(よく使いそうな流れだけメモしておく)

Githubで新しくリポジトリを作成してローカルからpushする。 [user] と [repository] は変更が必要。

$ git init
$ git add .
$ git commit -m "hoge"
$ git remote add origin https://github.com/[user]/[repository].git
$ git push -u origin master

Github のソースを利用し、ローカルで編集した後にpushする。 このパターンがもっとも利用すると思う。

$ git clone https://github.com/[user]/repository].git
$ git add .
$ git commit -m "hoge"
$ git push origin master

README.md を作成する。

 README.md ファイルは、 Github で公開する際に他者にツールの使い方やインストールの方法などを説明するために重要なものです。
また、自分で作成したソースの説明などを簡単に書いておくことで自分にとっても便利なものになります。
メモ帳で作成すればいいのですが、Markdown 記法を使うのでよく使うものだけメモしておく。

改行:半角スペース二つ  
見出し:# を入れる  
段落:空行を開ける  
リンク:<>でURLを囲む  
コード:バッククォーテーションで囲む  

わかりやすいREADME.mdを書く | SOTA

エラー:ローカルリポジトリGithub の公開リポジトリを変更した際に連携がうまく取れない

 Github を利用する際に pull もしくは push をするときにローカルリポジトリと公開リポジトリの両方を変更した際にエラーが出るのは目に見えている。実際に試してみると確かにエラーが出た。
以下は Githubからローカル環境にpull しようとしたが、ローカルリポジトリの README.md を変更し、push していなかったためでエラーが出ている。

$ git pull origin master
error: Your local changes to the following files would be overwritten by merge:
    README.md
Please, commit your changes or stash them before you can merge.
Aborting

 このエラーに関して賢い解決方法は不明だが、自分なりに解決方法を考えた。
ローカルの変更は無視してGithubの内容を pull したい時を想定すると、
マージする際に書き換える元のファイルが前のバージョンと異なっていることが原因であるので、 一度ローカルリポジトリのバージョンを落とすのがいいと思う。
実際にやるとうまくいった。
他のやり方はまた時間のあるときにでも調べたいと思う。

$ git reset --hard [id/(HEAD)]

最後に

 今回は深入りすると大変そうなので、なるべく簡単なところだけを覚えて最低限使えるように意識した。もう少し理解したいが、本業でないし、複数人で開発を行ったりしないため時間があれば勉強しようと思う。また、push や pull をする際に ssh を利用している人が多いみたいだったが、その辺もそのうち覚えていこうと思う。

Git 使い方【メモ】

普段、趣味でプログラムを書いていますが、ネットではGitを使っている方が多いようなので使えるようになっておこうと思った。ただ、自分には難しいので、最低限のことを覚えるというスタイルで行こうと思う。とりあえず使いそうなものだけをメモ書きとして書いておくことにした。
ただの覚え書なので、説明は少ないです。

Git について

Gitはバージョン管理のためのシステム。
詳しい解説はほかの人のページを見たほうがいいと思います。
(自分はあまり理解していない。)

Gitを使ったバージョン管理【Gitの基本】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

初期設定

$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"

リポジトリの作成

リポジトリを作成するディレクトリで実行。

$ git init

クローンを作成する。

$ git clone [URL]

コミット

コミットするファイルの指定。

$ git add [ファイル名]

まとめて指定。

$ git add .

コミットする。

$ git commit -m "コメント"

直前のコミットを変更する。

$ git commit --amend

ファイルを削除

Gitで管理しているファイルやフォルダを普通に移動・削除をするのは、あまりよろしくないらしい。(エラーが出るのだろうか)
ファイルを削除

$ git rm [ファイル名]

ディレクトリを削除

$ git rm -r [ディレクトリ名]

表示

変更が加えられたファイルの表示

$ git status

ログの表示。

$ git log

ログを一行で表示。

$ git log --oneline

リセット

直前のコミットにリセット。

$ git reset --hard HEAD

IDを入力してリセット(すべては必要ない。)

$ git reset --hard [id]

ブランチ

ブランチを確認。

$ git branch

ブランチを作る。

$ git branch [ブランチ名]

ブランチの切り替え。

$ git checkout [ブランチ名]

マージする。

$ git merge [マージしたいブランチ名]

ブランチの削除

$ git branch -d [ブランチ名] 

Gitの管理に含めないファイルを設定する。

".gitignore"ファイルを作業ディレクトリに作成し、
管理に含めないファイル名を入れる。

ローカルリポジトリの削除

.gitファイルを消せばいいらしい

rm -rf .git

最後に

Githubを使うために最低限必要そうなことを覚えたので、次はGithubの使い方を覚えていこうと思う。

参考ページ

GitHub - いまさら聞けないgitの使い方 - Qiita

【中上級者お断り】初心者のためのgit利用入門 - Qiita

Everyday Learning: git ローカルリポジトリの削除