<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5121598982908395282</id><updated>2011-11-28T06:50:10.920+07:00</updated><category term='printing'/><category term='programing'/><category term='virtual pc'/><category term='server automation'/><category term='database'/><title type='text'>My DOS Accounting</title><subtitle type='html'>Thai Accounting Program - VAT, Stock, Billing, Purchasing, Ledger, Witholding Tax and more...&lt;br /&gt;
Platform - MS-DOS, Cross DOS-Windows Printing and Virtual Machine.&lt;br /&gt;
Development - C, C#, Python, PHP and Dot NET and more...&lt;br /&gt;
Database - Btrieve, PervasiveSQL, MySQL and more...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-6570053007098273496</id><published>2009-03-21T23:19:00.001+07:00</published><updated>2009-03-22T02:34:21.907+07:00</updated><title type='text'>Windows Fundamentals for Legacy PCs</title><content type='html'>&lt;H4&gt;Windows Fundamentals for Legacy PCs&lt;/H4&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV id=zdhh style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_30ckqmxcdk_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 194px" src="http://docs.google.com/File?id=dfvwkh85_30ckqmxcdk_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ไม่น่าเชื่อว่าพวกเราส่วนใหญ่ ขนาดที่อยู่ในแวดวงไอทีเอง&amp;nbsp;ใช้ Windows XP หรือ&amp;nbsp;Windows Vista บางคนอาจได้ลองสัมผัส Windows 2008 แล้วด้วยซ้ำ&amp;nbsp;แต่กลับไม่คุ้นหูเจ้า Windows&amp;nbsp;ตัวนี้ ถ้าไม่ได้อยู่ในแวดวงของ Terminal-Server หรือ&amp;nbsp;Thin Client&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ชื่อย่อของ&amp;nbsp;Windows&amp;nbsp;รุ่นนี้คือ WinFLP ถ้าจะอธิบายอย่างง่ายๆ ก็บอกว่า นี่คือ&amp;nbsp;Windows XP รุ่นพิเศษ สำหรับใช้กับคอมพิวเตอร์เก่า ที่เคยใช้ Windows 98&amp;nbsp;ได้ มีประสิทธิภาพไม่สูงพอที่จะติดตั้ง Windows XP เช่น อาจจะมี Memory ไม่มาก หรือ CPU ไม่เร็ว&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;WinFLP กิน Resource น้อย สามารถติดตั้งแทน Windows 98&amp;nbsp;ได้ โดยไม่ต้อง upgrade Hardware&amp;nbsp;เพราะจะตัด module และ service หลายๆ ตัวที่ไม่จำเป็นออกไป ออกมาครั้งแรกเมื่อปี 2006 หรือ 4 ปีก่อน ประมาณช่วงเดียวกันกับ Windows XP SP2&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;เนื่องด้วยกระแส Virtual Machine ที่มาแรงในช่วงนี้ ทำให้มีความต้องการ OS ที่ใช้งานง่ายและเก่งแบบ Windows XP แต่กิน Resource น้อยแบบ Windows 98 ทำให้ WinFLP นี้เหมาะสำหรับ นำไปใช้เป็น Guest OS ใน Virtual Machine ด้วยเหตุผลที่เป็นสายพันธุ์ Windows XP ที่เบาและเร็วนั่นเอง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV id=js9x style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_31cgkntvgk_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 374px" src="http://docs.google.com/File?id=dfvwkh85_31cgkntvgk_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Spec ต่ำสุดที่&amp;nbsp;WinFLP สามารถทำงานได้คือ Memory แค่ 64MB และ CPU Pentium 233 MHz &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Spec ที่แนะนำสำหรับใช้ WinFLP คือ Memory 128MB และ CPU Pentium 300 MHz&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;Software ที่ถูกตัดออกไปคือ บรรดาเกมส์ต่างๆ&amp;nbsp;และ Outlook Express แต่ก็ยังมี Calculator, Notepad รวมทั้งความสามารถเรื่อง Remote Client และ Network นอกจากนี้ software บางตัวอาจทำงานไม่ได้เช่น Adobe CS4&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ล่าสุด WinFLP มี &lt;A id=aig4 title="Service Pack 3" href="http://www.microsoft.com/downloads/details.aspx?familyid=b0aacb27-707d-4ed1-8bd9-25a821096281&amp;amp;displaylang=en&amp;amp;tm" target=_blank&gt;Service Pack 3&lt;/A&gt; ออกมาให้ upgrade หรือเทียบรุ่นกับ Windows XP SP3&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;สาเหตุที่ WinFLP ไม่แพร่หลาย เนื่องจาก &lt;A id=mla- title=Microsoft href="http://www.microsoft.com/licensing/programs/sa/benefits/fundamentals.mspx" target=_blank&gt;Microsoft&lt;/A&gt; ไม่ได้จำหน่ายโดยทั่วไป ไม่ว่าจะเป็น Retail หรือ OEM มีใช้เฉพาะกลุ่มที่ทำสัญญารับประกันการใช้งานซอฟต์แวร์และยังไม่หมดสัญญา ที่มีปัญหาเพราะ Spec เครื่องเดิมใช้งานกับ Windows 98 ได้ แต่ Microsoft เลิก support Windows 98&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ผมได้รู้จัก WinFLP เนื่องจากบังเอิญได้เจอน้องที่ทำงาน SAP Support ได้กล่าวถึง ตอนที่กำลังปรึกษากันเรื่องที่จะย้ายระบบบัญชี Scraft ของเราขึ้นไปไว้ใน Virtual Machine นั่นเอง เมื่อได้รู้จักชื่อแล้ว ในโลกอินเตอร์เน็ต ไม่มียากนักที่เราจะสืบค้นลึกลงไป จนเจอรายละเอียดหรือตัวจริงให้ทดลองใช้ รออีกไม่นาน ถ้าได้ทดสอบแล้วจะได้เล่าให้ฟังเทียบกับ MicroXP &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ขอบคุณ รูปภาพตัวอย่างได้มาจาก gallery &lt;A href="http://bink.nu/photos/news_article_images/category1021.aspx"&gt;http://bink.nu/photos/news_article_images/category1021.aspx&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;จากบทความ &lt;A href="http://bink.nu/Article7745.bink"&gt;http://bink.nu/Article7745.bink&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แนะนำ link WinFLP ที่น่าสนใจ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A href="http://en.wikipedia.org/wiki/Windows_Fundamentals_for_Legacy_PCs"&gt;http://en.wikipedia.org/wiki/Windows_Fundamentals_for_Legacy_PCs&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A href="http://www.bill-mcminn.com/techreview/winflp.html"&gt;http://www.bill-mcminn.com/techreview/winflp.html&lt;/A&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-6570053007098273496?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/6570053007098273496/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=6570053007098273496' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6570053007098273496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6570053007098273496'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2009/03/windows-fundamentals-for-legacy-pcs.html' title='Windows Fundamentals for Legacy PCs'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-6027772136949149881</id><published>2009-03-17T10:08:00.001+07:00</published><updated>2009-03-22T05:01:29.924+07:00</updated><title type='text'>Stock with lot number</title><content type='html'>&lt;H4&gt;Stock with lot number&lt;/H4&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;สืบเนื่องจากแนวคิดของ adm ที่ว่า&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;BLOCKQUOTE id=dtwk&gt;"...ให้วางระบบ โดยใช้กลไกของสต็อกส่วนประกอบ สินค้าที่มีชื่อเป็นเลขล็อต ให้มีส่วนประกอบ เป็นชื่อสินค้าจริง อีกทีหนึ่ง ดังนั้น เมื่อเปิดบิลใช้ชื่อสินค้าที่เป็นเลขล็อต ก็จะไปตัดสต็อคทั้งสินค้าที่เป็นเลขล็อต และสินค้าจริงพร้อมกัน..."&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ข้อดีของแนวคิดที่ว่านี้ก็คือ ดูแล้วน่าจะปรับโปรแกรมเดิมน้อยที่สุด นอกจากนี้ การทำงานต่อจากนั้น แทบจะเรียกได้ว่า เดินตามกลไกมาตรฐานของโปรแกรม โดยไม่ต้องบิดฝืนใดๆ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;เราสามารถดูสถานะของสินค้า ไม่ว่ายอดคงเหลือ หรือ ที่เก็บสินค้า ได้ทั้งจาก ชื่อสินค้าจริง (สต็อกรวม) หรือ เลขล็อต&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;สามารถกด F8 จากชื่อสินค้าจริง เพื่อดูรายชื่อที่เป็นเลขล็อต และสามารถกด F8 จากเลขล็อต เพื่อดูชื่อสินค้าจริง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ทีนี้ ก็ได้เวลาที่จะต้องมาคิดกันจริงจัง&amp;nbsp;ว่าจริงๆ แล้วสามารถวางระบบ ให้ทำงานได้ตามนั้น จนจบทุกแง่มุมหรือไม่&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ประเด็นเนื้อหาที่สำคัญ ประกอบด้วย&lt;/DIV&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=gnia title="บิลซื้อ - การป้อนข้อมูลรับสินค้าที่มี lot no. เข้าสต็อก" href="#purchase"&gt;บิลซื้อ - การป้อนข้อมูลรับสินค้าที่มี lot no. เข้าสต็อก&lt;/A&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=fj9n title="บิลขาย - การป้อนข้อมูลเพื่อตัดสต็อกหรือขายสินค้าที่มี lot no." href="#billing"&gt;บิลขาย - การป้อนข้อมูลเพื่อตัดสต็อกหรือขายสินค้าที่มี lot no.&lt;/A&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=myjx title=ประเด็นอื่นๆ href="#others"&gt;ประเด็นอื่นๆ&lt;/A&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=bmx6 title="แนวคิด MODIFY เก็บเลขล็อตใน transaction สต็อกเข้า-ออก" href="#mod_transaction"&gt;แนวคิด MODIFY เก็บเลขล็อตใน transaction สต็อกเข้า-ออก&lt;/A&gt; &lt;/DIV&gt;&lt;br /&gt;&lt;LI&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=yfph title="แนวคิด MODIFY สต็อกเข้า-ออกหลายที่เก็บ ในบิลใบเดียวกัน" href="#mod_post"&gt;แนวคิด MODIFY สต็อกเข้า-ออกหลายที่เก็บ ในบิลใบเดียวกัน&lt;/A&gt; &lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=i1x4 name=purchase&gt;&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;บิลซื้อ - การป้อนข้อมูลรับสินค้าที่มี lot no. เข้าสต็อก&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;การรับสินค้าเข้าสต็อก เราใช้บิลซื้อในการป้อนข้อมูล หมายเลขล็อต ส่วนใหญ่เป็นหมายเลขใหม่ ไม่เคยมีในชื่อสต็อก อ้างอิงจากใบรับสินค้า ที่ได้จากผู้ผลิตสินค้า ที่ส่งสินค้าให้&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;BLOCKQUOTE id=is9y&gt;-- ? (*1) ยกเว้นกรณีเป็นผู้ผลิตเอง จะต้องออกเลขที่ lot เอง run no. ? (หยุด ยังไม่คิด)&lt;/BLOCKQUOTE&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;กรณีนี้ เมื่อผ่านรายการเข้าสต็อก โปรแกรมจะต้องเพิ่มเลขล็อตนั้น เข้าเป็นชื่อสินค้าในสต็อก อัตโนมัติ &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;พร้อมกับเชื่อมโยงความสัมพันธ์กับชื่อสินค้าจริง โดยตั้งสูตรส่วนประกอบให้อัตโนมัติด้วย ก่อนที่จะผ่านรายการเข้าสต็อก ตามกลไกมาตรฐาน ซึ่งต้อง ปรับโปรแกรมตรงจุดนี้&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;ตรงจุดนี้ adm ยังแนะนำเพิ่มเติมว่า&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;BLOCKQUOTE id=ccj4&gt;"...อย่าลืม mod เวลาผ่านต้นทุน ให้เข้าต้นทุนทั้ง 2 ชื่อพร้อมกัน ช่วยให้ดูต้นทุนได้ทั้งจาก เลขล็อต และชื่อสินค้า..."&lt;/BLOCKQUOTE&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แต่ก่อนที่จะถึงขั้นตอนผ่านรายการนั้น...&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ผมคิดถึงการป้อนข้อมูลของสินค้าล็อตในบิลซื้อ หลากหลายรูปแบบ ว่าแบบไหนจึงลื่นไหลเป็นธรรมชาติ ไม่ฝืนกับการทำงานจริง พร้อมๆ กับคิดถึงความเป็นไปได้ ที่โปรแกรมจะสามารถตีความได้ถูกต้อง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;กรณีสินค้าล็อตเดี่ยว 1:1&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;ตัวอย่างเอกสารจริง ที่เคยเห็นมา ลักษณะของ Invoice จากผู้ผลิต เขาจะแสดงเลขล็อตก่อน แล้วบรรทัดต่อมาจึงเป็นชื่อสินค้าจริง จำนวน และราคา ก็ระบุไว้ที่บรรทัดสินค้าจริง&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ที่จริงแล้ว เราน่าจะสามารถเอาเลขล็อตขึ้นก่อน หรือชื่อสินค้าจริงขึ้นก่อนก็ได้ ไม่น่ามีปัญหาอะไร ลักษณะของบรรทัดรายการที่เป็นไปได้ คือ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;STRIKE&gt;1. เลขล็อตอยู่บน, จำนวนและราคา อยู่กับเลขล็อต&lt;/STRIKE&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;2. เลขล็อตอยู่บน, จำนวนและราคา อยู่กับชื่อสินค้า&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;STRIKE&gt;3. เลขล็อตอยู่ล่าง, จำนวนและราคา อยู่กับเลขล็อต&lt;/STRIKE&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;4. เลขล็อตอยู่ล่าง, จำนวนและราคา อยู่กับชื่อสินค้า&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;FONT color=#0000ff&gt;note: ข้อ 1 และ 3 ปิดไม่ให้ใช้ลักษณะดังกล่าว เพื่อให้สอดคล้องกับกรณี 1:N (ดูเรื่อง 1:N ข้อถัดไป)&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;มีเงื่อนไขเดียวคือ ขอให้จัดรายการในบิล ให้เป็นแบบบรรทัดคู่ติดกัน แล้วเว้นว่าง 1 บรรทัด ก่อนที่จะขึ้นรายการสินค้าชุดต่อไป&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แล้วโปรแกรมจะแยกแยะ บรรทัดที่เป็นชื่อสินค้าจริง กับบรรทัดที่เป็นล็อตได้อย่างไร คำตอบก็คือ ต้องกำหนด format หรือ notation ที่จะช่วยให้โปรแกรมตีความบรรทัดว่า เป็นเลขล็อต เช่น ใช้เครื่องหมาย # นำหน้า เรื่องนี้ต้องสรุปให้ชัดเจนอีกครั้งตอนท้าย หลังจากได้คิดถึงรูปแบบการป้อนข้อมูลต่างๆ ได้ครบเสียก่อน มีเรื่องต้องคำนึงอีกเรื่องหนึ่งคือ การป้อนเลขล็อต โดยใช้ barcode หรือ RFID reader&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;กรณีสินค้าหลายล็อตต่อหนึ่งชื่อสินค้า 1:N&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;เราค้างเรื่องสินค้าล็อตเดี่ยวเอาไว้แค่นั้น แต่ต้องยกประเด็นกรณี ได้รับสินค้าหลายล็อตในบิลเดียวมาพิจารณา เพราะการป้อนข้อมูลกรณีนี้ อาจต้องคิดกันหลายๆ ชั้น เช่น&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ในชื่อสินค้า จะต้องระบุจำนวนรวม, ราคาต่อหน่วย และ จำนวนเงิน เพื่อคิดเงินให้ถูกต้อง ในเลขล็อต ต้องระบุจำนวนของล็อต เพื่อผ่านรายการเข้าสต็อกตามล็อตให้ถูกต้อง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แนวคิดเรื่อง เว้นบรรทัดว่าง เพื่อคั่น ระหว่างชุดล็อตที่เป็นสินค้าเดียวกัน ก็ยิ่งต้องเน้น ให้เป็นเงื่อนไขสำคัญ ในการป้อนข้อมูลในบิล ขณะที่ เรื่องของลำดับบน-ล่าง ระหว่างเลขล็อต กับชื่อสินค้าจริงนั้น ไม่ใช่ประเด็นปัญหาในการตีความ เนื่องจากเลขล็อตเป็นเลขใหม่ ต้องอาศัยการป้อนเลขเข้าไปเอง หรือใช้อุปกรณ์อ่าน barcode หรือ RFID reader อ่านจากตัวสินค้าจริง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ไม่จำเป็นต้องกด F1 เลือกจากข้อมูลในสต็อก&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;BLOCKQUOTE id=eu8t&gt;-- ? (*2) กรณีแบ่งล็อต (split lot) เพื่อแยกที่เก็บสินค้า ? (หยุด ไม่คิด)&lt;/BLOCKQUOTE&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;หากเราคิดไกลออกไปอีกนิด กรณี 1:N สามารถใช้ได้กับกรณีของสินค้าที่มี serial number ซึ่งคำจำกัดความของ serial ก็คือ ล็อต ที่มีจำนวนเป็น 1 เสมอ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;กลับมาเรื่องบิลซื้อ ดังที่กล่าวข้างต้น จะเห็นว่า กรณี 1:N จำเป็นมากที่จะต้องระบุจำนวนของแต่ละล็อต ขณะที่บรรทัด ชื่อสินค้าจริง ก็จำเป็นที่จะต้องมีจำนวนรวม เพื่อสอบทาน และใช้ในการคำนวณ คูณกับราคาต่อหน่วย เพื่อเป็นจำนวนเงิน&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แนวคิดในการออกแบบ การป้อนข้อมูล ในบรรทัดเลขล็อต ก็คือ &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;B&gt;1. กรณีชุดบรรทัดสินค้าล็อตนั้น มีการระบุเพียงหนึ่งล็อต&lt;/B&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ไม่จำเป็นต้องระบุจำนวนของล็อต ให้ใช้จำนวนจากบรรทัดชื่อสินค้าจริงได้เลย&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;B&gt;2. กรณีชุดบรรทัดสินค้าล็อตนั้น มีการระบุมากกว่าหนึ่งล็อต&lt;/B&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;จะต้องใช้วงเล็บ (...) หรือเครื่องหมาย = เพื่อระบุจำนวนของ lot ถ้าไม่ระบุจำนวนแปลว่าจำนวนเป็น 1 (ใช้กรณีเป็นแบบ serial ได้) ในบรรทัดอาจระบุมากกว่า หนึ่งล็อต โดยใช้ space หรือ , เพื่อแยกระหว่างล็อต เช่น &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;#12345(10),#111111 #123456=15&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV id=c_3x style="PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_13fhcdgmd9_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 68px" src="http://docs.google.com/File?id=dfvwkh85_13fhcdgmd9_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ครั้งหนึ่ง เคยเห็นบิลส่งของ เครื่องโทรศัพท์มือถือ จากตัวแทนจำหน่าย ค่อนข้างหลอน ตรงที่มีรายการ โทรศัพท์มือถือ 100 เครื่อง ถัดจากนั้น ก็เป็นเลข serial ตามมาเป็นพรืด บรรทัดละ 4-5 serial จนเต็มหน้าบิล และก็เคย คิดเขียนโปรแกรมให้รับ serial แบบใส่ว่าเลขไหน ถึงไหนได้ด้วย เช่น #NK32-0001...100 เพราะฝังใจกับเจ้าบิลใบนั้น&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;mod1: บิลซื้อ&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;จะต้องปรับโปรแกรมบิลซื้อ ให้สามารถรวมจำนวนจากบรรทัดล็อต มาใส่ในช่องจำนวนของบรรทัดสินค้าจริงได้ นอกจากนี้ ก่อน save จะต้องตรวจสอบว่า จำนวนในบรรทัดจริง ตรงกับจำนวนในบรรทัดล็อตด้วย&amp;nbsp;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;B&gt;mod2: ผ่านรายการบิลซื้อ&lt;/B&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ตามที่กล่าวไว้ตอนต้น จะต้องปรับโปรแกรมผ่านรายการบิลซื้อ ให้สามารถตีความบรรทัดล็อต และผ่านรายการแบบเพิ่มเลขล็อตในข้อมูลสินค้าอัตโนมัติ พร้อมสร้างสูตรส่วนประกอบสินค้า **? (ยังคิดไม่ลงตัว)&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;BLOCKQUOTE id=ovra&gt;&lt;br /&gt;&lt;P&gt;**? มาถึงตอนนี้ หลังจากพิจารณาลงไปในรายละเอียดแล้ว จะเห็นว่า การใช้กลไกสูตรส่วนประกอบที่โปรแกรมมีอยู่เดิมเพื่อ เข้าสต็อค หรือตัดสต็อคพร้อมกัน ทั้งตัวล็อตสินค้า และตัวสินค้าหลัก อาจจะไม่จำเป็น นอกจากนี้ก็ยังใช้ไม่ได้กรณีส่งผ่านต้นทุนด้วย ยังไงก็ต้องแก้โปรแกรมผ่านรายการบิลซื้ออยู่แล้ว ดังนั้นก็กำหนดให้บรรทัดล็อต เป็นบรรทัดที่มีความหมายพิเศษไปเลย ที่เราต้องการใช้ข้อมูลส่วนประกอบ เพื่อเชื่อมโยงสัมพันธ์ ให้ผู้ใช้สามารถดูกลับไปกลับมา ระหว่างชื่อสินค้า กับเลขล็อตได้เท่านั้น ดังนั้นเราอาจพิจารณาใหม่ เลือกใช้ได้หลายวิธี &lt;/P&gt;&lt;br /&gt;&lt;P&gt;1. ใช้สูตรส่วนประกอบ ข้อมูลเลขล็อต มีส่วนประกอบเป็นชื่อสินค้าจริง &lt;/P&gt;&lt;br /&gt;&lt;P&gt;2. ใช้ชื่อแทน ข้อมูลเลขล็อต มีชื่อแทนเป็นชื่อสินค้าจริง &lt;/P&gt;&lt;br /&gt;&lt;P&gt;3. เก็บเลขล็อต ใน transaction เข้า-ออกสต็อค &lt;/P&gt;&lt;br /&gt;&lt;P&gt;ขออธิบายเหตุผลที่คิดถึงข้อ 3 ก็คือ เราต้องไม่ลืมเรื่องข้อจำกัดที่ว่า ในบิลใบเดียวกัน สินค้าตัวเดียว ไม่สามารถแบ่งเก็บไว้หลายที่เก็บหรือหลายโกดัง ปัญหาที่อาจจะเป็นปัญหากรณีสินค้าหลายล็อต และแต่ละล็อตแยกเก็บคนละที่ ถ้าแก้ปัญหานี้ได้ เราก็สามารถตอบโจทย์เรื่อง split lot ได้ด้วย ผลพลอยได้ที่ตามมาก็คือ เราสามารถปรับส่วน รายการเข้า-ออกสต็อค ที่เดิม มีแค่ที่เก็บหรือโกดัง ให้มีเลขล็อตได้ด้วย วิธีนี้ ช่วยให้แฟ้มสินค้าไม่เกิดอาการข้อมูลล้น เนื่องจากมีรายการเลขล็อตมาสะสมเพิ่มขึ้นเรื่อยๆ ขณะเดียวกันเราสามารถกด space ที่ชื่อสินค้าเพื่อดู info ว่า มีสินค้าเหลืออยู่เป็น ล็อต/ที่เก็บไหนบ้าง แต่ข้อเสียก็คือ เสียเวลาในการ scan เลขล็อต **? (ยังคิดไม่ลงตัว) &lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;A id=ml6o name=billing&gt;&lt;/A&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;บิลขาย - การป้อนข้อมูลเพื่อตัดสต็อกหรือขายสินค้าที่มี lot no.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;การขายหรือเบิกสินค้า แตกต่างการรับสินค้า ตรงที่ หมายเลขล็อตที่ระบุ จะต้องมีอยู่แล้วในฐานข้อมูล ดังนั้นกลไกที่สำคัญในบิลขาย จะต้องมีระบบช่วยเหลือ สามารถให้ผู้ใช้ป้อนข้อมูลเลขล็อตได้สะดวก&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;นอกจากนี้ ยังต้องพิจารณาลักษณะการขายสินค้าของกิจการ ว่าเป็นแบบ ยกล็อต หรือแบ่งล็อต หรือขายทีละหนึ่ง แบบ serial&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;โปรแกรมจะต้องตรวจสอบได้ว่า เลขล็อตนั้นไม่มี หรือไม่ถูกต้อง รวมทั้งตรวจสอบได้ว่า ยอดคงเหลือของล็อตนั้นติดลบ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;การจัดบรรทัดในบิลขาย เทคนิคการใช้บรรทัดว่าง เพื่อคั่น ชุดบรรทัดสินค้า/ล็อต เราใช้เหมือนบิลซื้อ แต่บิลขายจะมีเพิ่มเติมระบบช่วยเหลือ เราแบ่งลักษณะการป้อนข้อมูลในบิลขาย ออกเป็น 2 ลักษณะที่สำคัญคือ&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;B&gt;ป้อนข้อมูลแบบใช้เลขล็อตนำ&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;กรณีนี้ เหมาะสำหรับการเตรียมสินค้า หรือเบิกออกมาก่อน หรือเตรียมจดหมายเลขล็อตสินค้าที่ต้องการไว้ก่อนแล้ว ซึ่งสามารถใช้อุปกรณ์ barcode หรือ RFID reader ช่วยในการป้อนข้อมูลได้ โปรแกรมจะต้องช่วยเหลือโดยการเติมชื่อสินค้า ในบรรทัดต่อไปให้อัตโนมัติ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;B&gt;ป้อนข้อมูลแบบใช้ชื่อสินค้านำ&lt;/B&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;เป็นการเปิดบิล เพื่อสั่งจัดสินค้า หรือเบิกสินค้า ตามที่ต้องการ กรณีนี้ ผู้เปิดบิล ต้องอาศัยให้โปรแกรมช่วย list รายการล็อตที่คงเหลืออยู่ในสต็อกมาให้เลือก ดังนั้นจึงต้องระบุชื่อสินค้าก่อน เพื่อให้โปรแกรมสามารถแสดงรายการล็อตของสินค้าที่ต้องการขึ้นมาได้&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;หรือบางครั้ง ถึงแม้ว่าจะมีการเตรียมสินค้าโดยจดเลขล็อตมาไว้แล้ว แต่ผู้ป้อนข้อมูล อาจต้องการสอบทาน โดยให้โปรแกรม list หมายเลขขึ้นมาว่ามีตรงกับของจริงหรือไม่&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;A id=aimw name=others&gt;&lt;/A&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;ประเด็นอื่นๆ&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;ความไม่สะดวก กรณีเครื่องหมาย # นำหน้า กับการ input ด้วย barcode&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ความสับสน กรณีสินค้านั้น มีการผ่านรายการแบบไม่มีเลขล็อต ปนกับแบบมีเลขล็อต&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;รายงานสต็อก กับการคำนวณต้นทุนสินค้า แบบตัดสต็อคตามล็อต&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;A id=nx0v name=mod_transaction&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&lt;B&gt;แนวคิด MODIFY เก็บเลขล็อตใน transaction สต็อกเข้า-ออก&lt;/B&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;จากมุมมองของคนทำโปรแกรม แนวทางนี้ ดูแล้วมีความขัดแย้งน้อยที่สุด และปรับโปรแกรมไม่มากนัก แทนที่จะออกแบบโดยปรับข้อมูล สต็อกเข้า-ออก ให้มีฟิลด์เลขล็อตเพิ่ม เราเลือกออกแบบให้เลขล็อต เก็บไว้ในฟิลด์ที่เก็บเดิม โดยจัดฟอร์แมตให้เลขล็อตนำหน้าดังนี้ &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;FONT color=#0000ff&gt;"#เลขล็อต,ที่เก็บ"&lt;/FONT&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp; &lt;br /&gt;&lt;DIV id=wrly style="PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_14dqq4dqwv_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 177px" src="http://docs.google.com/File?id=dfvwkh85_14dqq4dqwv_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ข้อดีคือ เราสามารถใช้กลไกโปรแกรมเดิม ในส่วนโปรแกรมที่มีการคำนวณซับซ้อนได้ ในหลายส่วน เช่น &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;- กด space ที่ชื่อสินค้าเพื่อดูยอดสต็อกที่แยกแต่ละที่เก็บ ซึ่งจะกลายเป็นยอดสต็อกตามล็อตอัตโนมัติ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;- กลไกรายงานสต็อกเดิม สามารถใช้ wildcard ในเงื่อนไขเฉพาะที่เก็บได้อยู่แล้ว ทำให้เราสามารถเลือกดูข้อมูลได้ทุกมิติ ทั้งเลขล็อต และที่เก็บ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;แต่สิ่งที่เราจะต้องปรับเปลี่ยนก็คือ&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;1. ขยายฟิลด์ข้อมูล ที่เก็บ จากเดิม 16 ตัวอักษร เป็นให้รับได้ 40 ตัวอักษร &lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;2. ปรับการผ่านรายการบิลซื้อ และบิลขาย เป็นส่วนที่ยุ่งยากซับซ้อนอีกส่วนหนึ่ง แต่ไม่ว่าจะเลือก Modify แนวทางไหน ก็หนีไม่พ้นที่จะต้องปรับโปรแกรมในส่วนนี้&amp;nbsp;สำหรับแนวทางนี้ จะต้องสามารถผสาน คำสั่งที่เก็บ [/.../] และ คำสั่งเลขล็อต #xxxxx ให้กลายเป็นรูปแบบที่เก็บตามตัวอย่างข้างต้น ก่อนที่จะใช้บันทึกใน transaction&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;3. ปรับแก้ ข้อจำกัดการบันทึก transaction จากเดิม ที่ไม่สามารถบันทึก รายการที่มีเลขที่บิลเดียวกัน แต่มีที่เก็บต่างกัน (ดูเพิ่มเติมหัวข้อต่อไป) การปรับส่วนนี้ ได้ประโยชน์กับผู้ที่ไม่ได้ใช้เลขล็อตด้วย คือช่วยแก้ปัญหาข้อจำกัด ในการทำบิลกระจายสินค้าไปหลายที่เก็บในใบเดียวกัน อีกด้วย&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P&gt;&lt;A id=wuhp name=mod_post&gt;&lt;/A&gt;&lt;B&gt;&lt;FONT color=#0000ff&gt;แนวคิด MODIFY สต็อกเข้า-ออกหลายที่เก็บ ในบิลใบเดียวกัน&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;DIV&gt;เลขที่อ้างถึง ใน transaction สต็อกเข้า-ออก มีความสำคัญ ใช้เป็นคีย์ในสำหรับการสั่งคืนรายการบิลซื้อ หรือบิลขาย&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ขณะเดียวกันก็มีข้อจำกัด นั่นคือ ค่าในฟิลด์ วันที่ + เลขที่อ้างถึง + ชื่อสินค้า นั้นจะซ้ำกันไม่ได้ ดังนั้น การ MODIFY เพื่อแก้ข้อจำกัดดังกล่าว กลไกการคืนรายการ จะต้องเปลี่ยนจากใช้ฟิลด์เลขที่อ้างถึง เป็นใช้ฟิลด์อื่นตรวจสอบเลขที่บิลสำหรับคืนรายการแทน&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ขณะที่กลไกผ่านรายการ เมื่อเกิดกรณีผ่านรายการซ้ำดังกล่าว ก็จะเปลี่ยนจากเก็บเลขที่บิลที่ผ่านรายการในฟิลด์อ้างถึงเพื่อเป็นคีย์ เป็นใช้ฟิลด์อื่นที่กลไกคืนรายการ สามารถตรวจสอบเพื่อคืนรายการได้ ส่วนฟิลด์เลขที่อ้างถึง ที่ซ้ำไม่ได้ ก็ใช้วิธีสร้าง running เลขที่ใหม่ ในฟิลด์อ้างถึงแทน เพื่อให้เลขไม่ซ้ำกัน&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;นอกจากนี้ผลกระทบของการเปลี่ยนฟิลด์เลขที่อ้างถึง ทำให้ต้องปรับโปรแกรมในส่วนของรายงานสต็อกต่างๆ ที่เดิมแสดงเลขที่อ้างถึง จะต้องเอาค่าที่ย้ายไปกลับมาแสดงแทนค่าเลข running ที่เก็บในฟิลด์ เพื่อให้เหมือนเดิม ที่ต้องระวังผลกระทบอีกเรื่องหนึ่งที่สำคัญคือ การค้นหาเลขที่ จะให้ผลลัพธ์ที่ไม่ถูกต้อง และเงื่อนไขรายงาน ให้แสดงเฉพาะ เลขที่อ้างถึง จะต้องมีการปรับโปรแกรมด้วยเช่นกัน&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;หลังจากพักเรื่องนี้ทิ้งไว้สองวัน มีอีกแนวคิดเพิ่มเติมอีกนิดหน่อย ที่ช่วยให้แก้โปรแกรมน้อยที่สุด คือ กรณีหมวดบิลที่ต้องการใช้ลักษณะนี้ จะต้องใช้เลขที่บิลเพียงแค่ 7 หลัก หรือน้อยกว่านั้น เว้นหลักสุดท้ายไว้อย่างน้อยหนึ่งหลัก สำหรับให้โปรแกรมเติมตัวเลข หรือตัวหนังสือ ที่ทำให้เลขอ้างถึงไม่ซ้ำ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV id=u23- style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_16g3qf5t82_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 157px" src="http://docs.google.com/File?id=dfvwkh85_16g3qf5t82_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ตามรูป เป็นตัวอย่างการป้อนข้อมูลบิล ที่เบิกสินค้าชื่อเดียวกัน มาจากที่เก็บ&amp;nbsp;2 ที่ โดยบิลใบนี้ มีเลขที่แค่&amp;nbsp;7 หลัก เว้นว่างตัวสุดท้ายไว้ ปกติเดิม เมื่อผ่านรายการลักษณะนี้ โปรแกรมจะฟ้อง error ว่าข้อมูลซ้ำ เมื่อพยายามตัดสต็อก ของสินค้าจากที่เก็บชุดที่สอง&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;หลังจากที่ได้ปรับปรุงโปรแกรม ลักษณะบิลอย่างนี้สามารถผ่านรายการได้ โดยถ้าเราเข้าไปดูที่ข้อมูล รายการสินค้าออก จะพบว่า สินค้าจากที่เก็บชุดที่สอง จะมีเลขที่อ้างถึง ขึ้นต้นเหมือนกับชุดแรก แต่มีตัว A ต่อท้ายเพิ่มเข้ามา&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&lt;br /&gt;&lt;DIV id=v.s- style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;A href="http://docs.google.com/File?id=dfvwkh85_17nbxrnghn_b" target=_blank&gt;&lt;IMG style="WIDTH: 320px; HEIGHT: 49px" src="http://docs.google.com/File?id=dfvwkh85_17nbxrnghn_b"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;หลักการของโปรแกรมก็คือ เมื่อพบว่า มีการทำรายการที่อาจเกิด error ข้อมูลซ้ำ (วันที่เดียวกัน, เลขที่อ้างถึงเดียวกัน, สินค้าชื่อเดียวกัน แต่ที่เก็บต่างกัน) โปรแกรมจะตรวจสอบว่า เลขทีอ้างถึงนั้น มีที่เหลือด้านหลังหรือไม่ ถ้ามีโปรแกรมจะพยายาม running โดยเติมตัวอักษร A - Z ให้ หมายความว่า ถ้าเราเว้นเลขที่บิลด้านหลังไว้ 1 หลัก เราสามารถทำรายการสินค้าชื่อเดียวกัน แต่ที่เก็บต่างกันได้เพิ่มอีก 26 รายการ ซึ่งน่าจะเพียงพอที่รองรับการทำงาน กรณีสินค้าหลายล็อตในบิลใบเดียวกัน&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;ถ้าไม่พอ เราก็สามารถเว้นเลขที่บิลด้านหลังเป็น 2 หลัก ก็จะได้ส่วนขยายเพิ่มเป็น 26 x 26 หรือ 676 รายการ&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;br /&gt;&lt;P id=temp_br&gt;&amp;nbsp;&lt;/P&gt;&lt;BR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-6027772136949149881?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/6027772136949149881/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=6027772136949149881' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6027772136949149881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6027772136949149881'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2009/03/stock-with-lot-number.html' title='Stock with lot number'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-4028251689353266639</id><published>2009-02-09T01:56:00.001+07:00</published><updated>2009-02-09T01:56:55.381+07:00</updated><title type='text'>Sub Field 2.0</title><content type='html'> &lt;br /&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Sub Field 2.0&lt;/b&gt;&lt;br&gt;&lt;br&gt;แนวคิดของ sub field คือ การแปลงการป้อนข้อความ (string) แบบอิสระ &lt;br&gt;ให้กลายเป็นการป้อนข้อความแบบมี format แน่นอน &lt;br&gt;โดยแบ่งส่วนของข้อความให้กลายเป็นเสมือนการป้อนข้อมูลในฟอร์มที่มี field รับข้อมูลอยู่&lt;br&gt;&lt;br&gt;ประโยชน์ของ sub field คือ ช่วยจัดระบบของการตั้งชื่อ เช่น สินค้า หรือ ลูกค้า &lt;br&gt;ให้อยู่ในรูปแบบ ที่สามารถนำข้อมูลไปจัดเรียง หรือประมวลผลต่อได้ง่าย &lt;br&gt;ลดปัญหาความผิดพลาดในการพิมพ์ข้อความ &lt;br&gt;หรือแม้กระทั่งการเคาะวรรค เพื่อเว้นวรรค &lt;br&gt;ซึ่งในแง่ข้อมูล ระหว่างเคาะวรรค 1 space กับ 2 spaces ก็มีความหมายต่างกัน&lt;br&gt;&lt;br&gt;แนวคิด sub field นั้่น เดิมได้มาจาก &lt;a title="อนันต์" target="_blank" id="ho0e"&gt;adm&lt;/a&gt; &lt;br&gt; เพื่อแก้ปัญหา ความยุ่งยากในการตั้งชื่อสินค้า ของธุรกิจ โรงงานกระดาษ&lt;br&gt;&lt;br&gt;เราสามารถใช้ความสามารถของ sub field ในทุกๆ ที่ &lt;br&gt;ที่เป็นการป้อนข้อมูลแบบข้อความ เช่น &lt;u&gt;กระดาษลูกฟูก ลอน?S; ?N;X?N;&lt;/u&gt;&lt;br&gt;โปรแกรมจะตรวจสอบข้อความที่ป้อน เมื่อกด Enter &lt;br&gt;หากพบสัญญลักษณ์ ? และ ; อยู่ตามเงื่อนไขของ sub field notation&lt;br&gt;โปรแกรมก็จะเปิดกล่องย่อย เพื่อเข้าสู่การป้อนข้อมูลแบบ sub field&lt;br&gt;&lt;b&gt;&lt;br&gt;1. simple sub field&lt;/b&gt;&lt;br&gt;เป็นการกำหนด sub field แบบง่ายๆ โดยใช้ default sub field properties ตามที่โปรแกรมกำหนด&lt;div id="ozaf" style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 501px; height: 204px;" src="http://docs.google.com/File?id=dfvwkh85_10cf8dpcdz_b"&gt;&lt;/div&gt;?S; รับข้อมูล string&lt;br&gt;?D; รับข้อมูล date&lt;br&gt;?T; รับข้อมูล time&lt;br&gt;?N; &lt;br /&gt;รับข้อมูล string แบบ number (เวลาป้อนตัวเลขจะชิดซ้าย) ใช้กับ เลขที่มิเตอร์, เลขที่บิล เป็นต้น&lt;br&gt;?M; รับข้อมูล money ทศนิยม 2 ตำแหน่ง&lt;br&gt;?I; รับข้อมูล integer ไม่มีทศนิยม (เวลาป้อนตัวเลขจะชิดขวา) ใช้คำค่าที่เป็นตัวเลข เช่น จำนวนวัน อายุ&lt;br&gt;?Q; รับข้อมูลตัวเลข จำนวน (Quantity) จำนวนทศนิยม ตามข้อกำหนด default ทศนิยมของจำนวนสินค้า&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;2. advance sub field&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;2.1 custom size&lt;/b&gt;&lt;br&gt;เราอาจกำหนดขนาดของ sub field โดยใช้ : ตามหลังรหัส type ของ sub field ได้ดังนี้&lt;br&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?S:10;&lt;/span&gt; รับข้อมูล string ขนาด 10 ตัวอักษร&lt;br&gt;&lt;span style="background-color: rgb(255, 255, 255); color: rgb(0, 0, 255);"&gt;?N:3;&lt;/span&gt; รับข้อมูล string ที่เป็นตัวเลข ไม่เกิน 3 ตัวอักษร&lt;br&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?M:8;&lt;/span&gt; รับข้อมูลตัวเลขจำนวนเงิน ขนาดไม่เกิน 8 ตัว&lt;br&gt;&lt;br&gt;&lt;b&gt;2.2 custom picture&lt;/b&gt;&lt;br&gt;&lt;br /&gt;เราสามารถกำหนด sub field ให้มีขนาดกว้าง หรือรูปแบบการรัีบข้อมูลที่ป้อนตามต้องการ &lt;br&gt;โดยกำหนด picture ของ sub field&lt;br /&gt;โดยใช้ , ต่อท้าย ภายใน sub field เช่น &lt;br&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;?S,#X-8;&lt;/span&gt; รับข้อมูล string ขนา่ด 8 ตัวอักษร&lt;br&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?S,#9-4;&lt;/span&gt; รับข้อมูล string เฉพาะตัวเลข ขนาด 4 ตัวอักษร มีผลเหมือนกับการใช้ ?N:4;&lt;br&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;?M,#M-8;&lt;/span&gt; รับข้อมูลตัวเลขจำนวนเงิน ขนาดไม่เกิน 8 ตัว หรือ 9,999.99&lt;br&gt;&lt;br /&gt;&lt;br&gt;สำหรับ การกำหนด picture ที่โปรแกรมรองรับมีดังนี้&lt;br&gt;#x สำหรับใช้กับ string ตัวอักษรใดๆ รับภาษาอังกฤษทั้งตัวเล็ก และตัวใหญ่&lt;br&gt;#X สำหรับใช้กับ string แปลงตัวอักษรภาษาอังกฤษเป็นตัวใหญ่อัตโนมัติ&lt;br&gt;#0 ตัวเลข ไม่มีทศนิยม กรณีที่ไม่เต็ม จะใส่ 0 นำหน้าให้ เช่น&amp;nbsp; 000012&lt;br&gt;#9 ตัวเลข ไม่มีทศนิยม &lt;br&gt;#M ตัวเลขจำนวนเงิน (Money) ทศนิยม 2 ตำแหน่ง&lt;br&gt;#B ตัวเลขจำนวนเงิน (Baht) ทศนิยม 2 ตำแหน่ง แต่ถ้าไม่มีเศษสตางค์ จะแสดงเป็น .- เช่น 300.-&lt;br&gt;#( ตัวเลขจำนวนเงิน ทศนิยม 2 ตำแหน่ง ถ้าเป็นลบ จะแสดงเป็นวงเล็บ เช่น (300.00)&lt;br&gt;#Q ตัวเลขจำนวน ทศนิยม 3 ตำแหน่ง&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;2.3 custom name&lt;/b&gt;&lt;br&gt;เราสามารถตั้งชื่อ sub field เพื่อให้ผู้ป้อนข้อมูล เข้าใจความหมายของ sub field ดียิ่งขึ้น &lt;br&gt;เช่น &lt;u&gt;กระดาษลูกฟูก ลอน?S; ?กว้าง:N;X?ยาว:N;&lt;br&gt;&lt;/u&gt;จะเห็นว่า จากเดิมเราใช้ &lt;u&gt;?N;&lt;/u&gt; เราเปลี่ยนเป็น &lt;u&gt;?กว้าง:N;&lt;/u&gt; และ &lt;u&gt;?ยาว:N;&lt;/u&gt; แทน &lt;br&gt;ถ้าเราตั้งชื่อโดยไม่กำหนด type ให้ sub field โปรแกรมจะถือว่า sub field นั้นเป็นชนิด string อัตโนมัติ&lt;br&gt;เช่น &lt;u&gt;?ลอน;&lt;/u&gt; เราไม่จำเป็นต้องใช้ &lt;u&gt;?ลอน:S;&lt;/u&gt; &lt;div id="g9b." style="padding: 1em 0pt; text-align: left;"&gt;&lt;img style="width: 427px; height: 183px;" src="http://docs.google.com/File?id=dfvwkh85_11hn78zndg_b"&gt;&lt;/div&gt;นอกจากนี้ เรายังสามารถกำหนด custom size หรือ custom picture ได้อีกด้วย&lt;br&gt;เช่น &lt;u&gt;?กว้่าง,#9-4;&lt;/u&gt; หรือ &lt;u&gt;?กว้าง:N4;&lt;/u&gt;&lt;br&gt;&lt;br&gt;แต่ข้อจำกัดของการใช้วิธีตั้งชื่อก็คือ บางครั้ง field ข้อความที่เราใช้กำหนดต้นแบบ&lt;br&gt;ก็อาจมีความยาวไม่พอที่จะตั้งค่า sub field แบบ custom name&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-4028251689353266639?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/4028251689353266639/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=4028251689353266639' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/4028251689353266639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/4028251689353266639'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2009/02/sub-field-20.html' title='Sub Field 2.0'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-5912026166686955733</id><published>2008-03-21T01:11:00.002+07:00</published><updated>2008-03-21T01:14:27.048+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programing'/><title type='text'>PHP + .NET Phalanger for Visual Studio 2008 Downloads</title><content type='html'>&lt;a id="phalanger_for_visual_studio_2008_downloads" name="phalanger_for_visual_studio_2008_downloads"&gt;&lt;strong&gt;Phalanger for Visual Studio 2008 Downloads&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you don’t have any version of Visual Studio, you’ll need to install Visual Studio 2008 Shell [1] first. Make sure that you’re installing the “integrated mode”, which allows installation of new programming languages (like Phalanger). After installing Phalanger you may optionally install Silverlight 1.1 Tools [2]. It will allow debugging of Silverlight PHP applications, but it is not needed if you don’t need debugging you’ll still be able to develop and run Silverlight apps. Also note that this is an alpha version, so it may cause some issues. In my case, it worked very well and debugging is quite useful! After installing these two pre-requisites, you can install Phalanger [3] (note that you need the most recent version, to be able to use Visual Studio 2008 Integration), and finally you can install Visual Studio Integration package&lt;br /&gt;[1] &lt;a class="urlextern" title="http://www.microsoft.com/downloads/details.aspx?FamilyId=" displaylang="en" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=40646580-97FA-4698-B65F-620D4B4B1ED7&amp;amp;displaylang=en" rel="nofollow"&gt;Microsoft Visual Studio 2008 Shell (integrated mode) Redistributable Package&lt;/a&gt; - Microsoft Download Center&lt;br /&gt;[2] &lt;a class="urlextern" title="http://www.microsoft.com/downloads/details.aspx?familyid=" displaylang="en" href="http://www.microsoft.com/downloads/details.aspx?familyid=25144c27-6514-4ad4-8bcb-e2e051416e03&amp;amp;displaylang=en" rel="nofollow"&gt;Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008&lt;/a&gt; - Microsoft Download Center&lt;br /&gt;[3] &lt;a class="urlextern" title="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=" releaseid="11564" href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=Phalanger&amp;amp;ReleaseId=11564" rel="nofollow"&gt;Phalanger 2.0, March 2008&lt;/a&gt; (phalanger-2.0-march-2008.zip)&lt;br /&gt;[4] &lt;a class="urlextern" title="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=" releaseid="11564" href="https://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=Phalanger&amp;amp;ReleaseId=11564" rel="nofollow"&gt;Visual Studio 2008 Integration, March 2008&lt;/a&gt;(vsintegration-2.0-march-2008.zip)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-5912026166686955733?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/5912026166686955733/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=5912026166686955733' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5912026166686955733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5912026166686955733'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2008/03/php-net-phalanger-for-visual-studio.html' title='PHP + .NET Phalanger for Visual Studio 2008 Downloads'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-4836564467750362781</id><published>2008-03-20T18:13:00.006+07:00</published><updated>2008-12-11T14:02:00.745+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server automation'/><title type='text'>Windows Live FolderShare</title><content type='html'>&lt;strong&gt;&lt;a href="http://www.foldershare.com"&gt;Windows Live FolderShare beta&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Ever realized you needed a document that was on a different computer from the one you were on? With FolderShare, you can access your files from anywhere.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_kxpQAIQHCYg/R-JIJJMkP0I/AAAAAAAAAEU/aomPjerGdQs/s1600-h/foldershare-snap01.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_kxpQAIQHCYg/R-JIJJMkP0I/AAAAAAAAAEU/aomPjerGdQs/s400/foldershare-snap01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5179781843354140482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Keep all your files in sync&lt;/strong&gt; &lt;br /&gt;Use FolderShare to create a mirrored image of your most important folders - like your Favorites, Pictures, and Documents - so they're the same on all your computers. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sharing files is easier than ever&lt;/strong&gt; &lt;br /&gt;Sharing with friends, co-workers, and family is easy when you add and update files in a shared library. Large files? Not a problem - FolderShare can sync files up to 2 GBs in size. And it works on both Mac and PC. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Get to your files instantly when you're away from home&lt;/strong&gt; &lt;br /&gt;Install FolderShare on all your computers, and you can access all your files from any computer on the Internet.  &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;File sync feature can implement remote printing solution for distribute print-to-file from DOS application.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-4836564467750362781?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/4836564467750362781/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=4836564467750362781' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/4836564467750362781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/4836564467750362781'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2008/03/windows-live-foldershare.html' title='Windows Live FolderShare'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_kxpQAIQHCYg/R-JIJJMkP0I/AAAAAAAAAEU/aomPjerGdQs/s72-c/foldershare-snap01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-5437875947928415540</id><published>2008-01-05T13:16:00.000+07:00</published><updated>2008-12-11T14:02:00.880+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server automation'/><title type='text'>Making your local time server</title><content type='html'>&lt;strong&gt;&lt;a href="http://www.analogx.com/contents/download/network/ats.htm"&gt;Atomic TimeSync from AnalogX&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;How do you set the time in your house? I don't mean do you know how to set the clock on your VCR, but what TIME do you actually enter? Do you just use the normal 'best guess' approach that practically everyone else does? If so, then get ready for the real deal - set your clock using THE timekeeping source, the &lt;/span&gt;&lt;a href="http://www.boulder.nist.gov/timefreq/" target="_blank"&gt;&lt;span style="color:#000099;"&gt;National Institute of Standards and Technology&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000099;"&gt;. NIST maintains the primary frequency (time) standard for the United States, and operates a special server using the Network Time Protocol (NTP) to allow Internet users to get the time from them! Of course, if you're not based in the US, don't worry, you can go to the &lt;/span&gt;&lt;a href="http://www.eecis.udel.edu/~mills/ntp/servers.htm" target="_blank"&gt;&lt;span style="color:#000099;"&gt;NTP Homepage&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#000099;"&gt; and get a listing of servers worldwide, so you can pick the one closest to you.&lt;br /&gt;&lt;br /&gt;Once ATS is set up, you can have it periodically set your system clock; plus it even has a built-in NTP server so you can synchronize all of your other computers quickly and easily! You can even specify a custom time offset to ensure that it sets your clock just the way you like it (I like my clocks 10 minutes fast, so I'm always a bit early).&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_kxpQAIQHCYg/R38i05XmNfI/AAAAAAAAAEM/m18qSONu6Sw/s1600-h/ats.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5151874790883472882" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_kxpQAIQHCYg/R38i05XmNfI/AAAAAAAAAEM/m18qSONu6Sw/s400/ats.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although this small program has not updated since December, 2001. It can run smoothly on Windows XP/2003. Without "run as service" feature, you should place the shortcut to "Startup" folder for autorun when login or make a schedule task.&lt;br /&gt;&lt;br /&gt;Within any local network you can config one computer acts as time server, retrieve correct time from outside. Others simply installed as client and sync time from the local time server.&lt;br /&gt;&lt;br /&gt;more info: &lt;a href="http://support.microsoft.com/kb/816042"&gt;How to configure an authoritative time server in Windows Server 2003&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-5437875947928415540?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/5437875947928415540/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=5437875947928415540' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5437875947928415540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5437875947928415540'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2008/01/making-your-local-time-server.html' title='Making your local time server'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kxpQAIQHCYg/R38i05XmNfI/AAAAAAAAAEM/m18qSONu6Sw/s72-c/ats.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-2605091047382069565</id><published>2007-12-28T06:00:00.000+07:00</published><updated>2008-01-05T14:59:16.157+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='server automation'/><title type='text'>Cobain Backup great freeware for your server</title><content type='html'>&lt;p&gt;Cobian Backup is a small and simple utility to backup files and directories from some place in your computer to another place in the same computer or to a shared drive in another machine.You can set the program to automatically make a backup within regular intervals of time, for example daily, weekly etc. Cobian Backup offers additional support for PKzip compressions and can be run as a service under NT/2000/XP.&lt;/p&gt;&lt;br /&gt;&lt;a href="http://www.educ.umu.se/~cobian/images/software/cbu7.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.educ.umu.se/~cobian/images/software/cbu7.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;New on version 8&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The program uses now Unicode functions whenever it can. Using compression&lt;br /&gt;and FTP will use ANSI functions, of course because of limitations on those formats or the FTP protocol. If you don't use compression or FTP, the program will always handle your file names as Unicode. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The program uses now memory mapped files for inter-process communication.&lt;br /&gt;All the TCP communication used in older versions has been eliminated. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new method of encryption has been added: RSA-Rijndael, which uses a 256-bit Rijndael encryption with a random key that is itself encrypted used a 1024-bit RSA asymmetric key. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sensitive settings as passwords are now stored in the ini file using strong encryption &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The program is now a "green" application. All the files are stored in ini files. The only part that used the registry is the service, which, for obvious reasons must be installed using the registry. A green application, of course is not necessarily a good thing, but some people (often for "religious" reasons) seem to think that this is a good thing. Oh, well... &lt;/li&gt;&lt;br /&gt;&lt;li&gt;A feature allows you now you execute individual tasks under different user accounts. The task will then try to impersonate the user and execute the task under that account. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The 256 characters path limit is now GONE thanks to Unicode. The file and paths names can now be up to 32000 characters long. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Now you can close programs using also their class names. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Better SQX error handling. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Full service control from the Option dialog. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;The mirroring effect that you got while compressing AND overwriting has been thankfully eliminated. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;LOTS of bugs fixed &lt;/li&gt;&lt;br /&gt;&lt;li&gt;A better user interface. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;FTP transfers of larger files (&gt; 2 GB are now supported)&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.educ.umu.se/~cobian/cobianbackup.htm"&gt;http://www.educ.umu.se/~cobian/cobianbackup.htm&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-2605091047382069565?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/2605091047382069565/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=2605091047382069565' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2605091047382069565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2605091047382069565'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/cobain-backup-great-freeware-for-your.html' title='Cobain Backup great freeware for your server'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-2334563514633385859</id><published>2007-12-22T21:21:00.000+07:00</published><updated>2007-12-22T22:16:53.430+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programing'/><title type='text'>PythonD - The Python language for DOS</title><content type='html'>&lt;a href="http://www.caddit.net/pythond"&gt;http://www.caddit.net/pythond&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PythonD is a 32-bit, multi-threaded, networking- and OpenGL-enabled Python interpreter for DOS and Windows.&lt;br /&gt;PythonD 2.4.2 Release 1.0 provides many powerful features for DOS, Windows and DJGPP users that make it an attractive platform for migration of old MS-DOS batch files, Perl, Tcl and Shell scripts. It provides a complete library of file- and system-management routines. With Numeric, OpenGL and other available 'add-ons', you can enhance PythonD to meet even greater needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-2334563514633385859?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/2334563514633385859/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=2334563514633385859' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2334563514633385859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2334563514633385859'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/pythond-python-language-for-dos.html' title='PythonD - The Python language for DOS'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-6162812518249636358</id><published>2007-12-22T20:49:00.000+07:00</published><updated>2007-12-22T21:18:23.846+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programing'/><title type='text'>IronPython - The Python programming language running on .NET</title><content type='html'>&lt;a href="http://www.codeplex.com/IronPython"&gt;http://www.codeplex.com/IronPython&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IronPython is a new implementation of the Python programming language running on .NET. It supports an interactive console with fully dynamic compilation. It is well integrated with the rest of the .NET Framework and makes all .NET libraries easily available to Python programmers, while maintaining full compatibility with the Python language.&lt;br /&gt;&lt;br /&gt;see more &lt;a href="http://www.codeplex.com/IronPython/Wiki/View.aspx?title=Differences"&gt;Differences between IronPython 1.0 and CPython 2.4.3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-6162812518249636358?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/6162812518249636358/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=6162812518249636358' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6162812518249636358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6162812518249636358'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/python-programming-language-running-on.html' title='IronPython - The Python programming language running on .NET'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-5439741160381096783</id><published>2007-12-22T20:28:00.000+07:00</published><updated>2007-12-22T20:49:01.770+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programing'/><title type='text'>Phalanger - The PHP Language Compiler for the .NET Framework</title><content type='html'>&lt;a href="http://www.codeplex.com/Phalanger"&gt;http://www.codeplex.com/Phalanger&lt;/a&gt;&lt;br /&gt;&lt;a href="http://php-compiler.net/"&gt;http://php-compiler.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;October 2006: Two of Phalanger authors - Tomas Matousek and Lada Prosek were&lt;br /&gt;hired by Microsoft (congratulation and good luck!). The new lead developer for&lt;br /&gt;Phalanger is Tomas Petricek (reach him at &lt;a class="mail JSnocheck" title="tomas@tomasp.net" href="mailto:tomas@tomasp.net"&gt;tomas@tomasp.net&lt;/a&gt;).&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a id="phalanger_overview" name="phalanger_overview"&gt;&lt;strong&gt;Phalanger overview&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Phalanger is a new PHP implementation introducing the PHP language into the family of compiled .NET languages. It provides PHP applications an execution environment that is fast and extremely compatible with the vast array of existing PHP code. Phalanger gives web-application developers the ability to benefit from both the ease-of-use and effectiveness of the PHP language and the power and richness of the .NET platform taking profit from the best from both sides.&lt;br /&gt;&lt;a id="phalanger_and_existing_php_applications" name="phalanger_and_existing_php_applications"&gt;&lt;strong&gt;Phalanger and existing PHP applications&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Phalanger provides PHP language and standard library implementation that is compatible with most of the existing PHP applications including many large open source PHP projects (see &lt;a class="wikilink1" title="apps" href="http://php-compiler.net/doku.php?id=apps"&gt;Phalanger apps section&lt;/a&gt; for more details). Phalanger compiles PHP scripts into MSIL (Microsoft Intermediate Language) which can be executed by .NET or Mono runtime. This runtime executes MSIL code using JIT (Just-In-Time) compilation, which makes the execution far more effective than interpretation and significantly improves application speed.&lt;br /&gt;As part of Phalanger project we also implemented standard PHP library functions (for example string and array manipulation etc). These functions are reimplemented using managed language (mostly C#) and have very good performance. Thanks to the managed code the implementation is also more secure and the security can be configured using standard .NET tools. Phalanger also supports calling native PHP4 extensions which makes it possible to use most of the PHP functions and classes.&lt;br /&gt;Phalanger is using the ASP.NET framework internally, but only for implementing HTTP request and respons handling, sessions and cookies. The page rendering is still the same as in PHP which gives you full control over the generated code and also compatibility with existing PHP applications.&lt;br /&gt;&lt;a id="enabling_php_to_use_.net_classes" name="enabling_php_to_use_.net_classes"&gt;&lt;strong&gt;Enabling PHP to use .NET classes&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Starting with the 2.0 version, Phalanger supports full interoperability with .NET. This means that you can access almost any .NET classes (written in C#, VB.NET and other managed languages) from your PHP applications. This requires adding several features to the PHP language that allows you to use .NET features like namespace (which are used to organize .NET classes) and generics (used for specifying type parameters of methods and classes). These language extensions are called PHP/CLR and are designed to retain dynamic PHP behavior (for more details see &lt;a class="wikilink1" title="php-clr" href="http://php-compiler.net/doku.php?id=php-clr"&gt;PHP/CLR Language Extensions&lt;/a&gt;).&lt;br /&gt;Thanks to the PHP/CLR extensions you can easilly integrate existing PHP and ASP.NET applications, or use classes available for .NET Framework in your PHP application. This gives you for example the possibility to modify open-source PHP applications to use the standard ASP.NET 2.0 Membership (user management) system, which is very powerfull option for integrating web applications.&lt;br /&gt;You can also develop new applications using PHP with the PHP/CLR language extensions and combine PHP and other .NET languages (for example C#) in one project. This gives you the possibility to leverage of the C# strictness in the application logic layer where the safety and strict object orientation is important, but use the simplicity and efficiency of PHP language for developing the presentation layer.&lt;br /&gt;&lt;a id="developing_.net_mono_applications_or_libraries_with_php" name="developing_.net_mono_applications_or_libraries_with_php"&gt;&lt;strong&gt;Developing .NET/Mono applications or libraries with PHP&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Thanks to the full .NET/Mono support it is also possible to develop all kinds of .NET applications using PHP language. This includes applications with Windows Forms/Gtk# user interface, class libraries and web applications build using the ASP.NET infrastructure. This allows you to develop ASP.NET style applications which benefits from the ASP.NET features like code separation using code-behind, ASP.NET controls (including any third-party controls) and other. You can use this Phalanger project for smoothly porting PHP applications to the ASP.NET infrastructure, because you can make the original PHP application a part of a larger ASP.NET system, but still write all the source code in the PHP language.&lt;br /&gt;Using this option you can also compile existing PHP projects to standard .NET assembly and use it in any .NET application. Using this technique you can use many of the very usefull and publicly available PHP projects in .NET as well. Phalanger contains two different compilation modes - the first mode (called legacy) is fully compatible with standard PHP and you can use it for compiling any PHP scripts, however using PHP scripts compiled in legacy mode is a bit more difficult. To make using PHP objects from C# as simple as possible we also introducted pure mode in which you have to follow a few additional rules (like specifying all source files during the compilation instead of using includes), but it gives you full .NET interoperability, which means that you can use class written in PHP directly from C#!&lt;br /&gt;&lt;a class="media" title="core:gtk-sharp.gif" href="http://php-compiler.net/lib/exe/detail.php?id=core%3aoverview&amp;amp;cache=cache&amp;amp;media=core%3agtk-sharp.gif"&gt;&lt;/a&gt;&lt;br /&gt;The possibility of developing fully .NET/Mono compatible application using PHP language is demonstrated on the attached screenshot where you can see Gtk# application written in PHP running on Fedora Core 6. You can visit the &lt;a class="wikilink1" title="tutorials" href="http://php-compiler.net/doku.php?id=tutorials"&gt;Tutorials&lt;/a&gt; section of this page for more examples including Windows Forms and ASP.NET applications.&lt;br /&gt;&lt;a id="visual_studio_integration" name="visual_studio_integration"&gt;&lt;strong&gt;Visual Studio Integration&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Visual Studio supports the integration of additional languages into the editor using the VSIP (Visual Studio Integration Package). Thanks to this possibility we were able to implement Visual Studio extensions for PHP developers. This extensions includes wide range of project templates including Legacy PHP Application, Windows Forms Phalanger Application, ASP.NET Application written in PHP and many other.&lt;br /&gt;Syntax highlighting for PHP source files is a must-have for every IDE and we’re working on support for InteliSense as well. You can also use the Visual Studio debugger for finding bugs in your PHP applications (running on Phalanger). The debugger allows you to set breakpoints in the source code, step through the code and view values of variables, however we are still working on improving the full VS.NET support.&lt;br /&gt;&lt;a id="requirements" name="requirements"&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Phalanger runs on Microsoft .NET and Mono. If you want to use it with .NET you’ll need Microsoft .NET Framework 2.0 (which runs on Microsoft Windows 2000/XP/2003/Vista) and optionally Internet Information Services (IIS) with ASP.NET installed for hosting Phalanger web applications. For Mono, we recommend using the latest Mono package and optinally Apache web server with configured Mono support (using mod-mono). To benefit from the additional Visual Studio integration feature a Microsoft Visual Studio 2005 is required (Express editions of Visual Studio unfortunately can’t be supported because of licensing limitations).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-5439741160381096783?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/5439741160381096783/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=5439741160381096783' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5439741160381096783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5439741160381096783'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/phalanger-php-language-compiler-for-net.html' title='Phalanger - The PHP Language Compiler for the .NET Framework'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-8595028460369091904</id><published>2007-12-09T15:25:00.000+07:00</published><updated>2007-12-09T15:37:01.306+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual pc'/><title type='text'>The JPC project, virtual PC in JAVA</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;What operating systems will JPC run?&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;In principle, we can run any OS that runs on an IBM PC, including Linux, DOS, and Windows. This includes systems for which there is no longer any available support; e.g. JPC is a safe environment in which to run legacy Windows 95 code. We are currently developing more x86 execution modes, have tested DOS and are now developing further Linux compatibility.&lt;/span&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;JPC is a pure &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; &lt;a href="http://www-jpc.physics.ox.ac.uk/Emulation.html"&gt;emulation&lt;/a&gt; of an x86 PC with fully virtual peripherals. It runs anywhere you have a JVM, whether x86, RISC, mobile phone, set-top box, possibly even your refrigerator! All this, with the bulletproof security and stability of Java technology.&lt;br /&gt;JPC creates a virtual computer upon which you can install your favorite operating system in a safe, flexible and powerful way. It aims to give you complete control over your favorite PC software's execution environment, whatever your real hardware or operating system, and JPC's multi-layered security makes it the safest solution for running the most dangerous software in quarantine - ideal for archiving viruses, hosting honey pots, and protecting your machine from malicious or unstable software.&lt;br /&gt;&lt;strong&gt;Cross-Platform&lt;/strong&gt;&lt;br /&gt;JPC is completely implemented in &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt;, so it works seamlessly across all major computing platforms, including Windows, Linux and MacOS. JPC even works on non-x86 based hardware like ARM and SPARC.&lt;br /&gt;&lt;strong&gt;Secure&lt;/strong&gt;&lt;br /&gt;JPC comes with the assured security of being run entirely within the Java sandbox. This means that the emulated hardware is completely isolated from the underlying hardware and cannot damage or interfere with it in any way.&lt;br /&gt;&lt;strong&gt;Flexible&lt;/strong&gt;&lt;br /&gt;With JPC, you have complete configuration control with virtual peripherals and software libraries. And if you mess up, you only mess up your virtual PC. Just delete your disk images and start again. For more information about the technology behind JPC, see &lt;a href="http://www-jpc.physics.ox.ac.uk/Technology.html"&gt;Key Features Explained&lt;/a&gt;. As an added bonus, JPC gives you a few handy side effects:&lt;br /&gt;Relive your childhood by playing your favorite DOS games&lt;br /&gt;Hack your virtual computer, then delete it&lt;br /&gt;Take your computer with you on your &lt;a href="http://www-jpc.physics.ox.ac.uk/Nokia.html"&gt;mobile phone&lt;/a&gt;&lt;br /&gt;Run a million identical virtual PC's on a million different devices&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-jpc.physics.ox.ac.uk/index.html"&gt;http://www-jpc.physics.ox.ac.uk/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-8595028460369091904?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/8595028460369091904/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=8595028460369091904' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8595028460369091904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8595028460369091904'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/jpc-project-virtual-pc-in-java.html' title='The JPC project, virtual PC in JAVA'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-3126325530797337892</id><published>2007-12-04T01:34:00.000+07:00</published><updated>2007-12-04T01:58:30.736+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programing'/><title type='text'>Visual Studio 2008 and .NET 3.5 released</title><content type='html'>&lt;a href="http://msdn.microsoft.com/vstudio"&gt;http://msdn.microsoft.com/vstudio&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Wait for Visual Studio 2008 is Over!&lt;/strong&gt;&lt;br /&gt;On Monday, Nov. 19, Microsoft announced that Visual Studio 2008 and the .NET Framework 3.5 were released to manufacturing (RTM). With more than 250 new features,Visual Studio 2008 includes significant enhancements in every edition, including Visual Studio Express and Visual Studio Team System. Developers of all levels – from hobbyists to enterprise development teams – now have a consistent, secure and reliable solution for developing applications for the latest platforms: the Web, Windows Vista, Windows Server 2008, the 2007 Office system, and beyond.&lt;br /&gt;&lt;br /&gt;สามารถ download Visual Studio 2008 express มาใช้ได้ฟรีครับ ตาม link ข้างบน&lt;br /&gt;&lt;br /&gt;ส่วนข้อมูลเพิ่มเติม แนะนำให้ลอง search คำว่า &lt;strong&gt;&lt;span style="color:#000099;"&gt;visual studio 2008&lt;/span&gt;&lt;/strong&gt; ดู มีบทความทั้งภาษาไทย และอังกฤษ เกี่ยวกับตัวนี้ให้อ่านกันเยอะแยะ หลากหลายความเห็น&lt;br /&gt;&lt;br /&gt;ส่วนตัว ตอนนี้ใช้ Visual Studio 2005 อยู่ ก็ประทับใจนะครับ ใช้งานสะดวกดี ขนาดว่าชินกับ UltraEdit มาก่อน ก็ยังใช้ VS2005 ได้โดยไม่รู้สึกติดขัดหรือสะดุดอะไร รอหาข้อมูลจากคนที่ทดสอบหลายๆ คนก่อน หากไม่มีปัญหาอะไร ก็คงจะเปลี่ยนไปใช้ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-3126325530797337892?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/3126325530797337892/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=3126325530797337892' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/3126325530797337892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/3126325530797337892'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/visual-studio-2008-and-net-35-released.html' title='Visual Studio 2008 and .NET 3.5 released'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-5060442049259322490</id><published>2007-12-04T00:46:00.000+07:00</published><updated>2008-12-11T14:02:01.443+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printing'/><title type='text'>Buy a new printer or new catridge</title><content type='html'>My nephew's Lexmark inkjet printer &lt;span style="color:#000099;"&gt;X3350&lt;/span&gt; AIO shows "&lt;strong&gt;unsupported catridge&lt;/strong&gt;" last week. After search for a solution lately last night from Lexmark support website.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.lexmark.com/cgi-perl/knowledgebase.cgi?ccs=213:1:0:480:0:0&amp;amp;framed=&amp;amp;docid=ENUS24097&amp;amp;relevance=1"&gt;http://support.lexmark.com/cgi-perl/knowledgebase.cgi?ccs=213:1:0:480:0:0&amp;amp;framed=&amp;amp;docid=ENUS24097&amp;amp;relevance=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The last answer is it requires a new genuine catridge, so next day I went to Pantip Plaza. But I did not get a new catridge, it costed about 1,400 baht(black + color). I have found that a new Lexmark &lt;span style="color:#000099;"&gt;X1270&lt;/span&gt; price &lt;span style="color:#000099;"&gt;1,590&lt;/span&gt; baht, or with &lt;span style="color:#000099;"&gt;X1420&lt;/span&gt; a new printer with WIFI at &lt;span style="color:#000099;"&gt;1,990&lt;/span&gt; baht, or pay only &lt;span style="color:#000099;"&gt;1,190&lt;/span&gt; baht less than the catridge for &lt;span style="color:#000099;"&gt;X3350&lt;/span&gt; you can get a new &lt;span style="color:#000099;"&gt;Z1320&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_kxpQAIQHCYg/R1RHYPFj4nI/AAAAAAAAADM/IBdITkLOKxk/s1600-R/v26.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5139811556428866162" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_kxpQAIQHCYg/R1RHYPFj4nI/AAAAAAAAADM/iAdowoJ-_DE/s400/v26.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With 1,xxx baht you can also choose other new inkjet printer as Canon, HP or Epson.&lt;br /&gt;&lt;br /&gt;My decision is never use Lexmark anymore. Bye bye...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-5060442049259322490?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/5060442049259322490/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=5060442049259322490' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5060442049259322490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/5060442049259322490'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/12/buy-new-printer-or-new-catridge.html' title='Buy a new printer or new catridge'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_kxpQAIQHCYg/R1RHYPFj4nI/AAAAAAAAADM/iAdowoJ-_DE/s72-c/v26.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-2390230954335533479</id><published>2007-11-28T00:30:00.000+07:00</published><updated>2008-12-11T14:02:01.748+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Pervasive SQL and transaction durability risks.</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution Details&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution ID:&lt;/strong&gt; 00014597&lt;br /&gt;What is Transaction Durability and what is the risk of turning it off?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem Description:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problem Environment:&lt;/strong&gt;&lt;br /&gt;Pervasive.SQL 2000 Pervasive.SQL v7&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Cause of this problem:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Solution Notes:&lt;/strong&gt;&lt;br /&gt;A Transaction-Durable file is a 6.x file with a unique key or a 7.x file with a unique key or system data defined, and which was not opened in Accelerated mode.&lt;br /&gt;&lt;br /&gt;If the Microkernel Database Engine (MKDE) Transaction Durability option is set to YES and the file is Transaction-Durable, then the MKDE returns the status to the application after committing (saving) the entire transaction to the transaction log file. The MKDE does this when it encounters the end of the transaction, such as an End Transaction, or an Abort Transaction operation. That means, non-transaction operations, i.e., &lt;span style="color:#ff0000;"&gt;Btrieve operations not enclosed within a Begin Transaction and an End Transaction (or an Abort Transaction) operation are not durable&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If the Microkernel Database Engine (MKDE) Transaction Durability option is set to NO and the file is not Transaction-Durable, then the MKDE returns and the status to the application before committing (saving) the entire transaction.&lt;br /&gt;&lt;br /&gt;Not durable means &lt;span style="color:#ff0000;"&gt;the application may receive a successful status for the ransaction or non-transaction operation, but there is a window in which a system failure may cause the operation to be lost&lt;/span&gt; because it was not yet written to the data file, although it may still be present in the system cache.&lt;br /&gt;&lt;br /&gt;Hence, &lt;span style="color:#ff0000;"&gt;if the user wants the non-transaction operations to be durable, the operations should be placed within transactions and Transaction Durability set to YES&lt;/span&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_kxpQAIQHCYg/R0xaLkg6HWI/AAAAAAAAADE/Ab2_mUuG_aQ/s1600-h/spc-bug85.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5137580429749656930" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_kxpQAIQHCYg/R0xaLkg6HWI/AAAAAAAAADE/Ab2_mUuG_aQ/s400/spc-bug85.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;จากคำอธิบายข้างต้นจะเห็นว่า ข้อมูลที่ถูก update โดยไม่มีการใส่ BEGIN - END transaction ครอบเอาไว้ อาจเป็นอันตรายข้อมูลหายได้ ถึงแม้ว่าโปรแกรมจะได้รับ status=0 กลับมาจาก database engine ก็ตาม ตามรูปซึ่ง dump มาจาก log file จะเห็นว่า ตรงบรรทัดที่ 2692 เป็นการ update Inv.BTR ที่อยู่ภายในกรอบของ BEGIN - END หลังจากนั้น บรรทัดที่ 2694 มีการสั่ง update Inv.BTR อีกครั้ง ซึ่งตรงกับคำอธิบายว่าเป็น Not durable ตรงจุดนี้เป็นจุดแรกที่เกิดความเสี่ยงข้อมูลหาย&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-2390230954335533479?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/2390230954335533479/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=2390230954335533479' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2390230954335533479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/2390230954335533479'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/pervasive-sql-and-transaction.html' title='Pervasive SQL and transaction durability risks.'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_kxpQAIQHCYg/R0xaLkg6HWI/AAAAAAAAADE/Ab2_mUuG_aQ/s72-c/spc-bug85.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-8807982941264715871</id><published>2007-11-24T19:42:00.000+07:00</published><updated>2007-11-24T22:29:54.784+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Antivirus may cause Pervasive SQL status 85</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color:#000099;"&gt;Solution Details&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution ID:&lt;/strong&gt; 00016378&lt;br /&gt;Intermittent Status 85 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Problem Description:&lt;/strong&gt;&lt;br /&gt;Status code 85: "The File is Locked" is returned to different workstations without any pattern.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Problem Environment: &lt;/strong&gt;&lt;br /&gt;Pervasive SQL &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Cause of this problem: &lt;/strong&gt;&lt;br /&gt;A Status Code 85 occurs when the file is closed because Anti-Virus software opens and locks the file to scan causing the next database operation to fail. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution Notes:&lt;br /&gt;&lt;/strong&gt;Set the Anti-Virus software to not scan Pervasive SQL data files. Consult your Anti-Virus software manual for instructions on how to exclude files&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00016378&amp;amp;title=Intermittent%20Status%2085"&gt;http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00016378&amp;amp;title=Intermittent%20Status%2085&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;จำได้ว่ากรณีนี้เคยเจอตั้งแต่สมัยที่ computer ช้ามากๆ ทำให้ Antivirus scan ไฟล์ไม่จบ ยิ่งไฟล์ database ใหญ่มากๆ ยิ่งใช้เวลาในการ scan นาน ขณะเดียวกันถ้า application มีการเปิด-ปิดไฟล์บ่อยๆ ก็เป็นการ trigger ให้ตัว antivirus ทำการ scan ไฟล์บ่อย ซึ่งกรณีนี้อาจเกิดขึ้นกับ server ที่บังเอิญมี load เยอะๆ ก็ได้ ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-8807982941264715871?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/8807982941264715871/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=8807982941264715871' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8807982941264715871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8807982941264715871'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/antivirus-may-causes-pervasive-sql.html' title='Antivirus may cause Pervasive SQL status 85'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-3562005134232438630</id><published>2007-11-24T16:25:00.000+07:00</published><updated>2007-11-24T19:29:37.776+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Delay effect with Pervasive.SQL client cache engine</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution Details&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution ID:&lt;/strong&gt; 00016865&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000099;"&gt;What is the Client Cache engine ? &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Problem Description:&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Problem Environment:&lt;/strong&gt;&lt;br /&gt;Pervasive.SQL V8 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Cause of this problem:&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;Solution Notes:&lt;br /&gt;&lt;/strong&gt;The client cache engine is essentially a MicroKernel database engine that stores recently-used data file pages in local memory on the client workstation. Future reads will access the client cache first prior to sending a request across the network to re-read the records. This can yield significant increases in performance as it reduces the data flowing across the network (network traffic). However, the data that is stored in the client cache is static data, and &lt;span style="color:#ff0000;"&gt;is refreshed after a maximum of every 5 seconds delay by default&lt;/span&gt;. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;In some environments, the application behavior cannot tolerate this delay, and the client cache engine should be disabled. Also, in other environments where there are a very large number of clients connected to the server the polling between the client and the server can increase the network traffic and actually reduce performance. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;Other factors such as application architecture can make a tremendous difference in the ability of the client cache engine to be used efficiently.&lt;br /&gt;For transactional API applications the client cache engine is bypassed in the following circumstances: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;q Opens / Closes / Resets - are processed both locally and passed through to the server engine&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;q Insert / Update / Delete (any write operation) is passed through to the server engine q Anything inside a transaction is passed through to the server engine &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;q Any operation with a lock bias is passed through to the server engine The relational API is client / server in nature and all processing is performed at the server. As such the client cache engine is not used for SQL / ODBC access. &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#000099;"&gt;For more information on the Client Cache Engine, consult the " What's New..." and the "Advanced Operations Guide" on-line manuals which are available with the Pervasive.SQL V8 documentation.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00016865&amp;amp;title=What%20is%20the%20Client%20Cache%20engine"&gt;http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00016865&amp;amp;title=What%20is%20the%20Client%20Cache%20engine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;จากคำอธิบายเกี่ยวกับ cache engine ของ Pervasive 8 จะเห็นว่า ข้อดีของ cache engine คือ ลดปริมาณ traffic ใน network ลง ทำให้การทำงานเร็วขึ้น แต่ก็จะมีปัญหา delay ของข้อมูล เมื่อคอมพิวเตอร์เครื่องหนึ่ง update ข้อมูลไปแล้ว กว่าที่คอมพิวเตอร์อีกเครื่องหนึ่งจะทำการ refresh cache engine จะต้องรอทุกๆ 5 วินาที แต่เท่าที่ผ่านมา ปัญหานี้ยังไม่ถูกสังเกตพบจนกลายเป็นปัญหาจากผู้ใช้ครับ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-3562005134232438630?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/3562005134232438630/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=3562005134232438630' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/3562005134232438630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/3562005134232438630'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/delay-effect-with-pervasivesql-client.html' title='Delay effect with Pervasive.SQL client cache engine'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-6887279893501074313</id><published>2007-11-22T14:09:00.000+07:00</published><updated>2007-11-24T19:25:11.236+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Pervasive v10 deprecated features</title><content type='html'>&lt;blockquote&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;Netware&lt;/strong&gt;&lt;br /&gt;NetWare is no longer a supported platform for Pervasive PSQL. If you are running a previous version of Pervasive PSQL for NetWare, consider upgrading to Pervasive PSQL for Windows or for Linux.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Windows NT/98/ME&lt;/strong&gt;&lt;br /&gt;The following Windows platforms are no longer supported for any of the Pervasive SQL products:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;Windows NTWindows &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;98/ME&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;DOS 6.22&lt;/strong&gt;&lt;br /&gt;DOS 6.22 is no longer PSQL products.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;16-bit Applications&lt;/strong&gt;&lt;br /&gt;Support is no longer available for 16-bit products or 16-bit application development with Pervasive PSQL. The 16-bit utilities are no longer available in Pervasive PSQL, nor are the 16-bit client components. The configuration settings for 16-bit clients, such as Use Thunk and so forth, are no longer available.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;DOS TSR Programs&lt;/strong&gt;&lt;br /&gt;The DOS Terminate and Stay Resident (TSR) programs are no&lt;br /&gt;longer supported. This includes the following programs: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;BREQUEST DOS &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;requester BREQNT &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#3333ff;"&gt;DOS requester BREQTCP DOS requester Sockets.exe &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="color:#3333ff;"&gt;Note that &lt;span style="color:#ff0000;"&gt;the DOS requester btrbox is still supported on 32-bit Windows platforms&lt;/span&gt;. DOS applications are not supported on 64-bit Windows platforms; therefore, btrbox is not supported on 64-bit Windows platforms.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;เป็นอันว่า ทั้ง Netware Server, Windows 9x/Me/NT นั้นถูกทิ้งเรียบร้อย แต่ดูเหมือนว่า โปรแกรม SCRAFT ของเรายังคงใช้ BtrBox สำหรับ version 32-bit ได้ สำหรับ PSQL10 คงต้องรอทดสอบกันต่อไป&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-6887279893501074313?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/6887279893501074313/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=6887279893501074313' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6887279893501074313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6887279893501074313'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/pervasive-v10-deprecated-features.html' title='Pervasive v10 deprecated features'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-604950153110407025</id><published>2007-11-17T02:44:00.000+07:00</published><updated>2007-11-17T02:59:07.638+07:00</updated><title type='text'>uDOS project for testing</title><content type='html'>&lt;blockquote&gt;uDOS is a free operating system built on the FreeDOS kernel with DJGPP. uDOS&lt;br /&gt;provides an integrated suite of features inluding Perl, Python, etc., as well as&lt;br /&gt;a Watt-32 based networking environment and ELF library support. Can be run live&lt;br /&gt;from CD image.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;For testing only friend, current status is "Pre-Alpha".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/udos/"&gt;http://sourceforge.net/projects/udos/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-604950153110407025?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/604950153110407025/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=604950153110407025' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/604950153110407025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/604950153110407025'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/udos-project-for-testing.html' title='uDOS project for testing'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-1647066978783237797</id><published>2007-11-12T18:00:00.001+07:00</published><updated>2007-11-24T19:29:06.993+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Pervasive SQL &amp; DOS application on Vista solution</title><content type='html'>Recently test my DOS accounting program with Vista.&lt;br /&gt;&lt;br /&gt;Problem when running with old Btrieve.EXE :&lt;br /&gt;It can run smoothly except the program reports e memory free is 38x KB, not enough to call the subprocess.&lt;br /&gt;&lt;br /&gt;Problem when runnig with Pervasive SQL 8.x :&lt;br /&gt;The program show error status code 20 (the database engine not install) .&lt;br /&gt;&lt;br /&gt;now I got a good news from Pervasive.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00017909&amp;amp;title=DOS%20application%20returns%20a%20Status%2020%20on%20Windows%20Vista"&gt;http://www.pervasive.com/kb/kb.asp?fx=getdetails&amp;amp;solid=00017909&amp;amp;title=DOS%20application%20returns%20a%20Status%2020%20on%20Windows%20Vista&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color:#000099;"&gt;Solution Details&lt;br /&gt;Solution ID: 00017909&lt;br /&gt;&lt;br /&gt;DOS application returns a Status 20 on Windows Vista&lt;br /&gt;Problem Description:&lt;br /&gt;DOS application returns a Status 20.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Problem Environment:&lt;br /&gt;Pervasive PSQL v9&lt;br /&gt;Windows Vista&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cause of this problem:&lt;br /&gt;With Windows Vista, Pervasive Software is no longer able to support applications that require the use of a T.S.R. (Terminate Stay Ready) Requester, this includes such Btrieve Requesters as Brequest, Breqtcp, Breqnt, etc. Windows Vista users can use the Pervasive provided Win32 DOS Box Support, which is a VXD (Virtual eXtended Driver) that comes with Pervasive PSQL v9. This VXD gets loaded as part of the operating system boot-up, however, since Windows Vista limits the location where applications can place files, users are required to perform additional steps to make this program execute.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Solution Notes:&lt;br /&gt;Configuring BTRBOX to work with Windows Vista:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;1. Copy the following file (from the \pvsw\bin directory) into the \windows\system32\ directory:&lt;br /&gt;BTRVDD.DLL&lt;/span&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-1647066978783237797?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/1647066978783237797/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=1647066978783237797' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/1647066978783237797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/1647066978783237797'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/pervasive-sql-dos-application-on-vista.html' title='Pervasive SQL &amp; DOS application on Vista solution'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-6078826977224955758</id><published>2007-11-06T13:00:00.000+07:00</published><updated>2008-12-11T14:02:02.367+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printing'/><title type='text'>DOS printing with USB printer</title><content type='html'>(ดูภาษาไทย &lt;a href="http://www.blogger.com/post-edit.g?blogID=5121598982908395282&amp;amp;postID=6078826977224955758#thai_prn2usb"&gt;&lt;strong&gt;พิมพ์ DOS ด้วยเครื่องพิมพ์ USB&lt;/strong&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Most DOS programs use parallel port (LPT1:, LPT2: LPT3:) for printing only, can not support other port type as USB port (some new laser printers) or serial port (some model of POS printers). Although those printers can understand DOS printing commands.&lt;br /&gt;&lt;br /&gt;In Windows we will make use of network redirector ability, capturing data from parallel port and send it to the network printer. A DOS program still prints to parallel port as usual, but all data will redirect to prefer network printer (include the network printer that directly connected at the machine).&lt;br /&gt;&lt;br /&gt;There are 2 easy steps:&lt;br /&gt;1. &lt;a href="http://www.blogger.com/post-edit.g?blogID=5121598982908395282&amp;amp;postID=6078826977224955758#sharing_printer"&gt;Setting the network printer by sharing the printer.&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.blogger.com/post-edit.g?blogID=5121598982908395282&amp;amp;postID=6078826977224955758#capture_port"&gt;Capture parallel port and redirect to the network printer.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="sharing_printer"&gt;&lt;/a&gt;&lt;strong&gt;Setting the network printer.&lt;/strong&gt;&lt;br /&gt;If your computer has a valid network connection, simply share the printer. If your computer does not have any valid connection, you need to create a fake connection by adding loop back adapter.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Adding Microsoft loop back adapter&lt;/strong&gt;&lt;br /&gt;For standalone computer, Windows does not allow sharing the printer without a network connection. You can install the Loop Back Adapter to create network connection connects to itself.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_kxpQAIQHCYg/R3KnmZXmNcI/AAAAAAAAAD0/axxBx5zlmHs/s1600-h/loopback06.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148361602124625346" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_kxpQAIQHCYg/R3KnmZXmNcI/AAAAAAAAAD0/axxBx5zlmHs/s400/loopback06.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&gt; From Control Panel select "Add Hardware".&lt;br /&gt;&gt; Click Next at first page of wizard.&lt;br /&gt;&gt; Select "Yes", then click Next.&lt;br /&gt;&gt; Scroll down and select "Add a new hardware device" then click Next.&lt;br /&gt;&gt; Select "Install the hardware that I manually...", then click Next.&lt;br /&gt;&gt; Select "Network adapters" then click Next.&lt;br /&gt;&gt; Select "Microsoft" -&gt; "Microsoft loop back adapter" then click Next.&lt;br /&gt;&gt; And Next, Next, ... until finish.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Don't forget to assign the IP address for loop back connection you created.&lt;/strong&gt;&lt;br /&gt;&gt; In Control Panel select "Network Connections".&lt;br /&gt;&gt; Right click at the connection then select "Properties".&lt;br /&gt;&gt; Double click at "Internet protocol (TCP/IP)".&lt;br /&gt;&gt; Select choice "Use the following IP address".&lt;br /&gt;&gt; Fill a valid IP address number with sub net as 192.168.1.100 / 255.255.255.0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sharing the printer&lt;/strong&gt;&lt;br /&gt;&gt; In Control Panels select Printers and Faxes,&lt;br /&gt;&gt; then right click at the printer you want to share.&lt;br /&gt;&gt; Select Sharing in context menu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3Kn5pXmNdI/AAAAAAAAAD8/mchYlkELch4/s1600-h/prn2usb01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148361932837107154" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3Kn5pXmNdI/AAAAAAAAAD8/mchYlkELch4/s400/prn2usb01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&gt; In printer properties page select Share this printer&lt;br /&gt;&gt; named your share printer for easy to remember.&lt;br /&gt;&lt;br /&gt;&lt;a name="capture_port"&gt;&lt;/a&gt;&lt;strong&gt;Capture parallel port and redirect to the network printer.&lt;/strong&gt;&lt;br /&gt;Open Command Prompt window by doing this.&lt;br /&gt;&gt; From menu Start -&gt; select Run -&gt; type CMD in Open box.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3KoMpXmNeI/AAAAAAAAAEE/DyQVMfqbDuc/s1600-h/prn2usb04.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148362259254621666" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3KoMpXmNeI/AAAAAAAAAEE/DyQVMfqbDuc/s400/prn2usb04.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In Command Prompt window&lt;br /&gt;&gt; Check the computer name by typing command&lt;br /&gt;net view&lt;br /&gt;&gt; Check the printer name by typing&lt;br /&gt;net view \\computername&lt;br /&gt;&gt; Redirect parellel port to network printer by typing&lt;br /&gt;net use lpt1: \\computername\printername /persistence:yes&lt;br /&gt;&lt;br /&gt;&lt;a name="thai_prn2usb"&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;span style="color:#3333ff;"&gt;&lt;strong&gt;พิมพ์ DOS ด้วยเครื่องพิมพ์ USB&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;โปรแกรม DOS ส่วนใหญ่มักพิมพ์ออกทาง parallel port (LPT1:,LPT2:, LPT3:) ทำให้ไม่สามารถใช้กับเครื่องพิมพ์ที่เชื่อมต่อทางอื่น เช่น USB port (เครื่องพิมพ์ laser รุ่นใหม่ๆ)หรือ serial port (เครื่องพิมพ์สลิป POS - Point Of Sale) ถึงแม้ว่าเครื่องพิมพ์เหล่านั้น สามารถรับคำสั่งพิมพ์จาก DOS เหมือนกับเครื่องพิมพ์ parallel port ทั่วไป&lt;br /&gt;&lt;br /&gt;ภายใต้ Windows เราสามารถใช้ประโยชน์จาก network redirector เพื่อดักข้อมูลที่ส่งพิมพ์ออกทาง parallel port ให้เปลี่ยนไปออกทาง network printer ที่เรากำหนด ด้วยวิธีนี้ ถึงแม้ว่า โปรแกรม DOS ยังคงส่งข้อมูลออกทาง parallel port เหมือนเดิม แต่ข้อมูลที่ส่งออกไป จะถูกเปลี่ยนทางให้ไปออกที่ network printer รวมถึง network printer&lt;br /&gt;ต่อกับเครื่องคอมพิวเตอร์ตัวเองด้วย&lt;br /&gt;&lt;br /&gt;ขั้นตอนการทำมี 2 ขั้นตอนง่าย ๆ ดังนี้&lt;br /&gt;1. &lt;a href="http://www.blogger.com/post-edit.g?blogID=5121598982908395282&amp;amp;postID=6078826977224955758#thai_sharing_printer"&gt;ตั้งเครื่องพิมพ์ที่ต่ออยู่ให้กลายเป็น network printer&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.blogger.com/post-edit.g?blogID=5121598982908395282&amp;amp;postID=6078826977224955758#thai_capture_port"&gt;ดักข้อมูลที่ออกทาง parallel port ให้ไปออกที่ network printer แทน&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="thai_sharing_printer"&gt;&lt;/a&gt;&lt;strong&gt;ตั้งเครื่องพิมพ์ให้กลายเป็น network printer&lt;/strong&gt;&lt;br /&gt;สำหรับคอมพิวเตอร์ที่ไม่มีการเชื่อมต่อ network ไม่สามารถตั้ง network printer ได้ เนื่องจากไม่มี network connection เราต้องติดตั้ง Loop Back Adapter เพื่อสร้างการเชื่อมต่อ network ภายในเครื่องเดียวกันเอง เพื่อให้ Windows ยอมให้เราตั้ง network printer&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ติดตั้ง Microsoft loop back adapter&lt;/strong&gt;&lt;br /&gt;ถ้าคอมพิวเตอร์ของคุณมี network connection อยู่แล้ว คุณเพียงสั่งแชร์เครื่องพิมพ์ แต่ถ้าคอมพิวเตอร์ของคุณไม่มี connection คุณต้องสร้าง connection หลอกขึ้นมา โดยติดตั้ง loop back adapter&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_kxpQAIQHCYg/R3KnmZXmNcI/AAAAAAAAAD0/axxBx5zlmHs/s1600-h/loopback06.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148361602124625346" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_kxpQAIQHCYg/R3KnmZXmNcI/AAAAAAAAAD0/axxBx5zlmHs/s400/loopback06.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&gt; ใน Control Panel เลือก Add Hardware เลือก Next&lt;br /&gt;&gt; ที่หน้าแรกของ wizard เลือก Yes แล้ว กด Next&lt;br /&gt;&gt; เลื่อนลงมาที่รายการด้านล่าง เลือก "Add a new hardware device" แล้วกด Next&lt;br /&gt;&gt; เลือก "Install the hardware that I manually..." แล้วกด Next&lt;br /&gt;&gt; เลือก "Network adapters" แล้วกด Next&lt;br /&gt;&gt; เลือก "Microsoft" -&gt; "Microsoft loop back adapter" แล้วกด Next&lt;br /&gt;&gt; กด Next ต่อไปเรื่อยๆ จนเสร็จ&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;กำหนด IP address สำหรับ loop back connction ที่คุณสร้างขึ้นมา&lt;/strong&gt;&lt;br /&gt;&gt; ใน Control Panel เลือก "Network Connections"&lt;br /&gt;&gt; ใช้เมาส์ปุ่มขวาที่ชื่อ connection นั้น แล้วเลือก "Properties"&lt;br /&gt;&gt; ดับเบิลคลิกที่ "Internet protocol (TCP/IP)"&lt;br /&gt;&gt; เลือกหัวข้อ "Use the following IP address"&lt;br /&gt;&gt; ใส่หมายเลข IP adress และ sub net เช่น 192.168.1.100 / 255.255.255.0&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;การแชร์เครื่องพิมพ์&lt;/strong&gt;&lt;br /&gt;&gt; ใน Control Panels เปิด Printers and Faxes&lt;br /&gt;&gt; แล้วกดเมาส์ปุ่มขวาตรงเครื่องพิมพ์ ที่คุณต้องการ เลือก Sharing จากเมนู&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3Kn5pXmNdI/AAAAAAAAAD8/mchYlkELch4/s1600-h/prn2usb01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148361932837107154" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3Kn5pXmNdI/AAAAAAAAAD8/mchYlkELch4/s400/prn2usb01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&gt; ในหน้า Printer properties ให้เลือก Share this printer&lt;br /&gt;&gt; ตั้งชื่อเรียก network printer นั้น ให้จดจำได้ง่าย&lt;br /&gt;&lt;br /&gt;&lt;a name="thai_capture_port"&gt;&lt;/a&gt;&lt;strong&gt;ดักข้อมูลที่ parallel port ให้ไปออกที่ network printer แทน&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;เปิดหน้าต่าง Command Prompt ดังนี้&lt;br /&gt;&gt; จากเมนู Start -&gt; เลือก Run -&gt; พิมพ์ CMD ลงในกล่อง Open&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3KoMpXmNeI/AAAAAAAAAEE/DyQVMfqbDuc/s1600-h/prn2usb04.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5148362259254621666" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_kxpQAIQHCYg/R3KoMpXmNeI/AAAAAAAAAEE/DyQVMfqbDuc/s400/prn2usb04.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ในหน้าต่าง Command Prompt&lt;br /&gt;&gt; ดูชื่อคอมพิวเตอร์ โดยใช้คำสั่ง&lt;br /&gt;net view&lt;br /&gt;&gt; ดูชื่อเครื่องพิมพ์ โดยใช้คำสั่ง&lt;br /&gt;net view \\ชื่อคอมพิวเตอร์&lt;br /&gt;&gt; เปลี่ยนทางข้อมูลของ parallel port ไปที่ network printer โดยใช้คำสั่ง&lt;br /&gt;net use lpt1: \\ชื่อคอมพิวเตอร์\ชื่อเครื่องพิมพ์ /persistent:yes&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Some useful links&lt;br /&gt;&lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_subcmds.mspx?mfr=true"&gt;Microsoft NET service command&lt;/a&gt;&lt;br /&gt;&lt;a href="http://geekswithblogs.net/dtotzke/articles/26204.aspx"&gt;HOWTO: Print to a USB Printer from DOS in Windows XP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://members.shaw.ca/bsanders/printfromdos.htm"&gt;Printing from DOS with Windows 2000 or XP&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-6078826977224955758?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/6078826977224955758/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=6078826977224955758' title='3 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6078826977224955758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/6078826977224955758'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/dos-printing-with-usb-printer.html' title='DOS printing with USB printer'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_kxpQAIQHCYg/R3KnmZXmNcI/AAAAAAAAAD0/axxBx5zlmHs/s72-c/loopback06.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5121598982908395282.post-8208858789346358647</id><published>2007-11-05T17:51:00.000+07:00</published><updated>2007-11-05T21:36:06.175+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='printing'/><title type='text'>How to make DOS programs printing faster in Windows</title><content type='html'>&lt;span style="font-size:130%;color:#330099;"&gt;ทำอย่างไรให้โปรแกรม DOS ภายใต้ Windows พิมพ์ได้เร็วขึ้น&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt; This article explains how to speed up printing from DOS to a DOS compatible printer on Windows.If you need to print from DOS to a Windows printer which is not DOS compatible, like a Windows-Only (GDI) USB printer or a virtual printer (WinFax, PDF writers, etc.), please see: &lt;a href="http://www.printfil.com/article/print-from-dos-to-windows-only-printers.htm" mj_nc="0" nxllb="0"&gt;How to print from DOS to Windows-Only printers&lt;/a&gt;. &lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;บทความนี้ อธิบายวิธีที่ทำให้การพิมพ์จากโปรแกรม DOS ใน Windows ไปยังเครื่องพิมพ์ที่สามารถรับคำสั่ง DOS ได้โดยตรง ถ้าคุณต้องการพิมพ์จาก DOS ไปยังเครื่องพิมพ์ที่รับคำสั๋ง Windows อย่างเดียว เช่น GDI USB printer (inkjet printer) หรือ เครื่องพิมพ์เสมือนบน Windows เช่น WixFax, PDF writers จะต้องไปดูเรื่องของ วิธีการสั่งพิมพ์จาก DOS ไปยังเครื่องพิมพ์ของ Windows&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; If you run a DOS application on NT-based Windows systems (Windows 2000, XP, 2003, Vista), you may find that your print jobs are spooled after many seconds, sometimes minutes, especially when printing to a network printer. It may even happen on Windows 95/98/ME machines.&lt;/p&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ถ้าคุณใช้โปรแกรม DOS ภายใต้ระบบ Windows แบบ NT เช่น Windows 2000, XP, 2003, Vista มักมีปัญหาคือ เมื่อสั่งพิมพ์งานออกไปแล้ว จะต้องรออีกหลายวินาที บางครั้งอาจนานเป็นนาที โดยเฉพาะเมื่อส่งพิมพ์ไปยัง network printer บางครั้งปัญหานี้ ก็เกิดขึ้นเมื่อทำงานภายใต้ Windows 95/98/ME ด้วย &lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;The problem has two main causes:&lt;br /&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ปัญหาเกิดขึ้นจาก 2 สาเหตุ&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="#Dos-printing-device" mj_nc="0" nxllb="0"&gt;How the DOS program manages the printing device&lt;/a&gt;&lt;br /&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;วิธีที่โปรแกรม DOS จัดการเครื่องพิมพ์&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#dos-cpu-usage" mj_nc="0" nxllb="0"&gt;How the DOS program uses the CPU on the machine&lt;/a&gt;&lt;br /&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;วิธีที่โปรแกรม DOS ใช้ขีดความสามารถของ CPU&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;a name="Dos-printing-device"&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Managing the DOS printing device&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;การจัดการเครื่องพิมพ์ของ DOS &lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the age of DOS, most of the printers were dot-matrix and connected to a parallel port (LPT1:, LPT2: or LPT3:) &lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ในยุคของ DOS เครื่องพิมพ์ส่วนใหญ่ เป็นแบบ dot-matrix&lt;br /&gt;และต่อผ่าน parrallel port (LPT1:, LPT2: หรือ LPT3:)&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;A typical DOS program sends binary data (characters) to one of these ports (usually LPT1:). A dot matrix printer can start printing that data as soon as it's sent to the port and before all the data has been sent by the program. &lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;โปรแกรมบน DOS ส่วนใหญ่ ข้อมูลตัวอักษรออกทาง port เหล่านี้ (มักจะใช้ LPT1:) และเครื่องพิมพ์ dot-matrix สามารถเริ่มพิมพ์ข้อมูลทันที ที่ได้รับข้อมูลทาง port นั้น โดยไม่ต้องรอให้โปรแกรมส่งข้อมูลที่จะพิมพ์จบ&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;A DOS programmer did not need to close the printing device (port) when the print job ended, because the printer had already finished its job. &lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ดังนั้นโปรแกรมเมอร์ที่เขียนโปรแกรมสมัยนั้น จึงไม่จำเป็น ส่งคำสั่งปิดงานพิมพ์ไปยังเครื่องพิมพ์ เมื่อส่งข้อมูลจบ&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;Under Windows things are different. Laser and other graphical printers need to receive an entire page before rendering it on paper. Additionally, multiple applications running/printing on the same machine introduced the need for a printing queue, especially with network printers.&lt;br /&gt;So, if the DOS program does not close the printer port at the print job end, then Windows does not know the job is really finished. It waits for a timeout value to expire before deciding to finally spool the next job. &lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;แต่เมื่อเราใช้งานภายใต้ Windows ผลที่ได้กลับแตกต่างออกไป&lt;br /&gt;เพราะเครื่องพิมพ์เลเซอร์ และเครื่องพิมพ์ graphic จะเริ่มพิมพ์ต่อเมื่อได้รับข้อมูลครบหน้ากระดาษ ยิ่งไปกว่านั้นโปรแกรมบน Windows หลายตัวที่กำลังทำงานอยู่และต้องการพิมพ์ ก็ต้องใช้งานผ่าน print queue โดยเฉพาะเวลาส่งพิมพ์ไปยัง network printers ถ้าโปรแกรมบน DOS ไม่ส่งคำสั่งปิด printer port เมื่อจบงาน Windows ก็ไม่สามารถทราบได้ว่างานพิมพ์นั้นจบหรือยัง มันจะต้องรอรับข้อมูลที่โปรแกรม DOS ส่งมาพิมพ์ต่อไปอีกระยะหนึ่ง จนครบเวลา timeout ที่ตั้งเอาไว้ จึงปิดงานพิมพ์ของโปรแกรม DOS นั้น&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;If you're in this situation, you can close the DOS program as soon as it finishes printing. You'll see your print job start immediately because all the DOS handles will be closed by the Operating System itself, including the printer port. &lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ถ้าคุณเคยเจอปัญหาอย่างนี้ คุณสามารถสั่งปิดโปรแกรม DOS หลังจากที่โปรแกรมส่งข้อมูลที่จะพิมพ์จบแล้ว เพื่อให้เครื่องพิมพ์เริ่มพิมพ์ทันที เนื่องจาก port เครื่องพิมพ์บน DOS ถูกปิดอัตโนมัติเมื่อเราปิดโปรแกรม DOS&lt;br /&gt;&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="color:#330099;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;The best solution for this problem should be to fix the DOS program, if you are the original programmer. In further articles I'll show you how to do this with popular DOS programming languages, like &lt;a href="http://www.printfil.com/article/basic-print-windows-printer.htm"&gt;Basic&lt;/a&gt; and &lt;a href="http://www.printfil.com/article/clipper-print-windows-printer.htm"&gt;Clipper&lt;/a&gt;. &lt;p&gt;&lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;การแก้ปัญหาดีที่สุดคือ แก้โปรแกรม DOS ถ้าคุณเป็นผู้เขียนโปรแกรมนั้นเอง แต่ถ้าคุณไม่สามารถแก้ไขโปรแกรมได้ ก็คงต้องแก้ปัญหาโดยวิธีอื่น ตามที่จะแนะนำต่อไป&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;If you're not a programmer, you can change the Windows timer above, to make the delay shorter. Do not set the value too low or the printer could start printing before the DOS program has really finished creating the job.&lt;/p&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ถ้าคุณไม่ใช่โปรแกรมเมอร์ คุณสามารถตั้งค่า timeout ใหม่ ให้น้อยกว่าเดิม แต่ต้องระวังอย่าตั้งค่าน้อยเกินไป จนเครื่องพิมพ์เริ่มพิมพ์ก่อนที่โปรแกรมจะส่งงานพิมพ์นั้นออกไปเสร็จ&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;1) If you're running an NT based Windows system (2000, XP, Vista)&lt;/strong&gt;&lt;br /&gt;The timeout value is stored into a Registry entry. &lt;span style="color:#ff0000;"&gt;TAKE CARE&lt;/span&gt; using RegEdit. It could be rather dangerous. If you'll perform the wrong actions, your machine could even refuse to reboot.&lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;สำหรับ Windows ที่ใช้ระบบ NT (2000,XP,Vista) ค่า timeout อยู่ใน Registry เราต้องใช้คำสั่ง RegEdit &lt;span style="font-size:130%;color:#ff0000;"&gt;ระวัง&lt;/span&gt; ถ้าคุณเข้าไปแก้ไขผิดที่ อาจทำให้เครื่องคอมพิวเตอร์ของคุณ ไม่สามารถทำงานได้เมื่อ restart ใหม่&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;In REGEDIT&lt;/em&gt; ( START -&gt; RUN -&gt; REGEDIT )&lt;em&gt;&lt;br /&gt;click :&lt;/em&gt; HKey_Local_Machine&lt;em&gt;&lt;br /&gt;then click : &lt;/em&gt;System&lt;em&gt;&lt;br /&gt;then click : &lt;/em&gt;CurrentControlSet&lt;em&gt;&lt;br /&gt;then click : &lt;/em&gt;Control&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;then click : &lt;/em&gt;WOW&lt;em&gt; &lt;/em&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Here you'll find the &lt;span style="color:#cc0000;"&gt;LPT_timeout&lt;/span&gt; property. Double clicking the value you can choose how many seconds you prefer, then reboot your machine to apply the change. &lt;span style="color:#330099;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;เมื่อเปิดเข้าไปใน WOW คุณจะเห็นชื่อ &lt;span style="color:#cc0000;"&gt;LPT_timeout&lt;/span&gt; ให้ double click ตรงค่าของมัน เพื่อเข้าไปแก้ให้เป็นค่าวินาที ที่ต้องการ เมื่อแก้ไขเสร็จแล้ว คุณต้องสั่ง restart เครื่องเพื่อให้ Windows ใช้ค่าที่กำหนดใหม่นั้น&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;2) If you're runnign an older Windows OS (9x/ME)&lt;/strong&gt;&lt;br /&gt;Search your C drive for the SYSTEM.INI file and open it with NOTEPAD (don't use Ms-Word or other word processors). In the &lt;span style="color:#cc0000;"&gt;[386enh]&lt;/span&gt; section search &lt;span style="color:#cc0000;"&gt;[Network]&lt;/span&gt; if it does not exist enter the following: &lt;p&gt;&lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ถ้าคุณใช้ Windows รุ่นเก่า (9x/ME) ให้ใช้โปรแกรม NOTEPAD เปิดไฟล์ที่ชื่อ SYSTEM.INI ที่อยู่ใน drive C แล้วค้นหา บรรทัดที่มีคำว่า &lt;span style="color:#cc0000;"&gt;[386enh]&lt;/span&gt; แล้วหาบรรทัด &lt;span style="color:#cc0000;"&gt;[Network]&lt;/span&gt; ที่อยู่ภายใต้มัน หรือถ้าไม่พบ ให้เพิ่มบรรทัดตามตัวอย่างต่อไปนี้ลงไป&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;[Network]&lt;br /&gt;PrintBufTime=10&lt;br /&gt;[IFSMGR]&lt;br /&gt;PrintBufTime=10 &lt;/em&gt;&lt;/span&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/em&gt;&lt;/span&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;&lt;p&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;This will set the timeout to 10 seconds. Reboot your machine to apply the changes. &lt;p&gt;&lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;คำสั่งนี้ เป็นการตั้งค่า timeout เท่ากับ 10 วินาที เสร็จแล้วให้ restart เครื่องเพื่อให้ Windows ใช้ค่าที่ตั้งใหม่ในการทำงาน&lt;/span&gt;&lt;/blockquote&gt;&lt;a name="dos-cpu-usage"&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;DOS CPU usage&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;การใช้ขีดความสามารถ CPU ของ DOS&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#330099;"&gt;&lt;/span&gt;&lt;br /&gt;Unlike Windows, MS-DOS was a single-user operating system. You could only run a single program at a time, which could even keep the entire CPU for itself, to work as fast as possible.&lt;br /&gt;This causes a common problem for DOS programs running on recent Windows machines: the CPU hogging. &lt;span style="color:#330099;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ข้อแตกต่างระหว่าง Windows กับ DOS คือ DOS สามารถเรียกโปรแกรมใช้งานทีละโปรแกรม ดังนั้น DOS จึงใช้ขีดความสามารถทั้งหมดของ CPU เพื่อให้ทำงานได้เร็วที่สุด และนี่คือปัญหาที่ทำให้โปรแกรมบน DOS หลายตัวเมื่อนำมาใช้งานภายใต้ Windows จะเกิดปัญหา การทำงานสะดุด ไม่ลื่นไหลเหมือนกับการทำงานบน DOS&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;Typically, when polling the keyboard (during a wait state), the DOS program performs an infinite loop, to check it as fast as possible. In DOS this did not cause any troubles at all, but on Windows, the system might be so "busy" that no other tasks can be performed (including the print spooling process, which usually starts when the DOS program has finished printing and is waiting for user input, typically on a menu). &lt;span style="color:#330099;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;กล่าวคือ ในระหว่างที่รอรับการกด keyboard จากผู้ใช้ โปรแกรมบน DOS จะวนรอเพื่อตรวจสอบการกด keyboard ตลอดเวลา แต่สำหรับใน Windows การทำงานดังกล่าว มีผลให้ระบบ ไม่สามารถแบ่งเวลาของ CPU ระหว่างที่รอรับ keyboard ไปให้โปรแกรมหรือการทำงานอื่นๆ ที่รออยู่ รวมทั้ง print spooler ของ Windows ที่รับข้อมูลจากโปรแกรม DOS มาส่งพิมพ์ ก็ไม่สามารถทำการประมวลผลได้เช่นกัน&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;To check if your own DOS program is actually hogging the CPU, please try to leave the Task Manager opened while it's on execution. &lt;p&gt;&lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;การตรวจสอบว่าโปรแกรม DOS นั้นกินเวลาของ CPU มากแค่ไหน สามารถดูได้จาก Task Manager ระหว่างที่เรียกใช้โปรแกรม DOS นั้น ดังนี้&lt;/span&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color:#cc0000;"&gt;&lt;em&gt;Press&lt;/em&gt; CTRL+ALT+DEL&lt;br /&gt;&lt;em&gt;Click the&lt;/em&gt; "Performance"&lt;em&gt; tab &lt;/em&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If the CPU usage often go to 100 percent while using your DOS program, then you're experiencing this problem. &lt;span style="color:#330099;"&gt;&lt;/p&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;ถ้าการทำงานของ CPU ขึ้นเป็น 100% ระหว่างที่เรียกใช้โปรแกรม DOS แสดงว่าเกิดปัญหานี้ขึ้นแล้ว&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;A DOS programmer cannot do much for this problem because the keyboard polling routine is usually implemented in a low level routine inside the DOS compiler itself. Fortunately some patches has been released for popular DOS compilers to include a "release CPU" command inside that loop. &lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;สำหร้บโปรแกรมเมอร์ผู้เขียนโปรแกรม DOS เอง สามารถแก้ปัญหานี้ได้ง่ายกว่า โดยการปรับโปรแกรมในส่วนของ loop ที่รอรับ keyboard หรือถ้าสามารถ compile โปรแกรมใหม่ โดยใช้ compiler รุ่นใหม่ ที่มี option ที่สั่งให้ release CPU ภายใน loop รอรับ keyboard ให้เลือกอยู่แล้ว ก็เพียงแค่สั่ง compile โปรแกรมใหม่เท่านั้น&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;a href="http://www.printfil.com/cgi-bin/connect.cgi?citrix" mj_nc="0" nxllb="0"&gt;You can find some of the DOS 100% CPU patches at the Citrix website.&lt;/a&gt;&lt;br /&gt;If the solutions in the page above does not apply to you, you may want to try &lt;a href="http://www.printfil.com/cgi-bin/connect.cgi?tamedos" mj_nc="0" nxllb="0"&gt;TameDOS&lt;/a&gt; as a replacement for the Windows Command Prompt, which is supposed to solve this problem.&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#330099;"&gt;&lt;blockquote&gt;&lt;span style="color:#330099;"&gt;&lt;!-- google_ad_section_start(weight=ignore) --&gt;คุณสามารถหาโปรแกรมเล็ก ๆ ที่ใช้แก้ปัญหา 100% CPU จากเว็บของ Citrix หรืออาจลองใช้โปรแกรม TameDOS แทน Windows Command Prompt เดิมก็ได้&lt;!-- google_ad_section_end --&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;original article &lt;a href="http://www.amazines.com/Software/article_detail.cfm/329253?articleid=329253"&gt;&lt;span style="font-size:85%;"&gt;http://www.amazines.com/Software/article_detail.cfm/329253?articleid=329253&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5121598982908395282-8208858789346358647?l=dos-accounting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dos-accounting.blogspot.com/feeds/8208858789346358647/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5121598982908395282&amp;postID=8208858789346358647' title='1 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8208858789346358647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5121598982908395282/posts/default/8208858789346358647'/><link rel='alternate' type='text/html' href='http://dos-accounting.blogspot.com/2007/11/how-to-make-dos-programs-printing.html' title='How to make DOS programs printing faster in Windows'/><author><name>programer sathit</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_kxpQAIQHCYg/SY8oYhimhDI/AAAAAAAAAH0/i3LktGs4ULc/S220/0023.jpg'/></author><thr:total>1</thr:total></entry></feed>
