2011/12/31

アドレス、ポインタ、参照 まとめ

やっぱりわかりにくいアドレス、ポインタ、参照。
ちょっとまとめておこう。

●アドレス
int a;
とした時、&a がアドレス。 メモリの位置を表す(住所のようなもの)ことは定番。

●ポインタ
int* pA = &a;
としたとき、pA はポインタ。アドレスをいれておく用の箱。
また、*pA としたときは、そのポインタが指し示す変数である a を示す。
つまり * が変数とポインタの橋渡しをしているってこと。(どっちからどっちへの変換も * だから分かりにくくなっている気がする。)
また、下の2つは同じ意味を示します。
int* pA;
int *pA;
ここらへんが1番生きてくるのは引数にする場合。
まず普通に変数を引数にすると、

void change (int x, int y){
.....
}
int main(){
......
change(a, b);
......
}
関数changeは引数2つを交換するものだとして、これだと仮引数(x, y)と実引数(a, b)は値渡し(コピーのようなもの)なので、仮引数は交換になっても実引数は交換になってない。

よって、次のようにすると、
void change (int* x, int* y){
.....
}
int main(){
......
change(&a, &b);
......
}
今度は仮引数(x, y)と実引数(a, b)は参照渡し(場所を伝える。この場合はポインタ渡しのほうがいいかな。)
これで実引数と仮引数は同じ場所を示しているので仮引数を変えると実引数も交換になると。

そしてこの場合のポインタ渡しをもう少し簡単にできるようにしたのが本当の参照渡し

●参照
int& rA = a;
ここで rA は参照。(そしてここで & がアドレスと同じでまたこんがらがると、違いとしては &a はアドレス、int& は参照ということかな)
そして、これを引数にすると、
void change (int& x, int& y){
.....
}
int main(){
......
change(a, b);
......
}
change(a, b)と使うときにさっきのようにアドレスを使わず、そのまま変数を渡せばいいということですね。
変数を渡していても参照渡しができる(それがわかりやすいのかどっちも変数を渡していてどっち渡しなのかわからないのかは感じ方の違い)。
使う人にとってはchangeの中身がブラックボックスでも変数を渡せばいいからいいのかな。






2011/12/26

楽天ブログからの移行完了について

今まで楽天ブログで書いていましたが,今回このbloggerに移りました.

サイト名は同じで,これから書いていく記事の方向性も同じです.

こんなサイトを見ている人はいないと思いますが,念の為に今までのサイトの自分が必要だと思った記事はこっちにも書きました.

基本メモとして書いていくので醜いと思いますが,それでもいいと思った人は見てってください.

pythonを日本語(utf-8)対応にするには

pythonでprintなどのなかに日本語をいれたい時そのまま入れてしまうと
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-7
というようなエラーが出てしまう。これは文字コードがutf-8ではなくasciiになっているため。

参考にしたサイト
http://zensan.blogzine.jp/blog/2010/01/sitecustomizepy.html

http://d.hatena.ne.jp/SumiTomohiko/20070120/1169300624

http://d.hatena.ne.jp/motie/20090615/sitecustomize20090615

しかし、ちょっと書いてあることとは違った。(ubuntu10.04使用)

/usr/lib/python2.6の中にsitecustomize.pyが直接、またデフォの状態でもうあった。

よってバックアップをして退避させてsitecustomize.pyを次のように編集


(ただコピペをしただけなのでインデントに注意!!)


# install the apport exception handler if available
try:
  import apport_python_hook
  except ImportError:
  pass
else:
  apport_python_hook.install()

      ↓↓↓

# install the apport exception handler if available
try:
  import apport_python_hook
  import sys
  sys.setdefaultencoding('utf-8')
except ImportError:
  print('ImportError')
else:
  apport_python_hook.install()


確認のため

$ python
Python 2.6.5
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.getdefaultencoding()
utf-8

きちんとutd-8になってるからおk

2011/12/25

itunes moblie device helper エラー の解決法??


itunes 10.1.4.10にアップデートしたところ、iphoneをつなぐと
moblie device helperエラー
となり、iphoneをつなぐことができない。

いろいろ見てみるとc\program file\common files\apple\mobile device support\にある、applemobiledevcehelper.exeが問題らしい。

applemobiledevcehelper.exeの管理者権限を取るとか、消すとかすればいいらしい。

消すのは心配なのでescape_applemobiledevcehelper.exeにrenameしてみた、

itunesを起動しiphoneをつなぐとエラーが1つでるが、きちんと同期はできている。
まあこれでよしとしよう。itunesのverがあがる時はrenameをきちんと戻さなくては、
c\program file\common files\apple\mobile device support\escape_applemobiledevcehelper.exe

カーネルの選択 Grub をGUIで選択


GUIでGrubの設定ができるソフトStartUp Managerのインストール
$ sudo apt-get install startupmanager
CUIでしたいときは
/boot/grub/menu.lst
をいじるといいらしい

参考サイト
http://memo.officebrook.net/20081127.html

ssdでubuntuを使うときの設定


今のPCはSSDなのでやっぱり書き込み回数制限とか気になる。

そこでちょっとでも寿命が伸びるように設定

/etc/sysctl.conf に次を追加
vm.swappiness = 0
vm.dirty_writeback_centisecs = 1500
特に2行目などはどのようにして確認すればいいかわからないのでまあこれでいいか

なんかおかしいことが起きなかったらまたしよう

これを参考にしました
http://tech.lampetty.net/tech/index.php/archives/299

bashにPATHの当て方


bashにPATHを当てるときは ./bashrc を編集する

PATHを当てるとき
export PATH=/usr/○○○:$PATH
LD_LIBRARY_PATHを当てるとき
export LD_LIBRARY_PATH=/usr/○○○:$LD_LIBRARY_PATH
これでログアウトか再起動するといい

これを参考にした
http://satellite.hyarc.nagoya-u.ac.jp/~shimizu/ubuntu.html

virtualboxでCUIでのログインの仕方

virtualbox内の仮想OSではCUIログインしようと ctrl + alt +F2 とかするとホストOSがCUIになってしまう.

ゲストOSをCUIにするにはgrubの設定ファイルを変えてデフォルトでCUIログインするようにして,やりたいことを終えてからGUIに設定で戻すといいみたい


 /etc/default/grub で次のようにするとこのように設定できる
GUIでログインしたい時
GRUB_CMDLINE_LINUX_DEFALUT="quiet splash"
CUIでログインしたい時
GRUB_CMDLINE_LINUX_DEFALUT="quiet splash text"
(当たり前だけどどっちかしたらどっちかはコメントアウト)

これで設定を反映
 $ sudo update-grub
そして再起動

CUDA4.0のインストール方法


CUDA4.0をubuntu10.04にインストールする

1
ここで
http://developer.nvidia.com/cuda-toolkit-40
・Developer Drivers for Linux (270.41.19)
・CUDA Toolkit for Ubuntu Linux 10.10
・GPU Computing SDK - complete package including all code samples
・CUDA Tools SDK (APIs for 3rd party debuggers, performance analysis tools and cluster management solutions)
をダウンロード

次に必要なやつを入れる
$ sudo apt-get install g++ freeglut3-dev libxi-dev libxmu-dev
2
まずドライバのインストール(もう入っている場合はそのままでもいいかもしれないが、今回はドライバを取り除いてから取ってきたやつを入れた、そのままやっても上書きされると思う)
$ sudo stop gdm
(CUI上で)
$ sudo sh devdriver_4.0_linux_32_270.41.19.run
いろいろ聞かれるがyes
 $ sudo reboot
入っているか確認
$ sudo nvidia-xconfig -query-gpu-info
こんな感じででればおっけ

Number of GPUs: 1

GPU #0:
  Name      : GeForce GTX 560
  PCI BusID : PCI:1:0:0

  Number of Display Devices: 1

  Display Device 0 (DFP-0):
     EDID Name             : Mitsubishi RDT233WLM
     Minimum HorizSync     : 31.000 kHz
     Maximum HorizSync     : 82.000 kHz
     Minimum VertRefresh   : 56 Hz
     Maximum VertRefresh   : 76 Hz
     Maximum PixelClock    : 160.000 MHz
     Maximum Width         : 1920 pixels
     Maximum Height        : 1080 pixels
     Preferred Width       : 1920 pixels
     Preferred Height      : 1080 pixels
     Preferred VertRefresh : 60 Hz
     Physical Width        : 510 mm
     Physical Height       : 290 mm
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86 Kernel Module  270.41.19  Mon May 16 23:31:36 PDT 2011
GCC version:  gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)

3
次はtoolkitの導入(もういれている場合は  $ sudo rm -fr /usr/local/cuda  で消してから)
$ sudo sh cudatoolkit_4.0.17_linux_64_ubuntu10.10.run
いれたらPATHを通す
  1. $ cd
  2. $ vim .bashrc
次を追加
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

次は新規作成
$ vim /etc/ld.so.conf.d/cuda.conf 
内容は次の通り
/usr/local/cuda/lib64(これは64bitのときだけ)
/usr/local/cuda/lib
設定を反映させるため
$ sudo ldconfig
次はこれも新規作成
$ vim /etc/profile.d/cuda.sh
内容は
export PATH="/usr/local/cuda/bin:$PATH"
export LIBRARY_PATH="/usr/lib/nvidia-current"
再ログインする

確認する
$ nvcc -V
こんな感じならおっけ
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2011 NVIDIA Corporation
Built on Thu_May_12_11:09:30_PDT_2011
Cuda compilation tools, release 4.0, V0.2.122
4
SDKのインストール(もういれている場合は  $ rm -fr ~/NVIDIA_GPU_Computing_SDK  で消してから)
  1. $ sh gpucomputingsdk_4.0.17_linux.run
  2. $ cd ~/NVIDIA_GPU_Computing_SDK
  3. $ make 
これは結構時間がかかる


これでおっけ


これを参考にしました
http://tech.ckme.co.jp/cuda_inst.shtml
http://forums.nvidia.com/index.php?showtopic=204890



ubuntu10.04をインストールしたときの初期設定


●vim

●terminator

●chromium

●openssh-server

●Xmingの設定
cp /usr/share/doc/gdm/examples/custom.conf /etc/gdm/custom.conf
[xdmcp]
Enable=true
DisplaysPerHost=2
●NX (openssh-serverを入れてから)
  1. $ sudo add-apt-repository ppa:freenx-team
  2. $ sudo apt-get install freenx-server
●dropbox (公式HPから)
http://www.dropbox.com/
●skype

●xvidcap

●ubuntu customiation kit

●gparted

●remastorsys
リポジトリに次をいれupdateしてinstall
deb http://www.geekconnection.org/remastersys/repository karmic/
●setupmanager

●virtualbox(公式HPから)
https://www.virtualbox.org/
●home直下のディレクトリを英語に
$ LANG=C xdg-user-dirs-gtk-update

ubuntuのibusとしてgoogleのmozc


もうやってる人もいるかもしれないけど今日やってみて結構良かったので

mozcはオープンソースでこれ以外にもいろいろ種類があるので好きなのを
  1. $ sudo add-apt-repository ppa:japanese-testers/mozc
  2. $ sudo apt-get update
  3. $ sudo apt-get install ibus-mozc
※Ubuntuを再起動
※[システム]->[設定]->[インプットメソッド]で、日本語->Mozc選択して追加
追加された "日本語 - Mozc" を一番上にする。あとはテキストエディタなどで確認

http://d.hatena.ne.jp/pochio_pochiyama/20100511/p7

ppaのリポジトリ


ppaのリポジトリの追加の仕方


$ sudo add-apt-repository ppa:japanese-testers/mozc
今何が追加されているか確認
アップデートマネージャー -> 設定 -> 他のソフトウェア

そこに書いてある例
http://ppa.launchpad.net/japanese-testers/mozc/ubuntu lucid main
それを入れたコマンド(さっきのやつ)
$ sudo add-apt-repository ppa:japanese-testers/mozc
ってことは他の奴に入れるとき
japanese-testers/mozc
ここを参考に
http://www.1004.ubuntu-d.com/_operation/repository.html
http://smash.nobuto-murata.org/2010/11/ppaubuntu-1010-ubuntu-1004-lts.html

デスクトップにゴミ箱やコンピュータなどを表示


なにげに忘れてしまうので

ここを参考に
https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/HowToShowSpecialIconsOnYourDesktop

classファイルの内容を見る


classファイルの中身を見るには
 $ javap -c (classファイル)
ここを参考に
http://www.atmarkit.co.jp/fjava/javatips/065java004.html

列挙型 enum


列挙型について各言語の違い

●c++
enumあり.列挙型のイメージのとおり使えると思う.構造体みたいな感じ.
http://ja.wikipedia.org/wiki/%E5%88%97%E6%8C%99%E5%9E%8B


●java
enumあり.使い方は全くc++と同じかな
上のURLにjavaのもかいてある


●python
なんか他のと同じような型が組み込みであると思ったけど調べてみるとない...
タプル型と混同していたのかな.

でもenumというのはあったが,AppleEvent オブジェクトがpython3.xから無くなってしまうらしいので使わないほうがいいし,覚えないほうがいいかも.
http://www.python.jp/doc/release/library/aetypes.html#aetypes.Enum

またemurateというものもあったが,ちょっと他のとはイメージが違う.ネットではfor文で回すのが多かった.
http://www.python.jp/doc/release/library/fm.html#fm.enumerate


今回ちょっと調べてみて1番よかったことはwikiで"列挙型"などの言葉を検索すると各言語の違いなども出てくるということだ.
暇なときにでも思いついたヤツを見てみるといいかも(pythonがないのは悲しいがしょうがない)

c++とjavaの違いはいろいろなサイトでも扱っているので情報が多いね
http://ja.wikipedia.org/wiki/Java%E3%81%A8C%2B%2B%E3%81%AE%E6%AF%94%E8%BC%83

http://www.nurs.or.jp/~sug/soft/java/java15.htm

デフォルト引数とオーバーロード


ふと,デフォルト引数をつかってオーバーロードを使ったらかなりめんどくさくなんないか?と思った.

ではここで各言語のデフォルト引数とオーバーロードについてのまとめ

●c++
デフォルト引数,オーバーロード両方あり

よって,このような問題が起こる(関数のデフォルト引数とあいまいさの問題のところ)
http://www.geocities.jp/pcinfo_hp/Cplus2.html

デフォルト引数は使わずオーバーロードを使って行ったほうがいい


●java
デフォルト引数なし.オーバーロードはあり.

これは問題が起こらないがデフォルト引数がないということを覚えておかなくては

さすがめんどくさいが誤解をうまないjava


●python
デフォルト引数はあるが,オーバーロードはなし.

しかし,デフォルト引数でオーバーロードのようなことができる.
http://works.surgo.jp/translation/pyguide.html

まあオーバーロードはないのできちんと見ればわかるかな


ってことで三者三様.やはり,c++が1ばんやっかいだね


じゃあちょっと使っているjythonはどうなっているのだろうか?
たぶん構成はjavaっぽいのでjavaのようになるのだろう

gnomeの初期化

gnomeをいろいろいじくるとおかしくなることがある

自分も上部のパネルを消してしまったり、gnomeとxmonadの両立をさせようとしている時にいろいろおかしくなってしまう。

端末を開くことができればgnomeの初期化ができる。
これはたぶんgnomeすべてをリセットするのでそんなにカスタマイズしていないひとは手軽で確実だろう

/home/username の下の次の隠しファイルを消去してリブートをすればよい
.gnome2_private
.gnome2
.gconf
.gconfd

ただし今までやっていたgnomeの設定は消えてしまうので注意
(パネルに自分でおいたものなど)

参考にしたもの
http://dbweb.0258.net/wiki.cgi?page=Ubuntu%A4%CE%A5%D1%A5%CD%A5%EB%A4%F2%BD%E9%B4%FC%B2%BD

初投稿

今まで楽天ブログで同じ名前でやっていたのですが,googleでもブログが作れるということでつくってみました.

今のところはちょっとこっちを使って,どっちか使いやすい方にまとめたいと思います.