error ที่เกิดจากการต่อมือถือเล่นอินเตอร์เน็ต

Error 734 : PPPLink

ถ้าเป็นของ AIS ที่ property ของโมเด็ม ให้ใส่ extra: at+cgdcont=1,”ip”,”internet”

Error 692

– ใส่ค่า extra ผิด ให้ใส่ใหม่

Error 633

– ให้ restart มือถือ และคอมพิวเตอร์ใหม่

มารู้จัก Grub4Dos กันเถอะ – Boot loader ที่มีความสามารถสูง

ที่มา: http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial

Grub4Dos สามารถใช้งานได้ทั้ง Linux, Windows
แต่บทความฉบับนี้จะเน้นที่การทำงานกับ Windows นะครับ

ก่อนอื่น ถ้าเราจะใช้งาน Grub4Dos เราต้องติดตั้ง Grub4Dos ลงบน MBR (ชุดโปรแกรมที่ให้คอมพิวเตอร์เริ่มต้นทำงานบนฮาร์ดดิส sector แรก) เสียก่อน

และ Grub4Dos จะทำงานได้ ก็จะต้องมีไฟล์ประกอบอีก 2 ไฟล์ คือ grldr และ menu.lst (คล้ายๆ NTLDR, NTDETECT.COM และ boot.ini ของวินโดส์)

อ่านเพิ่มเติม

การเซตให้คอมเครื่องแม่ แชร์เน็ต ให้เครื่องลูกหลายๆเครื่อง (แบบที่ 3 Kerio ยุ่งยากหน่อย แต่ประโยชน์มาก)

เห็นช่วงนี้มีคนถามถึงเรื่อง การแชร์เน็ตให้เครื่องลูกๆอยู่

ถ้าแชร์แบบ ธรรมดาโดยใช้วินโดส์ (ICS) ก็ไม่ยากเท่าไรนัก
แต่ต้องตั้งค่าให้เครื่อง ลูกๆวิ่งออกเครื่องแม่ด้วย (เพราะวินโดส์ไม่มี DHCP Server)
และก็ทำ cache server + กรองคำหยาบ + บล็อคเว็บ + อื่นๆไม่ได้

ผมลองใช้ Kerio อยู่พักหนึ่งแล้ว รู้สึกประทับใจดี
อยากเอามาแนะนำกัน อยากให้ความรู้ด้านนี้ เรามีคนเก่งเยอะๆ เพื่อต่อยอดความรู้กันไปเรื่อยๆครับ

ดูกันได้เลยครับ

อ่านเพิ่มเติม

ขาย คอนโด JWPlace – ซ.รัชดา32 ใกล้กรมส่งเสริมการส่งออก, รถไฟใต้ดิน

ขาย คอนโด JWPlace – ซ.รัชดา32 ใกล้กรมส่งเสริมการส่งออก, รถไฟใต้ดิน

บอกขายที่ราคา 750,000 บาท   สนใจติดต่อ โทร. 085-513-0220

เจ้าของอยู่ ตจว. ไม่สะดวกเข้ากรุงเทพฯบ่อย เอาภาพขึ้นเว็บให้ผู้สนใจดู

หากถูกใจจริงๆนัดวันเวลาดูสถานที่จริงอีกครั้งเพื่อความมั่นใจก่อนซื้อขายได้

ที่นี่ เดินทางสะดวกสบาย อาหารการกินหาไม่ลำบาก อยู่ใกล้ห้างสรรพสินค้ามากมาย

การเดินทางสะดวกมาก

– ด้านหน้าออกไปขึ้นรถไฟใต้ดิน สถานีลาดพร้าว สามารถนำรถยนต์ไปจอดไว้ที่สถานีนี้ได้ หรือจะนั่งมอเตอร์ไซส์จากในซอยไปถึงสถานีรถไฟฟ้าใต้ดินเลยก็ได้

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

– ด้านหลัง ทะลุออกโชคชัยสี่, เสนาได้ มีห้างซูปเปอร์อยู่ด้านหลัง เอาไว้ไปหาซื้อสินค้า ไม่ต้องออกถนนใหญ่ให้วุ่นวาย

อาหารการกิน

– ไม่ลำบากเลย ปากซอยก็มี 7-11 และมีร้านค้ามาก และกรมส่งเสริมการส่งออก มักจะจัดงานแสดงสินค้าเป็นระจำ

– ในซอยก็มี 7-11 มีร้านอาหารหลายร้าน เดินเท้า 50 เมตร ได้สบายๆ

– มีสวนอาหารหลายร้าน

– มีร้านล้างรถอยู่ใกล้ๆ

รูปแสดงคอนโด

ห้องที่ประกาศขาย

บ้านเลขที่ 288/41 อยู่ชั้น4 (คอนโดสูง 5 ชั้น)

สภาพภายใน

ยกเฟอร์นิเจอร์ เตียง ตู้เสื้อผ้า โต๊ะเครื่องแป้ง ที่นอนให้ (เตียงต้องประกอบใหม่)

ห้องน้ำ

มีอ่างอาบน้ำด้วย

ลิฟต์

คีย์การ์ด

วินมอเตอร์ไซส์

ร้านอาหาร

7-11, รถเข็นขายอาหาร

บอกขายที่ราคา 750,000 บาท   สนใจติดต่อ โทร. 085-513-0220

เจ้า ของอยู่ ตจว. ไม่สะดวกเข้ากรุงเทพฯบ่อย เอาภาพขึ้นเว็บให้ผู้สนใจดู

หาก ถูกใจจริงๆนัดวันเวลาดูสถานที่จริงอีกครั้งเพื่อความมั่นใจก่อนซื้อขายได้

ที่ นี่ เดินทางสะดวกสบาย อาหารการกินหาไม่ลำบาก อยู่ใกล้ห้างสรรพสินค้ามากมาย

(ช่วยจำ) ลง Windows 7 เสร็จใหม่ๆ แล้วจอดำค้าง ไม่บูทเข้าวินโดส์

พอลงวินโดส์เสร็จใหม่ๆ เครื่องรีสตาร์ทขึ้นมา แล้วค้างที่หน้าจอ แล้วขึ้นจอดำค้างอยู่อย่างนั้น

ลองเปลี่ยนแผ่นวินโดส์ก็ไม่หาย
fix boot ก็ไม่หาย
ทำ repair ก็ไม่หาย

ตอนนี้แก้ไขได้แล้ว คือ
1. ให้ Format Partition ใหม่ ตอนลงวินโดส์ (ไม่ใช้พาติชั่นจากที่ให้ acronis แบ่งให้จากการใช้แผ่น Hiren)
ทำแบบนี้แล้วพอลงวินโดส์เสร็จ รีสตาร์ทใหม่ จะบูทเข้าวินโดส์ได้

รู้จัก Boot ของ Windows 7

bootrec คือ โปรแกรม Boot Recovery เป็นโปรแกรมที่มีไว้ซ่อม boot loader ของ
Win7 (xp คือ fdisk)

bcdedit เป็น editor สำหรับแก้ Boot Configuration Data เป็น text file ที่เก็บรายละเอียดการ boot ไว้ (xp คือ boot.ini)

Bootrec.exe options

The Bootrec.exe tool supports the following options. Use the option that is appropriate for your situation. (This works on all versions of Vista and Windows 7 Only)

You can Try the following combination:
Bootrec.exe /FixMbr

The /FixMbr option writes a Windows 7 or Windows Vista-compatible MBR to the system partition. This option does not overwrite the existing partition table. Use this option when you must resolve MBR corruption issues, or when you have to remove non-standard code from the MBR.
Bootrec.exe /FixBoot

The /FixBoot option writes a new boot sector to the system partition by using a boot sector that is compatible with Windows Vista or Windows 7. Use this option if one of the following conditions is true:

* The boot sector has been replaced with a non-standard Windows Vista or Windows 7 boot sector.
* The boot sector is damaged.
* An earlier Windows operating system has been installed after Windows Vista or Windows 7 was installed. In this scenario, the computer starts by using Windows NT Loader (NTLDR) instead of Windows Boot Manager (Bootmgr.exe).

Bootrec.exe /ScanOs

The /ScanOs option scans all disks for installations that are compatible with Windows Vista or Windows 7. Additionally, this option displays the entries that are currently not in the BCD store. Use this option when there are Windows Vista or Windows 7 installations that the Boot Manager menu does not list.
Bootrec.exe /RebuildBcd

The /RebuildBcd option scans all disks for installations that are compatible with Windows Vista or Windows 7. Additionally, this option lets you select the installations that you want to add to the BCD store. Use this option when you must completely rebuild the BCD.

รู้จักไฟล์ Boot.ini (วินโดส์ xp)

ไฟล์ Boot.ini เป็นไฟล์ระบบที่สำคัญไฟล์หนึ่งสำหรับวินโดส์ แต่ท่านทราบหรือไม่ว่ามันทำอะไรได้บ้าง

การแก้ไขไฟล์ boot.ini ต้องใช้ความระมัดระวังเป็นพิเศษ ถ้าแก้ไขผิดพลาด อาจจะทำให้ไม่สามารถบูทเข้าวินโดส์ได้เลย ดังนั้น ก่อนเริ่มทำการแก้ไขใดๆ ท่านควรสำรองไฟล์ระบบไว้ก่อน

Boot.ini เป็นไฟล์ระบบ ถูกตั้งให้เป็น hidden และ read-only เมื่อเครื่องคอมพิวเตอร์เริ่มบูท มันจะไปเรียกไฟล์ ntldr ให้บูทวินโดส์
ในระหว่างขบวนการบูท ntldr จะไปอ่านไฟล์ boot.ini เพื่อหาว่า ระบบปฏิบัติการเก็บอยู่ที่ตำแหน่งใด

Boot.ini ประกอบไปด้วย 2 ส่วนหลักๆ คือ 1. ส่วน [boot loader] และ 2. [operating systems].

1. ส่วน [boot loader] จะบอก Ntldr ว่าระบบปฏิบัติการใดเป็น default ของระบบ.

2. ส่วน [operating systems] จะบอกว่า มีระบบปฏิบัติการใดบ้างในเครื่องของเราที่สามารถโหลดได้
โดยทั่วไปคำสั่งภายในของไฟล์ Boot.ini มีลักษณะดังนี้:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(5)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(5)\WINNT=”Microsoft Windows 2000 Server” /fastdetect
multi(0)disk(0)rdisk(0)partition(4)\WINNT=”Windows NT Server Version 4.00″
multi(0)disk(0)rdisk(0)partition(4)\WINNT=”Windows NT Server Version 4.00 [VGA mode]” /basevideo /sos
C:\=”PC-DOS”

1. ส่วน [boot loader]
[boot loader] ประกอบไปด้วย 2 ส่วนย่อย คือ

1.1 timeout=. คือแทนระยะเวลาหน่วยเป็นวินาทีในการรอให้คนเลือกระบบปฏิบัติการอื่น
* ค่าปกติคือ 30 วินาที
* สามารถตั้งได้สูงสุด คืิอ 999
* ถ้าตั้งเป็น -1 เครื่องจะให้คนเลือกเมนูแบบ manual

1.2 default=. คือระบบปฏิบัติการที่เราต้องการให้เป็นหลัก

2. ส่วน[operating system]
ส่วน [operating system] สามารถใส่ระบบปฏิบัติการได้ถึง 10 ถ้าใส่เกิน ntldr จะอ่านแค่ 10 รายการแรก

แต่ละบรรทัดคำสั่ง อาจจะดูสับสน แต่ถ้าคุณเข้าใจตัวแปรแต่ละตัวแล้ว จะเข้าใจได้ง่ายและเร็วเลย
แต่ละบรรทัดจะประกอบได้ด้วย ตำแหน่ง, คำอธิบาย, ตัวเลือก (a path, a description, and optional switches for the operating system)

The easiest part of the line to understand is the description. It’s the second part of each line and is enclosed by quotes.

The other parts of the line are more confusing. The first section, identifiable by all of the ()’s it contains, is known as the ARC path. ARC paths define the location of a file based on physical location. It breaks down the location based on the controller card, physical disk, and partition on which the directory is stored.

For example, let’s look at the ARC path multi(0)disk(0)rdisk(0)partition(1)\WINNT. The first part—either multi or scsi—identifies the physical disk controller number beginning with a value of 0. Scsi usually refers to a SCSI control with its BIOS disabled. Multi normally refers to an IDE drive, but it can also identify any non-SCSI controller or a SCSI controller with its BIOS enabled.

The second and third parts—disk and rdisk—are dependent on the multi or scsi values mentioned above. Only one is used, even though the ARC path always contains both entries. Both the disk and rdisk parameters indicate the physical disk used. If the first parameter is multi, the disk parameter is ignored. Alternatively, if the first parameter is scsi, the disk parameter is used and the rdisk parameter is ignored. Like the controller parameter, the counter associated with the hard disk parameter begins at 0 and increases from there.

The fourth part—partition—indicates the partition on the disk specified in either the second or the third part. Unlike the first three parts, the counter for the partition begins at 1 and goes up from there.

The final part is the path on the partition described in which the NT boot files are located. Normally, this path is set to WINNT.

The third part of the entry on an [operating system] line contains optional switches for the operating system. These switches allow you to boot special configurations of the operating system. An example of this is the familiar “VGA Mode” choice with its respective options. Switches are always preceded by a/. There are many different switches you can use, including:

* /basevideo—Causes NT to boot using the standard VGA driver, set to 640X480 resolution. This can be handy if your regular video driver becomes damaged.
* /baudrate—Specifies the baud rate to be used for debugging. If you do not set the baud rate, the default baud rate is 9600 with a modem attached, and 19200 for a null-modem cable.
* /bootlog—Makes Windows 2000 write a log of the boot to the file %SystemRoot%\NTBTLOG.TXT.
* /crashdebug—Turns on Automatic Recovery And Restart, which controls how Windows reacts when it crashes.
* /debug—Turns on the NT debugger which can then be activated by a host debugger connected via modem or null-modem cable. You’ll probably only use this if you’re a programmer.
* /debugport= comx—Specifies the com port to use for debugging.
* /fastdetect—Turns off serial and bus mouse detection at boot time.
* /maxmem:n—Specifies the maximum amount of RAM that Windows can use.
* /nodebug—Turns off debugging.
* /noguiboot—Turns off the GUI splash screen when the server starts.
* /noserialmice[=comx,y,z]—Disables detection of serial mice on the specified com port(s).
* /numproc=n—Only allows a certain number of processors to work in a multiprocessor system.
* /onecpu—Only uses the first CPU in a multiple processor system.
* /pae—Allows a server that supports physical address extension (PAE) mode to start normally. In safe mode, the computer starts using normal kernels even if the /PAE switch is specified.
* /safeboot:xxx—This switch forces Windows 2000 to launch in safe mode. You must specify one of three additional switches: MINIMAL, NETWORK, or DSREPAIR. The MINIMAL switch doesn’t load network support. The NETWORK switch corresponds to a safe boot with network support. The DSREPAIR (Directory Services Repair) switch causes NT to boot into a mode where you can restore Active Directory from backup.
* /sos—Displays the driver names while they are being loaded.
* /win95—You’ll probably never use this switch. It only works on a triple-boot system that has DOS, Win9x, and Windows NT installed. Specifying the /win95 switch directs NTLDR to boot the Win9x boot sector stored in BOOTSECT.W40.
* /win95dos—Like the /win95 switch, you’ll probably never use this switch. It only works on a triple-boot system that has DOS, Win9x, and Windows NT installed. Specifying the /win95dos switch directs NTLDR to boot the DOS boot sector stored in BOOTSECT.DOS.

The [operating system] section may contain entries that don’t include ARC paths. Normally, this represents an entry for a previous operating system, such as MS-DOS or Windows9x. If this is the case, you’ll see a conventional path such as c:/.

บทสรุป

ไฟล์ระบบของวินโดส์จำนวนมาก ทำให้เราสับสนได้ ในจำนวนนี้ มีไฟล์ boot.ini ซึ่งเป็นหนึ่งในไฟล์ระบบที่สำคัญของวินโดส์
Boot.ini จะควบคุมเวลา และระบบปฏิบัติการที่เราจะใช้ ซึ่งได้อธิบายไปในตอนต้นแล้ว
ก่อนทำการแก้ไข ควรสำรองข้อมูลไว้ก่อนด้วยนะครับ

ที่มา. ขออภัย หาไม่เจอ

Get to know Windows Vista’s new boot loader architecture

Takeaway: Greg Shultz introduces you to Windows Vista’s new boot loader architecture and the Boot Configuration Data (BCD) system and explains how it works in a dual-boot configuration.

This article is available as a TechRepublic download.

Are you planning to use Windows Vista in a dual–boot configuration on your Windows XP system? If so, you may have read my article “How do I… Install Windows Vista in a dual-boot configuration along with Windows XP?”. While I explained the process of setting up a dual-boot configuration in detail in that article, there are a lot of things that go on behind the scenes that I didn’t touch on. Of course, you really don’t need to know about all that to set up and use Windows Vista in a dual–boot configuration. However, if you plan to modify the boot procedure like you may have done when dual-booting with Windows XP and previous Windows operating systems, you’ll need a deeper understanding of how Windows Vista boots.

If you set up dual-boot configurations with Windows XP and previous Windows operating systems, chances are that you became very familiar with the way Windows XP boots up, as well as how to configure the boot procedure via the Boot.ini file and the Bootcfg.exe utility.

Well, if you’re planning to set up a dual-boot configuration with Windows Vista and Windows XP and really want to get a handle on how it works, you’re going to have to forget all about Boot.ini and the Bootcfg.exe utility and learn about Windows Vista’s new boot loader architecture, which includes the Windows Boot Manager, the Boot Configuration Data (BCD) system, and the Boot Configuration Data Store Editor, BCDEdit.exe.

First, I’ll introduce you to Windows Vista’s new boot loader architecture and the BCD system and explain how it works in a dual-boot configuration. In a future article, I’ll show you how to use the new BCDEdit.exe utility to edit the BCD system and configure the Windows Boot Manager.
Taking a look back at NT Loader

Windows Vista’s predecessors (Windows NT, Windows 2000, and Windows XP) used a system based on the Windows NT boot loader, NTLDR, to boot up the system. To gain a better appreciation of Windows Vista’s new boot loader architecture, let’s begin with a quick look at how NT Loader worked.

NTLDR, which is short for NT Loader, is a special program that was first developed for Windows NT back in early 1990s. With this in mind, you can appreciate that NT Loader was definitely an outdated technology.

Essentially, as the computer boots up, the NTLDR file, containing the main boot loader, loads from the hard drive’s boot sector. Once NTLDR starts, it looks for hiberfil.sys and an active hibernation image. If NTLDR finds both the file and image, the operating system resumes from a hibernation state.

If an active hibernation image is not found, NTLDR reads the Boot.ini file, which contains special configuration options for booting the operating system as well as instructions for displaying the boot menu. Next, NTLDR launches Ntdetect.com, which, as is name implies, is responsible for detecting the basic hardware that is necessary to start the operating system. Finally, NTLDR launches Ntoskrnl.exe, which is the kernel image for an NT-based operating system, such as Windows XP.
Windows Vista’s new boot loader architecture

When Microsoft was developing Windows Vista, it decided to start from scratch and build the new operating system from the ground up. The new boot loader architecture is an excellent example of this methodology because it presents an entirely new way of booting up the Windows operating system that is both quicker and more secure.

To improve boot time and increase security, Microsoft’s Windows Vista developers decided to do away with NTLDR and replace it with an entirely new system built around three main components: the new boot loader architecture, a new boot option storage system called Boot Configuration Data (BCD), and a new boot option editing tool called BCDEdit.exe.

Now, the new boot loader architecture can itself be broken down into three main components: The Windows Boot Manager (Bootmgr.exe), the Windows operating system loader (Winload.exe), and the Windows resume loader (Winresume.exe).

In this new system, as the computer boots up, the Windows Boot Manager loads first and reads the Boot Configuration Data, which is essentially a database of boot–time configuration information stored on the hard disk in a format similar to the registry. The Boot Configuration Data database can include information about a current hibernation image, special configuration options for booting the Windows Vista operating system, and special configuration options for booting an alternate operating system. In addition to this type of information, the Boot Configuration Data database can provide instructions for launching diagnostic or recovery tools that actually run independent of the operating system.

In the overall boot process scheme, the Windows Boot Manager is a completely separate entity and is totally unaware of any operating system boot loader operations. This isolation adds a level of security between the actual booting of the computer and booting of the operating system.
How does it work?

When Windows Boot Manager reads the Boot Configuration Data, it uses the information it finds in the database to determine if it needs to display its menu. If a menu is not necessary, Windows Boot Manager does one of two things, depending on the information it finds in the Boot Configuration Data database: It either passes control over to the Windows resume loader or to the Windows operating system loader.
Windows resume loader

If the Boot Configuration Data database contains information about a current hibernation image, the Windows Boot Manager passes that information over to the Windows resume loader. Once that handover occurs, the Windows Boot Manager exits and the Windows resume loader takes over. At this stage, the Windows resume loader reads the hibernation image file and uses it return the operating system to the running state it was in when hibernation was invoked.
Windows operating system loader

If the Boot Configuration Data database doesn’t contain information about a current hibernation image, the Windows Boot Manager retrieves boot configuration information and then passes that information over to the Windows operating system loader. Once that handover occurs, the Windows Boot Manager exits and the Windows operating system loader takes over. At this stage, Windows operating system loader loads the kernel, Ntoskrnl.exe, and any basic hardware drivers. As it does so, the Windows Vista operating system boots up.
Booting an alternate operating system

Now, if the Windows Boot Manager finds information in the Boot Configuration Data database about another operating system, the Windows Boot Manager will build and display a menu that lists Windows Vista and the other operating system as choices. If the other operating system is selected, the Windows Boot Manager retrieves information about how to boot that operating system and then passes the information over to the appropriate operating system loader. As in the previous examples, the Windows Boot Manager then exits and the other operating system’s boot loader takes over.
Moving forward

As I mentioned at the beginning, the main reason for gaining a better understanding of Windows Vista’s new boot loader architecture is to help you to work with Windows Vista in a dual-boot configuration. With this information under your belt, we’ll delve into the Boot Configuration Data database and the Boot Configuration Data Store Editor, BCDEdit.exe, in the next article.

Ref: http://articles.techrepublic.com.com/5100-10878_11-6169638.html

Introduction to Linux boot loaders

Takeaway: See how the Linux boot loaders LILO and GRUB work, and how to configure and manage them.

One of the remaining mysteries of Linux for many people is how to change the system startup. Sure, you’ve completed the installation, but now you want to tweak it a little bit. Perhaps you’ve upgraded your kernel and can’t figure out how to make the system boot it instead of your old kernel. Perhaps you want to password-protect the booting of your Linux workstation. These are all great goals, but how do you accomplish them?

In this Daily Drill Down, we will take a look at Linux boot loaders. A boot loader is the program that sits in your computer’s Master Boot Record, or MBR, or at the beginning of your bootable partition. Every operating system uses a boot loader of some sort; without it, the computer would not be able to boot into your operating system. Windows comes with its own boot loader that is transparent to the end user, the same as in DOS. It will simply boot Windows or DOS, whichever OS you have installed. You can purchase third-party boot loaders for Windows, which allow you to dual-boot between different operating systems on your computer. One example is PowerQuest’s BootMagic, which is also used by default for the OS/2 operating system.

With Linux, you can also use BootMagic if you feel like paying for a boot loader. BootMagic comes with PartitionMagic and you may have the need for an on-the-fly partitioning utility. However, if you do not need this, Linux comes with two excellent boot loaders: LILO and GRUB.

Introduction to LILO and GRUB
LILO (current version is 21.7.5) was the first Linux boot loader, and its name simply stands for “LInux LOader.” You will never need to download it because all Linux distributions come with it.

GRUB is a newer boot loader that at one point was a little more advanced than LILO. Its name stands for GRand Unified Bootloader. I find GRUB a little more difficult to use than LILO, and it is no longer any more advanced than LILO is. It offered a graphical boot menu before LILO did, and it was a text ANSI-based menu at that. Now, LILO offers a true graphical boot menu and is just as powerful, if not more so, than GRUB.

Using LILO
We will first take a look at LILO. The LILO configuration file is typically /etc/lilo.conf, and it contains information on the possible kernels, boot images, and defaults for LILO. Because LILO can dual-boot between Linux and Windows, as well as many other operating systems, your LILO configuration file can become quite confusing. On one system, I have LILO configured to boot between eight versions of Linux-Mandrake, Debian, and SuSE. So, as you can see, there are no real limits to what you can accomplish with LILO.

Let’s take a look at an example lilo.conf file:
boot=/dev/hde
map=/boot/map
install=/boot/boot.b
vga=ext
default=linux
lba32
prompt
timeout=50
password=secret
restricted
message=/boot/message-graphic
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
label=linux
root=/dev/hde1
initrd=/boot/initrd.img
append=” hdb=ide-scsi”
read-only
image=/boot/vmlinuz
label=failsafe
root=/dev/hde1
initrd=/boot/initrd.img
append=” hdb=ide-scsi failsafe”
read-only
other=/dev/fd0
label=floppy
unsafe
image=/boot/vmlinuz-2.2
label=linux2.2
root=/dev/hde1
initrd=/boot/initrd-2.2.img
append=” hdb=ide-scsi”
read-only

This is the configuration file I use on a Linux-Mandrake 8.0 system. It’s very straightforward and easy to follow.

Keywords
The boot keyword tells LILO which hard drive contains the boot sector that is read. This should be the first hard drive in your system. We see that /dev/hde is the value here, which specifies the first ATA100 drive in the system. If you have ATA33 or ATA66 drives, this will likely be /dev/hda instead.

The map keyword specifies the location of the map file. This is typically /boot/map. If you do a directory listing in your /boot directory, you should see the map file there.

The install keyword contains the name of the file to be used as the new boot loader. With versions of LILO 21.5 and higher, this can be either boot-text.b or boot-menu.b. In our case, we use /boot/boot.b, which is actually a symbolic link to boot-menu.b. You will typically want to use boot-menu.b, as that provides you the graphical menu you see when you start your computer, while boot-text.b only exists for those who prefer a simple LILO prompt instead of the menu.

The vga keyword determines which VGA mode LILO will boot with. If you wish to boot into straight 80×25 mode, use the word “normal” here; if you wish to boot into 80×50 mode, use ext. If you want to know what VGA modes are available, use the word ask and LILO will present you with a list of VGA modes from which to choose.

The default keyword determines which image is the default to be loaded. In this case, we want the linux image to be loaded by default.

The lba32 keyword tells LILO to generate 32-bit logical block addresses instead of sector/head/cylinder addresses. This is recommended for all recent drives, as it allows LILO to boot from partitions beyond the 1024-cylinder barrier.

The prompt keyword tells LILO to issue the boot prompt and wait for user input before proceeding. The timeout keyword tells LILO how long to wait in tenths of a second. So the value of 50 in the timeout section tells LILO to wait 5 seconds.

The password keyword defines a password that must be used to boot the system. In this case, our password is secret. If you wish to have the system require the password to boot, remove the restricted keyword from the file. If you only want a password to be required if the user tries to append options to the kernel at the boot prompt, leave the restricted keyword where it is. The restricted keyword is generally used when you want the system to be able to boot without human intervention but want to prevent people from changing kernel options. These keywords can also be used in the image sections, so you can password-protect certain images completely, while using the restricted keyword with only some other images. If you wish to mix and match restricted and unrestricted images, define the password in the global section and use the restricted keyword in the images you wish to be able to boot without human intervention (usually the default image) and omit it from the other sections so that a password is required to boot them.

The message keyword tells LILO which file to use that contains the message to display before the boot prompt. For our graphical menu, we are using /boot/message-graphic, which contains the graphic for our graphical menu. If you were using the text loader, you could enter some text in the file to be displayed before the boot prompt. Whenever you change the message file, you will need to rerun LILO to rebuild the map file.

The menu-scheme keyword determines the color scheme to use with graphical booting. It follows the syntax: :::, which in our case is wb:bw:wb:bw. This means we will have white on blue for the text and border, with blue on white for the highlight and title. The letters you can use are kbgcrmyw, which stand for blacK, Blue, Green, Cyan, Red, Magenta, Yellow, and White, respectively. Use uppercase letters if you want the color to be intense.</p> <p>Finally, we come to the section defining our images to boot from. Each image section has the same structure, which consists of a starting image keyword that determines the Linux image to boot; this will usually be /boot/vmlinuz-[kernel_version]. In most cases, /boot/vmlinuz will be a symlink to a real image file, like /boot/vmlinuz-2.4.3-20mdk.</p> <p>Next, you define the name of the image with the label keyword. The first one we define is linux, which is our default image. Further on, we define labels like linux-nonfb for a nonframebuffer kernel and linux2.2 for a 2.2 kernel.</p> <p>You also need to define the root directory for this Linux installation with the root keyword. Here, we define /dev/hde1, which we mount as / (root).</p> <p>If you have a SCSI adapter or if you use the ReiserFS filesystem, you will probably need an initrd image. This image is the initial ramdisk to be loaded for the specified kernel. This is particularly needed in systems where you boot off a SCSI drive or you have your root partition formatted to ReiserFS. The initrd image will contain the modules for those devices; without the modules available, you will not be able to boot off of your SCSI devices or mount your root partition.</p> <p>The append keyword tells LILO what options to pass to the kernel when booting. In this case, we pass “hdb=ide-scsi” to the kernel, which tells the kernel that the device /dev/hdb, our IDE CD writer, is to be used with the ide-scsi module. This allows us to use tools like cdrecord to write to our IDE CD-RW with the SCSI emulation for IDE devices driver.</p> <p>The read-only keyword tells LILO to mount the root partition as read-only. Don’t worry, because later the startup procedures will remount the root filesystem as read-write, after performing a check on it. This is just a safety precaution.</p> <p>You can have as many image definitions as you want. As stated earlier, I have a system that boots between 10 different Linux distributions, so my lilo.conf file is full of image directives. You can also see here that you can tell LILO to boot from other devices, like the floppy disk. This can be beneficial because it will allow you to prevent people from putting their own floppy boot disk into the system to boot off of by telling the BIOS to boot from the hard drive only. By password-protecting LILO and your BIOS, you can ensure that only authorized people will be able to boot from a floppy.</p> <p>To save your changes and regenerate the boot image, you will need to run the lilo command. I suggest using:<br /> /sbin/lilo -v</p> <p>This will tell LILO to be verbose and tell you what it is doing as it does it. This way, if you do have any errors in your file, you can determine quickly what the error is.</p> <p>Using GRUB<br /> GRUB works in a very different way. It comes with an interactive script called grub-install, which is how you should initially configure it, unless you really know what you’re doing. You will need to have GRUB installed first; most distributions also come with GRUB, but if not, you can download it from the GNU.org site.</p> <p>To begin the configuration, issue the following as root:<br /> grub-install /dev/hde</p> <p>where /dev/hde is the primary drive to boot from. Again, /dev/hde is the primary ATA100 drive, but if you use ATA33 or ATA66 drives, be sure to use /dev/hda.</p> <p>Once grub-install runs for the first time, it will create a file called /boot/grub/device.map and will print the contents of that file to the screen. This will list all of the drive devices on your system, including your floppy drive. After running grub-install here, my /boot/grub/device.map file looked like Table A.</p> <p>Table A (fd0) /dev/fd0<br /> (hd0) /dev/hde<br /> (hd1) /dev/hdf<br /> (hd2) /dev/hdg<br /> The device.map file</p> <p>If this looks correct, you will then need to create the GRUB configuration file: /boot/grub/menu.lst. Let’s look at an example configuration file.</p> <p>Keywords<br /> The default keyword tells GRUB to boot the first definition by default; in this case, it will be the one titled Linux.</p> <p>The timeout keyword tells GRUB to wait 5 seconds before booting automatically. Unlike LILO, GRUB uses seconds, not tenths of a second.</p> <p>The i18n keyword tells GRUB which file to use for its message file, which will be shown prior to the grub> prompt. This tells GRUB to use the file /boot/grub/messages, located on the first partition on the first hard drive (hd0,0).</p> <p>The password keyword defines the password required to start any interactive operations, such as editing menu entries and entering the command-line interface. In this fashion, you can prevent GRUB from doing anything other than starting the default operating system without the password, but you will need to use the lock keyword as we see in the second image (in the above configuration example). The lock keyword tells GRUB to only boot that image if a valid password is entered.</p> <p>The title keyword starts an image definition. The first image we define, which we also have set to our default, is Linux.</p> <p>The kernel keyword defines the kernel image to load and all other kernel options. Where LILO uses a number of entries to specify all of this information, GRUB uses a single line. The first part determines the location of the boot image. In this case, we are using /boot/vmlinuz, which is located on the first partition of the first hard drive. If boot is located on a different partition, say /dev/hde5, you would use (hd0,4) to tell GRUB to use the fifth partition of the first hard drive. Finally, you tell it the root directory to use, /dev/hde1, the initrd.img file to use, /boot/initrd.img, and the appended options, which in this case is hdb=ide-scsi, to load the ide-scsi module for our CD-RW. In the above example, the lines have wrapped; they are in fact all on the same line.</p> <p>There are a few more options you can set to fine-tune GRUB, and browsing the info pages will give you that information. Type info grub to obtain detailed information about GRUB. But this should be enough to get you started.</p> <p>Writing changes<br /> Finally, to write your changes to the MBR, simply run<br /> grub</p> <p>as root. You will then be given a grub> prompt. Now you need to enter a few commands to install GRUB into your MBR.<br /> grub> root (hd0,0)</p> <p>This tells GRUB where the root device is located. In our case, /dev/hde1 is where our /boot partition is located, and thus our GRUB stage1 file, so we use (hd0,0). Next, you need to actually install GRUB into the MBR by using<br /> grub> setup (hd0)</p> <p>After this command is completed, GRUB will tell you if it was successful or not. You can now reboot and GRUB will be your default boot loader.</p> <p>Conclusion<br /> Of the two boot loaders, LILO is my preferred program. It handles my dual-booting perfectly, has a nice graphical interface at boot, and is much easier to configure. While GRUB is powerful, I find the configuration to be much more confusing than LILO. It also isn’t as standard as LILO, nor has it been used quite as long. While GRUB works well, I find LILO works better.</p> <p>At this point, you should be able to modify your system to your heart’s content. While there are more advanced options you can use with both boot loaders, the info and man pages will provide you with the help you need if what has been illustrated here is not sufficient.</p> <p>One final word of caution: Remember to have a working floppy boot disk before you start fiddling with LILO or GRUB. If you configure them incorrectly, you may be unable to start your system without having a valid and working boot disk first. You should have generated a boot floppy when you first installed Linux. Before changing configuration files for LILO and GRUB, boot off of your floppy disk to ensure it works.</p> <p>Ref: <a href="http://articles.techrepublic.com.com/5100-10878_11-1060776.html" rel="nofollow">http://articles.techrepublic.com.com/5100-10878_11-1060776.html</a></p> </div> <div class="entry-meta"> <span class="entry-date"><a href="https://ipowerthailand.wordpress.com/2010/06/11/introduction-to-linux-boot-loaders/" class="published" title="2010-06-11T19:39:02+0700">มิถุนายน 11, 2010 – 7:39 pm</a> Categories: <a href="https://ipowerthailand.wordpress.com/category/uncategorized/" rel="category tag">Uncategorized</a></span> <span class="meta-sep">|</span> <span class="comments-link"><a href="https://ipowerthailand.wordpress.com/2010/06/11/introduction-to-linux-boot-loaders/#comments">Comments (70)</a></span> <p> </p> </div> </div><!-- .post --> <div id="post-26" class="hentry p10 post publish author-ipowerthailand category-uncategorized untagged y2010 m06 d12 h01 alt"> <h2 class="entry-title"><a href="https://ipowerthailand.wordpress.com/2010/06/11/linux-startup-process/" rel="bookmark">Linux startup process</a></h2> <div class="entry-content"> <p>Overview of typical process</p> <p>In Linux, the flow of control during a boot is from BIOS,[clarification needed] to boot loader, to kernel. The kernel then starts the scheduler (to allow multi-tasking) and runs the first userland (i.e. outside kernel space) program Init (which sets up the user environment[clarification needed] and allows user interaction and login), at which point the kernel goes idle unless called externally.</p> <p>In detail:</p> <p> 1. The BIOS performs hardware-platform specific startup tasks<br /> 2. Once the hardware is recognized and started correctly, the BIOS loads and executes the partition boot code from the designated boot device, which contains phase 1 of a Linux boot loader. Phase 1 loads phase 2 (the bulk of the boot loader code). Some loaders may use an intermediate phase (known as phase 1.5) to achieve this since modern large disks may not be fully readable without further code.<br /> 3. The boot loader often presents the user with a menu of possible boot options. It then loads the operating system, which decompresses into memory, and sets up system functions such as essential hardware and memory paging, before calling start_kernel().<br /> 4. start_kernel() then performs the majority of system setup (interrupts, the rest of memory management, device initialization, drivers, etc) before spawning separately, the idle process and scheduler, and the Init process (which is executed in user space).<br /> 5. The scheduler effectively takes control of the system management, as the kernel goes dormant (idle).<br /> 6. The Init process executes scripts as needed that set up all non-operating system services and structures in order to allow a user environment to be created, and then presents the user with a login screen.</p> <p>On shutdown, Init is called to close down all user space functionality in a controlled manner, again via scripted directions, following which Init terminates and the Kernel executes its own shutdown.<br /> [edit] Boot loader phase</p> <p>The boot loader phase varies by platform. Since the earlier phases are not specific to the OS, the boot process is considered to start:</p> <p> * For x86 or x86-64: when the partition boot sector code is executed in real mode and loads the first stage boot loader (typically a part of LILO or GRUB).</p> <p>From that point, the boot process continues as follows:</p> <p>The first stage BOOT Loader loads the remainder of the boot loader, which typically gives a prompt asking which operating system (or type of session) the user wishes to initialize. Under LILO, this is done via the map installer[clarification needed] which reads the configuration file /etc/lilo.conf to identify the available systems. It includes data such as boot partition and kernel location for each, as well as customized options if any. The selected operating system is loaded into RAM memory, a minimal initial file system is set up in RAM from an image file (“initrd”), and along with the appropriate parameters, control is passed to the newly activated operating system.</p> <p>LILO and GRUB differ in some ways:[1]</p> <p> * LILO does not understand file systems, so it uses raw disk offsets and the BIOS for data load. It loads the menu code, and then depending on the response loads either the 512 byte disk sectors for an MBR system[clarification needed] such as Microsoft Windows, or the kernel image for Linux.[1]<br /> * GRUB by contrast does have understanding of the common ext2 and ext3 file systems.[2] Because GRUB stores its data in a configuration file rather than the MBR and contains a command-line interface, it is often easier to rectify or modify GRUB if misconfigured or corrupt.[3]</p> <p>[edit] GRUB</p> <p> Source: Red Hat GRUB description.</p> <p> 1. The first stage loader is read by the BIOS from the MBR (master boot record).<br /> 2. The first stage loads the rest of the boot loader (second stage). If the second stage is on a large drive, sometimes an intermediate 1.5 stage is loaded, which contains extra code to allow cylinders above 1024, or LBA type drives, to be read. The 1.5 boot loader is stored (if needed) in the MBR or the boot partition.<br /> 3. The second stage boot loader executes, and displays the GRUB startup menu. It also allows choice of operating environment[clarification needed], and examination of system parameters.<br /> 4. When an operating system is chosen, it is loaded and control is passed.</p> <p>GRUB supports both direct and chain-loading boot methods, LBA, ext2, and “a true command-based, pre-OS environment on x86 machines”. It contains three interfaces: a selection menu, a configuration editor, and a command line console. The new Grub version 2 has support for ext4 file system.[4]<br /> [edit] LILO</p> <p>LILO, the older of the two boot loaders, is almost identical to GRUB in process, except that it does not contain a command line interface. Thus all changes must be made to its configuration and written to the MBR, and then the system restarted. An error in configuration can therefore leave a disk unable to be booted without use of a separate boot device (floppy disk etc) containing a program capable of fixing this.[3] Additionally, it does not understand file systems. Instead, locations of image files are stored within the MBR directly[3] and the BIOS is used to access them directly.<br /> [edit] Loadlin<br /> Main article: Loadlin</p> <p>Yet another way to boot Linux is from DOS or Windows 9x, where the Linux kernel completely replaces the running copy of this operating system. This can be useful in the case of hardware which needs to be switched on via software and for which such configuration programs are only available for DOS, whereas not for Linux, those being proprietary to the manufacturer and kept an industry secret. This tedious booting method is less necessary nowadays, as Linux has drivers for a multitude of hardware devices, but it used to be helpful in the past.<br /> Another case is when the Linux is located on a storage device which is not available to the BIOS for booting: DOS or Windows can load the appropriate drivers to make up for the BIOS limitation, and boot Linux from there.<br /> [edit] Kernel phase</p> <p>The kernel in Linux handles all operating system processes, such as memory management, task scheduling, I/O, interprocess communication, and overall system control. This is loaded in two stages – in the first stage the kernel (as a compressed image file) is loaded into memory and decompressed, and a few fundamental functions such as basic memory management are set up. Control is then switched one final time to the main kernel start process. Once the kernel is fully operational – and as part of its startup, upon being loaded and executing – the kernel looks for an init process to run, which (separately) sets up a user space and the processes needed for a user environment and ultimate login. The kernel itself is then allowed to go idle, subject to calls from other processes.<br /> [edit] Kernel loading stage</p> <p>The kernel as loaded is typically an image file, compressed into either zImage or bzImage formats with zlib. It contains a header program[clarification needed] which does a minimal amount of hardware setup, decompresses the image fully into high memory, taking note of any RAM disk if configured.[5] It then executes kernel startup via ./arch/i386/boot/head and the startup_32 () (for x86 based processors) process.<br /> [edit] Kernel startup stage</p> <p> Source: IBM description of Linux boot process</p> <p>The startup function for the kernel (also called the swapper or process 0) establishes memory management (paging tables and memory paging), detects the type of CPU and any additional functionality such as floating point capabilities, and then switches to non-architecture specific Linux kernel functionality via a call to start_kernel ().</p> <p>start_kernel executes a wide range of initialization functions. It sets up interrupt handling (IRQs), further configures memory, starts the Init process (the first user-space process), and then starts the idle task via cpu_idle (). Notably, the kernel startup process also mounts the initial RAM disk (“initrd”) that was loaded previously as the temporary root filing system during the boot phase. This allows driver modules to be loaded without reliance upon other physical devices and drivers,[clarification needed] and keeps the kernel smaller. The root file system is later switched via a call to pivot_root () which unmounts the temporary root file system and replaces it with the use of the real one, once the latter is accessible. The memory used by the temporary root file system is then reclaimed.</p> <p>Thus, the kernel initializes devices, mounts the root filesystem specified by the boot loader as read only, and runs Init (/sbin/init) which is designated as the first process run by the system (PID = 1).[1] A message is printed by the kernel upon mounting the file system, and by Init upon starting the Init process. It may also optionally run Initrd[clarification needed] to allow setup and device related matters (RAM disk or similar) to be handled before the root file system is mounted.[1]</p> <p>According to Red Hat, the detailed kernel process at this stage is therefore summarized as follows:[2]</p> <p> “When the kernel is loaded, it immediately initializes and configures the computer’s memory and configures the various hardware attached to the system, including all processors, I/O subsystems, and storage devices. It then looks for the compressed initrd image in a predetermined location in memory, decompresses it, mounts it, and loads all necessary drivers. Next, it initializes virtual devices related to the file system, such as LVM or software RAID before unmounting the initrd disk image and freeing up all the memory the disk image once occupied. The kernel then creates a root device,[clarification needed] mounts the root partition read-only, and frees any unused memory. At this point, the kernel is loaded into memory and operational. However, since there are no user applications that allow meaningful input to the system, not much can be done with it.”</p> <p>At this point, with interrupts enabled, the scheduler can take control of the overall management of the system, to provide pre-emptive multi-tasking, and the init process is left to continue booting the user environment in user space.<br /> [edit] Init process (SysV init style only)</p> <p> “Init is the father of all processes. Its primary role is to create processes from a script stored in the file /etc/inittab. This file usually has entries which cause init to spawn gettys on each line that users can log in. It also controls autonomous processes[clarification needed] required by any particular system. A run level is a software configuration of the system which allows only a selected group of processes to exist. The processes spawned by init for each of these run levels are defined in the /etc/inittab file.<br /> – manual page for Init[6]</p> <p>Init’s job is “to get everything running the way it should be” [7] once the kernel is fully running. Essentially it establishes and operates the entire user space. This includes checking and mounting file systems, starting up necessary user services, and ultimately switching to a user-environment when system startup is completed. It is similar to the Unix and BSD init processes, from which it derived, but in some cases has diverged or became customized. In a standard Linux system, Init is executed with a parameter, known as a runlevel, that takes a value from 1 to 6, and that determines which subsystems are to be made operational. Each runlevel has its own scripts which codify the various processes involved in setting up or leaving the given runlevel, and it is these scripts which are referenced as necessary in the boot process. Init scripts are typically held in directories with names such as “/etc/rc…”. The top level configuration file for init is at /etc/inittab.[7]</p> <p>During system boot, it checks whether a default runlevel is specified in /etc/inittab, and requests the runlevel to enter via the system console if not. It then proceeds to run all the relevant boot scripts for the given runlevel, including loading modules, checking the integrity of the root file system (which was mounted read-only) and then remounting it for full read-write access, and sets up the network.[1]</p> <p>In detail, according to Red Hat, the init process follows the following steps:[2]</p> <p> 1. It looks at the sysinit script, which “sets the environment path[clarification needed], starts swap, checks the file systems, and takes care of everything the system needs to have done at system initialization.” This includes the system and hardware clock, special serial port processes, and the like.<br /> 2. Init then looks at the specific runlevel, as specified in that runlevels configuration.<br /> 3. Init then sets the source function library[clarification needed] for the system. This spells out how to start or kill a program and how to determine the PID of a program.<br /> 4. It then searches and starts each applicable process, and it creates a login session for the user.</p> <p>After it has spawned all of the processes specified, init goes dormant, and waits for one of three events to happen:- processes it started to end or die, a power failure signal[clarification needed], or a request via /sbin/telinit to further change the runlevel.[6]</p> <p>This applies to SysV-style init binaries. Other init binaries may behave differently.</p> <p>Ref: Wiki</p> </div> <div class="entry-meta"> <span class="entry-date"><a href="https://ipowerthailand.wordpress.com/2010/06/11/linux-startup-process/" class="published" title="2010-06-11T18:41:09+0700">มิถุนายน 11, 2010 – 6:41 pm</a> Categories: <a href="https://ipowerthailand.wordpress.com/category/uncategorized/" rel="category tag">Uncategorized</a></span> <span class="meta-sep">|</span> <span class="comments-link"><a href="https://ipowerthailand.wordpress.com/2010/06/11/linux-startup-process/#comments">Comments (1)</a></span> <p> </p> </div> </div><!-- .post --> <div id="nav-below" class="navigation"> <div class="nav-previous"><a href="https://ipowerthailand.wordpress.com/page/2/" ><span class="meta-nav">«</span> Older posts</a></div> <div class="nav-next"></div> </div> </div><!-- #content --> <div id="primary" class="sidebar"> <ul class="xoxo"> <li id="pages"> <h3>หน้า</h3> <ul> <li class="page_item page-item-2"><a href="https://ipowerthailand.wordpress.com/about/">เกี่ยวกับเรา</a></li> <li class="page_item page-item-93"><a href="https://ipowerthailand.wordpress.com/%e0%b8%82%e0%b8%b2%e0%b8%a2-%e0%b8%84%e0%b8%ad%e0%b8%99%e0%b9%82%e0%b8%94-jwplace-%e0%b8%8b-%e0%b8%a3%e0%b8%b1%e0%b8%8a%e0%b8%94%e0%b8%b232-%e0%b9%83%e0%b8%81%e0%b8%a5%e0%b9%89%e0%b8%81%e0%b8%a3/">ขาย คอนโด JWPlace – ซ.รัชดา32 ใกล้กรมส่งเสริมการส่งออก, รถไฟใต้ดิน</a></li> </ul> </li> <li id="categories"> <h3>หมวดหมู่</h3> <ul> <li class="cat-item cat-item-37964100"><a href="https://ipowerthailand.wordpress.com/category/%e0%b8%9b%e0%b8%a3%e0%b8%b0%e0%b8%81%e0%b8%b2%e0%b8%a8-%e0%b8%82%e0%b8%b2%e0%b8%a2%e0%b8%9a%e0%b9%89%e0%b8%b2%e0%b8%99/">ประกาศ ขายบ้าน</a> </li> <li class="cat-item cat-item-3385"><a href="https://ipowerthailand.wordpress.com/category/network/">Network</a> </li> <li class="cat-item cat-item-3383"><a href="https://ipowerthailand.wordpress.com/category/os/">OS</a> </li> <li class="cat-item cat-item-1"><a href="https://ipowerthailand.wordpress.com/category/uncategorized/">Uncategorized</a> </li> </ul> </li> <li id="archives"> <h3>คลังเก็บ</h3> <ul> <li><a href='https://ipowerthailand.wordpress.com/2010/08/'> สิงหาคม 2010</a></li> <li><a href='https://ipowerthailand.wordpress.com/2010/06/'> มิถุนายน 2010</a></li> <li><a href='https://ipowerthailand.wordpress.com/2010/05/'> พฤษภาคม 2010</a></li> </ul> </li> <li id="search"> <h3><label for="s">ค้นหา</label></h3> <form id="searchform" class="blog-search" method="get" action="https://ipowerthailand.wordpress.com"> <div> <input id="s" name="s" type="text" class="text" value="" size="10" tabindex="1" /> <input type="submit" class="button" value="Find" tabindex="2" /> </div> </form> </li> <li id="linkcat-1356" class="linkcat"><h3>Blogroll</h3> <ul class='xoxo blogroll'> <li><a href="http://wordpress.org/development/">Development Blog</a></li> <li><a href="http://codex.wordpress.org/">Documentation</a></li> <li><a href="http://wordpress.org/extend/plugins/">Plugins</a></li> <li><a href="http://wordpress.org/extend/ideas/">Suggest Ideas</a></li> <li><a href="http://wordpress.org/support/">Support Forum</a></li> <li><a href="http://wordpress.org/extend/themes/">Themes</a></li> <li><a href="http://planet.wordpress.org/">WordPress Planet</a></li> </ul> </li> <li id="rss-links"> <h3>RSS Feeds</h3> <ul> <li><a href="https://ipowerthailand.wordpress.com/feed/" title="iPower Thailand's Blog latest posts" rel="alternate" type="application/rss+xml">All posts</a></li> <li><a href="https://ipowerthailand.wordpress.com/comments/feed/" title="iPower Thailand's Blog latest comments" rel="alternate" type="application/rss+xml">All comments</a></li> </ul> </li> <li id="meta"> <h3>นิยาม</h3> <ul> <li><a href="https://wordpress.com/start/th?ref=wplogin">ลงทะเบียน</a></li> <li><a href="https://ipowerthailand.wordpress.com/wp-login.php">เข้าสู่ระบบ</a></li> </ul> </li> </ul> </div><!-- #primary .sidebar --> </div><!-- #container --> <div id="footer"> <span id="generator-link"><a href="https://wordpress.com/?ref=footer_website" rel="nofollow">สร้างเว็บไซต์หรือบล็อกฟรีที่ WordPress.com.</a></span> <span class="meta-sep">|</span> .</span> </div><!-- #footer --> </div><!-- #wrapper .hfeed --> <!-- --> <script type="text/javascript" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=2024184d47d929f88574eb4a47e5b1778b683b87e7f6078bb6a33f34c1178752e83406" id="grofiles-cards-js"></script> <script type="text/javascript" id="wpgroho-js-extra"> /* <![CDATA[ */ var WPGroHo = {"my_hash":""}; /* ]]> */ </script> <script crossorigin='anonymous' type='text/javascript' src='https://s0.wp.com/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script> <script> // Initialize and attach hovercards to all gravatars ( function() { function init() { if ( typeof Gravatar === 'undefined' ) { return; } if ( typeof Gravatar.init !== 'function' ) { return; } Gravatar.profile_cb = function ( hash, id ) { WPGroHo.syncProfileData( hash, id ); }; Gravatar.my_hash = WPGroHo.my_hash; Gravatar.init( 'body', '#wp-admin-bar-my-account', { i18n: { 'Edit your profile': 'แก้ไขข้อมูลส่วนตัวของคุณ', 'View profile': 'View profile', 'Sorry, we are unable to load this Gravatar profile.': 'Sorry, we are unable to load this Gravatar profile.', 'Sorry, we are unable to load this Gravatar profile. Please check your internet connection.': 'Sorry, we are unable to load this Gravatar profile. Please check your internet connection.', }, } ); } if ( document.readyState !== 'loading' ) { init(); } else { document.addEventListener( 'DOMContentLoaded', init ); } } )(); </script> <div style="display:none"> </div> <!-- CCPA [start] --> <script type="text/javascript"> ( function () { var setupPrivacy = function() { // Minimal Mozilla Cookie library // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie/Simple_document.cookie_framework var cookieLib = window.cookieLib = {getItem:function(e){return e&&decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*"+encodeURIComponent(e).replace(/[\-\.\+\*]/g,"\\$&")+"\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"))||null},setItem:function(e,o,n,t,r,i){if(!e||/^(?:expires|max\-age|path|domain|secure)$/i.test(e))return!1;var c="";if(n)switch(n.constructor){case Number:c=n===1/0?"; expires=Fri, 31 Dec 9999 23:59:59 GMT":"; max-age="+n;break;case String:c="; expires="+n;break;case Date:c="; expires="+n.toUTCString()}return"rootDomain"!==r&&".rootDomain"!==r||(r=(".rootDomain"===r?".":"")+document.location.hostname.split(".").slice(-2).join(".")),document.cookie=encodeURIComponent(e)+"="+encodeURIComponent(o)+c+(r?"; domain="+r:"")+(t?"; path="+t:"")+(i?"; secure":""),!0}}; // Implement IAB USP API. window.__uspapi = function( command, version, callback ) { // Validate callback. if ( typeof callback !== 'function' ) { return; } // Validate the given command. if ( command !== 'getUSPData' || version !== 1 ) { callback( null, false ); return; } // Check for GPC. If set, override any stored cookie. if ( navigator.globalPrivacyControl ) { callback( { version: 1, uspString: '1YYN' }, true ); return; } // Check for cookie. var consent = cookieLib.getItem( 'usprivacy' ); // Invalid cookie. if ( null === consent ) { callback( null, false ); return; } // Everything checks out. Fire the provided callback with the consent data. callback( { version: 1, uspString: consent }, true ); }; // Initialization. document.addEventListener( 'DOMContentLoaded', function() { // Internal functions. var setDefaultOptInCookie = function() { var value = '1YNN'; var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; cookieLib.setItem( 'usprivacy', value, 365 * 24 * 60 * 60, '/', domain ); }; var setDefaultOptOutCookie = function() { var value = '1YYN'; var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); }; var setDefaultNotApplicableCookie = function() { var value = '1---'; var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; cookieLib.setItem( 'usprivacy', value, 24 * 60 * 60, '/', domain ); }; var setCcpaAppliesCookie = function( applies ) { var domain = '.wordpress.com' === location.hostname.slice( -14 ) ? '.rootDomain' : location.hostname; cookieLib.setItem( 'ccpa_applies', applies, 24 * 60 * 60, '/', domain ); } var maybeCallDoNotSellCallback = function() { if ( 'function' === typeof window.doNotSellCallback ) { return window.doNotSellCallback(); } return false; } // Look for usprivacy cookie first. var usprivacyCookie = cookieLib.getItem( 'usprivacy' ); // Found a usprivacy cookie. if ( null !== usprivacyCookie ) { // If the cookie indicates that CCPA does not apply, then bail. if ( '1---' === usprivacyCookie ) { return; } // CCPA applies, so call our callback to add Do Not Sell link to the page. maybeCallDoNotSellCallback(); // We're all done, no more processing needed. return; } // We don't have a usprivacy cookie, so check to see if we have a CCPA applies cookie. var ccpaCookie = cookieLib.getItem( 'ccpa_applies' ); // No CCPA applies cookie found, so we'll need to geolocate if this visitor is from California. // This needs to happen client side because we do not have region geo data in our $SERVER headers, // only country data -- therefore we can't vary cache on the region. if ( null === ccpaCookie ) { var request = new XMLHttpRequest(); request.open( 'GET', 'https://public-api.wordpress.com/geo/', true ); request.onreadystatechange = function () { if ( 4 === this.readyState ) { if ( 200 === this.status ) { // Got a geo response. Parse out the region data. var data = JSON.parse( this.response ); var region = data.region ? data.region.toLowerCase() : ''; var ccpa_applies = ['california', 'colorado', 'connecticut', 'delaware', 'indiana', 'iowa', 'montana', 'new jersey', 'oregon', 'tennessee', 'texas', 'utah', 'virginia'].indexOf( region ) > -1; // Set CCPA applies cookie. This keeps us from having to make a geo request too frequently. setCcpaAppliesCookie( ccpa_applies ); // Check if CCPA applies to set the proper usprivacy cookie. if ( ccpa_applies ) { if ( maybeCallDoNotSellCallback() ) { // Do Not Sell link added, so set default opt-in. setDefaultOptInCookie(); } else { // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. setDefaultOptOutCookie(); } } else { // CCPA does not apply. setDefaultNotApplicableCookie(); } } else { // Could not geo, so let's assume for now that CCPA applies to be safe. setCcpaAppliesCookie( true ); if ( maybeCallDoNotSellCallback() ) { // Do Not Sell link added, so set default opt-in. setDefaultOptInCookie(); } else { // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. setDefaultOptOutCookie(); } } } }; // Send the geo request. request.send(); } else { // We found a CCPA applies cookie. if ( ccpaCookie === 'true' ) { if ( maybeCallDoNotSellCallback() ) { // Do Not Sell link added, so set default opt-in. setDefaultOptInCookie(); } else { // Failed showing Do Not Sell link as required, so default to opt-OUT just to be safe. setDefaultOptOutCookie(); } } else { // CCPA does not apply. setDefaultNotApplicableCookie(); } } } ); }; // Kickoff initialization. if ( window.defQueue && defQueue.isLOHP && defQueue.isLOHP === 2020 ) { defQueue.items.push( setupPrivacy ); } else { setupPrivacy(); } } )(); </script> <!-- CCPA [end] --> <div class="widget widget_eu_cookie_law_widget"> <div class="hide-on-button ads-active" data-hide-timeout="30" data-consent-expiration="180" id="eu-cookie-law" style="display: none" > <form method="post"> <input type="submit" value="Close and accept" class="accept" /> Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. <br /> To find out more, including how to control cookies, see here: <a href="https://automattic.com/cookies/" rel="nofollow"> Cookie Policy </a> </form> </div> </div> <div id="actionbar" style="display: none;" class="actnbr-pub-notesil actnbr-has-follow"> <ul> <li class="actnbr-btn actnbr-hidden"> <a class="actnbr-action actnbr-actn-follow " href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg> <span>สมัครเป็นสมาชิก</span> </a> <a class="actnbr-action actnbr-actn-following no-display" href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path class="following-icon-tick" d="M13.5 16L15.5 18L19 14.5" stroke="#008A20" stroke-width="1.5"></path></svg> <span>Subscribed</span> </a> <div class="actnbr-popover tip tip-top-left actnbr-notice" id="follow-bubble"> <div class="tip-arrow"></div> <div class="tip-inner actnbr-follow-bubble"> <ul> <li class="actnbr-sitename"> <a href="https://ipowerthailand.wordpress.com"> <img alt='' src='https://s0.wp.com/i/logo/wpcom-gray-white.png' srcset='https://s0.wp.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /> iPower Thailand's Blog </a> </li> <div class="actnbr-message no-display"></div> <form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" style="display: none;"> <div> <input type="email" name="email" placeholder="ใส่อีเมลล์ของคุณที่นี่" class="actnbr-email-field" aria-label="ใส่อีเมลล์ของคุณที่นี่" /> </div> <input type="hidden" name="action" value="subscribe" /> <input type="hidden" name="blog_id" value="13776598" /> <input type="hidden" name="source" value="https://ipowerthailand.wordpress.com/" /> <input type="hidden" name="sub-type" value="actionbar-follow" /> <input type="hidden" id="_wpnonce" name="_wpnonce" value="e586cae821" /> <div class="actnbr-button-wrap"> <button type="submit" value="Sign me up"> Sign me up </button> </div> </form> <li class="actnbr-login-nudge"> <div> Already have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fipowerthailand.wordpress.com%2F2010%2F08%2F21%2Ferror-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%94%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B9%88%E0%B8%AD%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%96%E0%B8%B7%2F&signup_flow=account">Log in now.</a> </div> </li> </ul> </div> </div> </li> <li class="actnbr-ellipsis actnbr-hidden"> <svg class="gridicon gridicons-ellipsis" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M7 12c0 1.104-.896 2-2 2s-2-.896-2-2 .896-2 2-2 2 .896 2 2zm12-2c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-7 0c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2z"/></g></svg> <div class="actnbr-popover tip tip-top-left actnbr-more"> <div class="tip-arrow"></div> <div class="tip-inner"> <ul> <li class="actnbr-sitename"> <a href="https://ipowerthailand.wordpress.com"> <img alt='' src='https://s0.wp.com/i/logo/wpcom-gray-white.png' srcset='https://s0.wp.com/i/logo/wpcom-gray-white.png 1x' class='avatar avatar-50' height='50' width='50' /> iPower Thailand's Blog </a> </li> <li class="actnbr-folded-customize"> <a href="https://ipowerthailand.wordpress.com/wp-admin/customize.php?url=https%3A%2F%2Fipowerthailand.wordpress.com%2F"> <svg class="gridicon gridicons-customize" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M2 6c0-1.505.78-3.08 2-4 0 .845.69 2 2 2 1.657 0 3 1.343 3 3 0 .386-.08.752-.212 1.09.74.594 1.476 1.19 2.19 1.81L8.9 11.98c-.62-.716-1.214-1.454-1.807-2.192C6.753 9.92 6.387 10 6 10c-2.21 0-4-1.79-4-4zm12.152 6.848l1.34-1.34c.607.304 1.283.492 2.008.492 2.485 0 4.5-2.015 4.5-4.5 0-.725-.188-1.4-.493-2.007L18 9l-2-2 3.507-3.507C18.9 3.188 18.225 3 17.5 3 15.015 3 13 5.015 13 7.5c0 .725.188 1.4.493 2.007L3 20l2 2 6.848-6.848c1.885 1.928 3.874 3.753 5.977 5.45l1.425 1.148 1.5-1.5-1.15-1.425c-1.695-2.103-3.52-4.092-5.448-5.977z"/></g></svg> <span>ปรับแต่ง</span> </a> </li> <li class="actnbr-folded-follow"> <a class="actnbr-action actnbr-actn-follow " href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg> <span>สมัครเป็นสมาชิก</span> </a> <a class="actnbr-action actnbr-actn-following no-display" href=""> <svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path class="following-icon-tick" d="M13.5 16L15.5 18L19 14.5" stroke="#008A20" stroke-width="1.5"></path></svg> <span>Subscribed</span> </a> </li> <li class="actnbr-signup"><a href="https://wordpress.com/start/">ลงทะเบียน</a></li> <li class="actnbr-login"><a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fipowerthailand.wordpress.com%2F2010%2F08%2F21%2Ferror-%E0%B8%97%E0%B8%B5%E0%B9%88%E0%B9%80%E0%B8%81%E0%B8%B4%E0%B8%94%E0%B8%88%E0%B8%B2%E0%B8%81%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%95%E0%B9%88%E0%B8%AD%E0%B8%A1%E0%B8%B7%E0%B8%AD%E0%B8%96%E0%B8%B7%2F&signup_flow=account">เข้าสู่ระบบ</a></li> <li class="flb-report"> <a href="https://wordpress.com/abuse/?report_url=https://ipowerthailand.wordpress.com" target="_blank" rel="noopener noreferrer"> Report this content </a> </li> <li class="actnbr-reader"> <a href="https://wordpress.com/read/blogs/13776598"> View site in Reader </a> </li> <li class="actnbr-subs"> <a href="https://subscribe.wordpress.com/">Manage subscriptions</a> </li> <li class="actnbr-fold"><a href="">Collapse this bar</a></li> </ul> </div> </div> </li> </ul> </div> <script> window.addEventListener( "load", function( event ) { var link = document.createElement( "link" ); link.href = "https://s0.wp.com/wp-content/mu-plugins/actionbar/actionbar.css?v=20240115"; link.type = "text/css"; link.rel = "stylesheet"; document.head.appendChild( link ); var script = document.createElement( "script" ); script.src = "https://s0.wp.com/wp-content/mu-plugins/actionbar/actionbar.js?v=20231122"; script.defer = true; document.body.appendChild( script ); } ); </script> <div id="jp-carousel-loading-overlay"> <div id="jp-carousel-loading-wrapper"> <span id="jp-carousel-library-loading"> </span> </div> </div> <div class="jp-carousel-overlay" style="display: none;"> <div class="jp-carousel-container"> <!-- The Carousel Swiper --> <div class="jp-carousel-wrap swiper-container jp-carousel-swiper-container jp-carousel-transitions" itemscope itemtype="https://schema.org/ImageGallery"> <div class="jp-carousel swiper-wrapper"></div> <div class="jp-swiper-button-prev swiper-button-prev"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12"> <path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/> </mask> <g mask="url(#maskPrev)"> <rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </div> <div class="jp-swiper-button-next swiper-button-next"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12"> <path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/> </mask> <g mask="url(#maskNext)"> <rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/> </g> </svg> </div> </div> <!-- The main close buton --> <div class="jp-carousel-close-hint"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14"> <path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/> </mask> <g mask="url(#maskClose)"> <rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </div> <!-- Image info, comments and meta --> <div class="jp-carousel-info"> <div class="jp-carousel-info-footer"> <div class="jp-carousel-pagination-container"> <div class="jp-swiper-pagination swiper-pagination"></div> <div class="jp-carousel-pagination"></div> </div> <div class="jp-carousel-photo-title-container"> <h2 class="jp-carousel-photo-caption"></h2> </div> <div class="jp-carousel-photo-icons-container"> <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Toggle photo metadata visibility"> <span class="jp-carousel-icon"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> <path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/> </mask> <g mask="url(#maskInfo)"> <rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> </span> </a> <a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Toggle photo comments visibility"> <span class="jp-carousel-icon"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20"> <path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/> </mask> <g mask="url(#maskComments)"> <rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> <span class="jp-carousel-has-comments-indicator" aria-label="This image has comments."></span> </span> </a> </div> </div> <div class="jp-carousel-info-extra"> <div class="jp-carousel-info-content-wrapper"> <div class="jp-carousel-photo-title-container"> <h2 class="jp-carousel-photo-title"></h2> </div> <div class="jp-carousel-comments-wrapper"> <div id="jp-carousel-comments-loading"> <span>Loading Comments...</span> </div> <div class="jp-carousel-comments"></div> <div id="jp-carousel-comment-form-container"> <span id="jp-carousel-comment-form-spinner"> </span> <div id="jp-carousel-comment-post-results"></div> <form id="jp-carousel-comment-form"> <label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label> <textarea name="comment" class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" id="jp-carousel-comment-form-comment-field" placeholder="Write a Comment..." ></textarea> <div id="jp-carousel-comment-form-submit-and-info-wrapper"> <div id="jp-carousel-comment-form-commenting-as"> <fieldset> <label for="jp-carousel-comment-form-email-field">อีเมล (Required)</label> <input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /> </fieldset> <fieldset> <label for="jp-carousel-comment-form-author-field">ชื่อ (Required)</label> <input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /> </fieldset> <fieldset> <label for="jp-carousel-comment-form-url-field">เว็บไซต์</label> <input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /> </fieldset> </div> <input type="submit" name="submit" class="jp-carousel-comment-form-button" id="jp-carousel-comment-form-button-submit" value="แสดงความเห็น" /> </div> </form> </div> </div> <div class="jp-carousel-image-meta"> <div class="jp-carousel-title-and-caption"> <div class="jp-carousel-photo-info"> <h3 class="jp-carousel-caption" itemprop="caption description"></h3> </div> <div class="jp-carousel-photo-description"></div> </div> <ul class="jp-carousel-image-exif" style="display: none;"></ul> <a class="jp-carousel-image-download" href="#" target="_blank" style="display: none;"> <svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18"> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/> </mask> <g mask="url(#mask0)"> <rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/> </g> </svg> <span class="jp-carousel-download-text"></span> </a> <div class="jp-carousel-image-map" style="display: none;"></div> </div> </div> </div> </div> </div> </div> <link crossorigin='anonymous' rel='stylesheet' id='all-css-0-2' href='https://s0.wp.com/_static/??-eJydjEEKgCAQAD+UrR6KLtFbTJfQdJXWxe9HUB/oOMMw0KtyhRpSgyyqJjkCMURs1brzZWAhyMVLQgZnryKMCbiHipfahXzC0TEP8H/2NZ94fltezbxMxkx61vEGx+U/hQ==&cssminify=yes' type='text/css' media='all' /> <script type="text/javascript" id="jetpack-carousel-js-extra"> /* <![CDATA[ */ var jetpackSwiperLibraryPath = {"url":"https:\/\/s0.wp.com\/wp-content\/mu-plugins\/jetpack-plugin\/sun\/_inc\/build\/carousel\/swiper-bundle.min.js"}; var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"th","ajaxurl":"https:\/\/ipowerthailand.wordpress.com\/wp-admin\/admin-ajax.php","nonce":"c1d4fc705d","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2b\u0e47\u0e19","post_comment":"\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e27\u0e32\u0e21\u0e40\u0e2b\u0e47\u0e19","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","download_original":"View full size <span class=\"photo-size\">{0}<span class=\"photo-size-times\">\u00d7<\/span>{1}<\/span>","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"\u0e2a\u0e07\u0e27\u0e19\u0e25\u0e34\u0e02\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c","comment_registration":"0","require_name_email":"1","login_url":"https:\/\/ipowerthailand.wordpress.com\/wp-login.php?redirect_to=https%3A%2F%2Fipowerthailand.wordpress.com%2F2010%2F06%2F22%2F%25e0%25b8%2581%25e0%25b8%25b2%25e0%25b8%25a3%25e0%25b9%2580%25e0%25b8%258b%25e0%25b8%2595%25e0%25b9%2583%25e0%25b8%25ab%25e0%25b9%2589%25e0%25b8%2584%25e0%25b8%25ad%25e0%25b8%25a1%25e0%25b9%2580%25e0%25b8%2584%25e0%25b8%25a3%25e0%25b8%25b7%25e0%25b9%2588%25e0%25b8%25ad%25e0%25b8%2587%25e0%25b9%2581%25e0%25b8%25a1%25e0%25b9%2588-3%2F","blog_id":"13776598","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=13776598&v=wpcom&tz=7&user_id=0&subd=ipowerthailand","is_public":"1"}; /* ]]> */ </script> <script crossorigin='anonymous' type='text/javascript' src='https://s0.wp.com/_static/??-eJx9jEsOgzAMRC/U1FAhuqp6lMokFkpwPsKOcv2yKG3FguW8mTfQirE5KSWFifNsCtfZJ4GWV4dOjGUUIYGwIVS+BrnAnxPrz/BuJhWgurV58WQYGyjFwqh04Cc/gbSgXT4ZpCZ4+WRhqp4dWFxzFeLvbAfX6NPJ6z4zrdgcD3HznvHR3/th7LrbMIY3v8doCA=='></script> <script type="text/javascript"> (function () { var wpcom_reblog = { source: 'toolbar', toggle_reblog_box_flair: function (obj_id, post_id) { // Go to site selector. This will redirect to their blog if they only have one. const postEndpoint = `https://wordpress.com/post`; // Ideally we would use the permalink here, but fortunately this will be replaced with the // post permalink in the editor. const originalURL = `${ document.location.href }?page_id=${ post_id }`; const url = postEndpoint + '?url=' + encodeURIComponent( originalURL ) + '&is_post_share=true' + '&v=5'; const redirect = function () { if ( ! window.open( url, '_blank' ) ) { location.href = url; } }; if ( /Firefox/.test( navigator.userAgent ) ) { setTimeout( redirect, 0 ); } else { redirect(); } }, }; window.wpcom_reblog = wpcom_reblog; })(); </script> <script type="text/javascript"> // <![CDATA[ (function() { try{ if ( window.external &&'msIsSiteMode' in window.external) { if (window.external.msIsSiteMode()) { var jl = document.createElement('script'); jl.type='text/javascript'; jl.async=true; jl.src='/wp-content/plugins/ie-sitemode/custom-jumplist.php'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(jl, s); } } }catch(e){} })(); // ]]> </script><script src="//stats.wp.com/w.js?67" defer></script> <script type="text/javascript"> _tkq = window._tkq || []; _stq = window._stq || []; _tkq.push(['storeContext', {'blog_id':'13776598','blog_tz':'7','user_lang':'th','blog_lang':'th','user_id':'0'}]); _stq.push(['view', {'blog':'13776598','v':'wpcom','tz':'7','user_id':'0','subd':'ipowerthailand'}]); _stq.push(['extra', {'crypt':'UE5XaGUuOTlwaD85flAmcm1mcmZsaDhkV11YdWFnNncxc1tjZG9XVXhRREQ/V0w5cWpkb01PR3VqczBmb3pXN01vVUlfc2k4cXlJUiZURFdfZSVybll6UWVOdEZENkNPMC5JN218aUlzOEU5fGtyNDZ6U2s4flhrQnFSNHhoYW9EcldWYXFYbUdZLDByaEY3ZmtYWE8xdVFVRHIucWZ1cE9DNjhQRTVteFY0Q21NVWxEeWN2RVhYQmo0RyttSGVySWVqUEJmUiV0diZba2RuZWpBekRbeT0lSUw2MD8mW0pfYnx0M3pRWVZyOHV2azY9MEI5Qn4uSU0lSTZrdCU/cD8vTTFHV0g='}]); _stq.push([ 'clickTrackerInit', '13776598', '0' ]); </script> <noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript> <script> if ( 'object' === typeof wpcom_mobile_user_agent_info ) { wpcom_mobile_user_agent_info.init(); var mobileStatsQueryString = ""; if( false !== wpcom_mobile_user_agent_info.matchedPlatformName ) mobileStatsQueryString += "&x_" + 'mobile_platforms' + '=' + wpcom_mobile_user_agent_info.matchedPlatformName; if( false !== wpcom_mobile_user_agent_info.matchedUserAgentName ) mobileStatsQueryString += "&x_" + 'mobile_devices' + '=' + wpcom_mobile_user_agent_info.matchedUserAgentName; if( wpcom_mobile_user_agent_info.isIPad() ) mobileStatsQueryString += "&x_" + 'ipad_views' + '=' + 'views'; if( "" != mobileStatsQueryString ) { new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?v=wpcom-no-pv' + mobileStatsQueryString + '&baba=' + Math.random(); } } </script></body> </html>