วันอาทิตย์ที่ 26 ธันวาคม พ.ศ. 2564

ตั้งค่า https ให้ IIS

 ไปดาวโหลด

https://github.com/win-acme/win-acme/releases/tag/v2.1.20.1

แล้ว เลือก win-acme.v2.1.20.1185.x64.pluggable.zip

แตกไฟล์ และ run เลือก New Certificate ..

ใน IIS ต้อง แก้ binding เป็นชื่อ Server ด้วย


วันศุกร์ที่ 22 ตุลาคม พ.ศ. 2564

Visual Studio 2019 complied program บน Network share

 เวลา compile จะติด Security ที่ file .resx วิธีแก้ ต้องกำหนด Trust site วิธีการ ต้องไปเปิด IE และ ไปที่ internet setting

ตั้งให้เป็น Trust site



วันจันทร์ที่ 4 ตุลาคม พ.ศ. 2564

Server 2012 ทำ Reverse proxy

 ถ้าใช้ Nodejs ร่วมกับ IIS ต้องใช้ url Rewrite และ reverse proxy เพื่อ ไปทำการ ส่ง และเปิด Port ระหว่าง IIS และ Node

โดยที่ Node จะทำงานเป็น Localhost:port

ต้องไป Load โปรแกรม

http://www.iis.net/downloads/microsoft/url-rewrite

และ

https://www.microsoft.com/en-us/download/details.aspx?id=47333


สร้าง Virtual Directory สร้าง Folder เช่น /abc ต้อง convert เป็น application ด้วย และ 

สร้าง reverse proxy เวลาสร้าง ให้สร้าง ง่ายๆ ใส่ localhost และ web.com ธรรมดา แล้วค่อย มา Edit

มา ที่ localhost:port

และ อย่างลืม ตอน reverse rule ต้อง บอกให้เต็ม เช่น http://www.xyz.com/abc..

ปัญหา ถ้า ตั้ง Compress จะเกิด Error gzip

อันนี้ต้องตั้ง ค่า Rule ตาม Link นี้

https://techcommunity.microsoft.com/t5/iis-support-blog/iis-acting-as-reverse-proxy-where-the-problems-start/ba-p/846259

ดูตัวอย่าง web.config ใน คำตอบ




วันเสาร์ที่ 18 กันยายน พ.ศ. 2564

คำสั่ง Netstat ที่น่าสนใจ ถ้าเป็น mac ใช้ lsof

WINDOW
netstat -a -n -o | find ":27017" 

เอาใว้ดู port เช่น Mongo ว่ามี connection จาก process อะไร
ถ้าต้องการ kill ก็น taskkill /f <id>

netstat -a -n -o | find ":27017" /c
เป็นการ นับ ว่ามีกี port ที่ connect


OSX

ถ้าเป็น mac ใช้
lsof -i:<port>


วันพฤหัสบดีที่ 9 กันยายน พ.ศ. 2564

ให้ Mongodb connect จาก Remote ได้

 เมื่อลง Mongodb เป็น Local host แล้ววิธี แก้ให้ Mongodb connect จาก ด้านนอก

1. add user admin และ password ก่อน

    mongo

    use admin

db.createUser(
{
user: "name",
pwd: "pass",
roles: [{ role: "root", db:"admin"}]
}
)


2 แก้ mongod.conf เพื่อ ให้ access จาก network อื่นได้

sudo vi /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1 -> 0.0.0.0 หรือ IP ที่ต้องการ
3 Reboot หรือ restart services mongod

วันพฤหัสบดีที่ 1 กรกฎาคม พ.ศ. 2564

Window Server ไป เปิด Port มากกว่า 5000 เช่น Mongodb ใช้ 27017 ข้ามเครื่อง

 Window server กัน การเปิด Port มากกว่า 5000 ใน registry

https://docs.microsoft.com/en-US/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055

Regedit

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  2. On the Edit menu, click New, and then add the following registry entry:
    Value Name: MaxUserPort
    Value Type: DWORD Value data: 65534

วันพฤหัสบดีที่ 27 พฤษภาคม พ.ศ. 2564

การใช้ Powershell run program และ kill program ร่วมกับ regex

 File powershell จะนามสกุล .ps1

comment ใช้ # นำหน้า

การเรียก process ใช้ & นำหน้า

มี argument ใช้    param($ตัวแปร)

ตัวอย่าง เป้นการ list process ทีเปิดport ใว้

การ filter ให้ใช้ regex 



# kill process select port

Write-Output "Kill process at port"

param ($port)

$foundProcesses = netstat -ano | findstr :$port

$activePortPattern = ":$port\s.+LISTENING\s+\d+$"

# search between number and string

$pidNumberPattern = "\d+$"

# if search between number use "\d+\d"

#If 

IF ($foundProcesses | Select-String -Pattern $activePortPattern -Quiet) {

  $matches = $foundProcesses | Select-String -Pattern $activePortPattern

  $firstMatch = $matches.Matches.Get(0).Value

#Match by regex

  $pidNumber = [regex]::match($firstMatch, $pidNumberPattern).Value

  taskkill /pid $pidNumber /f

}


อีกตัวอย่าง เอา title ของ process และมา kill. โดยใช้ Get-Process

#& TASKLIST /v /fo table | findstr "PCS"
param ($port)

$findV = Get-Process | Where-Object {$_.mainWindowTitle} | Format-Table Id, Name, mainWindowtitle -AutoSize | findstr /I 'PCS' | findstr $port
IF($findV){
$pid1= [regex]::match($findV,"\d+\d").Value

$pid1
#kill it
 taskkill /pid $pid1 /f
}

วันจันทร์ที่ 17 พฤษภาคม พ.ศ. 2564

pull sql server Docker และ Push กลับ

วีธีการ get Sql Server ของ MyHub

ติดตั้ง Docker

ครั้งแรก

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu

docker container list -a จะได้ระหัส containerid 0cf1dfafff39

เอา data mydb เข้า docker

docker cp D:/SQLData/myDb.mdf 0cf1dfafff39:/var/opt/mssql/data

docker cp D:/SQLData/myDb_log.ldf 0cf1dfafff39:/var/opt/mssql/data

ไป Attach ด้วย SQL Management

การ Push กลับ ที่ Docker Hub  hub.docker.com สร้าง user เช่น MyHub

สร้าง Repository เช่น sqldata

แล้วทำการCommit เป็นชื่อ hub/repository:comment

docker container commit 0cf1dfafff39 MyHub/sqldata:latest

จะได้ เลขมาใหม่

docker login --username=MyHub

ใส่ Password

docker push MyHub/sqldata

จะ push ขึ้น hub ได้


จะเปลี่ยน สถานะจาก public เป็น private ก็ได้ แก้ที่ setting ใน Web hub.docker.com


กรณีนำมาใช้ 

docker pull MyHub/sqldata

แล้ว Run กรณี เป็น SQL Server ต้อง ระบุ forward port ด้วย -P 1433:1433 ใน docker run

หรือ ดุจาก Dash board image -> new container และ ระบุที่ Port เป็น 1433

docker run -p 1433:1433 -d MyHub/sqldata:latest 

ไม่นั้น Sqlmanagement จะหาไม่เจอ




วันอังคารที่ 13 เมษายน พ.ศ. 2564

Arduino 2560

 การออกแบบ ใช้Arduino 2560 ต้องทำตามหลัก นี้

1. ถ้าต้องการความเร็วในการติดต่อเช่น Stepper motor, Servo  ให้ใช้ digital port, Analog port จะมี หน่วง

     ถ้าไม่พอให้ใช้ คำสั่ง Drive แต่คำสั่ง Enable ที่ไม่บ่อยใช้ Analog ได้

2. ห้ามใช้ เป็น digital port พวก Communication device , SCL, SDA , MOSI  สำหรับ TX RX พอใช้ได้ ตามจำเป็น

3. Input Pull up Resistor ใน ขาที่ ต้องต่อสาย ออกไป ไม่นั้น จะ รบกวน

วันอังคารที่ 6 เมษายน พ.ศ. 2564

เปลี่ยน Sonoff เป็น remote Relay


 

Sonoff basic เป็น ตัวควบคุม โดยใช้ weLink ใช้ CPU ESP 8266 สามารถโปรแกรม ได้

ใข้ USB serial ต้อง Modify นิดหน่อย เพราะ เป็น 3.3 V แต่ USB Serial ที่ซื้อแบบ TTL จะเป็น 5 V

วิธี แก้ ให้ เอา สาย แดง ในรูป 


ต่อ Diode ด้านตรงข้างกับ แถบดำ ต่อกัน 3 ตัว จะได้ 3.6 V ก็จะ ใช้ program ได้

\
ต่อสาย


เวลาโปรแกรม ให้ถอดสาย แดงออกก่อนโดยใช้ Arduino ide ให้ กด button ค้างใว้ เสียบสาย แล้วปล่อย 

กด Arduino ide upload

ตัวอย่าง Code


#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

#include <ESP8266mDNS.h>


MDNSResponder mdns;


// Replace with your network credentials

const char* ssid = "myhome";

const char* password = "*******";


ESP8266WebServer server(80);

// Set your Static IP address

IPAddress local_IP(192, 168, 10, 123);

// Set your Gateway IP address

IPAddress gateway(192, 168, 10, 1);


IPAddress subnet(255, 255, 255, 0);

IPAddress primaryDNS(192, 168, 10, 1);   //optional

IPAddress secondaryDNS(8, 8, 4, 4); //optional

String webPage = "";


int gpio13Led = 13;

int gpio12Relay = 12;


void setup(void){

  webPage += "<h1>ON OFF BUTTON</h1><p><a href=\"on\"><button>ON Blink</button></a>&nbsp;<a href=\"off\"><button>OFF</button></a></p>";  

  // preparing GPIOs

  pinMode(gpio13Led, OUTPUT);

  digitalWrite(gpio13Led, LOW);

  

  pinMode(gpio12Relay, OUTPUT); 

  digitalWrite(gpio12Relay, LOW);

 

  Serial.begin(115200); 

  delay(5000);

  

if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {

    Serial.println("STA Failed to configure");

  }

  

  WiFi.begin(ssid, password);

  Serial.println("");


  // Wait for connection

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());

  

  if (mdns.begin("esp8266", WiFi.localIP())) {

    Serial.println("MDNS responder started");

  }

  

  server.on("/", [](){

    server.send(200, "text/html", webPage);

  });

  server.on("/on", [](){

    server.send(200, "text/html", webPage);

    digitalWrite(gpio13Led, LOW);

    digitalWrite(gpio12Relay, HIGH);

    delay(1000);

     digitalWrite(gpio13Led, HIGH);

    digitalWrite(gpio12Relay, LOW);

    

  });

  server.on("/off", [](){

    server.send(200, "text/html", webPage);

    digitalWrite(gpio13Led, HIGH);

    digitalWrite(gpio12Relay, LOW);

    delay(1000); 

  });

  server.begin();

  Serial.println("HTTP server started");

}

 

void loop(void){

  server.handleClient();

วันจันทร์ที่ 1 กุมภาพันธ์ พ.ศ. 2564

เรื่องงงๆ javascript promise

 ในการ Post ค่า เป็น Rest จะได้ ค่าเป็น Promise

ค่าที่ได้ จะ

var r1= postPesRest('layerFromSymbol','F1');

  1. Promise {<fulfilled>: "PE-S-FOOTING"}
    1. [[PromiseState]]"fulfilled"
    2. [[PromiseResult]]"PE-S-FOOTING"

เพราะค่าจะมาทีหลังเป็น commit ว่าจะมา ถ้าจะให้ได้ค่า ต้องใช้ .then

var r1='';
postPesRest('layerFromSymbol','F1').then(function(res1){r1=res1;});


วันพฤหัสบดีที่ 21 มกราคม พ.ศ. 2564

ค่า Scale ของ Foge Viewer ของ DWG และ PDF จาก Edit2d

ค่า scale จาก Edit2D ใน DWG  เกิดหลังจาก mark edit2d

var scale=viewer.model.getData().viewportTransforms[1].elements[0]

ของ PDF

var measureExtension = viewer.getExtension('Autodesk.Measure')

var m1=viewer.model.getData().pageToModelTransform.elements[0]

var scale=measureExtension.getCalibrationFactor()*viewer.model.getUnitScale()*m1;