ผู้สนับสนุน

วันจันทร์ที่ ๒๘ กันยายน พ.ศ. ๒๕๕๒

git สำหรับผู้เริ่มต้น(หรือเปล่า?)

อันนี้ผมลองมั่วๆ ทำใช้เองนะ

สร้าง

สร้าง git repository
cd root/of/project
git init-db
เพิ่มเข้า repository

เข้าไปที่ root directory ของ project แล้วรันคำสั่ง

git add .
git commit -a
แสดงความแตกต่างกับ code ก่อนหน้านี้

เช่นเมื่อมีการแก้ไข อะไรไปบางอย่างใน project แล้วอยากเทียบตอนนี้กับการ commit ครั้งล่าสุด

cd root/of/git
git diff
แสดงว่ามีใครแก้ไขอะไรเมื่อไหร่บ้าง
git log

จะแสดงว่ามีการแก้ไขโดยใคร , เมื่อไหร่ และแสดง comment ที่เขียนไว้

ตย. ผลการ git

commit 1cca3256fe2f37338c65aa5df43ed65ccad720b0
Author: Sutean <mossila@localhost.(none)>
Date: Fri Sep 25 16:33:55 2009 +0700

Change text in helloworld

commit 05b9a561259bfbbcf5184be0d0bfa293d804adcc
Author: momo <momo@
localhost.(none)>
Date: Fri Sep 25 12:05:35 2009 +0700

remove while(1) in helloworld

commit 27b96f3b59ebf663d379249b1c853d1ba8490117
Author: momo <momo@
localhost.(none)>
Date: Fri Sep 25 11:58:23 2009 +0700

Init git

Branch

การทำสำเนา source code แยกออกมาจะ code หลัก(master) และเมื่อแก้ไขเสร็จค่อยนำมารวมกันอีกครั้ง(merge)

ตัวอย่างการทำ branch ตั้งแต่เริ่ม project

สร้าง project สำหรับ git

mkdir exam
cd exam
git init-db
cat > hellomaster.c
#include <stdio.h>
int main () {
printf ("Hello master plant.\n");
}
<กด ctrl+d>
git add .
git commit -a -m "Init"

สร้าง branch

ใช้ git branch

ตรวจสอบว่ามี branch อะไรอยู่บ้าง ผลในตอนแรกขณะยังไม่ได้สร้าง branch อะไรเลยจะเป็นแบบนี้

$ git branch
* master


สร้าง branch ด้วยคำสั่ง

$ git branch <ชื่อ branch>
$ git branch hello
$ git brachh
hello
* master
$
ใช้ git checkout

เราสามารถ สร้าง branch และ switch ไปทันทีได้ด้วยคำสั่ง

git branch -b <ชื่อ branch ใหม่>
$ git branch -b hellogit
$ git status
# On branch hellogit
nothing to commit (working directory clean)
$ git branch
hello
* hellogit
master

เปลี่ยน branch

เปลี่ยน branch ด้วยคำสั่ง checkout. เมื่อมีการเปลี่ยน branch ใหม่ครั้งแรกจะมี code เหมือนเดิมทุกประการ

$ git checkout hello
$ git status
# On branch hello
nothing to commit (working directory clean)
$ ls
hello.c

git status ที่ต่อจากบรรทัด git checkout คือการแสดงว่าเราอยู่ที่ branch ไหนในที่นี้คือ branch hello. เมื่อเราลอง ls ดูจะเห็นว่ามี hello.c ของเดิมอยู่ด้วย

ลองแก้ไขใน branch นี้

$ rm hello.c
$ git commit -a -m "remove hello from master"
Created commit 3288d10: delete hello.c of master
1 files changed, 0 insertions(+), 6 deletions(-)
delete mode 100644 hello.c
$ ls
$

ลองลบ hello.c ของ master ทิ้งเลย, แล้วค่อยลอง switch กลับไปที่ master

$ git checkout master
Switched to branch "master"
$ ls
hello.c
$

จะเห็นว่า hello.c ของ master ยังอยู่ :)

revert version of file

เรียกคืนไำฟล์ version ก่อนหน้า

git checkout master~2 <filename>

เรียกไฟล์ของ branch master เมื่อ 2 รุ่นก่อนกลับมา

และในอีกกรณีคือการลบไฟล์ผิด(ยังไม่ได้ commit) สามารถเรียกกลับมาได้แบบนี้

git checkout <filename>

หรือหลายไฟล์ด้วย

git checkout *

วันพฤหัสบดีที่ ๑๐ กันยายน พ.ศ. ๒๕๕๒

Complement join(Outer join) ของ MySql

อยากทำ complement join(outer join) แล้วทำไม่ได้เลยมึนไปพักแล้วก็ได้แบบนี้มา
foo
idfoo_value
210
310

bar
idbar_value
21
31
41
51

จะเอาข้อมูลจาก bar มาแค่นี้ได้อย่างไร
idbar_value
41
51

ทำแบบนี้

SELECT * FROM `bar` WHERE `bar`.`id` NOT IN (SELECT `foo`.`id` FROM `foo`);

ปล. คำสั่งสร้างตาราง foo, bar
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `foo` (
  `id` int(11) NOT NULL,
  `foo_value` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `foo` (`id`, `foo_value`) VALUES
(2, 10),
(3, 10);

CREATE TABLE IF NOT EXISTS `bar` (
  `id` int(11) NOT NULL,
  `bar_value` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `bar` (`id`, `bar_value`) VALUES
(2, 1),
(3, 1),
(4, 1),
(5, 1);


วันพุธที่ ๙ กันยายน พ.ศ. ๒๕๕๒

เอา ubuntu-desktop ออกอย่างสมบูรณ์

หลังจาก ลอง apt-get remove ubuntu-desktop แล้วไม่ได้ผลก็ไปเจอ 
http://psychocats.net/ubuntu/purekde คำสั่งเทพที่เอา pkg ubuntu-desktop ออกทั้งยวง แบบว่า... ยาวคอดๆ เลยแหละเมื่อเอามาแปะ

sudo apt-get remove alacarte app-install-data-partner apport-gtk apturl at-spi binfmt-support bluez-gnome brasero brltty-x11 capplets-data checkbox checkbox-gtk cli-common compiz compiz-core compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-gnome compiz-plugins compizconfig-backend-gconf computer-janitor computer-janitor-gtk contact-lookup-applet dcraw desktop-file-utils dmz-cursor-theme doc-base docbook-xml ekiga eog esound-clients esound-common espeak espeak-data evince evolution evolution-common evolution-data-server evolution-data-server-common evolution-exchange evolution-indicator evolution-plugins evolution-webcal example-content f-spot fast-user-switch-applet file-roller firefox firefox-3.0 firefox-3.0-branding firefox-3.0-gnome-support firefox-gnome-support gamin gcalctool gconf-editor gconf2 gconf2-common gdebi gdm gdm-guest-session gedit gedit-common ggzcore-bin gimp gimp-data gksu gnome-about gnome-accessibility-themes gnome-app-install gnome-applets gnome-applets-data gnome-cards-data gnome-codec-install gnome-control-center gnome-desktop-data gnome-doc-utils gnome-games gnome-games-data gnome-icon-theme gnome-keyring gnome-mag gnome-media gnome-media-common gnome-menus gnome-mime-data gnome-mount gnome-nettool gnome-orca gnome-panel gnome-panel-data gnome-pilot gnome-pilot-conduits gnome-power-manager gnome-screensaver gnome-session gnome-session-canberra gnome-settings-daemon gnome-system-monitor gnome-system-tools gnome-terminal gnome-terminal-data gnome-themes-selected gnome-themes-ubuntu gnome-user-guide gnome-utils gstreamer0.10-alsa gstreamer0.10-gnomevfs gstreamer0.10-plugins-base gstreamer0.10-plugins-base-apps gstreamer0.10-plugins-good gstreamer0.10-pulseaudio gstreamer0.10-schroedinger gstreamer0.10-tools gstreamer0.10-x gtk2-engines gtk2-engines-murrine gtk2-engines-pixbuf gucharmap guile-1.8-libs gvfs gvfs-backends gvfs-bin gvfs-fuse human-icon-theme human-theme indicator-applet indicator-messages jockey-gtk language-selector libart2.24-cil libasound2-plugins libatspi1.0-0 libaudiofile0 libavahi-glib1 libavahi-gobject0 libavahi-ui0 libavc1394-0 libbabl-0.0-0 libbeagle1 libbonobo2-0 libbonobo2-common libbonoboui2-0 libbonoboui2-common libbrasero-media0 libcairo-perl libcairomm-1.0-1 libcamel1.2-14 libcanberra-gtk-module libcanberra-gtk0 libcanberra0 libcdio-cdda0 libcdio-paranoia0 libcdio7 libcompizconfig0 libcroco3 libcryptui0 libdecoration0 libdmx1 libdv4 libebackend1.2-0 libebook1.2-9 libecal1.2-7 libedata-book1.2-2 libedata-cal1.2-6 libedataserver1.2-11 libedataserverui1.2-8 libegroupwise1.2-13 libesd-alsa0 libespeak1 libevdocument1 libevview1 libexchange-storage1.2-3 libexempi3 libflickrnet2.1.5-cil libfreezethaw-perl libgadu3 libgail-common libgail-gnome-module libgail18 libgamin0 libgconf2-4 libgconf2.24-cil libgcr0 libgdata-google1.2-1 libgdata1.2-1 libgdict-1.0-6 libgdiplus libgegl-0.0-0 libggz2 libggzcore9 libggzmod4 libgimp2.0 libgksu2-0 libglade2-0 libglade2.0-cil libglew1.5 libglib-perl libglib2.0-cil libglibmm-2.4-1c2a libglitz-glx1 libglitz1 libgmime-2.0-2a libgmime2.2a-cil libgnome-desktop-2-11 libgnome-keyring0 libgnome-keyring1.0-cil libgnome-mag2 libgnome-media0 libgnome-menu2 libgnome-pilot2 libgnome-speech7 libgnome-vfs2.24-cil libgnome-window-settings1 libgnome2-0 libgnome2-canvas-perl libgnome2-common libgnome2-perl libgnome2-vfs-perl libgnome2.24-cil libgnomecanvas2-0 libgnomecanvas2-common libgnomecups1.0-1 libgnomekbd-common libgnomekbd3 libgnomekbdui3 libgnomepanel2.24-cil libgnomeprint2.2-0 libgnomeprint2.2-data libgnomeprintui2.2-0 libgnomeprintui2.2-common libgnomeui-0 libgnomeui-common libgnomevfs2-0 libgnomevfs2-bin libgnomevfs2-common libgnomevfs2-extra libgp11-0 libgpod-common libgpod4 libgsf-1-114 libgsf-1-common libgsm1 libgtk-vnc-1.0-0 libgtk2-perl libgtk2.0-cil libgtkhtml-editor-common libgtkhtml-editor0 libgtkhtml2-0 libgtkhtml3.14-19 libgtkmm-2.4-1c2a libgtksourceview-common libgtksourceview1.0-0 libgtksourceview2.0-0 libgtksourceview2.0-common libgtkspell0 libgtop2-7 libgtop2-common libgucharmap7 libgvfscommon0 libgweather-common libgweather1 libhesiod0 libidl0 libiec61883-0 libindicate1 libjpeg-progs libkpathsea4 liblaunchpad-integration1 liblircclient0 liblpint-bonobo0 libmbca0 libmetacity0 libmldbm-perl libmono-addins-gui0.2-cil libmono-addins0.2-cil libmono-cairo2.0-cil libmono-corlib2.0-cil libmono-data-tds2.0-cil libmono-data2.0-cil libmono-getoptions2.0-cil libmono-i18n2.0-cil libmono-posix2.0-cil libmono-security2.0-cil libmono-sharpzip2.84-cil libmono-sqlite2.0-cil libmono-system-data2.0-cil libmono-system-web2.0-cil libmono-system2.0-cil libmono0 libmono2.0-cil libnautilus-burn4 libnautilus-extension1 libndesk-dbus-glib1.0-cil libndesk-dbus1.0-cil libnet-dbus-perl libnotify1 liboil0.3 liboobs-1-4 libopal3.6.1 liborbit2 libpam-gnome-keyring libpanel-applet2-0 libpangomm-1.4-1 libpisock9 libpisync1 libpolkit-gnome0 libpoppler-glib4 libportaudio2 libprotobuf3 libproxy0 libpt2.6.1 libpt2.6.1-plugins-alsa libpt2.6.1-plugins-v4l2 libpulse-browse0 libpulsecore9 libpurple-bin libpurple0 librarian0 librsvg2-2 librsvg2-common libschroedinger-1.0-0 libscim8c2a libsexy2 libsgutils1 libshout3 libsilc-1.1-2 libsndfile1 libsoup-gnome2.4-1 libsoup2.4-1 libspeexdsp1 libsqlite0 libstartup-notification0 libtdb1 libtie-ixhash-perl libtotem-plparser12 libtrackerclient0 libunique-1.0-0 libuuid-perl libv4l-0 libvisual-0.4-0 libvisual-0.4-plugins libvte-common libvte9 libwmf0.2-7-gtk libwnck-common libwnck22 libxml-twig-perl libxml-xpath-perl libxres1 libzephyr3 metacity metacity-common mobile-broadband-provider-info mono-2.0-gac mono-2.0-runtime mono-common mono-gac mono-jit mono-runtime mousetweaks mtools nautilus nautilus-data nautilus-sendto nautilus-share network-manager-gnome notification-daemon notify-osd onboard openoffice.org-gnome openoffice.org-gtk pidgin pidgin-data pidgin-libnotify pidgin-otr pkg-config policykit-gnome pulseaudio pulseaudio-esound-compat pulseaudio-module-gconf pulseaudio-module-hal pulseaudio-module-x11 pulseaudio-utils python-brlapi python-cairo python-fstab python-gconf python-gdata python-glade2 python-gmenu python-gnome2 python-gnome2-desktop python-gnomecanvas python-gst0.10 python-gtk2 python-gtkhtml2 python-gtksourceview2 python-launchpad-integration python-notify python-pkg-resources python-pyatspi python-pyorbit python-rdflib python-sexy python-virtkey python-vte rarian-compat rhythmbox rss-glx scim scim-bridge-agent scim-bridge-client-gtk scim-gtk2-immodule scim-modules-socket screen-resolution-extra screensaver-default-images seahorse seahorse-plugins sg3-utils sgml-data software-properties-gtk ssh-askpass-gnome synaptic syslinux system-config-printer-gnome system-tools-backends tangerine-icon-theme tomboy totem totem-common totem-gstreamer totem-mozilla totem-plugins transmission-common transmission-gtk tsclient ubufox ubuntu-artwork ubuntu-desktop ubuntu-docs ubuntu-gdm-themes ubuntu-sounds ubuntu-system-service ubuntu-wallpapers update-manager update-notifier usb-creator usplash-theme-ubuntu vinagre vino whois xbitmaps xdg-user-dirs-gtk xsane xsane-common xscreensaver xscreensaver-data xscreensaver-gl xsltproc xterm xulrunner-1.9 xulrunner-1.9-gnome-support yelp zenity && sudo apt-get autoremove && sudo apt-get autoclean

อันหลังสองอันนี้ใครจะไ่ม่ใส่ก็ได้นะ แต่ถ้าใส่จะเกลี้ยงมาก

วันอังคารที่ ๘ กันยายน พ.ศ. ๒๕๕๒

find replace text หลายไฟล์หลาย directory

#! /usr/bin/sh
for file in `find . -type f`
do sed -i 's/เก่า/ใหม่/g' $file
done


http://forums.devshed.com/unix-help-35/how-to-use-sed-to-search-replace-files-throughout-a-184662.html

แล้วจทำให้มัน print ผล หรือ print เพื่อ confirm ก่อนไงอ่าาาาา TT^TT

วันจันทร์ที่ ๗ กันยายน พ.ศ. ๒๕๕๒

ติดตั้ง codigniter

บน windows
1. download จาก http://codeigniter.com/download.php
2. ติดตั้ง appserv
3. เอาไฟล์ zip ที่โหลดมาแตกไปไว้ที่ที่ install appserv (โดยทั่วไปเป็น C:\appserv\www\)
4. เปลี่ยนชื่อ dir Codeigniter/ >> myproject/ อะไรทำนองนี้ 
5. เปิดไฟล์ system/application/config/config.php แก้ base_url เป็น http://localhost/myproject/

ปล. ที่เหลือลองดูตาม video Hello-form-~~.avi http://dl.getdropbox.com/u/599479/Videos/code.rar

บน linux 
1-2. คล้ายๆ กันกับ windows แตกต่างกันไปแต่ละ dist
3. แตกไฟล์ไว้ที่ /var/www หรือ public_html
4. เหมือน windows
5. เหมือน windows ; อาจจะเป็นประมา๊ณว่า http://hostname.domain.com/~username/myproject, หรือ http://name.domain.com/myproject, http://domain.com/ , ... แล้วแต่คนจะตั้งแล้วแหละ

วันอังคารที่ ๑ กันยายน พ.ศ. ๒๕๕๒

เขียน my_helper ให้โหลด helper ใน Codeigniter

<?php
//my_datetime_helper.php in system/application/helper/         
function unix_time_to_mysql_time($time){
   $ci=& get_instance();
   $ci->load->helper('date');
   $datestring = "%Y-%m-%d %h:%i:%s";
   $time = now();
   return mdate($datestring, $time);
}
?>
ง่ายได้อีก! แค่ไม่รู้เท่านั้นเอง และก็ไม่รู้จะ search ด้วย keyword อะไร
ที่มาจร้า stackoverflow ,ci user guide-> create_lib
keyword (ที่ทำให้หาหน้า stackoverflow เจอ) : helper load other helper codeigniter