Thursday, June 18, 2009

MacOS X: Changing Keyboard Layout Permanently

I am Thai, live in Germany, got a German-keyboard MacBook Pro, and always *have to* write stuff in English.
I always need at least two keyboard layouts, one for English and one for Thai.
(I could have used German layout for both English and German languages but LaTeX syntax is not German-friendly.)

Anyway, in the end, I got German keyboard and use English and Thai layouts.
To get two layouts of my choice, I could just set it through International setting in System Preferences like it is shown here.
....Except that it is not.

Sometimes and sometimes only, after I turn off the machine and turn it on again, the layouts mysteriously change back to German (which was my default one).
I was wondering for a long time why the layout does not stick.

Now, I know why.
Non-root users have no rights to change some preferences.
That's why when I change the layout, it switches back to the default one which was set by root when I installed the OS (which, unlike Windows, was eons ago).
To permanently change the layout, you have to access System Preferences as root.

To do so, type t
he following command in the Terminal (if you don't know what root or Terminal is, I guess it is better to ask someone who knows to do it for you. It is pretty safe to follow the next step, but just in case.):
sudo /System/Library/CoreServices/Setup Assistant.app\ /Contents/MacOS/Setup Assistant
Now, you can change your layouts as you like and it will stick.

Please note that using sudo and do stuff as root is highly not recommended.
This is because you could potentially harm your system by doing things which you normally are not allowed to do.
However, if you just quickly set the layout and quit the Sys Pref, I think you are pretty safe.

This solution is originally posted here.

Friday, June 12, 2009

Searching Text in Files (Unix/Linux)

I was looking for a way to find files in a directory which contain specific text.
The results should be only the name of the files, not the lines in the files that contain the text.
(That is the way grep normally do.)

The solution is very simple:

grep -i -r -l "text"

where
-i = ignore case (up to you though),
-r = search recursively through sub-directories,
-l = returns only the file names, not the line contents.
and indeed, text has to be replaced with your text but the quotation marks have to be intact.

Sunday, March 1, 2009

Continuing an Environment in Latex

I was looking for a way to continue an example in Latex.
Pretty much like this:

Example 1 (Caption 1)
ABC....

Example 2 (Caption 2)
ABC....

Example 1 continued
DEF...

Example 3 (Caption 3)

I found a solution here such that you have to save a temp counter for the example instances and update it manually.
However, I find that solutions that involve temp counter are rather cumbersome.
So I came up with an easier solution which I would like to share here. ;)
It should also work with other theorem-like environments.

The idea is to come up with another example environment which does not have any counter. This can be easily done through \newtheorem* command in Ams-Latex package.
Then, when we want to continue an example, the continued instance should use this no-counting theorem and refer to the number of first instance of the example.
This means you will also need to create a new theorem style for continued instance so that it can refer back to the number of the first instance of the example.

I know it is confusing, so let's see how it is actually done.

I use the following environment setting for my (normal - with counter) example:
\newtheoremstyle{example}
{\topsep}
{\topsep}%
{\upshape}% Body font

{}% Indent amount (empty = no indent, \parindent = para indent)
{\bfseries\scshape}% Thm head font
{}% Punctuation after thm head

{\newline}% Space after thm head (\newline = linebreak)

{}% Thm head spec


\theoremstyle{example} \newtheorem{example}[definition]{Example}

The style above should be used for the first instance of the example such as:
\begin{example}[Caption 1]\label{ex:example1}
ABC...
\end{example}


Then, I declare another environment for the continuing instances:

\newtheoremstyle{example_contd}
{\topsep}
{\topsep}%
{\upshape}% Body font

{}% Indent amount (empty = no indent, \parindent = para indent)

{\bfseries\scshape}% Thm head font

{}% Punctuation after thm head
{\newline}% Space after thm head (\newline = linebreak)

{\thmname{#1}\thmnumber{ #2}\thmnote{#3}\enspace(continued)}% Thm head spec


\theoremstyle{example_contd}

\newtheorem*{example_contd}{Example}


They look pretty much the same, except the last line (the head spec).
In the last line, I added the word "(continued)" after usual theorem declaration.

Now, here is the tricky part. When I open a new environment, instead of specifying usual caption, I use \ref command to refer to the first instance:

\begin{example_contd}[\ref{ex:example1}]
DEF....
\end{example_contd}


This way, I can always create continuing instances of an example by referring them to the first one.

The result looks like this:
EXAMPLE 1 (Caption 1)
ABC....

EXAMPLE 1 (CONTINUED)
DEF...

Hope it helps. ;)

Thursday, November 15, 2007

iTunes กับเพลงภาษาไทย - iTunes and Thai Song Name


ำไม iTunes อ่านภาษาไทยไม่ออก
(ถ้าขี้เกียจอ่านมาก ข้ามไปอ่านวิธีแก้เลยก้อได้)
นที่ใช้ iTunes อยู่จะรู้ดีว่าบางทีเวลา import เพลงไทยเข้าไปใน iTunes มันจะออกมาเป็นภาษาขอม
สำหรับ iTunes บน Windows นี่จะบอกว่าวิธีแก้ง่ายมากครับ แค่เปลี่ยน regional settingใน Control Panel ให้เป็นภาษาไทย (ง่ายๆเลย คือทุกอย่างไทยหมด รวมถึงให้โปรแกรมเลือกที่จะแสดงภาษาไทยก่อนด้วย)
จากนั้นพอเข้า iTunes พอ iTunes เล่นเพลงใดๆ มันจะเปลี่ยนชื่อจากภาษาขอมมาเป็นภาษาไทย

ส่วน iTunes บน Mac นี่แก้ยังไงก้อไม่ได้ ต้องไปแก้ที่ตัวเพลงเลย

ปัญหาที่เกิดขึ้นก้อเพราะ iTunes มันดีเกินไปครับ มันจะอ่านชื่อเพลงจาก ID3 tag เป็นแบบ Unicode (ID3 tag ส่วนที่ไฟล์MP3เก็บข้อมูลชื่อเพลง) 
แต่ว่าเพลงส่วนใหญ่ที่เรามีนั้นชื่อเพลงมันไม่ได้ใช้ระบบUnicode แต่เป็น Windows-874 ซึ่งเป็นรหัสภาษาของ Windows (ชื่อมันก้อบอกอยู่แล้ว)
คนที่ไม่รู้ว่า Unicode กะ Windows 874 คืออะไร ไม่ต้องสนใจครับ
เอาแค่ว่ามันคือรหัสภาษาที่ไม่ค่อยจะเข้าใจกัน

ฉะนั้น ถ้าจะให้ iTunes อ่านไฟล์ Windows 874ได้ เราเลยจะต้องแปลงมันเป็น Unicode ก่อน

วิธีแก้
วิธีก้อมีหลายอย่างครับ จะใช้ script ก้อได้ ตามนี้
http://www.thaitownchicago.com/index.php?topic=273.0;wap2
แต่ผมลองแล้วปรากฎว่าได้บ้างไม่ได้บ้าง ชื่อเพลงหายไปเลยด้วย กลายเป็น "______.mp3"
สรุปคือไม่เวิร์คว่างั้น แล้วมันใช้ยากด้วย

เลยลองหาดูใหม่ ใช้โปรแกรมนี้ดีกว่าครับ Unicode Rewriter
เป็นโปรแกรมบนจาวา สามารถที่จะเลือกที่จะแปลงเพลงจากรหัสภาษาต่างๆเป็น Unicode ได้
มีuser interface ด้วย ใช้ง่าย และเห็นผลจะๆ
ดาวน์โหลดที่นี่
เว็บหลักของโปรแกรมอยู่นี่ครับ

วิธีใช้ก้อง่ายมาก install โปรแกรมก่อน แล้วเข้าโปรแกรมไป
จากนั้นใน menu Encoding เลือก SE & SW Asia -> Thai
จากนั้นกดปุ่ม browse ชื่อเพลงที่ต้องการจากแปลง แล้วกด convert
จากนั้นก้อimportเพลงนั้นๆเข้าไป iTunes ได้เลย
Update: ตอนนี้ Unicode Rewriter อัพเดทเวอร์ชั่นใหม่
พอเลือก SE & SW Asia -> Thai แล้ว ต้องเลือกรหัสด้วย ให้เลือก Cp874 นะครับ

ถ้าไม่อยากเลือกทีละเพลง เลือกทั้ง directory เลยก้อได้ แล้วถ้าติ๊กตรง "Recursive" ทางขวาล่าง มันจะแปลงไฟล์ทั้งdirectory และdirectory ย่อยด้วย
ง่ายๆครับ
แต่ทั้งนี้เพื่อความปลอดภัย backupไว้ก่อนก้อดี

แค่นั้นละครับ ง่ายๆ


ปล. ถ้าจะเอาความรู้ไปเผยแพร่ล่ะก้อยินดีเลยครับ แต่ให้เครดิตเจ้าของด้วยนะครับ ขอบคุณมากๆครับ