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
目次
- Python環境構築
- 必要のないモジュールをアンインストール
- 入っていたモジュール
- アンインストール
- virtualenvで仮想環境
- インストールと設定
- 使い方
- 必要のないモジュールをアンインストール
- Kivy導入
- インストール
- Cython
- Pygame
- Kivy
- インストール
- Kivyを使ってみる
Python環境構築
といっても,Python自体はHomebrewでもういれてあったので,それからのお話です.
ちなみにPythonのインストールはbrew installしただけ.
必要のないモジュールをアンインストール
グローバルのPythonに何故かモジュールがたくさん入っていたので,とても気になったのでそれらをアンインストールするところから始めることにしました.
入っていたモジュール
- Cython==0.20.1
- Jinja2==2.7.2
- List==1.3.0
- MarkupSafe==0.19
- PyRSS2Gen==1.1
- Pygments==1.6
- Sphinx==1.2.2
- Twisted==13.2.0
- altgraph==0.11
- backports.ssl-match-hostname==3.4.0.2
- bdist-mpkg==0.5.0
- bonjour-py==0.3
- cffi==0.8.2
- cryptography==0.2.2
- docutils==0.11
- ipython==1.2.1
- macholib==1.6
- matplotlib==1.1.1
- modulegraph==0.11
- nose==1.3.1
- numpy==1.8.0
- pandas==0.13.1
- patsy==0.2.1
- pika==0.9.13
- pip-tools==0.3.4
- py2app==0.8
- pyOpenSSL==0.14
- pycparser==2.10
- pymc==2.3.2
- pyparsing==2.0.1
- python-dateutil==2.2
- pytz==2013.9
- pyzmq==14.0.1
- readline==6.2.4.1
- scikit-learn==0.14.1
- scipy==0.13.3
- six==1.5.2
- statsmodels==0.5.0
- stevedore==0.14.1
- tornado==3.2
- vboxapi==1.0
- virtualenv==1.11.4
- virtualenv-clone==0.2.4
- virtualenvwrapper==4.2
- wsgiref==0.1.2
- xattr==0.7.4
- 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上の記事を保存したりメモしたりするツールはたくさんありますが,そのなかでも私が使っているのが,PocketとEvernoteとはてなブックマークとブックマークです.暇なので今から私なりの使いわけを紹介したいと思います.
紹介というよりは,私がどこに保存しようかなぁと迷った時のメモが近いかも.
私はPocketをしおりとして使っています.Webの小説やらなんとか入門やらといった,長くて一気に読めない複数ページに渡る文章ありますよね.それのどのページまで読んだかというのをPocketで保存しておくと,とってもわかりやすくて素晴らしいです.
なぜPocketか?
- UI的にしおりとして使いやすい
- カテゴリ分け・タグ付けができない(できるとやりたくなって面倒)
- 追加・削除がし易い
決め手
- デザインがすきだった
- マルチプラットフォーム
- Firefoxのadd-onすごい
Evernote
長期保存のためにあると思ってます.Webサイトなどを読んでて,サイトのこの部分だけメモとして保存しておきたい!という時用です.例えばリンク集や,何かの一覧など.
なぜEvernoteか
- カテゴリ分け・タグ付けができる(あとで見やすい)
- Webクリッパーが使いやすい
使うようになったきっかけ
- デザインが好きだった
- マルチプラットフォーム
- Webクリッパーすごい
はてなブックマーク
こんな記事読んでたんだと後で懐古に浸るとき用.あんな感じの記事があった気がするけどどんなだっけ,ってときに,とりあえず保存しておけばここから見つけられます.履歴をちょくちょく消したくなる私向け.
なぜはてなブックマークか
- 代替となるサービスが思いつかない
- タグ付けが簡単
決め手
- はてなブログを使っていた
ブックマーク
これはサイトごと好きとかそういうときのためのものです.一部はEvernote,すべてはブックマーク.一部すきってときでも,アニメーションが好きとかはブックマークにいれますね.あとはWeb上のツールとかもブックマークですよね.Evernoteに行くもの以外のお気に入りって感じです.ブックマークほどではないのがはてなブックマーク行きになります.
これである理由も決め手も,語るまでもないような気がします.
決め手やなぜ?というのは,あとで自分が何かしらのサービスをつくりたいと思ったときに参考になるかなぁと書いてみたのですが,こうみると大切なのは“デザイン”と“ツールの使いやすさ”と“それにあった機能”といった感じですか.
大は小を兼ねるってわけでもないらしいですね.上手く引き算ができるようになりたい.
C言語の学習ページをデザイン
学校のC言語のページを,デザインしなおしてみよう!ということで,以下を活用してトップページのみですが作ってみました.
- Foundation5
- アイコンフォント
- HTML5 + Sass
結果
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追記:アップデートも忘れずに)
環境
- MacBook Pro Retina (Late 2013)
- OS X Mavericks
1. Homebrewの導入
Homebrew
パッケージ管理システムの一つ.類似にMacPortsなど.
参考:MacOSX - パッケージ管理システム Homebrew - Qiita
導入
Command Line Tools のインストール
下記URL参照
MavericksでCommand Line Tools for Xcodeをインストールする - Qiita
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に必要な気合が減ります.
導入
$ 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