みそしりんぐ

現在進行形みそしる

C言語コピペ集

学校ではC言語で書かなければならないものが多いのですが,何回書いてもすっぽりぬけるので,個人的まとめ.
ってことで以下本当に初歩の初歩のコピペ集
(書くのに要した時間約30分程度という適当感満載なかんじなのできっと間違いがある)

テンプレート

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	return 0;
}

どうでもいいけどreturnよく打ち損じます.

上の方

#define MISO 46
void misoshiru(int wakame, char tofu[][MISO]);

ループ

for (; ;) {
	for (; ;) {
		for (; ;) {
			for (; ;) {
			}
		}
	}
}
while(1) {
}

入力

scanf("%d", &i);
gets(str);

ファイル

開く
if ((fp = fopen(fname, "a")) == NULL) {
	printf("can't open a file\n");
	exit(1);
}
モード 動作 ファイルがあるとき ファイルがないとき
"r" 読み出し専用 正常 NULL
"w" 書き込み専用 上書き 新規作成
"a" 追加書き込み専用 最後に追加 新規作成
"r+" 読み込みと書き込み 正常 NULL
"w+" 書き込みと読み込み 上書き 新規作成
"a+" 読み込みと追加書き込み 最後に追加 新規作成
読み込み
while(fgets(row, sizeof(row), fp) != NULL) {
	// 処理
};
出力
fprintf(fp, "%d", i);
fputs(str, fp);
閉じる
fclose(fp);

配列

int *a;
a = (int *)malloc(sizeof(int)*size);
a = (int *)realloc(a, sizeof(int)*size);

構造体

// 型定義
typedef struct {
	char name[20];
	char ingredients[20];
} misoshiru_t;

// 宣言
misoshiru_t Sinsyu = {"信州みそ", "わかめ"};
misoshiru_t Japan[20] = {
	{"加賀みそ", "油揚げ"},
	{"麦みそ", "豆腐"},
	{"赤みそ", "ネギ"}
};

// 使い方
printf("%s %s", Shinsyu.name, Shinsyu.ingredients);
printf("%s %s", Japan[0].name, Japan[0].ingredients);

時間

#include <time.h>

clock_t start,end;
double rTime;

start = clock(); // 計測開始
end = clock();  // 計測終了
rTime = (double)(end-start)/CLOCKS_PER_SEC;

CSSでFizzBuzz問題

どうしてwebデザイナーに・・・CSSが書けないのか?(またはCSSでFizzBuzz問題) - mon_sat at Co-Edo(半年前の自分への教科書 / 別院)

とりあえず解いてはみましたが……Google先生に頼らない方向でいってみようと思ったはいいけど酷いですね.

#main {
	list-style-type: none;
}
#main li:nth-child(3n), #main li:nth-child(5n), #main li:nth-child(15n) {
	text-indent: -9999px;
	position: relative;
}
#main li:nth-child(3n):after, #main li:nth-child(5n):after, #main li:nth-child(15n):after {
	display: block;
	text-indent: 0px;
	position: absolute;
	top: 0;
}
#main li:nth-child(3n):after {
	content: "Fizz";
}
#main li:nth-child(5n):after {
	content: "Buzz";
}
#main li:nth-child(15n):after {
	content: "FizzBuzz";
}


【解答集できました】どうしてwebデザイナーに・・・CSSが書けないのか?(またはCSSでFizzBuzz問題) - mon_sat at Co-Edo(半年前の自分への教科書 / 別院)
やっぱりまだミジンコほどの知識しかないなぁとひしひし感じました.
上のもマーカー問題解決するならdisplay:list-itemしちゃえばいいのか.
あとtext-indent使うより圧倒的にvisibility: hiddenのほうがかっこいいですね!

Kivy

いしたーくんにやりませんかって言われて,とりあえず触ってみた感想というか.
触ってみたというよりはほぼインストールしただけですね.とりあえずそこまでの手順です.

Kivy

Open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps.
Kivy: Crossplatform Framework for NUI

目次

  1. Python環境構築
    • 必要のないモジュールをアンインストール
      • 入っていたモジュール
      • アンインストール
    • virtualenvで仮想環境
      • インストールと設定
      • 使い方
  2. Kivy導入
    • インストール
  3. Kivyを使ってみる

Python環境構築

といっても,Python自体はHomebrewでもういれてあったので,それからのお話です.
ちなみにPythonのインストールはbrew installしただけ.

必要のないモジュールをアンインストール

グローバルのPythonに何故かモジュールがたくさん入っていたので,とても気になったのでそれらをアンインストールするところから始めることにしました.

入っていたモジュール
  1. Cython==0.20.1
  2. Jinja2==2.7.2
  3. List==1.3.0
  4. MarkupSafe==0.19
  5. PyRSS2Gen==1.1
  6. Pygments==1.6
  7. Sphinx==1.2.2
  8. Twisted==13.2.0
  9. altgraph==0.11
  10. backports.ssl-match-hostname==3.4.0.2
  11. bdist-mpkg==0.5.0
  12. bonjour-py==0.3
  13. cffi==0.8.2
  14. cryptography==0.2.2
  15. docutils==0.11
  16. ipython==1.2.1
  17. macholib==1.6
  18. matplotlib==1.1.1
  19. modulegraph==0.11
  20. nose==1.3.1
  21. numpy==1.8.0
  22. pandas==0.13.1
  23. patsy==0.2.1
  24. pika==0.9.13
  25. pip-tools==0.3.4
  26. py2app==0.8
  27. pyOpenSSL==0.14
  28. pycparser==2.10
  29. pymc==2.3.2
  30. pyparsing==2.0.1
  31. python-dateutil==2.2
  32. pytz==2013.9
  33. pyzmq==14.0.1
  34. readline==6.2.4.1
  35. scikit-learn==0.14.1
  36. scipy==0.13.3
  37. six==1.5.2
  38. statsmodels==0.5.0
  39. stevedore==0.14.1
  40. tornado==3.2
  41. vboxapi==1.0
  42. virtualenv==1.11.4
  43. virtualenv-clone==0.2.4
  44. virtualenvwrapper==4.2
  45. wsgiref==0.1.2
  46. xattr==0.7.4
  47. zope.interface==4.1.0

それにしてもなんでこんなにたくさん入っていたのかは疑問でならないのですが,多分何か使って一括導入したんだろうなと思います.ただ参考にした記事が不明なのでどうやったのかわかりません.

アンインストール

参考:Python - pipでインストールしたモジュールを全て削除 - Qiita

$ pip freeze > piplist.txt
$ sudo pip uninstall -r piplist.txt

virtualenvで仮想環境

グローバルのPythonは2.x系なのですが,3.x系のPython上でKivyを動かしたいなぁと思ったので,仮想環境を用いて実現することにしました.
参考:
homebrew - Mac OS Xで複数バージョンのPythonを利用する(2)利用編 - Qiita
Virtualenvwrapperの導入

インストールと設定
$ pip install virtualenv
$ pip install virtualenvwrapper

.bash_profile

### Virtualenvwrapper
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
    export WORKON_HOME=$HOME/.virtualenvs
    source /usr/local/bin/virtualenvwrapper.sh
fi
$ source .bash_profile
使い方

仮想環境を作る(Python3.x系の場合)

$ mkvirtualenv --python=/usr/local/bin/python3 py3

仮想環境に入る

$ workon py3

仮想環境を抜ける

$(py3) deactivate

仮想環境を消す

$ rmvirtualenv py3

Kivy導入

インストール

先ほど作ったpy3という環境にKivyを入れます.
また,CythonとPygameも入れる必要があるようなので,導入します.
参考:Kivy Basics — Kivy 1.8.1-dev documentation

Cython
$(py3) pip install cython
Pygame
$(py3) pip install hg+http://bitbucket.org/pygame/pygame

そしてエラー発生.

"Cannot find command hg"

コマンドみつからないってどういうことですかーって思って検索してみると,同じ状況の人を発見
英語を斜め読みして,とりあえずmercurialというのを入れてみることに.

$(py3) pip install mercurial

そしてpygameをいれてみるも,結果は変わらず.もしかしてグローバルのPythonにいれなきゃだめなのかなと思って,仮想環境を抜けて入れなおしました.

$ pip install mercurial

これで仮想環境にめでたくpygameが入りました.

Kivy

本命をインストールです.

$(py3) pip install kivy

はい問題発生.

"Can't mix strings and bytes in path components"

ん?と思い調べてみると,全く同じ問題に遭遇している人を見つけたので,解決方法をみようと思ったのですが.
Problem installing under Python 3.3.3 (1.8.0) · Issue #1837 · kivy/kivy · GitHub
これ見る限りissueはClosedしてるけど,1.8.0にはこの問題が残っているということだよなあ.

ということで諦めて,しばらくは2.x系Python上でKivyをいじることにしました.普通に.appでインストールするだけ.
公式サイトに詳しいです.

なんというか,その前の段階で色々あったので悔しいです…….

Kivyを使ってみる

Hello world

参考:Kivy Basics — Kivy 1.8.1-dev documentation

import kivy
kivy.require('1.0.6') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):

    def build(self):
        return Label(text='Hello world')


if __name__ == '__main__':
    MyApp().run()

気になったのは,Hello worldの文字がぼけていたこと.デフォルトでRetina対応とかは,さすがにないんですね…….

ブックマークみたいなツール群

Web上の記事を保存したりメモしたりするツールはたくさんありますが,そのなかでも私が使っているのが,PocketEvernoteはてなブックマークとブックマークです.暇なので今から私なりの使いわけを紹介したいと思います.
紹介というよりは,私がどこに保存しようかなぁと迷った時のメモが近いかも.

Pocket

私はPocketをしおりとして使っています.Webの小説やらなんとか入門やらといった,長くて一気に読めない複数ページに渡る文章ありますよね.それのどのページまで読んだかというのをPocketで保存しておくと,とってもわかりやすくて素晴らしいです.

なぜPocketか?
  • UI的にしおりとして使いやすい
  • カテゴリ分け・タグ付けができない(できるとやりたくなって面倒)
  • 追加・削除がし易い
決め手

Evernote

長期保存のためにあると思ってます.Webサイトなどを読んでて,サイトのこの部分だけメモとして保存しておきたい!という時用です.例えばリンク集や,何かの一覧など.

なぜEvernote
  • カテゴリ分け・タグ付けができる(あとで見やすい)
  • Webクリッパーが使いやすい
使うようになったきっかけ

はてなブックマーク

こんな記事読んでたんだと後で懐古に浸るとき用.あんな感じの記事があった気がするけどどんなだっけ,ってときに,とりあえず保存しておけばここから見つけられます.履歴をちょくちょく消したくなる私向け.

なぜはてなブックマーク
  • 代替となるサービスが思いつかない
  • タグ付けが簡単
決め手

ブックマーク

これはサイトごと好きとかそういうときのためのものです.一部はEvernote,すべてはブックマーク.一部すきってときでも,アニメーションが好きとかはブックマークにいれますね.あとはWeb上のツールとかもブックマークですよね.Evernoteに行くもの以外のお気に入りって感じです.ブックマークほどではないのがはてなブックマーク行きになります.
これである理由も決め手も,語るまでもないような気がします.


決め手やなぜ?というのは,あとで自分が何かしらのサービスをつくりたいと思ったときに参考になるかなぁと書いてみたのですが,こうみると大切なのは“デザイン”と“ツールの使いやすさ”と“それにあった機能”といった感じですか.
大は小を兼ねるってわけでもないらしいですね.上手く引き算ができるようになりたい.

C言語の学習ページをデザイン

学校のC言語のページを,デザインしなおしてみよう!ということで,以下を活用してトップページのみですが作ってみました.

結果

f:id:mssr_nm:20140223225801p:plain

Foundation

導入

$ gem install foundation

使い方

Foundation

任意のディレクトリで

$ foundation new MY_PROJECT
grunt-bower-task

いちいちパスを通すのが面倒なので,libディレクトリにまとめます.
参考:
Bower入門(応用編) - from scratch
Grunt: grunt-bower-task で Bower を扱いやすくレイアウトする | deadwood

package.json

{
  "name": "MY_PROJECT",
  "version": "0.0.1",
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-bower-task": "~0.3.4"
  }
}

Gruntfile.js

module.exports = function (grunt) {
  grunt.initConfig({
    bower: {
      install: {
        options: {
          targetDir: './lib',
          layout: 'byType',
          install: true,
          verbose: false,
          cleanTargetDir: true,
          cleanBowerDir: false
        }
      }
    },
  });
  grunt.loadNpmTasks('grunt-bower-task');
};
$ npm install
$ grunt bower:install

Foundationで今回使ったもの

  • Top Bar
  • Grid
  • Block Grid

使い方

bodyの一番最後に記述

<script src="lib/jquery/jquery.js"></script>
<script src="lib/foundation/foundation.js"></script>
<script>
	$(document).foundation();
</script>

アイコンフォント

公式サイトに書いてあるまま

<span class="entypo-bell"></span>
@import url(http://weloveiconfonts.com/api/?family=entypo);

/* entypo */
[class*="entypo-"]:before {
  font-family: 'entypo', sans-serif;
}

コード

続きを読む

Webのための環境構築

Sass,Compass,Bower,Gruntを導入しました.
備忘録的に,残しておきたいと思います.

(2014 2/26追記:アップデートも忘れずに

環境

1. Homebrewの導入

Homebrew

パッケージ管理システムの一つ.類似にMacPortsなど.
参考:MacOSX - パッケージ管理システム Homebrew - Qiita

導入

Javaのインストール
$ java -version

インストール済であればバージョンが,されていなければ,インストールの確認ウィンドウがでてきます.

Command Line Tools のインストール

下記URL参照
MavericksでCommand Line Tools for Xcodeをインストールする - Qiita

Homebrew本体をインストール

Homebrew公式サイトより

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
確認
$ brew -v

2. Rubyの導入

Ruby

まつもとゆきひろ(通称 Matz)により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。
wikipedia:Ruby

SassやCompassを使うのは,Rubyが必要です.Macにはデフォルトで入っていますが,後々Rubyも使ってみるかもしれないので,rbenvを用いてちゃんとインストールします.
参考:MacでRubyをインストールする | Yuhiisk

導入

rbenv
$ brew install readline
$ brew install openssl
$ brew install ruby-build
$ brew install rbenv
$ rbenv -v
Ruby本体
$ rbenv install 2.0.0-p353
$ rbenv rehash
$ rbenv global 2.0.0-p353
$ rbenv rehash
確認
$ ruby -v
$ ruby -version
$ ruby -versions

どれかやればわかります.Systemになってなかったら成功です.versionsでは,インストールされてるバージョン一覧が表示されます.アスタリスクがついているのが現在使っているバージョンです.

3. Sass / Compass 導入

Sass

Sass is the most mature, stable, and powerful professional grade CSS extension language in the world.
Sass: Syntactically Awesome Style Sheets

要するにCSSの拡張メタ言語です.入れ子にできたりとか,変数使えたりとか,関数作れたりとか,CSSに必要な気合が減ります.

Compass

Compassを使えば,ベンダープレフィックスやclearfixなどの,ブラウザの違いを吸収するための面倒な記述から開放されます.便利なMixin集.

導入

$ sudo gem install sass
$ sudo gem install compass
$ sass -v
$ compass -v

4. Node.js / Bower / Grunt導入

Node.js

Node.js とは一体何か?
第1回 Node.jsとは:基礎から学ぶNode.js|gihyo.jp … 技術評論社
Node.jsについては,ここらへんを読めばなんとなくわかります.

Bower

Bower is a package manager for the web. It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.
Bower

バージョン管理らくだよ!とか,そんな感じです.使いこなせる気がしません.
Bower入門(基礎編) - from scratch

Grunt

Node.jsを使用した自動化ツールです.色々なことができます.
私は,Bowerでバージョン管理してても,パス通すのが面倒なので,grunt-bower-taskを使うために入れました.grunt-cliをインストールしてプロジェクトごとにGruntやプラグインをインストールして使う感じなので,今回はgrunt-cliをインストールするところまで.
Web制作で面倒な作業を自動化するビルドツール、Grunt v0.4 入門|Web Design KOJIKA17
Grunt入門 〜このマークアップからの卒業〜 - Qiita

導入

Node.jsをアンインストール

前にいれてたので,それを削除してから,改めてHomebrewで入れようと思いました.
参考:Mac OS X から Node.js をアンインストールする方法 - SONICJAM Developerz Blog

lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \
| while read i; do
  sudo rm /usr/local/${i}
done
sudo rm -rf /usr/local/lib/node \
     /usr/local/lib/node_modules \
     /var/db/receipts/org.nodejs.*
sudo rm -rf ~/.npm
インストール

参考:Homebrewでnode.jsとnpmをインストール | bulblub

$ brew install node
$ npm install -g bower
$ npm install -g grunt-cli
$ node -v
$ bower -v

5. アップデートも忘れずに

参考:HomebrewやRubyGemsの定期的なアップデート祭りをしませう | WP-D

$ brew update
$ brew upgrade
$ sudo update_rubygems
$ sudo gem update

ついでに古いのをお掃除

$ brew cleanup
$ gem clean

FizzBuzz問題

FizzBuzz問題やりました.記事的には前後してますが,これがPythonとの初めてです.
なんだかとっても難しそうなものかと思ったのに全然そんなことはなかった.

Fizz Buzz

Fizz Buzzは英語圏で長距離ドライブ中や飲み会の時に行われる言葉遊びである。
wikipedia:Fizz Buzz

なべあつふうだよ!
5の倍数でわんとかは私はわりと知りませんでした.そんなんでしたっけ.

# -*- coding: utf-8 -*- #

for var in range(1,31):
	if var%3 == 0:
		print "さあん"
	if var%5 == 0:
		print "わん"
	else:
		print var

よく読んだら,15の倍数でFizz Buzzってしなければならないのではと思いました.
ってことでいわせてみたで.

# -*- coding: utf-8 -*- #

for var in range(1,31):
	if var%15 == 0:
		print "さあんわん"
	elif var%3 == 0:
		print "さあん"
	elif var%5 == 0:
		print "わん"
	else:
		print var