วันจันทร์ที่ 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

วันศุกร์ที่ 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 ก็ใส่ได้เลย แต่ปัญหามักพบว่าในตอนแรกจะไม่ทราบ ไอพี แก้ปัญหาโดยการติดต่อโดยใช้ PuTTY ติดต่อใช้ Host Name : raspberrypi.local  และ Port: 22

แต่ต้องมีข้อแม้ว่า RPZ ตัวนั้นต้องเคยต่อเชื่อมกับ Hotspot ได้มาก่อน เมื่อเปิด RPZ ก็จะเชื่อมต่อทันที และเราที่ใช้คอมพิวเตอร์ก็ต้องต่อเชื่อมกับ Hotspot ตัวเดียวกัน (วงแลนเดียวกัน)


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

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

ifconfig

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

sudo startx

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


 VNC Viewer ใส่ ไอพี

และผลที่ได้

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

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

Tiny AVR ISP ATtiny44 USBTinyISP Programmer

Tiny ISP programmer

ซื้อมา ตามภาพ เพียงแต่มาต่อขาเอง และเชื่อมกับ Arduino UNO


ลงไดร์เวอร์ ตาม url นี้
https://learn.adafruit.com/usbtinyisp/drivers

ผมทดลองกับ Windows 10

ทดลองกับโปรแกรม Example/ 01.Basik/ Blinking


เลือก วิธีวิธีอัปโหลด และบอร์ด Arduino Uno





ถ้าไม่มีอะไรผิดพลาด ก็จะได้ผลตามโปรแกรม Blink

ทำกลับให้เหมือนเดิม ใช้ Burn Bootloader (ตอนนี้ยังต่อสายเหมือนเดิม)





วันเสาร์ที่ 29 มิถุนายน พ.ศ. 2562

Hello Max II EMP204T100C5

เพิ่งจะซื้อ บอร์ด Max II จากจีนมา (แน่นอนว่าราคาไม่แพง)


แล้วทดลองเขียนโปรแกรม VHDL ให้ LED ต่อกับขา 21 (ตามเลขบนบอร์ด)

library ieee;
use ieee.std_logic_1164.all;
entity Hello is
   port(
     LED_0: out std_logic -- Pin 21
   );
end Hello;

architecture rtl of Hello is
begin
   LED_0 <= '1'; -- Output to LED_0
end rtl;

ทำงานได้จริง

โปรแกรมที่ใช้ Quartus Prime 18.1.0 Lite Edition


XOR logic
ทดลองอีกที ครานี้เขียนด้วยภาษา Verilog จากตัวอย่างที่ให้มากับโปรแกรม Quartus Prime

module xor_logic (x1, x2, f);
  input x1, x2;
  output f;
  assign f = (x1 & ~x2)|(~x1 & x2);
endmodule

ให้ทำการ compile เลือกไอคอน สีเขียวรูปสามเหลี่ยม(run) แล้วค่อยกำหนดพิน 
และเมื่อคอมไพล์เสร็จ จึงค่อยกำหนดพินดังรูปนี่้

ให้พิน PIN_1, PIN_2 แทน x1, x2,  และ PIN_7 แทน f

เมื่อ กำนหนด pins ทั้งหมดแล้ว ขั้นตอนไป คือ  upload ไปยัง board MaxII emp240
 วิธีการคือ ต้องต่อกับ usb blaster ให้คลิกที่เมนู Programmer แล้วเลือก ตามรูปต่อไปนี้ แล้วให้คลิก Start รอจนครบ 100% ถือว่าสำเร็จ



ทดสอบโลจิกนี้ เหมือนกันได้จริง ต่างกันเป็นเท็จ ทดสอบกับ LED ดังรูปนี้


ตัวอย่างนี้ได้มาจาก Quartus Prime Introduction Using Verilog Designs ที่แจกให้ตอนซื้อบอร์ดมา




วันพุธที่ 26 มิถุนายน พ.ศ. 2562

Sipeed Tang / Lichee Tang

Sipeed Tang / Lichee Tang

ได้เห็น Risc-V และ FPGA ของ Sipeed Tang แล้ว มีตัว IDE ชื่อ TD โปรแกรมเล็กมาก เมื่อเทียบกับ ของ Altera กับ Xilinx 

ได้ทดลองใช้ กับ Windows 10 ติดตั้งไดรเวอร์ USB ใหม่ ที่มากับ TD_RELEASE_MAY2019_r4.5.12562_64bit.msi (แนะนำเลยว่าใข้กับรุ่นนี่ เพราะลองกับ รุ่น v.4 แล้วไดเวอร์ไม่ทำงาน นึกว่าซื้อของมาแล้ว ได้ของเสีย)

ตอนสั่งซื้อ เป็น Lichee Tang แต่ได้ของมาเป็น Sipeed ซึ่งสองร่นนี้ พิน ไม่เหมือนกัน ตรง ของ Sipeed ไม่ต้องต่อไฟ 5V แต่ใช้ไฟ จาก microUSB แทน

ทดลองทำตาม เว็บนี้ : https://tang.sipeed.com/en/ 
ใช่ได้ผล

วันพุธที่ 8 พฤษภาคม พ.ศ. 2562

STM32F103C8T6

STM32F103C8T6

ผมได้ทดลองการใช้งาน STM32F103C8T6 ตามวิธีในเว็บต่างๆ เช่น Meetjoeblog แต่ พบปัญหาอย่างหนึ่งคือ upload ไม่ได้ ของผมทดลองกับ Windows 10

วิธีแก้ปัญหาคือ ไป download โปรแกรม STM32 Flash loader demonstrator เพื่อล้างหน่วยความได้ที่ถูกล็อกก่อน ซึ่งต่อไปก็จะใช้งานได้



แต่ทั้งหมดมีอีกวิธี ที่ ลงโปรแกรมโดยผ่าน USB ที่บอร์ดโดยตรง ดูตามเว็บนี้เลย