Tag Archive command-line

แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

เป็นเรื่องปกติที่เน็ตใน office ใหญ่ๆ มันจะอยู่หลัง proxy ที่จะกรองข้อมูลเข้าออก แต่แปลกคือเปิดเว็บใน chrome firefox IE ได้หมด แต่ตัว command line dos ตัวน้อยๆ น่ารัก ที่ติดมากับ windows มีปัญหาไม่สามารถติดตั้ง package ต่างๆ ผ่าน composer หรือ npm ได้

เพราะว่าสำนักงานอาจจะใช้ NTLM หรือ Kerberos มาทำเป็น proxy โดยไม่ได้สนใจว่า dos, command line แม้แต่น้องใหม่ powershell อะไรพวกนี้มันต่อเน็ตไม่ได้ 100% ทั้ง ๆ ที่ ping ออกไปได้ เอา url ไปเปิดดูก็ได้ แต่ทั้ง composer ทั้ง npm มันบอกว่าต่อเน็ตไม่ได้ network เค้าก็บอกไม่ได้บล๊อกนะ ทำไม่เป็นแบบนี้ไม่รู้เหมือนกัน

วิธีแก้คือหาโปรแกรม authentication proxy, forward proxy, reverse Proxy มาช่วย เดิมเคยใช้ Cntlm Authentication Proxy โดนเคยเขียน forward proxy ด้วย cntlm ไว้แต่พี่แกแทบจะไม่พัฒนาต่อแล้ว เลยเปลี่ยนมาใช้ Px แทน

การติดตั้ง

  1. สร้าง folder ไว้เก็บโปรแกรม เช่น C:\px
  2. โหลดมาจากหน้า https://github.com/genotrance/px/releases/tag/vHEAD จะมีตัวที่เป็น .exe ให้โหลดมาเก็บไว้ที่ C:\px
  3. เปิด command line แล้ว
    1. cd c:/
    2. cd c:\px
    3. ถ้า proxy ของ office คือ 192.168.1.33 port 3128 ก็พิมพ์
      px –192.168.1.33:3128 –save
    4. px –install
  4. เปิดไฟล์ C:\px\px.ini ตามคู่มือ Configuration ออกมาแก้ เช่น
[proxy]
allow = *.*.*.*
auth =
gateway = 0
hostonly = 0
listen = 127.0.0.1
noproxy = 192.168.1.*
pac =
port = 3129
server = 192.168.1.33:3128
useragent =
username =

[settings]
foreground = 0
idle = 30
log = 0
proxyreload = 60
socktimeout = 20.0
threads = 5
workers = 8

แก้ windows environment สมมุติว่า 3128 คือ port ที่ตั้งไว้ใน [proxy] จะได้

VariableValue
HTTP_PORXYlocalhost:3129
HTTP_PROXY_REQUEST_FULLURI0
HTTPS_PROXYlocalhost:3129
HTTPS_PROXY_REQUEST_FULLURI0

ถ้าไม่เคยตั้งค่า Windows Environment Variables อ่านได้จาก

เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
แก้จาก

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

เป็น

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

restart แล้วลง composer และ npm ใหม่ ตัวติดตั้งเห็นเห็น Windows Environment Variables แล้วตั้งค่า proxy ให้เอง

set Environment โดย command line

เราสามารถเซ็ต Environment Variables ได้โดยใช้ command line ง่ายๆ แค่พิมพ์ set หรือ setx เท่านั้นเอง

ก่อนอื่นก็ดูก่อนว่า Environment Variable ตัวนี้เซ็ตเอาไว้รึยัง รูปแบบคือ echo %{variable name}% ตัวอย่าง echo %path% ถ้ามีค่าจะได้ค่าออกมา ถ้าไม่เคยมีมาก่อนจะ retuen %{variable name}% กลับมา

ใน windows จะไม่สนใจตัวเล็กตัวใหญ่ (case insensitive) ดังนั้นตัวแปรที่เซ็ตชื่อ PATH หรือ path ก็คือตัวเดียวกัน

ถ้าใช้ windows 10 build ใหม่ๆ สามารถใช้ คำสั่ง setx รูปแบบคือ setx {variable name} {variable name} เช่น setx http_proxy 127.0.0.1:3128 หรือ setx https_proxy 127.0.0.1:3128

ถ้า windows ที่เก่ากว่านั้นก็ใช้ set เช่น set http_proxy=”127.0.0.1:3128″ หรือ set https_proxy=”127.0.0.1:3128″ ต่างกันที่ มี x กับ ไม่มี x แค่นั้นเหรอ จริงๆแล้ว set ใช้ง่ายกว่ามากโดย

  • จริงๆ ไม่ต้องมี ” ก็ได้นะ จะใช้ set http_proxy=127.0.0.1:3128 หรือ set https_proxy=127.0.0.1:3128 ก็ได้ ถ้าไม่มีพวกสเปส อักษรพิเศษอยู่ข้างใน
  • เพิ่มค่าเข้าไปได้ง่ายๆ อย่างตัวแปร PATH ที่ใครๆ โปรแกรมไหนๆก็อย่างเข้าไปอยู่ข้างใน แค่ใช้ SET PATH=%PATH%;c:\whatever\else แค่นี้ก็เพิ่มเข้าไปต่อจากตัวเดิมแล้ว
  • เอา Environment Variables ออกไปได้ง่ายๆ แค่ไม่ใส่ค่าลงไป set https_proxy แค่นี้ก็ลบออกไปได้แล้ว

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

จัดคิวรี่ใหม่ใน SQL Server

ถ้าเจอ code ที่ดูยุ่งเหยิงอ่านยาก แค่มองก็พาลจะทำให้เป็นไมเกรน จะเรียกว่า spaghetti code ในฐานข้อมูลก็จะมี query ที่ซ้อนกันหลายชั้น หรือคิวรี่ที่ออกมาจากการที่บรรดาเฟรมเวิร์คต่างๆ สร้างมาให้อัตโนมัติ จะเขียนติดกันเป็นวัชพีช กว่าจะรู้ว่ามันเป็นอะไร ก็ต้องเอามันมาจัดซะก่อน หลายปีก่อนจะใช้บริการ online SQL Formatter อย่าง SQL Formatter for SQL Serve

จนได้มาเจอกับ ชายผู้น่าสงสารแต่รวยน้ำใจ Poor Man’s T-SQL Formatter ความสามารถของ library ชุดนี้คือ จัดรูปแบบ T-SQL ใหม่ โดยสามารถกำหนดเงื่อนไข วรรค์ตอน ขึ้นบรรทัดใหม่ ส่วนต่างๆ ได้เอง และที่สำคัญสามารถใช้เป็นปลั๊กอินได้ในหลายโปรแกรม

  • SQL Server Management Studio (SSMS)
  • Visual Studio
  • Notepad++ โปรแกรมฟรีก็ใช้ได้
  • Command-line ถ้ามีให้จัดเยอะๆ ก็ไม่เป็นปัญหา
  • WinMerge โปรแกรมเทียบโค้ทที่ดีที่สุด
  • ท้ายสุดบนเว็บอย่าง Poor SQL

ตัวอย่างเช่น ถ้าลงใน SQL Server Management Studio โดยใช้ SqlFormatterSSMSAddIn จะมีเมนูเพิ่มขึ้นมาในเมนู tools สามารถคลิกเพื่อปรับรูปแบบ query ที่ใช้อยู่ตอนนั้นได้เลย ถ้าไม่ชอบหรือคิดว่าจัดอีกแบบดีกว่า สามารถคลิกอีกเมนูปรับรูปแบบได้ตามต้องการเลย ของเค้าดีจริงๆ ไม่น่าเชื่อว่าฟรีทุกอย่างเลย

สามารถดูวิธีติดตั้งได้จาก

copy รายชื่อไฟล์อย่างเร็ว

จะส่งรายชื่อหนังที่มีให้เพื่อนแต่ไม่อยากที่จะ copy ชื่อไฟล์ที่ละเรื่องก็ใช้เวลามากเกินไป โปรแกรมเมอร์ต้องหาวิธีที่ดีที่สุด งายที่สุด แต่ได้ผลดีที่สุดเสมอ (สรุปว่าหาวิธีขี้เกียจแต่ผลงานออกมาดี) windows ไม่ให้ tools ที่จะแก้ปัญหานี้มาด้วย ดังนั้นเราจะกลับไปให้วิธีเดียวกับสมัยที่ computer อยู่แต่ในห้องทดลองมีคนคุ้มกันแน่นหนาพร้อมคู่มือเล่มหนาเตอะ สำหรับเจ้าหน้าที่วิศวกรผู้ได้รับอนุญาตให้เปิดสวิตซ์ได้เท่านั้น ไม่ต้องกลัวครับบางคนอาจจะค้นพบว่าของโบราณมันง่ายกว่าที่ทำอยู่ทุกวันนี้ก็ได้

  1. ก่อนอื่นเราจะเข้าไปใช้ dos บรรพบุรุษ windows ถ้าคุณใช้ windows 7 พิมพ์ cmd ลงไปแล้ว enter windows อื่นๆ พิมพ์ในช่อง run หรือ กดปุ่มรูป windows พร้อมตัว r จากนั้นพิมพ์ cmd ในกล่องคำถามเปิดขึ้นมา
  2. ปโพลเดอร์ที่ต้องการจะแสดงรายชื่อไฟล์โดยใช้คำสั่ง cd ตามด้วยตำแหน่งที่ต้องการ เช่นจะไปที่โพลเดอร์ c:movie พิมพ์ cd c:movie ในกรณีที่ใช้คำสัง Copy ไว้ก่อนหน้านี้ ให้คลิกขวาหลังคำสั่ง cd แล้วเลือก Paste ได้เลย ถ้าอยู่บนไดร์ฟอื่นที่ไม่ใช้ไดร์ฟซี พิมพ์ชื่อไดร์ฟตามด้วย : เช่น อยู่บนไดร์ฟ k พิมพ์ k: เอ็นเทอร์ พิมพ์ cd k:movie ถ้าไม่เข้าใจลองอ่าน คำสั่ง DOS ที่น่ารู้
  3. พิมพ์ dir /b /s > list.txt จะได้รายชื่อไฟล์และโฟลเดอร์ทั้งหมดเก็บไว้ในไฟล์ list.txt ในโฟลเดอร์ k:movie

คำสั่งนี้สามารถปรับแต่งผลลัพธ์แบบอื่นๆได้อีกลองอ่านหัวข้อ DIR command line switches ที่
Print a list of directory contents in Windows 2000 with DOS