Tag Archive formatter

ติดตั้ง Poor Man’s T-SQL Formatter ใน SSMS รุ่นใหม่ ๆ

Poor Man’s T-SQL Formatter จะติดตั้งได้ใน SQL Server Management Studio ( SSMS ) เวอร์ชั่นเก่า ๆ ได้ แต่ตัวติดตั้งรุ่นใหม่ ๆ เมื่อติดตั้งแล้ว จะไม่สามารถคลิกเมนูของตัว extension ได้ แก้ได้ง่าย ๆ โดย

  1. ปิด SQL Server Management Studio
  2. ถ้ายังไม่ได้ติดตั้ง .Net 2.0 ให้ติดตั้ง .NET Framework 2.0 ก่อนโดยวิธี How-To How to Enable .NET Framework 2.0 and 3.5 in Windows 11
  3. ถ้าต้องการใช้กับ SSMS 19 ต้องติดตั้ง SSMS 18 ในเครื่องก่อน จากนั้นติดตั้ง plugin ตามปกติ แล้ว copy C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Extensions ไปเป็น C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Extensions
  4. เปิดไฟล์ C:\Program Files (x86)\Microsoft SQL Server Management Studio {version}\Common7\IDE\Ssms.exe.config เช่น
    • C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe.config
    • C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Common7\IDE\Ssms.exe.config
  5. ค้นหาบรรทัด <assemblyBinding
  6. เพิ่มข้อความใต้<probing privatePat
    <dependentAssembly><assemblyIdentity name="Microsoft.VisualStudio.Shell.12.0" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="2.0.0.0-15.0.0.0" newVersion="15.0.0.0"/></dependentAssembly>
  7. เปิด SQL Server Management Studio ใหม่

เท่านี้ก็สามารถใช้ Poor Man’s T-SQL Formatter จัดรูปแบบ sql ได้แล้ว

สะสาง css ยุ่งโดย CSScomb

เจอ css ที่มันเขียนแบบวุ่นมากๆ ไม่เป็นระเบียบเลย เดิมจะใช้ Dreamweaver ช่วยจัด แต่หลังๆ พยามจะใช้โปรแกรม freeware / opensource มากขึ้นก็ไปเจอ CSScomb เป็น css formatter ที่ทำงานได้กับหลายๆโปรแกรมๆ รวมทั้ง sublime ด้วย

ถ้าไม่เคยลง package control มาก่อนให้ลง package control ก่อน

  1. โดยไปที่ View > Show Console จะมี กล่องเปิดขึ้นมา
    • sublime 3 ใส่
      import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
    • หรือ ถ้าใช้ sublime 2 ใส่

      import urllib2,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')
  2. รอให้ มี box เตือนขึ้นมาปิดซับลาม แล้วเปิดขึ้นมาใหม่

ลง phpfmt โดย

  1. กด ctrl shift และ P พร้อมกัน จะมี กล่องขึ้นมาด้านบนตรงกลาง
  2. เลือก Package Control: Install Package
  3. เลือก CSScomb

กำหนดรูปแบบได้โดย

  1. ไปเลือก option จากเครื่องมือในเว็บ Build config คลิกแบบที่ชอบไปเรื่อย ของผมได้
    [{
    	"always-semicolon": true,
    	"block-indent": "\t",
    	"color-case": "lower",
    	"color-shorthand": false,
    	"element-case": "lower",
    	"eof-newline": false,
    	"leading-zero": true,
    	"quotes": "double",
    	"remove-empty-rulesets": true,
    	"sort-order-fallback": "abc",
    	"space-after-colon": " ",
    	"space-after-combinator": " ",
    	"space-after-opening-brace": "\n",
    	"space-after-selector-delimiter": "\n",
    	"space-before-closing-brace": "\n",
    	"space-before-colon": "",
    	"space-before-combinator": " ",
    	"space-before-opening-brace": "\n",
    	"space-before-selector-delimiter": "",
    	"space-between-declarations": "\n",
    	"strip-spaces": true
    }]
  2. ไปที่ Preference > Package Settings > CSScome > Seetings – user วางที่ copy มา ทับของเดิมได้เลย

    ทดลองใช้โดย Tools > Run CSScomb ถึงจะทำได้ไม่เท่าที่หวังแต่ก็ช่วยได้เยอะอยู่

YII2: formatter

ถ้าทำระบบที่ออกแบบให้ลูกค้าจากต่างประเทศมาใช้งานได้อย่างสดวก อาจจะต้องเปลี่ยนการแสดงผลให้ตามความเคยชินของลูกค้า อย่างเช่น วันที่ คนไทยจะใช้ d/M/Y คือ วันที่/เดือน/ปี แต่คนอเมริกันจะใช้ M/d/Y คือ เดือนมาก่อน/วันที่/ปี แต่อัฟริการใต้และฐานข้อมูลส่วนใหญจะเก็บแบบ Y-M-d คือ ปี-เดือน-วัน จะสามารเรียงข้อมูลตามวันเวลา ได้ง่ายที่สุด แต่ไม่นิยมใช้กันในชีวิตประจำวัน ซึ่งถ้าไม่สังเกตุดีๆ อาจจะเข้าใจกันผิดได้

Yii2 ได้อำนวยความสดวกในส่วนนี้ให้โดยเพียงแค่ไปที่ไฟล์ \common\config\main.php เพิ่ม

    'components' => [
...
        'formatter' => [
            'currencyCode' => 'THB',
            'dateFormat' => 'd/M/Y',
            'datetimeFormat' => 'd/M/Y H:i:s',
            'defaultTimeZone' => 'Asia/Bangkok',
            'locale' => 'th-TH',
            'sizeFormatBase' => 1024,
            'timeFormat' => 'H:i:s',
        ],
...

ก็จะสามารถใช้ความสามารถนี้ได้

เริ่มจากวันและเวลากันก่อน

$date = date('c');
echo '<br>$date = '.$date,
'<br>',
'<br>dateFormat = '.Yii::$app->formatter->dateFormat,
'<br>asDate($date) = '.Yii::$app->formatter->asDate($date),
'<br>asDate($date, \'Y-M-d\') = '.Yii::$app->formatter->asDate($date, 'Y-M-d'),
'<br>',
'<br>datetimeFormat = '.Yii::$app->formatter->datetimeFormat,
'<br>asDatetime($date) = '.Yii::$app->formatter->asDatetime($date),
'<br>asTimestamp($date) = '.Yii::$app->formatter->asTimestamp($date);

ผลที่ได้คือ
$date = 2016-05-26T19:41:22+02:00

dateFormat = d/M/Y
asDate($date) = 26/5/2016
asDate($date, ‘Y-M-d’) = 2016-5-26

datetimeFormat = d/M/Y H:i:s
asDatetime($date) = 26/5/2016 19:41:22
asTimestamp($date) = 1464284482

เงินก็สามารถเปลี่ยนการแสดงผลได้เหมือนกัน

$value = 910097693;
echo '<br>$value = '.$value,
'<br>',
'<br>currencyCode = '.Yii::$app->formatter->currencyCode,
'<br>asCurrency($value) = '.Yii::$app->formatter->asCurrency($value),
'<br>asCurrency($value, \'USD\') = '.Yii::$app->formatter->asCurrency($value, 'USD');

ผลที่ได้คือ
$value = 910097693

currencyCode = THB
asCurrency($value) = THB 910,097,693.00
asCurrency($value, ‘USD’) = USD 910,097,693.00

ขนาดไฟล์ก็สามารถแปลงได้เหมือนกัน

$value = 910097693;
echo '<br>$value = '.$value,
'<br>',
'<br>sizeFormatBase = '.Yii::$app->formatter->sizeFormatBase,
'<br>asSize($value) = '.Yii::$app->formatter->asSize($value),
'<br>asShortSize($value) = '.Yii::$app->formatter->asShortSize($value),
'<br>asSize($value, 4) = '.Yii::$app->formatter->asSize($value, 4);

ผลที่ได้คือ
$value = 910097693

sizeFormatBase = 1024
asSize($value) = 867.94 mebibytes
asShortSize($value) = 867.94 MiB
asSize($value, 4) = 867.9368 mebibytes

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

จัด code php ตาม PHR 2

ผู้พัฒนา framewordk หลายๆเจ้าช่วยกันออกแบบมาตราฐานการจัด code php ให้เป็นมาตราฐานเดียวกัน จะได้ดูง่าย เรียกว่า coding style guide “PSR” รายละเอียดมีไม่กี่ข้อ ประมาณ 1 หน้า A4 เท่านั้นแต่การที่ต้องมาจัด code ทุกหน้า (วันนี้ผมจัดไป 500 ไฟล์) ก็เยอะไป แถมเสี่ยงที่จะทำผิดพลาดสูง

ใน Sublime Text จะมี plugins ชื่อ phpfmt สามารถช่วยเราจัดรูปแบบให้ทุกครั้งที่บันทึกข้อมูล (^_^)

ถ้าไม่เคยลง package control มาก่อนให้ลง package control ก่อน

  1. โดยไปที่ View > Show Console จะมี กล่องเปิดขึ้นมา
    • sublime 3 ใส่
      import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
    • หรือ ถ้าใช้ sublime 2 ใส่

      import urllib2,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')
  2. รอให้ มี box เตือนขึ้นมาปิดซับลาม แล้วเปิดขึ้นมาใหม่

ลง phpfmt โดย

  1. กด ctrl shift และ P พร้อมกัน จะมี กล่องขึ้นมาด้านบนตรงกลาง
  2. เลือก Package Control: Install Package
  3. เลือก phpfmp

หลังจากลงปลั๊กอินแล้ว เราจะปรับแต่งตัวเลือกต่างๆ ได้ทาง command (มีเยอะมาก) โดยดูได้จาก phpfmtจะใช้ตัวไหนก็ กด ctrl shif p พร้อมกัน แล้วพิมพ์ลงไปได้เลย
ที่ผมใช้คือ

phpfmt: indentation with spaces
ให้ใช้ space ในการเยื้อง code จริงๆผมชอบใช้ tab ในการจัดมากกว่า (อักษรว่าง 4 ตัว แทนได้ด้วยอักษร tab แค่ตัวเดียว source file ของเราจะเล็กลงไปได้เยอะถ้าใช้เท็บ) แต่มาตราฐาน PSR ไม่ให้ใช้ tab ครับ อะไม่เท็บก็ no tab
phpfmt: toggle auto align
ให้มันจัด code อัตโนมัติเลย ไม่ต้องมาสั่งอยู่
phpfmt: toggle autocomplete
ช่วยเติม code ให้เรา
phpfmt: toggle format on save
ปลี่ยนไฟล์เป็น UTF-8 without BOM
phpfmt: toggle PSR2
ใช้ formatt แบบล่าสุด

ดูเพิ่มเติม phpfmt : PHP 70 or newer is required.

จัดคิวรี่ใหม่ใน 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 ที่ใช้อยู่ตอนนั้นได้เลย ถ้าไม่ชอบหรือคิดว่าจัดอีกแบบดีกว่า สามารถคลิกอีกเมนูปรับรูปแบบได้ตามต้องการเลย ของเค้าดีจริงๆ ไม่น่าเชื่อว่าฟรีทุกอย่างเลย

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