วันจันทร์ที่ 19 กันยายน พ.ศ. 2559

อยู่เหงาๆ เลาไปเที่ยว -- Museum of Contemporary Art Bangkok พิพิธภัณฑ์ศิลปะไทยร่วมสมัย


สวัสดีจย้ะ วันนี้เลาจะพาไปชม พิพิธภัณฑ์ อีก พิพิธภัณฑ์หนึ่ง หลังจากที่เคยพาไป Museum Siam, นิทรรศน์รัตนโกสินทร์, พิพิธภัณฑ์วัดไตรมิตร, BACC, และ Jim Thomson Museum มาแล้ว

นั่นก็คือ Museum of Contemporary Art Bangkok หรือ MOCA ของเจ้าสัว บุญชัย เบญจรงคกุล แห่ง DTAC นั่นเองน้ะจ้ะ


ต้องขออารัมภบทว่า เราเองได้รู้เกี่ยวกับ พิพิธภัณฑ์แห่งนี้มานานพอสมควรแล้ว ว่า เป็นพิพิธภัณฑ์งานศิลป์สะสมของท่านเจ้าสัว โดยเปิดโอกาสให้คนทั่วไปได้เข้ามาเยี่ยมชม
ติดตรงที่ราคาค่าเข้าแพงไปนิสนึง แต่เลาก็เข้าใจ เพราะว่า รูปแต่ละรูป ราคาก็ไม่ใช่น้อยๆเลยทีเดียว


วันนี้มีโอกาสที่เขาเฉลิมฉลอง อาจารย์ ศิลป์ พีระศรี ( Silpa Bhirasri ) คนเบี้ยน้อยอย่างเลา จึงได้มีโอกาสเข้าไปชื่นชมความงามของจักรวาลบ้าง

MOCA Bangkok

พิพิธภัณฑ์มีห้าชั้น ความรู้สึกแรกที่เห็นนี่ค่อนข้างตกใจเพราะเป็นตึกใหญ่โตทีเดียว
ไปจากอนุสาวรีย์หรือจตุจักร นั่งรถทางวิภาวดีไปลง ตรงข้าม ม เกษตร แถวๆ โรงพยาบาลวิภาวดี แล้วเดินอีกนิดหน่อย
ต่อไปน่าจะสะดวกเพราะมี รถไฟฟ้าสายสีแดง สถานีบางเขน อยู่ไม่ไกลมาก


ภายในบรรจุ งานศิลป์ ของ ศิลปินแห่งชาติ ผู้ยิ่งใหญ่หลายท่าน เช่น ถวัลย์ ดัชนี, อังคาร กัลยาณพงษ์, ธงชัย ศรีสุขประเสริฐ, เฉลิมชัย โฆษิตพิพัฒน์, และ อื่นๆ อีกมากมาย


รวมถึงมีงานของฝรั่ง ในห้อง Richard Green ซึ่งเป็นห้องเดียวในพิพิธภัณฑ์ที่ห้ามถ่ายรูป

ภาพ ไตรภูมิ สุดยอดอลัง ฮายโซว อำมาตย์ อิไล้ ขนาดตึกสองสามชั้น โดย สามศิลปิน
สมภพ บุตราช, ปัญญา วิจินธนสาร, และ ประทีป คชบัว

รูปปั้นเทวดาตื่นตกใจ Salvador Dali

รูปปั้น นมหลายนม ประติมากรรมดอกบัว ที่ใครๆมาที่นี่ก็ต้องถ่าย 

Museum of Contemporary Art, Bangkok Thailand

เวลาทำการ
อังคาร - ศุกร์    10.00 - 17.00
เสาร์ - อาทิตย์  11.00 - 18.00
หยุดวันจันทร์

ค่าเข้าชม
บุคคลทั่วไป 250 บาท .............. ผู้ใหญ่ 1 คน + นักเรียน 1 คน ....... 300 บาท
นักเรียน/นักศึกษา 100 บาท...... ผู้ใหญ่ 2 คน + นักเรียนไม่เกิน 3 คน ....... 650 บาท
บุคคลที่ได้รับยกเว้นค่าเข้าชม : เด็กอายุต่ำกว่า 13 ปี / ผู้ใหญ่อายุเกิน 60 ปี / นักบวช / ผู้ทุพพลภาพ / มัคคุเทศก์

รายละเอียดดูจาก Official Website น่าจะอัพเดตกว่า

วันเสาร์ที่ 16 กรกฎาคม พ.ศ. 2559

รีวิว iPhone SE ฉบับเด็กเห่อหมอย

ปัจจุบันใช้ Samsung Galaxy Note 1 ที่ซื้อมาเพราะว่า สนับสนุน Developer ที่ไปแข่งเขียนโปรแกรม กับอีกเหตุผลนึงคือ จอมันใหญ่
ใช้จนมันจะออก Samsung Galaxy Note 7 แล้ว
เดินหาปลอกมือถือของ Galaxy Note 1 ทั้ง MBK และ เสือป่า ก็ไม่มีขาย จนต้องตัวเปล่าเล่าเปลือยมันมาได้สักระยะนึง
อีกทั้งฟิล์มกันรอยก็มีฟองอากาศ แถมซนไปแกะมันและติดเข้าไปใหม่ แต่ด้วยการที่มันเป็นฟิล์มกระจก พอติดเข้าไปใหม่เลยดูเหมือนหน้าจอแตกยับ ทั้งๆที่ที่แตกจริงๆ คือฟิล์มกระจก
แบตเริ่มเน่า เล่นแบบไม่ได้ใช้งานอะไรเท่าไหร่ ก็หมดก่อนหนึ่งวันแล้ว
บางทีอยู่ๆก็เครื่องร้อนกินแบตไปเฉยๆ ชาร์จเข้าบ้างไม่เข้าบ้าง
.
เหลือทนมากเลยตัดสินใจเปลี่ยน
ก็ตัดสินใจว่าจะเอามือถืออะไรดี
ตอนแรกเล็ง xiao mi ซึ่งถ้าซื้อตอนนี้ก้อน่าจะเป็น mi5
แต่ดันผิดหวังกับข่าวลือที่แม่มบอกว่าจะออก laptop ที่บางเหมือน macbook air แต่ก้อไม่ยอมออก
และตอนหลังได้ข่าวว่า ผลประกอบการไม่ค่อยดี แล้วก้อคนไม่ค่อยใช้ หาศูนย์ซ่อมยาก บลาๆๆ
.
อีกอันนึง คือ iPhone ซึ่งตอนนี้ทุกคนก็กำลังรอคอย iPhone 7 ยับ
ซึ่งน่าจะออกเดือนเก้านี้ แถมยังมีข่าวลือหลุดโน่นหลุดนี่ออกมามากมายก่ายกอง
แต่ก้อดันผิดหวังกับการรอคอย macbook ตั้งแต่เดือน 9 ปีก่อน รองานเดือน 3 ก็ไม่มา
นึกว่าจะออกตอนงานเดือน 6 แม่มก้อไม่มาอีก
ทิมคุก จะ slowlife เกินไปแล้ว


ความห่วยของ iPhone รู้ๆกันอยู่ตอนมันเก่า
จากประสบการณ์การใช้ iPod Touch รุ่น UI แบบสตีฟจ๊อบ ที่ไปขนมาจากอเมริกา ตั้งแต่สมัย iPhone 3G ที่ตอนนั้น iPhone ไม่เข้าไทย ถ้าซื้อ iPhone ตอนนั้นต้องแหกคุกเพื่อให้ใช้กับเครือข่ายในไทยได้



ความห่วยของมันที่เห็นได้ชัดตอนมันเก่า คือ พออัพ iOS ไปเลื่อยๆ iOS ใหม่จะกินทรัพยากรในเครื่องมากซะจนทำทุกอย่างช้าไปหมด
อีกทั้งพอนานไปจะโดนทางบริษัทแม่ทิ้ง อัพ iOS ไปมากกว่านี้ไม่ได้
และถ้าลบ app ไปแล้ว ลงใหม่ ยังไงก็จะไม่ได้ เพราะว่า app มัน require iOS version ใหม่ๆ


แต่ก้อยังใช้จนถึงทุกวันนี้ ใช้ฟังเพลงตอนไปวิ่ง jogging ซึ่งช่วงนี้ก็ไม่ค่อยได้ไปหรอก เพราะว่า ฝนตก (อ้าง)
app ที่ใช้ได้ส่วนใหญ่จะเป็น app ระดับเทพเจ้า ที่คนใช้กันค่อนโลก เช่น facebook, twitter, line, angry bird, temple run, plant v.s. zombie, clash of clan
ส่วนอิแอบ กะโหลกกะลา ส่วนใหญ่จะไม่ support ถ้า iOS เวอร์ชั่นเก่ามากๆ
ใช้ทวิตเตอร์บนไอโฟนเวอร์ชั่นเก่าได้มาเรื่อย จนกระทั่ง วันที่ CEO มันโดนแฮก ทวิตเตอร์ไป นั่นแหละ
แม่มก็โหลด timeline บน app version เก่าไม่ขึ้นอีกต่อไป เซงเป็ดมาก
.
ประกอบกับมือถือเน่าๆ เลยชั่งดูสองเจ้า
สุดท้ายก้อเลือก iPhone เพราะว่ามันออกทีหลัง น่าจะตกรุ่นหลังกว่า ( xiaomi ออกต้น มีนา แต่ iPhone SE ออกปลาย มีนา )
iPhone SE มีสองรุ่น คือ 16 GB กับ 64 GB ต้องขอบคุณคนหมวกฟ้า ที่เตือนในคลิปรีวิวว่า ซื้อ 64 GB เหอะ เพราะที่มันไม่พอ ซึ่งไปดูเครื่องโชว์ตามห้างแล้วก็จริง เพราะเครื่องโชว์แม่มลง app ไม่กี่ตัว กับมีไม่กี่รูป แต่ดันเหลือที่แค่ หลัก MB
ซึ่งนั่นก็คือ ตกหลุมพรางของ ทิมคุก เรื่องการตั้งราคาเต็มๆ แต่ก็ยอมก็ได้ฟร่ะ
รีวิวของคนอื่น เหมือนเอา spec มาพูดใหม่ ไม่ได้มีเนื้อหาสาระอะไรมากมาย
.
มาดูข้อดีของ iPhone กันลีก่า
1. Hardware -- มันชาร์จมาให้เลย
ซื้อมาแล้วชาร์จมาให้เลย นั่นหมายความว่า แกะกล่องแล้ว ใช้ได้เลยจ้า
เป็นประสบการณ์แปลกใหม่ที่ต่างกับการซื้อเครื่องใช้ไฟฟ้าอื่นๆ
บางคนเถียงว่า ผลิตภัณฑ์ของผลไม้แหว่งเป็นอย่างงี้หมด แต่นี่เป็นเครื่องแรกของเลาจ้า
iPod ล่ะ จำไม่ได้ -*- เพราะตอนนั้นกำลังจิตหงุดเงี้ยวกับ กระจกที่โฆษณาว่า เป็นกระจกเฮลิคอปเตอร์ แต่ดันมีรอย แค่ใส่ในกระเป๋ากางเกงไม่กี่วัน
ชาร์จมาให้เลยก็ดี เพราะตอนแรกก็ทำใจไว้แล้วว่า จะใช้มือถือไม่ได้เลยทั้งวัน เพราะซื้อแล้วต้องไปที่อื่นอีกทั้งวัน
ถ้าเป็นยี่ห้ออื่นก็ต้องรอกลับบ้าน แล้วรอ ชาร์จครั้งแรกเป็นชาติก่อนถึงจะใช้ได้
2. Hardware -- ที่เยอะมาก
ก็จ่ายแพงกว่าอะนะ
ของ Android แม่มต้องซื้อ เมม มาใส่เพิ่ม
แถมยังต้องไปจัดการ move app เวลาลง
บาง app ก็ move ไป SD Card ที่ซื้อมาไม่ได้
กินที่เยอะ ก็ลงโปรแกรมไม่ได้ บอกที่ไม่พอ น่าหงุดหงิดเป็นที่สุด
3. Software -- app Music ลงมาให้เลย
ถ้าเป็น andriod ต้องไปลงเพิ่ม แถมยังต้องไปเลือกอีกว่า จะใช้ตัวไหน แถมยังต้องไปจัดการเรื่อง path
และยังมีความกาก ว่า software บางตัว แม่ม port กันมาเอง เป็น beta ไม่รู้ว่าจะใช้แล้วพังไม่พัง

นี่คือข้อดีของ iPhone SE
ขนาดเล็ก มาก
เล็กแต่แรง
คือของเก่า ใช้ Galaxy Note จอบะเริ่ม แล้วก็ย่อมาตัวเล็กเลย
กระเป๋ารู้สึกเบาเหมือนไม่ได้ใส่อะไรเลย เพราะมันเบา และ กระเป๋าก้อไม่ตุงมาก

ข้อเสีย ของ iPhone SE ที่ไม่ชอบ คือ wallpaper default แม่มเป็นเหมือนกระจกแตก ให้ความรู้สึกเหมือนหน้าจอแตก แต่ก็เปลี่ยนไปแล้ว
และอาจจะมีข้อเสียตอน iPhone เก่า เหมือนอย่าง iPod ดังที่บอกไปแล้ว










วันอาทิตย์ที่ 12 มิถุนายน พ.ศ. 2559

อยู่เหงาๆ เราไปเที่ยว - เจริญกรุง ( Chareon Krung )

วันนี้เราจะมาเที่ยวเจริญกรุงกันน้ะจย้ะ
ถนนเจริญกรุงนี่ยาวตั้งแต่ถนนสนามไชยถึงแม่น้ำเจ้าพระยาที่ถนนตก
เป็นถนนสายแรกในไทย สร้างตั้งแต่สมัยรัชกาลที่ 4

ถนนเจริญกรุง
ซึ่งหลายช่วงก็คู่ขนานไปกับ แม่น้ำเจ้าพระยา จ้า

ถนนเจริญกรุง เลียบ แม่น้ำเจ้าพระยา

ซึ่งถนนเจริญกรุง เป็นย่านที่มี ศิลป วัฒนธรรม ต่างๆ เกิดขึ้นมากมาย ตั้งแต่ อดีต จนถึงปัจจุบัน รวมถึงงานออกแบบ design ต่างๆ ซึ่งเราแอบได้ยินมาว่า TCDC (Thailand Creative & Design Center) - ศูนย์ความรู้ด้านการออกแบบ และความคิดสร้างสรรค์ 
ที่เดิมอยู่ที่ เอ็มโพเรียม นั้น เตรียม ย้ายมาที่ ไปรษณีย์กลาง บางรักแล้วน้ะจย้ะ 

รอบๆถนนเจริญกรุง มีที่เที่ยว มากมายก่ายกอง รวมถึงที่เที่ยวใกล้ๆ ถนนเจริญกรุง นั้น มีมากมายนัก
ถ้าเริ่มจากที่นักท่องเที่ยวชอบมาก นั่นก็คือ วัดพระแก้ว ( 玉佛寺 ) และ พระบรมมหาราชวัง ( 大皇宫 )
รวมถึง วัดโพธิ์ ที่ตอนนั้น โอบาม่ามาด้วยนะ

 ท่ามหาราชก็อยู่ใกล้ๆ ถนนเจริญกรุง จ้ะ

ท่ามหาราช 



 ถ้ามาแถวสุรวงศ์ ก็มีร้านอาหารญี่ปุ่น อร่อย หนึ่งร้าน
ว่ากันว่า เป็นร้านอาหารญี่ปุ่น ร้านแรกในไทย
นั่นก็คือ ร้าน Hanaya นั่นเอง

เมนูที่เราชอบคือข้าวหน้าแกงกะหรี่เนื้อ
เนื้อนี่มาเป็นชิ้น ไม่ใช่เศษเนื้อน้ะจ้ะ

 ข้าวแกงกะหรี่ ร้าน ฮานะย่า ( Hanaya )

ไปรษณีย์กลาง ปรับปรุง ใหม่แล้ว แอบดูดีขึ้นมาก
จากที่ส่งไปรษณีย์เต็มชั้น กลายเป็น แยกที่ส่งไปรษณีย์ไปข้างๆ
แถมเขาทำเป็นห้องจัดเลี้ยง อะไรทำนองนั้นด้วย


ไปรษณีย์กลาง จย้ะ

ที่ซอยข้างๆ ไปรษณีย์กลางนั้น มีร้านอาหารแขก ร้านหนึ่ง ชื่อว่า Salim Restaurant
ข้าวหมกไก่จะไม่หวานเหมือนที่อื่นๆ

อย่างอื่นก็อร่อยนะ อย่างเช่น แกง กับ แป้งนัน สามารถเอา Lassi มาตัดได้ดีมาก
อยู่ซอยเดียวกันกับ ที่เขามาวาดรูปบนกำแพงนั่นแหละจ้ะ

ข้าวหมกไก่หลากสี จาก ร้าน Salim Restaurant 

มาตามทางเรื่อยๆ จะเจอ อาสนวิหารอัสสัมชัญ ซึ่งตั้งอยู่ใกล้ๆ กับโรงเรียน อัสสัมชัญ บางรัก จ้า

 อาสนวิหารอัสสัมชัญ เจริญกรุง บางรัก


แถวๆนัั้นจะมี Roof Top Bar ด้วยนะ อยู่ชั้น 63
ร้านรู้สึกจะชื่อ Sirocco อยู่ตรงตึก State tower 
ป.ลิง ต้องใส่เรียบร้อยน้ะจ้ะ ถึงจะขึ้นไปได้  ขาสั้นรองเท้าแตะ นี่ขึ้นไม่ได้จ้า


เลยมาอีกหน่อย ก็ ท่าเรือสาทร  กับ สถานี รถไฟฟ้า สะพานตากสินแล้ว

BTS สถานี สะพานตากสิน 


จากเพจ วันเดียวจบ มีร้านยาร้านนึง น่าสนใจมาก 
ยาจีน ยาฝรั่ง มีครบ
อยู่ เจริญกรุง 63




 ร้านขายยา เจริญกรุง 63

ร้านสวยแถมยาดีอีกต่างหาก แนะนำเบยแจ้

 ร้านขายยา เจริญกรุง

รูปของร้านยา เลาก็ขโมยมาจาก เฟซบุ๊คของร้านขายยา นั่นแหละ

ร้านยาจีน เจริญกรุง

ซึ่งถ้าผ่านมาโซน เจริญกรุง 63
จะพบว่า มีร้านข้าวมันไก่ อร่อยหลายร้าน
มีทั้ง เม้งโภชนา ซุ่ยเฮงโภชนา หรือ ตรงปากซอยเจริญกรุง 63 ก็มีอีกสองร้าน


ข้าวมันไก่ เจริญกรุง

ที่ปากซอยเจริญกรุง 65 มีร้านอาหารชื่อ แจ่มใส
เป็นร้านอาหารตามสั่ง
นมสด กับ ขนมปังปิ้งอร่อยดี
ขนมปังปิ้งเขาจะแปลกกว่าที่อื่น เพราะว่า เป็นแบบกลม
ถ้าไม่เคยลองไปโดนกันได้จ้า

พิซซ่า ร้านแจ่มใส เจริญกรุง 65 

เลยมาอีกนิด แถวๆ เจริญกรุง 77 มีีร้านติ๋มซำ ชื่อ ตวง ติ๋มซำ
ไส้หวานไข่เค็มลาวา อร่อยดี เยิ้มๆ


ซาละเปาลาวา จากร้าน ตวงติ๋มซำ

ถ้าชาวต่างชาติมาแล้วต้องการไปตลาดกลางคืน ( Night Bazaar ) พาไป Asiatique ก็ไม่เลว
คราวก่อน เพื่อนคนสิงคโปร์ มาก็พาไปที่ Asiatique เหมือนกัน
เขาชมว่า มีอะไรหลายอย่างดี เช่น มวยไทย, calypso, หรือ แม้กระทั่งวันก่อนไปก็มี street show หลายอย่าง

 Asiatique night bazaar

ตอนหลังๆ เอเชียทีค มี ชิงช้าสวรรค์ นี่เป็นจุดสังเกตได้ดีมาก

 ถนนเจริญกรุง มองไปเห็น วิวเอเชีย ทีค น้ะจ้ะ


จบแล้วจ้ะ

ถ้ามีอะไรตกหล่นไป หรือมีที่แนะนำ คอมเมนท์ บอกไว้ได้น้ะจ้ะ

วันอาทิตย์ที่ 10 เมษายน พ.ศ. 2559

วันอาทิตย์ที่ 27 มีนาคม พ.ศ. 2559

ลองเล่น crossword cheater โปรแกรมโกง เกมส์ครอสเวิร์ด

ตั้งแต่สมัยมัธยมต้น ที่ได้เล่น crossword ในหนังสือพิมพ์ หลังจากนั้นก็ไม่ได้เล่นอีกเลย

ตอนนั้นจำได้ว่า คำที่ยากๆ แอบขี้โกงโดยใช้ dictionary ของ ส เสถบุตร

เขามีฟีเจอร์ให้หาได้

พอโตมา ใช้งาน บน linux มากกว่า windows คิดถึงโปรแกรม dictionary ของ ส เสถบุตร ที่มีบน windows ก็เลยลองทำ dictionary ไว้ใช้เอง

แถมใส่ฟีเจอร์อันเดียวกันลงไป 

ก็ไม่เคยได้ลองใช้สักที

จนกระทั่งวันหนึ่ง เพื่อนส่งรูปด้านล่างนี้มาทาง line 

ก็ได้ลองดู


ปรากฎว่าใช้ได้ดีเหมือนกัน ลองกดดูด้านล่างได้

นอกจากนี้ ยังมี ฟีเจอร์อื่นๆ อีกน้ะจ้ะ ดูได้จาก หน้า Tips

แต่ฟีเจอร์ไม่อลังเท่า dictionary ไทยอังกฤษ อังกฤษไทย ที่บอกมาแล้ว 

ลองไปเล่นได้ จย้ะ 


วันพฤหัสบดีที่ 17 มีนาคม พ.ศ. 2559

มาเป็นสุดยอดมนุษย์เงินเดือนกันเถอะ : โปรแกรมนับถอยหลังวันหยุด ( Super Salaryman : Holiday Countdown App )


จากการสังเกตมาหลายปี มนุษย์เงินเดือน ชอบนับถอยหลังวันหยุดกัน ( โดยเฉพาะ วันหยุดยาว )
เลยลองจัดทำ Application สุดยอดมนุษย์เงินเดือนขึ้นมา นับถอยหลังวันหยุด ซะเลย

support 4 ภาษา ใน 6 สถานที่
Super Salaryman : Holiday Countdown App ( Thailand ) http://officesalaryman.appspot.com/th.th
Super Salaryman : Holiday Countdown App ( China ) http://officesalaryman.appspot.com/zh.china
Super Salaryman : Holiday Countdown App ( U.S. ) http://officesalaryman.appspot.com/en.usa
Super Salaryman : Holiday Countdown App ( India ) http://officesalaryman.appspot.com/en.indian
Super Salaryman : Holiday Countdown App ( Japan ) http://officesalaryman.appspot.com/ja.japanese
Super Salaryman : Holiday Countdown App ( Singapore ) http://officesalaryman.appspot.com/en.singapore

แถมยังมีทวิตเตอร์ สำหรับ ทวีต นับถอยหลังแม่มทุกวันอีกต่างหาก

มนุษย์เงินเดือนแม่ม โหดสัส

ไปตาม follow กันได้
@USSalaryman
@SalarymanIndia
@THSalaryman
@CNSalaryman
@JPSalaryman






วันอังคารที่ 5 มกราคม พ.ศ. 2559

shell script

Function
#!/bin/bash
#!/bin/bash
function test {
   echo "test $1 $2 $3";
}
test a b c
 
Inner Function
$ outerfunc1() {
> innerfunc() { echo "Running inner function #1"; }
> echo "Running outer function #1"
> }
$ outerfunc2() {
> innerfunc() { echo "Running inner function #2"; }
> echo "Running outer function #2"
> }
$ # At this point, both outerfunc1 and outerfunc2 contain definitions of
$ # innerfunc, but since neither has been executed yet, the definitions
$ # haven't "happened".
$ innerfunc
-bash: innerfunc: command not found
$ outerfunc1
Running outer function #1
$ # Now that outerfunc1 has executed, it has defined innerfunc:
$ innerfunc
Running inner function #1
$ outerfunc2
Running outer function #2
$ # Running outerfunc2 has redefined innerfunc:
$ innerfunc
Running inner function #2

ref : http://stackoverflow.com/questions/8426077/how-to-define-a-function-inside-another-function-in-bash

: NOOP : No-op command
it's exit status is true (0)
http://unix.stackexchange.com/questions/37473/what-is-the-utility-of-the-command-in-shell-scripting-given-that-it-explicitl

exit N
exit 0 : normal shell exit
ref: http://bash.cyberciti.biz/guide/Exit_command

If
 if [[ true = true ]]; then
  echo "y";
 elif [[ true = false ]]; then
  :; 
 else
  echo "n";
 fi
 
Case
case "$1" in
whatever|whatever2)

;; 
*)

;; 
esac



For
for (( ; $#; )); 
do
$1
done

for A in "1 2 3"; do
 echo $A # 1 2 3 
done 
echo $A # 1 2 3
for A; do
    $A
done

Local variable
local var1 var2=()
var2 = empty array
Options : -i : make NAMEs have the "integer" attribute -a : make NAMEs indexed arrays (removing with +a is valid syntax, but leads to an error message) ref : http://unix.stackexchange.com/questions/202302/variable-definition-in-bash-using-the-local-keyword , http://wiki.bash-hackers.org/commands/builtin/declare  

Dollar sign
$@ : all of the parameters passed to the script
Example :
If you call `./someScript.sh` foo bar then `$@` will be equal to `foo bar`.
ref : http://stackoverflow.com/questions/9994295/what-does-mean-in-a-shell-script

$# : number of args
ref : http://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables

&2
echo "hey" >&2
print hey to &2:stderr

ref : http://stackoverflow.com/questions/23489934/echo-2-some-text-what-does-it-mean-in-shell-scripting

[[ ]],  (( ))

 ref : https://robots.thoughtbot.com/the-unix-shells-humble-if
, http://mywiki.wooledge.org/BashFAQ/031

[[ -d "/path" ]] : check if directory exists
[[ ! -d "$DIRECTORY" ]] : check if directory does not exists
[[ -r "/path" ]] : is read-only
[[ -x "/path" ]] : is executable
ref : http://stackoverflow.com/questions/59838/check-if-a-directory-exists-in-a-shell-script
, http://www.freeos.com/guides/lsst/ch03sec02.html

&&, ||
&& will only be evaluated if the exit status of the left side is zero
|| will evaluate the right side only if the left side exit status is nonzero

ref : http://unix.stackexchange.com/questions/24684/confusing-use-of-and-operators

shift
shift is a bash built-in which kind of rotates the arguments. Given that the arguments provided to the script are 3 available in $1, $2, $3, then a call to shift will make $2 the new $1. a shift 2 will shift by two makeing new $1 the old $3.
ref : http://unix.stackexchange.com/questions/174566/what-is-the-purpose-of-using-shift-in-bash-scripts

pushd, popd : directory stack
ref : http://unix.stackexchange.com/questions/77077/how-do-i-use-pushd-and-popd-commands

Read
read from stdin
-a : read the data word-wise into the specified array .
Example : use read to split string

read -r col1 col2 col3 <<< "one two three" 
printf "col1: %s col2: %s col3 %s\n" "$col1" "$col2" "$col3"
Example : changing seperator by using IFS variable
IFS=":" 

or
read -a VARNAME <<< "whatever whatever"
or
echo "press any key to continue"
read -s -n 1 -p

read from file
exec 3<$FILE # redirect file to FD 3
while read -u 3 -r line
do
 echo $line
done

or

while read -u 3 line
do
    command1
    command2
done 3< <(tail -f /path/file.txt)


ref : http://wiki.bash-hackers.org/commands/builtin/read
, http://bash.cyberciti.biz/guide/Reads_from_the_file_descriptor_%28fd%29
, http://stackoverflow.com/questions/27352868/bash-file-descriptor-3-and-while-read-line
$PWD
present working directory

Array
${ARR_NAME[@]} 
If quoted, @ expands to all elements individually quoted.
Example :
for v in "${ARR_NAME[@]}" do
$v
done 
unset ARRAY[N] : Destroys the array element at index N
http://wiki.bash-hackers.org/syntax/arrays

Int
i++
Find -or
find /path/ -name '*.png' -or -name '*.jpg'
mkdir -p -p Will create nested directories, but only if they don't exist already.
mkdir -p /foo/bar/baz  # creates bar and baz within bar under existing /foo
http://superuser.com/questions/165157/what-does-mkdir-p-flag-do

[[:alnum:]_]
letter, digit, or underscore
Example
If [[ $X != [[:alnum:]_] ]]

eval
eval - construct command by concatenating arguments

foo=10 x=foo
y='$'$x
echo $y # $foo
eval y='$'$x
echo $y # 10

ref : http://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash

วันพุธที่ 23 ธันวาคม พ.ศ. 2558

ant

Dir
<mkdir dir="${what.ever.dir}">
<delete dir="${what.ever.dir}">
<delete includeemptydirs="true">
     
    </delete>
<move file="file/name" tofile="file/name"></move>
<move todir="dest/dir">
     <fileset dir="whatever/dir/it/is">
      <include name="**/*" />
     </fileset>
    </move>
<copy overwrite="true" failonerror="false" file="whatever/file" tofile="whatever/file" />
check file exists
<available file="whatever/file" property="property.is.set.to.true.if.file.exists"/>
Replace content inside the file
<replace file="file/to/replace">
     <replacefilter token="FindWord" value="wordToReplace" />
    </replace>
Execute command
<exec executable="${whatever.command}" failonerror="true" dir="whatever" outputproperty="whatever.property" >
     <arg value="--whatever" />
    </exec>
If
<if>
      <not>
      <equals arg1="${if.this}" arg2="equal.this" />
      </not>
      <then>
</then>
<else>
</else>
</if>
Call the other ant
<target name="newTarget" depends="otherTarget,otherTarget2" />
or
<antcall target="whatever">
     <param name="paramname" value="value" />
    </antcall>
or
<ant dir="whatever/dir" target="executionTarget"/>
define new tag with Macrodef
<macrodef name="macrodefName">
  <attribute name="paramname" />
                ... do whatever @{paramname}...
                </macrodef>
usage
<macrodefName paramname="whatever"/>
Condition set value to the property if true or false
<condition property="whatever.property.to.set" value="value.if.true" else="value.if.false">
      <or>
             <not>
                  <length string="blabla" when="gt" length="10"/>
             </not>
             <isset property="whatever"/>
      </or>
</condition>
PropertyCopy
<propertycopy name="name" from="another.prop"/>
PropertyRegex Regular expression operations on an input string, and sets the results to a property
<propertyregex property="pack.name"
              input="package.ABC.name"
              regexp="package\.([^\.]*)\.name"
              select="\1"
              override="true" />
result : pack.name=ABC var
<var name="whatever.name" value="val" />
remove property as it never been set
<var name="x" unset="true"/>
javac
<javac srcdir="src.dir" destdir="build.dir" />
jar
<jar destfile="dest.jar.name">
 <fileset dir="build.dir" includes="**/*.class" />
 <fileset dir="conf.dir" includes="*.properties" />
</jar>
<jar update="true" destfile="dest.jar.name" basedir="whatever_base_dir" includes="whatever.properties, whatever2.properties, can/be/directory/" />
for
<for list="${lists}" param="whateverparam" parallel="true" threadCount="4" keepgoing="false">
</pre>
sleep
<sleep seconds="5"/>
Timestamp to property
<tstamp>
   <format property="whatever.property" pattern="MM/dd/yy HH:mm:ss" offset="-30" unit="minute"/>
  </tstamp>
Raise build error
<fail unless="this.property.is.false">Error message</fail>
or
<fail>Message
   <condition>
    <not>
     <matches pattern="whatevr" string="whatever" multiline="true" />
    </not>
   </condition>
  </fail>
SSH
<sshexec host="host" trust="true" keyfile="whateverkey"
   username="username" passphrase=""
   command="echo 'Hello'" />
SCP
<scp
   file="whatever/file"
   remotetodir="remote/file"
   trust="true" keyfile="whateverkey" passphrase="" />
zip
<zip destfile="whatever" basedir="dir" includes="**/*" excludes="whatever,*.log" />
ant contribute ref : http://ant-contrib.sourceforge.net/ Installation
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
Usage Example is TryCatch method ref : http://nant.sourceforge.net/release/0.92/help/tasks/index.html Taskdef
<path id="myPathId">
        <fileset dir="target/whatever" includes="**/*.jar" />
        <fileset file="target/whatever.jar" />
    </path>
<taskdef name="myTask" classname="whatever.java.Class" classpathref="myPathId" />
checksum
<checksum algorithm="md5" toDir="whatever">
  <fileset dir="dirctory">
  </fileset>
</checksum>
script
<script language="javascript"> <![CDATA[
...
]]></script>
possible method
projectName.getProperty('whatever.property');
projectName.setProperty('whatever.property', 'value');
example calling target="echo" NOTE : internal tag could be added by
var whatevertagNode = project.createDataType('whatevertag');
whatevertagNode.setWhateverAttr("whatever");
checksum.addWhateverTag(groupFileset);
var o = projectName.createTask('echo');
o.setMessage('whatever');
o.perform();
importClass(java.io.File);
var f = new File(basedir);
f.isDirectory();
 
var touchTask = projectName.createTask('touch');
touchTask.setDatetime("06/28/2000 2:02:17 pm");
var groupFileset = fileHasher.createDataType('fileset');
groupFileset.setDir(file);
touchTask.addFileset(groupFileset);
touchTask.perform(); 
post
<post failonerror="true" verbose="true" to="http://xxx.com?whatever=value" maxwait="600">
    <prop name="param" value="whatever" />
   </post>
uptodate Check if a target file or set of target files is more up-to-date than a source file or set of source files.A set of source files is specified using the nested elements.
<uptodate property="isUpToDate" targetfile="whatever">
      <srcfiles dir="whatever" includes="**/*"/>
    </uptodate>

LinkWithin

Related Posts Plugin for WordPress, Blogger...