วันจันทร์ที่ 16 ธันวาคม พ.ศ. 2567

No module named conda

  ปัญหานี้ เกิดขึ้นจาก การตั้งเส้นทาง PYTHONHOME วิธีการแก้คือ ลบ path นี้ทิ้งซะ (เผื่อใครติดปัญหานี้)

วันอาทิตย์ที่ 2 มิถุนายน พ.ศ. 2567

Serial USB to LG8F328P

 


ช่วงนี้หยุดหลายวัน เลยหยิบบอร์ดเก่า ๆ มาลองเล่น แต่กลับ upload ไม่ได้ คิดว่า USB ที่มากับบอร์ดน่าจะเสีย แต่คิดว่ามีอีกวิธีที่จะ upload ลองใช้วิธี Serial USB แทน โดยบน Adapter  มีขาที่ต้องต่อดังนี้

Adapter        LG8F328P
3V3-----------3V3
TXD-----------RXD
RXD----------TXD
GND---------GND
DTR---------ไม่มี

ปัญหามีต่ออีก คือ LG8F328P ไม่มีขา DTR ดังนั้น เวลา upload จะต้องกดปุ่ม reset หาจังหวะดีๆ (กดแล้วปล่อย)

วันพุธที่ 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