ข้ามไปที่เนื้อหาหลัก

EJB development ด้วย Glassfish Server -- Part 2 ( Create a project )

สร้าง project สำหรับ EJB module

สร้าง EJB project ชื่อว่า titan-ejb เลือก Target Runtime : Glassfish


คลิกขวาที่ Project

ติ๊ก JPA facet, และ configure JPA facet ให้ใช้ connection profile ที่สร้างไว้แล้ว


>>>>>>>>>>>>>>>>>>> วิธีสร้าง JPA Entity:

- คลิกขวาที่ Project Explorer
- New->Class ชื่อ com.titan.domain.Cabin
implement java.io.Serializable
[ Serializable คือ สามารถ convert class to String แล้วส่งไปที่ network ได้ ]

วิธีสร้าง implement class บน eclipse


มันก็จะสร้างฟังก์ชั่นโบ๋ๆ มาให้
package com.titan.domain;

import java.io.Serializable;

public class Cabin implements Serializable {

}


- Add the fields
static final long serialVersionUID = 1L;

private int id;
private String name;
private int deckLevel;
private int shipId;
private int bedCount;


- สร้าง getters and setters สำหรับ id, name, deckLevel, shipId, and bedCount.
[ ใน eclipse ง่ายมาก ไปที่ Source > Generate setters and getters ( หรือ คลิกขวาตรงที่เขียนโค้ด Source > Generate setters and getters ได้เหมือนกัน ) แล้วติ๊กเอาเลย ]

ใส่ @Entity annotation ที่ class และ @Id annotation ที่ id ( ไม่ต้องใส่ @GeneratedValue ที่นี่ )
[ มันก็จะ Error อ่ะนะ ก็คลิกขวา แล้ว ก็ import javax.persistence.Entity กับ javax.persistence.Id ซะ ( หรือ คลิกขวาที่เขียนโค้ด Source > Organize Import ก็ได้ ) ]

NOTE :
- Entity ต้องมี constructor ที่ไม่ส่ง parameter เสมอ ไม่งั้น deploy ไม่ผ่าน
- ถ้า attribute เรา ไม่ใช่ primitive type ต้องใส่ @Temporal เช่น

@Temporal(TemporalType.TIME)
private Date deliveryDate;

- ตัวอย่าง enum
 public enum BidStatus {
PENDING, ACCEPTED, REJECTED
}

@Enumerated
private BidStatus status;


เวลาใช้ก็ bid.setStatus(Bid.BidStatus.ACCEPTED);
ดูเพิ่มเติมได้ที่นี่


- สร้าง persistence.xml สำหรับ data source ไว้ใน META-INF
นี่บอกว่า ให้ drop table ทุกครั้งที่ redeploy

NOTE : name="titan" นี้จะต้องไปตรงกับ @PersistenceContext(unitName="titan") ใน TravelAgentRemote.java
<persistence-unit name="titan">
<jta-data-source>jdbc/__localDS</jta-data-source>
<properties>
<!-- Remove if you want to save the DB between redeploys -->
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>

แล้วก็บอกให้มัน "Discover annotated classes automatically" มันจะได้หา class ที่เป็นโดเมนให้อัตโนมัติ

>>>>>>>>>>>>>>>>>>> วิธีสร้าง stateless "session bean" :
[ จริงๆ สร้างเป็น new > interface มาอันนึง แล้ว new > class มาอันนึงก็ได้ ]

ถ้ากด Next > มันจะใส่ MappedName ได้

มันจะสร้าง package com.titan.travelagent
ในนั้นจะมี
- Remote interface, Java interface class ชื่อ TravelAgentRemote.java

@Remote
public interface TravelAgentRemote {
public void createCabin( Cabin cabin ); //
public Cabin findCabin( int id ); //
}


- implementation, Java class ธรรมดา ชื่อ TravelAgent.java

NOTE : ejb/TravelAgentJNDI ต้องไปตรงกับ ใน client
@Stateless( mappedName="ejb/TravelAgentJNDI" )
public class TravelAgent implements TravelAgentRemote {
@PersistenceContext(unitName="titan") //
private EntityManager manager; //
public void createCabin( Cabin cabin ) { //
manager.persist( cabin ); //
} //
public Cabin findCabin( int pKey ) { //
return manager.find( Cabin.class, pKey );//
}//
}


ปล. บรรทัดที่ comment ไว้ก็พิมพ์เพิ่มเข้าไปนะ แล้วก็ import โน่นนี่ให้ครบด้วย อย่าให้มัน error

สร้าง new project สำหรับ client ======================================
สำหรับ test new stateless session bean:

- สร้าง "Java project" ชื่อ titan-client
- เพิ่ม class Client ไว้ใน package com.titan.clients และใส่ client code ตามนี้:

public class Client {
public static void main(String[] args) {
try {
Context jndiContext = new InitialContext();
System.out.println( "Looking up ejb/TravelAgentJNDI" );
Object object = jndiContext.lookup( "ejb/TravelAgentJNDI" );
TravelAgentRemote travelAgent = (TravelAgentRemote)object;

Cabin cabin_1 = new Cabin( );
cabin_1.setId(1);
cabin_1.setName("Master Suite");
cabin_1.setDeckLevel(1);
cabin_1.setShipId(1);
cabin_1.setBedCount(3);
travelAgent.createCabin(cabin_1);

Cabin cabin_2 = travelAgent.findCabin(1);
System.out.println(cabin_2.getName( ));
System.out.println(cabin_2.getDeckLevel( ));
System.out.println(cabin_2.getShipId( ));
System.out.println(cabin_2.getBedCount( ));
} catch (javax.naming.NamingException ne){
ne.printStackTrace( );
}
}
}


ยัง error อยู่ ช่างมัน

- เพิ่ม project titan-ejb เป็น required project บน build path
มันจะทำให้ import จาก titan-ejb ได้

ทำตามนี้
Project -> properties


- เพิ่ม ~/glassfish/lib/appserv-rt.jar และ ~/glassfish/lib/javaee.jar เป็น External JARs

( บอก Java ว่าแม้รันใน standalone mode ต้องใช้ Java EE functionality (mainly JNDI)
, set up necessary deployment descriptors (mainly jndi.properties) ทำให้เราคุยกับ server JNDI ถูกตัวเพื่อ reference ไปยัง TravelAgent object )



Deployment ==================================================

คลิกขวาที่ EJB project เลือก Export > EJB JAR file

destination : [your home]/glassfish/domains/domain1/autodeploy/titan.jar และติ๊ก "overwrite existing file"


NOTE : เลือก GlassFish v2 ด้วย ( รูปผิดๆ )


Error ของ Deployment จะอยู่ที่แท็บ Glassfish Log Viewer นะ ( ไม่ใช่ Console )

ถ้าได้อะไรประมาณ " This pool is not registered with the runtime environment "

กลับไปดู persistence.xml ว่า ไอ้เนี่ย


jdbc/__localDS
<jta-data-source>jdbc/__localDS</jta-data-source>

ที่มันชี้ไปที่ derby connection pool น่ะ มันชื่อตรงกันหรือเปล่า



Client execution
คลิกขวาที่ Client class ใน Project Explorer

Run As -> Java Application


TIPS : วิธี debug JNDI

เข้าไป browse JNDI ดู โดย Application Server > JNDI Browsing

จะต้องมีอะไรทำนองนี้อยู่ ejb/TravelAgentJNDI

จัดการ database

วิธีแรก ใช้ Database Development perspective ของ Eclipse

คลิกขวา เลือก Edit ที่ table

เราสามารถ CRUD ได้


วิธีสอง command-line SQL

ใช้ ij Client ที่มากับ Derby


$ export DERBY_HOME="/home/mdailey/glassfish/javadb"
$ sh ~/glassfish/javadb/bin/ij
ij version 10.4
ij> connect 'jdbc:derby://localhost:1527/localDB';
ij> show tables;
...
APP |CABIN |
...
ij> select * from cabin;
...

Association ==================================================


จำไว้ว่า unidirectional ต้องใส่ (cascade={CascadeType.ALL}) เสมอ

ลองเพิ่ม class Phone ลงไปดิ๊
package com.titan.domain;

@Entity
public class Phone implements java.io.Serializable {
static final long serialVersionUID = 1L;
@Id @GeneratedValue
private int id;
private String number;
...

แล้วก็ Class Customer


package com.titan.domain;

@Entity
public class Customer implements java.io.Serializable {
static final long serialVersionUID = 1L;
@Id @GeneratedValue
private int id;
private String lastName;
private String firstName;
@OneToMany(cascade={CascadeType.ALL})
private Collection<Phone&ht; phoneNumbers = new ArrayList<Phone>();

นี่คือ one-to-many unidirectional relationship ( Phone class doesn't know about the Customer class )


ต่อไปให้ Add the getters and setters สำหรับ entities
แล้ว couple method ลง stateless session bean ของคุณซะ:


...
public int createCustomer();
public Collection <Phone> phoneNumbersForCust( int id );

และ implementations ใน bean class


...
public int createCustomer(Customer customer) {
manager.persist( customer );
return customer.getId();
}
public Collection<Phone> phoneNumbersForCust(int id) {
Customer customer = manager.find( Customer.class, id );
Collection<Phone> phoneList = customer.getPhoneNumbers();
// Ensure that the lazy-initialized collection is fetched
phoneList.size();
return phoneList;
}

ตอนนี้ client ของเรา, ให้สร้าง a detached Customer instance, add a Phone instance to it, make it persistent using createCustomer(), then fetch the phone numbers using phoneNumbersForCust()


ถ้ามัน error ประมาณว่า
Could not load class oracle.toplink.essentials.indirection.IndirectList
ให้ add toplink-essentials-agent.jar เข้าไปที่ client

ref : mdailey

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

วิธีการไป อย. กระทรวงสาธารณสุขจากหัวลำโพง

ทางไป : รถไฟฟ้า MRT หัวลำโพง ไปลงที่ สถานี กระทรวงสาธารณสุข  ถ้ากดที่ตู้ต้องเปลี่ยนไปหน้าจอสายสีม่วง สนน ราคา 48 53 บาท ต่อมอไซด์ ถ้าไป อย. 20 บาท จากหน้าทางเข้า  ถ้าฝนตกแนะนำให้โบกแท็กซี่จากข้างหน้า ข้างในหาแท็กซี่ยากมาก ถ้าจะเดินประมาณ 2.4 km ให้ระวังหลงเข้าไปรพ ศรีธัญญา รพ ศรีธัญญาพื้นที่ข้างในใหญ่มาก และเหมือนจะล้อมด้วยคลอง เหมือนจะมีทางออกแค่ทางที่เข้าไปนั่นแหละ ทางกลับ : รถเมล์ 97 จาก อย. ตรงข้ามประกันสังคม ทางที่ 1 : ถ้าจะใกล้ลงหน้าปากซอยขึ้นสายสีม่วงที่สถานีกระทรวงสาธารณสุขที่เดิม ทางที่ 2 : ผ่าน ท่าน้ำนนท์​ กลับเรือได้ ทางที่ 3 : ผ่านหน้าพระจอมพระนครเหนือด้วยนะ ผ่าน สถานีรถไฟฟ้า MRT บางซื่อ  ( จาก อย. ไป MRT บางซื่อ 17 บาท,  จาก MRT บางซื่อ ไป MRT หัวลำโพง 44 บาท นั่งกลับได้ 2 ทาง ทางหัวลำโพง กับ ไปเปลี่ยนที่ท่าพระ ไม่รู้ว่าทางไหนเร็วกว่ากัน ) ทางที่ 4 :  ผ่าน สะพานควาย  ทางที่ 5 :  นั่งถึงอนุสาวรีย์ชัยสมรภูมิได้ ค่ารถเมล์ 21 บาท ค่ารถไฟฟ้าไป BTS สะพานตากสิน 47 บาท 

วิธีใช้ ubuntu ต่อ อินเทอร์เน็ตทรู ( true ) โดยโมเด็ม billion bipac 7000 usb adsl modem

ก็อปไฟล์ cxacru-fw.bin ไปที่ /lib/firmware ไฟล์ cxacru-fw.bin download ได้ที่นี่ ก็อปไฟล์ br2684ctl ไปที่ /usr/sbin ไฟล์ br2684ctl download ได้ที่นี่ $ sudo pppoeconf nextๆ ไปเรื่อยๆ ใส่ username, password ของทรู ตามปกติ แล้วเขียนไฟล์ดังนี้ true.sh #!/bin/sh modprobe cxacru modprobe br2684 sudo /usr/sbin/br2684ctl -b -c 0 -a 0.100 # Communicating over ATM 0.0.100, encapsulation: LLC sudo ifconfig nas0 up pon dsl-provider # Plugin rp-pppoe.so loaded เสร็จแล้วสั่ง รัน shell script $ . ./true.sh คราวต่อไปรัน . ./true.sh อย่างเดียวก็ได้แล้วๆ reference : siamgeek บทความอื่นๆเกี่ยวกับ ubuntu

เลขฐานสอง ติดลบ เรื่องที่อาจจะลืมกันไปแล้ว

คอมพิวเตอร์ใช้การเปิดปิด หลอดสุญญากาศ ดังนั้นค่าที่เป็นไปได้คือ 0 กับ 1 ไม่มีติดลบ จึงกำหนดให้ใช้ 2's complement มากำหนดเลขลบ วิธีทำคือ เปลี่ยนเลข 1 เป็น 0 เปลี่ยนเลข 0 เป็น 1 แล้ว บวกหนึ่ง เช่น 1 คือ 00000001 เปลี่ยนเป็น 11111110 บวก 1 ได้ 11111111 บิตที่อยู่หน้าสุดจะบอกว่าเป็นเลขบวกหรือลบ ( 0 = +, 1 = -) พิสูจน์ จาก สมการคณิตศาสตร์​ 1 + (-1) = 0 00000001 + ???????? = 0 00000001 + (11111110 + 000000001 ) = 0 นั่นเอง วิธีที่ง่ายกว่านั้นในการทำ 2's complement คือ 1. หา 1 ตัวสุดท้าย 010100 1 2. invert ตัวหน้า 1 ทั้งหมด 101011 1 สำหรับคนที่ลืมไปแล้ว 1's complement คือเปลี่ยนเลข 1 เป็น 0 เปลี่ยนเลข 0 เป็น 1 ตามปกติ เช่น ~1 1 = 00000001 ~1 = 11111110 ซึ่งมีค่าเท่ากับ -2 ที่มา : วิชาการดอทคอม , wikipedia

เทคนิคคิดเลขเร็วโดยใช้ วิธีคิด แบบ เวทคณิต ( Vedic Mathematics example )

จากที่สงสัยเรื่อง ลูกคิด ของ จินตคณิต ที่ลองไปค้นดู ปรากฎว่า เจอ เวทคณิต ซึ่งเขาบอกว่า อยู่ในคัมภีร์พระเวท ลองอ่านดูแล้ว รู้สึกว่าฝึกสมอง ก็ทำให้คิดเลขเร็วดี เลยสรุปมาให้ ตามนี้ Tutorial 1 การลบเลข ALL FROM 9 AND THE LAST FROM 10 ทุกตัวลบจาก 9 และตัวสุดท้ายลบจาก 10 เช่น 1000 - 357 = 643 10,000 - 1,049 = 8951 ถ้า 1,000 - 83 ให้มองว่ามี 0 อยู่ข้างหน้า เป็น 1,000 - 083 = 917 ฝึกบ่อยๆ ก็คล่อง แล้วก็ไม่ต้องใช้เครื่องคิดเลขด้วย ลองทำดูสิ 1) 1000 - 777 = 2) 1000 - 283 = 3) 1000 - 505 = 4) 10,000 - 2345 = 5) 10,000 - 9876 = 6) 10,000 - 1011 = 7) 100 - 57 = 8) 1000 - 57 = 9) 10,000 - 321 = 10) 10,000 - 38 = 3,000 - 467 ก็ทำเหมือนกัน โดยลบตัวแรกสุดของ 3,000 ไป 1 จากนั้นก็ทำเหมือนเดิม จะได้ว่า 3,000 - 467 = 2,533 Tutorial 2 VERTICALLY AND CROSSWISE สำหรับตัวเลขที่น้อยกว่าฐานนิดหน่อย ลอง 88x98 88 น้อยกว่า 100 อยู่ 12 98 น้อยกว่า 100 อยู่ 2 12x2 = 24 88-2 หรือ 98-12 ได้ 86 ดังนั้นตอบ 8,624 ดูอีกตัวอย่าง หรือ ลองทำนี่ดู 1) 87 x 98 = 2) 88 x

แจก คัมภีร์ ไบเบิล ภาษาไทย รวมเล่ม ( download thai bible pdf version )

แปลกใจว่า ทำไม ไม่มี ebook พระคัมภีร์ ที่สามารถ print อ่านได้เลย เลยเอา พระคัมภีร์ภาษาไทย ฉบับ KJV ( Thai Bible King James Version ) มาเย็บรวมเล่ม สร้างไว้เฉพาะ พันธสัญญาเดิม ( Old Testament ) ดาวน์โหลดได้จาก Thai Bible ย้ายแล้วจ้า ย้ายมา อันนี้ จะยัดลง iPhone หรือ iPod Touch ก็ได้ เพราะว่า มันอ่าน pdf ได้อยู่แล้ว จาก iBook ง่าย และ ฟรี ไม่ต้อง crack โปรแกรมให้ผิดศีล ถ้าไม่ชอบรูปแบบยังไง checkout มาแล้ว compile latex เองได้เลย จัดรูปแบบสวยงามแล้ว commit กลับมา จักเป็นพระคุณยิ่ง NOTE: ถ้าท่านต้องการสนับสนุนเรา ท่านสามารถดาวน์โหลด App ของเราได้ทางมือถือ Android ที่ App Words of God เนื้อหาจะเป็นเนื้อหาเดียวกันกับที่แจกฟรีนี้  ซึ่งใน App ท่านสามารถศึกษาพระคัมภีร์ได้แบบ Offline ซึ่งสามารถใช้งานได้โดยไม่ต้องต่ออินเตอร์เน็ต ท่านสามารถพกไปที่ไหนก็ได้ นอกจากนี้ ใน App ท่านสามารถ Search เพื่อค้นหาพระคัมภีร์ได้ และ ใน App เราไม่ได้เก็บข้อมูลใดๆ ของท่าน (เช่น การติดตามว่าท่านอ่านหน้าไหน, การติดตามว่าท่านค้นหาอะไร)  เดิมทีเราเองทำไว้ให้ทุกท่านสามารถเข้าถึงได้ฟรีทางเว็ปไซท์  ที่นี

สอบสัมภาษณ์ MBA คำถามและการเตรียมตัว

 * “แนะนำตนเอง” การแนะนำตนเองไม่ใช่แค่บอกชื่อ-นามสกุล ตำแหน่งงาน สถานที่ทำงาน หรือ ประวัติการศึกษาเท่านั้น ข้อมูลเหล่านี้ต้องพูดถึง แต่ไม่ใช่ประเด็นสำคัญ ส่วนที่สำคัญในการแนะนำตนเองก็คือต้องขายความเป็นตัวตนของเรา ความสามารถของเรา และ/หรือวัตถุประสงค์ในการเลือกเรียนหลักสูตรนี้  พยายามตอบคำถามให้สอดคล้องกับ MBA ไม่ต้องนาน ประมาณ 2–3 นาที เน้นเนื้อ ไม่เน้นน้ำ ซ้อมพูดเยอะๆ ถือว่าเป็น First Impression * ทำไมจึงเลือกสมัครเข้าเรียนหลักสูตรนี้  ทำไมถึงมาเรียน MBA ทำไมอยากเรียน MBA ทำไม อยากเรียนตอนนี้  * ทำไม ต้องเรียน MBA ที่นี่ -- ลองศึกษา Program ของมหาลัยที่จะไปดูน้าว่ามหาลัยมีอะไรเด่น * คิดว่าถ้าเรียน MBA จะมี Challenge อะไรบ้าง * สนใจโปรแกรมอะไรบ้าง * หลังเรียนจบอยากทำอะไร * ต้องการอะไรจากหลักสูตรนี้  เรียนแล้วคิดว่าจะได้อะไร เอาไปใช้อะไรในชีวิต * ทำไมไม่เรียนสาขาอื่น ถ้าอายุงานถึงเรียนอย่างอื่นได้ * ในองค์กรที่ทำงานอยู่สามารถเติบโตได้ถึงตำแหน่งไหน * Performance ปัจจุบันเป้นยังไง  * ดูดีอยู่แล้ว แล้วมาเรียน MBA ทำไม เพราะงานที่ทำอยู่ก็มีโกาสก้าวหน้าในสายอาชีพบริหารอยู่แล้ว * ไม่ได้เรียนม

[ Netflix ] สาธุ รีวิวแบบไม่สปอยส์

ตัวละคร เดียร์ ตอนแรกก็ไม่ค่อยชอบ จากคาแรกเตอร์บางอย่าง ถ้าเลาเป็นพระปั๊บก็คงแวปขึ้นมาหลายซีนว่าเป็นลุงอ่ำใส่วิก แต่ดูๆ ไปกลับเป็นชอบ จากคาแรกเตอร์วัยรุ่นสร้างตัว ทำโน่นทำนี่ได้เองซะงั้น พระเทศน์จริงๆ ควรเทศน์อย่างพระดล เพราะเนื้อหาในพระพุทธศาสนาก็น่าสนใจในตัวเองอยู่แล้ว #เราเอง เคยฟังพระพุทธทาสภิกขุ เทศน์เรื่องแก่นแท้ของพระพุทธศาสนาที่สรุปให้ฟังสั้นๆมาก่อนแล้ว รู้สึกว่ามีพลัง   ใครยังไม่เคยดู ดูได้ ที่ ลิงก์นี้  เริ่มวิที่ 1:02 นะเผื่อวัยรุ่นใจร้อน อย่างพระสายตลกโปกฮานี่ ถ้ามีก็ควรมีนิดหน่อย ถ้าเพลาๆไปได้น่าจะดีกว่าเยอะ ทำไมรู้สึกว่าหนังจบได้ในตัวมันเองอยู่แล้ว แต่มีคนบอกว่ายังค้างๆคาๆ  ถ้าจะสร้างภาคสองก็คงได้แหละ พวกมารศาสนาในหนัง พอดูแล้วนึกถึงคลิปที่ทำไว้เล่นๆ ด้านล่าง @dsin.12 ธรรมะชนะอธรรม Dhamma conquers evil #buddha #animation #fight #evil #horror #mystery #life #bkk #bangkok #drama #fire #conquer ♬ original sound - Phong Eakamongul

ปีอธิกสุรทิน อธิกมาส อธิกวาร และ การทดปฏิทิน

 ปีที่แบ่งตามรอบพระอาทิตย์ (สุริยคติ) มี 2 แบบ คือ 1. ปกติสุรทิน คือ มี 365 วัน 2. อธิกสุรทิน คือ มี 366 วัน (เดือนกุมภาฯมี 29 วัน) การคำนวน ปีอธิกสุรทิน ตรงนี้บางท่านจะจำได้แต่เพียง ว่า หาร 4 ซึ่งไม่ใช่แค่นั้นครับ ความจริงแล้ว จะมีสูตรคำนวณที่ถูกต้องคือ ให้เอา ค.ศ.ตั้ง แล้วเอา 4 หาร หากหารลงตัวก็ใช่ ยกเว้น 100 หารลงตัว แต่หาก 400 ลงตัวก็ให้นับเป็นอธิกสุรทินด้วย (เช่น ปี 1900 ไม่เป็นอธิกสุรทิน แต่ปี 2000, 2004 เป็นปีอธิกสุรทิน) ปีที่แบ่งตามรอบพระจันทร์ (จันทรคติ) แบ่งเป็น 3 คือ 1. ปกติมาส-ปกติวาร  (บางที่เขียนย่อ เป็น ปกติมาส-วาร)       คือ ปีที่เป็นปกติ มีเดือนคู่ ข้างขึ้น 15 วัน ข้างแรม 15 วัน       และมีเดือนคี่ ข้างขึ้น 15 วัน ข้างแรม 14 วัน       รวมวันใน 1 ปี เป็น (30*6+29*6) = 354 วัน 2. ปกติมาส-ปีอธิกวาร (บางที่เรียกเป็น อธิกวาร)       คือ ปีที่เป็นปกติ แต่เดือน 7 จะมีข้างแรม 15 วัน        รวมวันใน 1 ปี เป็น 354+1 = 355 วัน 3. ปีอธิกมาส-ปกติวาร (บางที่จะเรียกเป็น อธิกมาส)       คือ ปีที่มีเดือนแปดเพิ่มอีกเดือน หรือที่เรียกกันว่า มีเดือนแปดสองหน       รวมวันใน 1 ปี เป็น 354+30

[ ภาษี ] ฟอร์มลดหย่อนผู้มีอายุตั้งแต่ 65 ปีขึ้นไป ลดได้ 190,000 บาท

ลดได้ 190,000 บาท ฟอร์มลดหย่อนผู้มีอายุตั้งแต่65 ปีขึ้นไป  https://www.rd.go.th/fileadmin/tax_pdf/pit/65_year_110157.pdf ถ้ารายได้จากการทำธุรกิจ  ลงข้อ 7.1 (ระบุ)_[ธุรกิจอะไร]_ ผู้มีเงินได้ _[รายได้ทั้งหมดมาใส่ตรงนี้]_ - _190,000_ = _[เงินได้ที่เหลือเอาไปใส่ในช่องเงินได้ ตามมาตรา 40(8) ตามปกติ ]_

[ Netflix ] ปรสิตเดอะเกรย์

  ดูไปตอนแรกก็ฝันร้ายซะแล้ว แต่ดันไปฝันว่า ทำสอบวิชาไฟแนนซ์อยู่แล้วตามเพื่อนในห้องออกมาข้างนอก พอนึกขึ้นได้ว่าต้องกลับไปทำ เห็นคำถามในข้อสอบแล้วดันทำไม่ได้ อะไรกัน! จริงๆ เรื่อง Parasite ดูมาตั้งแต่สมัยการ์ตูน เสียงมิกิที่เป็นมือนี่ก็น่ารักดี เพลงเพราะมาก ชอบๆ พอเกาหลีเอาไป remake  Soft Power เกาหลีเลยเอาไปเขียนว่า เกาหลี มีเทคโนโลยีไว้ต่อกรกับพวกปรสิตเป็นประเทศแรกซะงั้น