วันพุธที่ 5 มกราคม พ.ศ. 2565

ขยายพื้นที่ Hyper V บน Windows 10

 ผมละแปลกใจว่า ตอนสร้างพื้นที่ Hyper V สำหรับ Ubantu แล้วมีพื้นที่ สัก 50 G แต่ตอนใช้งานจริงทำได้แค่ 12 G 

แล้วจะทำอย่างไรให้ใช้งานได้เต็มตามที่จองพื้นที่ได้ ผมได้วิธีจาก นักภาษาศาสตร์เขา Post ไว้ ซึ่งก็ทำได้ตามนั้น ผมจดวิธีทำนี้ไว้เผื่อเขาได้ลบหายไป Expand Ubantu disk ซึ่งมีขั้นตอนดังนี้

1. ปิด VM

2. เปิด Hyper V manager > Setting > Hard Drive > Edit > Next

3. เลือกขนาดที่ต้องการขยาย กด > finish

4. เปิด VM อีกครั้ง

5. เปิด terminal แล้วพิมพ์
    sudo apt install cloud-guest-utils

6 ขยายพื้นที่ sda
   sudo growpart /dev/sda 1 

  (มีเว้นว่างหนึ่งเคาะ ระหว่าง sda กับ 1)

7. สุดท้ายขยานขนาด

   sudo resize2fs /dev/sda1

  (ตอนนี้พิมพ์ติดกัน sda1) 

8. เปิดโปรแกรม System Monitor ดูพื้นที่อีกครั้งจะได้พื้นที่เต็ม ตามที่ต้องการ 50 G

วันศุกร์ที่ 6 พฤศจิกายน พ.ศ. 2563

 Using Netbeans 11 with Weblogic 12

ดูเหมือนว่า Netbeans 11 ไม่มี Plug-in ให้มาด้วย แต่ไม่เป็นไรดาวห์โหลด plug-in จากไฟล์นี้ ต่อไปนำไฟล์นี้ในใส่เป็น plug-in ได้ เมื่อเปิดเซิร์บเวอร์ Weblogic 12 และทำตามเดิมเหมือนที่เคยทำกับ Tomcat แต่พอร์ทที่ติดต่อจะเปลี่ยนเป็น 7001 และผมใช้ เนมสเปส mavenweblogic

http://localhost:7001/mavenweblogic/rest/hello



วันจันทร์ที่ 22 มิถุนายน พ.ศ. 2563

Using Netbeans runs RESTful on Tomcat 9

ผมเห็นตัวอย่างมากมาย รัน REST กับ Tomcat 9 แต่เขาใช้ Eclipse ทำงานกัน แต่ผมชอบใช้ NetBeans มากกว่า จะทำตาม Eclipse กันอย่างไง

ที่ทดสอบนี้ใช้ Netbeans IDE 11.3 ใช้ Tomcat 9.0.16

วิธีการก็คล้ายๆ เพียงแต่ใช้เครื่อมมือไม่เหมือนกัน เริ่มทำกันดังนี้


  1. สร้างโปรเจ็ค File > New Project > Java with Maven > Web Application
  2. ไฟล์ pom.xml ใส่ dependency :
     <dependency>
               <groupId>org.glassfish.jersey.containers</groupId>
                    <artifactId>jersey-container-servlet</artifactId>
                    <version>2.25.1</version>
     </dependency>
  3. สร้างไฟล์ web.xml ใน WEB-INF ใส่ข้อความดังนี้

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
     <display-name>TomcatNetBeans</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>

      <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.mycompany.tomcatnetbeans</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    </web-app>

    ให้สังเกตว่า namespace ของผมเป็น com.mycompany.tomcatnetbeans ซึ่งต้องเปลี่ยนให้ตรงกับ namespace ที่เครื่องเราใช้
  4. สร้าง ไฟล์ Hello.java

    package com.mycompany.tomcatnetbeans;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;

    @Path("/hello")
    public class Hello {
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String helloText() {
            return "Hello, Restful";
        }
    }
  5. ไปหน้าต่าง Services เพื่อ เพิ่ม Server Tomcat เมื่อเพิ่มแล้ว คลิกขวา เพื่อให้เซิร์บเวอร์ทำงาน
  6. กด F11 เพื่อ Build Project และ F6 เพื่อ Run
  7. เปิด เบราเซอร์ ไปที่ http://localhost:8080/TomcatNetBeans/rest/hello

  หวังว่า คงใช้ลดเวลา ในการลองผิดลองถูก

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

เริ่มต้นใช้ PrimeNg กับ Angular

เริ่มต้นจากสร้าง app ใหม่ชื่อ myAngular


ng new myAngular
cd myAngular
npm install primeng --save
npm install primeicons --save


ตรวจสอบว่า มีโฟลเดอร์ priming และ primeicons ใน myAngular\node_modules แล้ว
ตรวจสอบว่า package.json มี  "primeicons": "^2.0.0",    "primeng": "^9.0.6 ในส่วน dependencies ต้องอยู่ dependencies เท่านั้น ถ้าไปอยู่ใน ส่วนผิด ถือว่าผิด (เลขที่รุ่นขึ้นกับการติดตั้ง ณ เวลา นั้นว่าได้รุ่นใด)
ณ ขณะนี้ยังไม่ได้เปิด myAngular ที่สร้างไว้ จะต้องเปิด

ng serve --open

ใส่เพิ่ม CSS ของ primeNg ใน angular.json (ใส่ theme ชื่อ nova-light ซึ่งเปลี่ยนที่หลังได้)

"styles": [
  "node_modules/primeicons/primeicons.css",
  "node_modules/primeng/resources/themes/nova-light/theme.css",
  "node_modules/primeng/resources/primeng.min.css",
]

เริ่มทดสอบคอมโพเน้นท์ primeNg ด้วย Button เพิ่มในไฟล์ app.module.ts

import {ButtonModule} from 'primeng/button';

และใส่เพิ่ม ButtonModule ในส่วน import

imports: [
    BrowserModule,
    AppRoutingModule,
    ButtonModule,
 ],

ใส่ ในส่วน app.component.html (กรณีนี่ทดสอบในหน้าหลัก)

<h3 class="first">Button Component</h3>
<p-button label="Click"></p-button>
<p-button icon="pi pi-check" label="Click"></p-button>
<p-button icon="pi pi-check" iconPos="right" label="Click"></p-button>
<p-button icon="pi pi-check"></p-button>
<p-button icon="pi pi-check" [disabled]="true" label="Disabled"></p-button>

การนำเข้า อะไรที่เป็นโมดูล (สังเกตุว่ามีคำว่า module ต่อท้าย) จะต้องดำเนินการที่ไฟล์ app.module.ts ดังตัวอย่างการใช้ ButtonModule แต่ไม่ใช่ทุกตัวใน PrimeNg จะเป็นโมดูล เช่น MenuItem ซึ่งมาจาก primeng/api ตัวนี้ไม่ถือเป็นโมดูลเป็นเพียงไทป์ (type) หนึ่ง จึงไม่ต้องดำเนินการแบบเดียวกับโมดูล แต่ให้นำเข้า import ในคอมโพเน้นท์ ที่เรียกใช้ได้เลย เช่น
import {MenuItem} from 'primeng/api';

ในการนำไปใช้กับคอมโพเน้นท์ ต้องการไทป์นี้ในการอ้างอิงกับคอมโพเน้นท์ เช่น

items: MenuItem[ ];

ผลที่ได้ จากใช้ ButtonModule และอิลีเม้นท์ <p-button> ตามรูปนี้



วันเสาร์ที่ 16 พฤษภาคม พ.ศ. 2563

Array Filter in Observable Angular

ผมเห็นตัวอย่าง (Official) ใน Angular:

import { map } from 'rxjs/operators';
const nums = of(1, 2, 3); const squareValues = filter((val: number) => val %2 == 0); const squaredNums = squareValues(nums); squaredNums.subscribe(x => console.log(x)); ผมก็เข้าใจว่า ตัวแปร nums เป็นอาร์เรย์ทั่วไป จึงใช้ map หรือใช้ filter โดยมีตัววิ่งเป็นข้อมูลแต่ละตัวในอาร์เรย์ ก็ดูไม่มีปัญหาอะไร ผมเลยลองใช้กับอาร์เรย์ของออบเจ็กต์

const users= of(User[])
const filterOf = filter((user:User) => user.id%2==0);
coonst observable = filterOf(users);

ปรากฎว่าใช้ไม่ได้ มีแจ้งว่า ตัวแปรเข้าต้องเป็นอาร์เรย์ User[] แต่ใส่มาเป็น User ผมเลยคิดว่ามันไม่เหมือนกันกับ of(1,2,3) และเป็น number[] เหรอ?

เมื่อไม่ให้ใช้ก็ไม่ใช้ แล้ว จะให้ใส่เป็นอาร์เรย์ User[] ใช่ไหม ได้ แก้ใหม่เป็น

const filterOf = map((uses:User[]) => users.filter((user)=>user.id%2==0));

ปรากฎว่าได้จริงๆ ในตัวอย่างไม่เห็นบอกยกตัวอย่างแบบอาร์เรย์ เลยนึกว่าเป็นอาร์เรย์แล้ว ไม่ใช่เลย แก้โดยใช้ map อีกที และแตกย่อย โดย filter

วันศุกร์ที่ 10 เมษายน พ.ศ. 2563

Raspberry Pi with Serial USB

การใช้ Raspberry Pi ติดต่อผ่าน Serial USB

รายการที่ต้องใช้

  • CH340G Breakout 
  • สายต่อ 3 เส้น (ต่อกับ CH340G Breakout กับ Pin ของ Raspberry Pi)
  • สาย USB (ต่อกับ CH340G Breakout กับ คอมพิวเตอร์)


เมื่อต่อสาย USB จาก CH340G Breakout กับ Computer แล้ว ให้ตรวจสอบ Communication Port ที่ Device Manager จากรูปข้างล่างนี้ ได้ COM7




ต่อมา เปิด โปรแกรม PuTTY เลือกต่อแบบ Serial ที่ความเร็ว 115200 และเลือก COM7
เมื่อจะเข้าระบบ ก็จะมีให้การ ถาม UserName/Password กรณีที่เข้าแล้ว หน้าจอยังไม่มีถามให้เข้าระบบ(ดูเหมือนค้าง) ให้ กด Enter หนึ่งครั้ง

ซึ่งต่อไปจะแก้ไขระบบอะไร ให้อยู่ใหนโหมด Desktop หรือ CLI ให้ใช้คำสั่ง

sudo raspi-config

หมายเหตุ ระบบติดต่อนี้ ต้องกำหนด Raspberry Pi ต่อเชื่อมแบบ Serial ได้ เข้าแก้ไขโดยใช้คำสั่ง raspi-config


วันจันทร์ที่ 6 เมษายน พ.ศ. 2563

Raspberry Pi Zero (RPZ) VNC

RPZ ตอนแรกที่ใช้ มักใช้เป็น CLI เลยคอนฟิกไว้เป็นแบบนี้ตั้งแต่แรก แล้วก็เซ็ตต่อเชื่อม WiFi ไว้พร้อมเมือเปิด RPZ ก็ใช้ได้

การต่อเมื่อกับ RPZ ก็ใช้ PuTTY กรณีที่รู้เลข IP ก็ใส่ได้เลย แต่ปัญหามักพบว่าในตอนแรกจะไม่ทราบ ไอพี แก้ปัญหาโดยการติดต่อ กับ USB แทน คือ ใช้ RPZ ต่อตรงกับคอมพิวเตอร์ ผ่าน Port USB ต่อมาใช้ PuTTY ติดต่อใช้ Host Name : raspberrypi.local  และ Port: 22


เมื่อ login ได้แล้ว

ตอนี้หาจะดูไอพี ใช้คำสั่ง

ifconfig

ต่อมาถ้าต้องการการเข้าโหมด WindowX บ้าง ใช้คำสั่ง

sudo startx

ในขั้นตอนนี้ PuTTY จะทำงานในโหมดกราฟฟิกไม่ได้แล้ว ให้เปิด


 VNC Viewer ใส่ ไอพี

และผลที่ได้

หมายเหตุ การเปิดเชื่อมแบบ VNC ได้ RPZ ต้องมีกำหนดให้มีการใช้ต่อเชื่อมแบบนี้ได้ หากไม่มีก็แก้ที่ raspi-config