อาชญากรรมจะดำเนินต่อไป

ปัญหาฮาร์ดแวร์

ข้อกังวลเกี่ยวกับความเป็นส่วนตัว

ความรู้สึกควบคุมในชีวิตของเราไม่เพียงแต่กำจัดความกลัวและความวิตกกังวลที่มาพร้อมกับความรู้สึกควบคุมไม่ได้เท่านั้น แต่ยังเป็นปัจจัยที่สำคัญที่สุดประการเดียวในการช่วยให้เรามีประสิทธิผลในการทำงาน
\n มันไม่ได้เกี่ยวกับการสร้างแผนและคาดหวังว่าแผนจะขยายออกไปตามที่เราตั้งใจไว้ นั่นจะเป็นการมองโลกในแง่ดีที่ไม่สมจริง แต่เป็นความรู้สึกภายในของอิสระที่จะรู้ว่าเรามีอิสระในการแก้ไข มีแรงผลักดันให้ยืนหยัด และมีพลังที่จะโน้มน้าวผลลัพธ์
\n การขาดการควบคุมจึงไม่ได้เกิดจากการที่เราขาดอิสระในการใช้ทางเลือกของเรามากนัก แต่มาจากการวางอำนาจพิเศษไว้ในมือของกองกำลังภายนอก – คนอื่น สถานการณ์ เงื่อนไข และสิ่งแวดล้อม – เพื่อโน้มน้าววิธีที่เราคิด ตัดสินใจ และ โต้ตอบกับโลก
\
เมื่อคุณรู้สึกดี ทุกอย่างดูเหมือน รู้สึก หรือรสชาติดีขึ้น คุณยังคิดความคิดที่ดีขึ้น ระดับพลังงานของคุณสูงขึ้นและความเป็นไปได้ดูเหมือนไร้ขีดจำกัด ในทางกลับกัน เมื่อคุณรู้สึกหดหู่ ทุกอย่างดูน่าเบื่อ คุณมีพลังงานน้อยและคุณหมดกำลังใจ คุณรู้สึกติดอยู่กับที่ (ทั้งกายและใจ) ที่คุณไม่อยากอยู่ และอนาคตก็ดูมืดมน – Thibaut Meurisse
\n ความรู้สึกควบคุมทำให้รู้สึกสบายตัว ขณะที่ขาดการควบคุมจะทำให้ทุกอย่างดูน่าเบื่อและหดหู่
\n ทันทีที่เราคิดว่าปัญหาอยู่ตรงนั้น เราก็ปล่อยให้การควบคุมหลุดมือไปจากสิ่งที่อยู่นอกเหนือเรา
\n ทันทีที่เราคิดว่าไม่มีอะไรเปลี่ยนแปลงผลลัพธ์ได้ เราก็เลิกเชื่อในความสามารถของเราที่จะมีอิทธิพลต่อผลลัพธ์
\n แทนที่จะผลักไปข้างหน้า เราถอยกลับ แทนที่จะลงมือทำ เรากลับสิ้นหวังในความสิ้นหวัง การใช้เวลาและพลังงานมากขึ้นในการคร่ำครวญถึงสิ่งที่เราไม่บรรลุผล และน้อยลงในการทำให้บางสิ่งเกิดขึ้น ทำให้เกิดวงจรของการหลีกเลี่ยง ความไร้อำนาจ และความรู้สึกไม่สบาย ซึ่งนำไปสู่การอยู่เฉยต่อไปและคำทำนายที่เติมเต็มตนเองในความเชื่อของเราเอง
\ เราทำน้อยลง สำเร็จน้อยลง และถือว่ามันขาดการควบคุม การตำหนิผู้อื่นหรือสิ่งอื่นสำหรับสิ่งที่เกิดขึ้นนั้นเป็นเส้นทางที่ง่าย และส่วนมากของเราเลือกเส้นทางนี้เกือบตลอดเวลา (ฉันมีความผิดที่ทำสิ่งนี้ด้วยตัวเองหลายครั้ง)
\ น้อยคนมากที่ขาดความตระหนักในการแสดงเจตจำนงอิสระในการเลือกคำตอบ เพื่อไม่ให้ใครมากำหนดสิ่งที่ทำได้และไม่สามารถทำได้ เพื่อไม่ให้สภาพภายนอกกีดขวางการเคลื่อนไหว เพื่อไม่ให้สถานการณ์ส่งผลกระทบต่อค่านิยมและทัศนคติของพวกเขา
\ สิ่งสำคัญที่สุดในชีวิตไม่ใช่ประสบการณ์ของเรา แต่เป็นการตอบสนองต่อประสบการณ์เหล่านั้นอย่างไร พิจารณากรณีเหล่านี้:
\”เจ้านายของฉันเป็นไมโครแมเนเจอร์…ฉันทำได้ไม่ดีแน่”
\ เจ้านายของคุณขัดขวางไม่ให้คุณประสบความสำเร็จจริงหรือ? คุณได้ดำเนินการแก้ไขสถานการณ์ของคุณแล้วหรือคุณคาดหวังว่าพฤติกรรมของเขาจะเปลี่ยนไปอย่างน่าอัศจรรย์หรือไม่?
\”ถ้าเพียงสภาพตลาดถูกต้อง…”
\ คุณทำงานเพื่อประเมินความเป็นไปได้ของผลิตภัณฑ์ของคุณหรือไม่หรือคุณคิดว่ามันจะได้ผล? ตอนนี้คุณรู้แล้วว่ากลยุทธ์ของคุณไม่ได้ผล คุณวางแผนจะทำอะไรต่อไป
\”ถ้าฉันมีเวลามากกว่านี้…”
\n ไม่มีเวลาหรือความจริงที่ว่าคุณจัดลำดับความสำคัญไม่เพียงพอหรือถูกเบี่ยงเบนความสนใจจากสิ่งอื่นที่คุณสนใจใช่หรือไม่
\”มันไม่ได้ผลเพราะทีมอื่นทำไม่ได้…”
\ คุณไม่มีบทบาทอย่างแน่นอนในสิ่งที่เกิดขึ้นหรือไม่? คุณสามารถเป็นเชิงรุกมากขึ้น?
\ การขาดการควบคุมไม่เพียงแต่ส่งผลต่อผลลัพธ์ที่คุณได้รับ แต่ยังส่งผลเสียต่อสุขภาพและความเป็นอยู่ที่ดีของคุณ ความปรารถนาที่จะมีการควบคุมในที่ทำงานมากขึ้นในขณะที่ไม่ทำตามขั้นตอนเพื่อฟื้นการควบคุมนั้นอาจเป็นสาเหตุหนึ่งที่ซ่อนเร้นที่สุดของความเหนื่อยหน่ายในที่ทำงาน
\
จิตใจของเราเป็นเครื่องจักรที่ทรงพลังมาก ความสามารถในการเรียนรู้และทำซ้ำพฤติกรรมโดยที่เราไม่รู้ตัวถือได้ว่าเป็นของขวัญเมื่อนำไปปฏิบัติในเชิงบวก ตัวอย่างเช่น: ในขณะที่สร้างทักษะใหม่ ๆ ด้วยการฝึกฝนและความสม่ำเสมอ สิ่งที่เคยน่ากลัวจะกลายเป็นธรรมชาติที่สอง จิตไร้สำนึกของเราเรียนรู้และสร้างรูปแบบที่ทำให้เราทำซ้ำพฤติกรรมได้ง่ายขึ้น
\ อย่างไรก็ตาม เมื่อเผชิญกับแง่ลบ ความเห็นถากถางดูถูก ตำหนิเกม และความรู้สึกควบคุมไม่ได้เป็นระยะเวลานาน ก็สามารถเรียนรู้ที่จะติดอยู่กับพฤติกรรมเหล่านั้นได้เช่นกัน \n
การตอบสนองตามธรรมชาติของคุณต่อความทุกข์ยากอาจเป็นความรู้สึกหมดหนทางโดยไม่รู้ตัว คุณไม่เพียงแต่ปฏิเสธที่จะลงมือทำ คุณยังเริ่มเชื่อในเรื่องราวการเอาชนะใจตัวเองด้วย ยิ่งคุณแสดงให้เห็นถึงการขาดการควบคุมและเลี้ยงดูจิตใจด้วยเรื่องราวดังกล่าวมากเท่าไร ก็ยิ่งตอกย้ำความเชื่อของคุณมากขึ้นเท่านั้น \n
ความสามารถในการหาเหตุผลเข้าข้างตนเองเป็นดอกไม้ที่ดีที่สุดของวิวัฒนาการของมนุษย์ ความสำเร็จที่ยิ่งใหญ่ที่สุดของสมองมนุษย์ เมื่อพูดถึงการกระทำที่ชอบธรรม มนุษย์ทุกคนจะได้รับสติปัญญาของไอน์สไตน์ จินตนาการของเชคสเปียร์ และความละเอียดอ่อนของเยซูอิต – ไมเคิล โฟลีย์
\ การให้ความสนใจกับความคิดและภาษาที่คุณใช้ในช่วงเวลาดังกล่าวอย่างจริงจังเป็นวิธีเดียวที่จะทำลายวงจร:
\ ด้วยการจัดการบทสนทนาภายในและเปลี่ยนจากการใช้ภาษาที่ขัดขวางไม่ให้คุณดำเนินการใดๆ คุณสามารถเริ่มขั้นตอนแรกสู่การเรียกคืนอิสรภาพของคุณเหนือการตัดสินใจของคุณเอง และค่อยๆ ฝึกจิตใต้สำนึกให้คิดแบบนี้ได้เช่นกัน
\
Stephen R. Covey ในหนังสือของเขา The 7 Habits of High Effective People อธิบายถึงสองสถานะ: ภายนอก-เข้า-ออก
\ เขาเขียนว่าเมื่อเราดำเนินชีวิตด้วยกระบวนทัศน์ภายนอก-ภายใน เราให้อำนาจกับสิ่งที่อยู่ข้างนอกนั้นเพื่อควบคุมเรา ต้องมีอะไรเปลี่ยนแปลงก่อนที่เราจะเปลี่ยนแปลงได้
\”ฉันจะมีความสุขเมื่อได้เงินค่าบ้านแล้ว”
“ถ้าฉันมีเจ้านายที่ไม่ใช่เผด็จการเช่นนั้น…”
“ถ้าฉันมีสามีที่อดทนมากกว่านี้…”
“ถ้าฉันมีลูกที่เชื่อฟังมากกว่านี้…”
“ถ้าฉันได้ปริญญา…”
“ถ้าฉันมีเวลาให้ตัวเองมากกว่านี้…”
\ อย่างไรก็ตาม ด้วยกระบวนทัศน์จากภายในสู่ภายนอก เราตัดสินใจอย่างกระตือรือร้นที่จะแตกต่าง และด้วยการแตกต่าง เรามีอิทธิพลต่อการเปลี่ยนแปลงในเชิงบวกในสิ่งที่อยู่ข้างนอก
\”ฉันสามารถมีไหวพริบมากขึ้น”
“ฉันสามารถขยันมากขึ้น”
“ฉันสามารถสร้างสรรค์ได้มากกว่านี้”
“ฉันสามารถร่วมมือกันมากขึ้น”
“ผมขอความช่วยเหลือได้”
\ โดยการเปลี่ยนกระบวนทัศน์ของคุณจากภายนอกสู่ภายนอก คุณสามารถริเริ่มที่จำเป็นต่อการเปลี่ยนแปลงในเชิงบวกได้ แม้แต่การเปลี่ยนแปลงเล็กน้อยในกระบวนทัศน์ของคุณก็สามารถช่วยให้คุณหาวิธีแก้ไขได้ แทนที่จะโทษบางสิ่งหรือคนอื่นในสถานการณ์ของคุณ ซึ่งจะทำให้คุณได้รับการควบคุมอย่างแข็งขันในชีวิตของคุณมากขึ้น
\
ส่วนใหญ่เราตอบสนองต่อสิ่งต่าง ๆ รอบตัวเรา โดยเฉพาะอย่างยิ่งเมื่อสิ่งนั้นเป็นสิ่งที่ส่งผลกระทบต่อร่างกายและอารมณ์ของเรา เราไม่ได้ตระหนักว่าการแสดงปฏิกิริยาและไม่กระทำโดยเจตนา เราจะถ่ายทอดการขาดการควบคุมสถานการณ์ของเราให้ตนเองและผู้อื่นทราบโดยอัตโนมัติ
\ โกรธเคือง พูดหยาบ โจมตีบุคคลด้วยวาจา แสดงความไม่พอใจในน้ำเสียงและภาษากายเป็นเพียงบางวิธีที่เราแสดงความไม่พอใจต่อสถานะปัจจุบันของสิ่งต่างๆ และในขณะที่สิ่งเหล่านี้อาจทำให้เรารู้สึกดีชั่วคราวและแม้กระทั่งขจัดความเครียดและความวิตกกังวลบางส่วนที่เกิดจากความรู้สึกที่ควบคุมไม่ได้ แต่ก็ไม่นาน
\ ผลด้านลบของการปฏิเสธจะรวมกันเป็นหนึ่งเสมอ การมุ่งเน้นเชิงโต้ตอบของเราได้นำพลังของเราออกไปในการมองเห็นความเป็นจริงของสถานการณ์ของเราและดำเนินการ เราติดอยู่กับความคับข้องใจของเรา โดยกล่าวโทษบุคคลอื่น สถานการณ์ของเรา และเงื่อนไขของเรา จนเราไม่สามารถให้ความสำคัญกับสิ่งเดียวที่อยู่ในการควบคุมของเรา นั่นคือ พฤติกรรมและการกระทำของเราเอง
\n การเปลี่ยนไปใช้โฟกัสเชิงรุกทำให้เรามองโลกแตกต่างออกไป มันให้ความสำคัญกับสิ่งต่าง ๆ ที่อยู่ในการควบคุมของเรา มันสนับสนุนให้เรารับผิดชอบต่อทุกสิ่งในชีวิตของเรา แม้ว่ามันจะไม่สอดคล้องกับผลลัพธ์ที่เราต้องการก็ตาม ทำให้เราลงมือทำด้วยความตั้งใจ
\ ในการสร้างโฟกัสเชิงรุก ให้ตรวจสอบว่าคุณใช้เวลาและพลังงานของคุณไปที่ใด – สิ่งต่างๆ ที่อยู่นอกเหนือการควบคุมของคุณหรือสิ่งที่อยู่ภายในวงกลมแห่งอิทธิพลของคุณ?
\ วงอิทธิพลของคุณรวมถึงพฤติกรรมและการกระทำของคุณเอง และความสามารถของคุณในการโน้มน้าวผู้อื่นเพื่อให้บรรลุผลลัพธ์ โดยการดำเนินการภายในวงอิทธิพลของคุณ คุณสามารถใช้เสรีภาพของคุณได้
\ เผยแพร่ก่อนหน้านี้ ที่นี่
\ เฮ้ แฮกเกอร์! เตรียมพร้อมที่จะชนะด้วยการเขียนเรื่องราวการแฮ็ก!
\ Yasssss การประกวดเขียนความปลอดภัยทางไซเบอร์ อยู่ที่นี่แล้ว! HackerNoon รู้สึกตื่นเต้นที่จะเป็นเจ้าภาพจัดการแข่งขันร่วมกับ Twingate ! นี่เป็นโอกาสของคุณที่จะชนะเงินรางวัลรวม $1,000 ต่อเดือน
\
:::tip Twingate & HackerNoon ตื่นเต้นที่จะจัดการประกวดเขียนความปลอดภัยทางไซเบอร์! นี่เป็นโอกาสของคุณที่จะชนะเงินรางวัลรวม $1,000 ต่อเดือน อาจเป็นเรื่องราวใดๆ เกี่ยวกับ #ความปลอดภัยทาง ไซเบอร์ คุณสามารถแบ่งปันความเชี่ยวชาญและเรื่องราวของคุณเกี่ยวกับกลไกเชิงรุกและการป้องกันทั้งหมดเพื่อรักษาความปลอดภัยของอินเทอร์เน็ต คุณยังสามารถพูดคุยเกี่ยวกับเหตุการณ์ล่าสุดเกี่ยวกับความปลอดภัยทางไซเบอร์ การสัมภาษณ์ และคำถามเชิงปรัชญาที่เกี่ยวข้องกับไซเบอร์เซ็ค!
:::
\ ดูเรื่องราวความปลอดภัยในโลกไซเบอร์เพื่อเป็นแรงบันดาล ใจ
Twingate เป็นโซลูชันที่ไม่ไว้วางใจซึ่งช่วยให้คุณสร้างเครือข่ายที่ปลอดภัยระหว่างเซิร์ฟเวอร์ คอมพิวเตอร์ และอินสแตนซ์บนคลาวด์ของคุณ แม้ว่าจะแยกจากกันโดยไฟร์วอลล์หรือเครือข่ายย่อย Twingate ก็ใช้งานได้ ถึงเวลาที่คุณจะเปลี่ยน VPN ด้วย Twingate !
รางวัลที่ 1: 500 USD
รางวัลที่ 2: 300 USD
รางวัลที่ 3: 100 USD
อ่านมากที่สุด: 100 USD
ต้องมีอายุ 18 ปีขึ้นไปจึงจะเข้าได้
เนื้อหาเรื่องราวสามารถเป็นเรื่องราวที่เป็นต้นฉบับบน #cybersecurity ได้
ต้อง สร้างบัญชี HackerNoon เนื่องจากผู้ชนะจะได้รับการติดต่อทางอีเมล
ใครอายุเกิน 18! ไม่มีข้อ จำกัด ด้านสถานที่ คุณต้องสร้างโปรไฟล์บน HackerNoon เพื่อเข้าร่วมการแข่งขัน
ใช่! คุณสามารถใช้ชื่อจริงของคุณในโปรไฟล์ HN ชื่อปลอม หรือแม้แต่สร้างตัวตนเพื่อเขียนถึง
จะมีทั้งหมด 6 รอบ ได้แก่
\
แน่นอนคุณสามารถ! การส่งเรื่องแต่ละครั้งจะถือเป็นรายการใหม่ในการแข่งขันการเขียน
ใช่! หากคุณส่งหลายเรื่อง แต่ละเรื่องมีโอกาสชนะ
\ ผู้ได้รับการเสนอชื่อจะถูกเลือกโดยการเข้าชมทั้งหมดในแต่ละเดือน จากนั้นจึงโหวตโดยทีมงานของเรา หากเรื่องราวที่คุณส่งมาในเดือนนั้น 2 เรื่องมีผู้เข้าชมมากที่สุด 10 อันดับแรกในเดือนนั้น ทั้งสองคนจะมีสิทธิ์ได้รับรางวัล หมายความว่าคุณสามารถคว้าตำแหน่งที่หนึ่งและสองในการแข่งขันได้หากเรื่องราวของคุณ 2 เรื่องเข้าสู่ 10 อันดับแรก!
อย่างแน่นอน! โปรดเข้าร่วมการแข่งขันเขียนความปลอดภัยทางไซเบอร์ในแต่ละรอบ \n \n เรากำลังรอการส่งของคุณ! มาชนะ $$$ กันเถอะ!
\
\
\ ในบทช่วยสอนนี้ ฉันจะสร้างแชทบอทโดยใช้ Messagebird API สำหรับ WhatsApp และเฟรมเวิร์ก Flask สำหรับ Python
\ ขั้นตอนแรกคือการเข้าถึงเพื่อใช้ WhatsApp API ใช้ ลิงก์ นี้เพื่อเข้าถึง เมื่อคุณลงทะเบียนและคุณอยู่ในแดชบอร์ด ให้ไปที่ WhatsApp และทำตามคำแนะนำในการตั้งค่าหมายเลขของคุณเองเพื่อทำงานกับ API ณ ตอนนี้ เราสามารถใช้กล่องทรายของ Messagebird เพื่อทดสอบบ็อตของเรา มาเริ่มกันเลยดีกว่า
\ เชื่อมต่อโทรศัพท์ของคุณกับแซนด์บ็อกซ์จากแดชบอร์ด Messagebird แล้วคลิก WhatsApp จากนั้นคลิกแซนด์บ็อกซ์ WhatsApp
\
เมื่อคุณส่งข้อความแรกไปยังหมายเลขนั้น คุณจะได้รับรหัสช่องที่ไม่ซ้ำกัน แต่เมื่อคุณได้รับการยืนยันให้ใช้หมายเลขของคุณเอง คุณจะได้รับรหัสช่องของคุณเองด้วย ซึ่งเราจะใช้เพื่อสื่อสารกับบอทของเรา หากคุณติดตั้งสภาพแวดล้อมเสมือนแล้วให้ข้ามขั้นตอนที่ 1
sudo apt install python-virtualenv
\
sudo python2 -m pip install virtualenv
\
py -2 -m pip install virtualenv
สร้างไดเร็กทอรีหรือโฟลเดอร์ที่คุณจะสร้างสภาพแวดล้อมโดยใช้เวอร์ชันของ python ในเครื่องของคุณ ฉันจะใช้ python3 ในบทช่วยสอนนี้
ในเทอร์มินัลของคุณ ไปที่ไดเร็กทอรีที่คุณสร้างในขั้นตอนที่ 2 และป้อนคำสั่งต่อไปนี้แทนที่ whatsappbot ด้วยชื่อของคุณเอง
\
python3 -m venv whatsappbot
py -3 -m venv whatsappbot
เปิดใช้งานสภาพแวดล้อมเสมือนใน Linux และ MacOS ด้วย แทนที่ whatsappbot ด้วยชื่อของสภาพแวดล้อมที่คุณสร้างในขั้นตอนที่ 2:
\
. whatsappbot/bin/activate
\ สำหรับ Windows เปิดใช้งานสภาพแวดล้อมเสมือนด้วยแทนที่ whatsappbot ด้วยชื่อของสภาพแวดล้อมที่คุณสร้างในขั้นตอนที่ 2:
\
whatsappbot\Scripts\activate
ป้อนคำสั่งต่อไปนี้
\
pip install Flask messagebird requests gunicorn jinja2 werkzeug urllib3
\ เปิดโฟลเดอร์ของคุณด้วยโปรแกรมแก้ไขโค้ด เหมือง vscode โฟลเดอร์โครงการของคุณควรมีโฟลเดอร์ venv ของฉันคือ whatsappbot ไปสร้างไฟล์ bot.py ในโฟลเดอร์รูทนอกไดเร็กทอรี venv
\
เพิ่มรหัสต่อไปนี้ในไฟล์ bot.py เพื่อสร้างแอปพลิเคชันที่พิมพ์ ” Hello bot ” บันทึกไฟล์และปิด:
\
from flask import Flask app = Flask(__name__) @app.route('/bot', methods=['POST']) def bot(): #webhook logic if __name__ == '__main__': app.run()
\ ตั้งค่าตัวแปรสภาพแวดล้อม FLASK_APP ด้วยคำสั่งต่อไปนี้ในเทอร์มินัล
\
\
export FLASK_APP=bot.py
\
\
setx FLASK_APP “bot.py”
\ สิ่งแรกที่เราต้องทำในแชทบ็อตของเราคือการรับข้อความที่ป้อนโดยผู้ใช้ ข้อความนี้มาในส่วนของคำขอ POST
แก้ไขไฟล์ bot.py ของคุณด้วยรหัสต่อไปนี้ และฉันจะอธิบายวิธีการทำงาน
\
import jsonfrom flask import Flask, jsonify, request import requests app = Flask(__name__) @app.route(“/”) def hello(): return “Bot is alive!” @app.route('/webhook', methods=['POST']) def bot(): data = request.json message = data[“message”][“content”][“text”].lower() if (message == “hello”): return conversation_reply( data[“conversation”][“id”],”How are you” ) if (message == “bye”): return conversation_reply(data[“conversation”][“id”],”Good bye!”) def conversation_reply(conversation_id, message_text): reqUrl = ( “https://conversations.messagebird.com/v1/conversations/" + conversation_id + “/messages” ) headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY“, “Content-Type”: “application/json”, } payload = json.dumps({“type”: “text”, “content”: {“text”: message_text}}) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) return jsonify({“status”: “ok”, “response”: response.text}) if __name__ == '__main__': app.run()
\ Request.json มีข้อมูลจากผู้ส่ง ดังนั้นเราต้องการเนื้อหาข้อความและใช้ในคำสั่ง if ฉันสร้างฟังก์ชันอื่นที่จัดการคำขอโพสต์ไปยัง API การสนทนาด้วยการตอบกลับ ในการทดสอบบอทของคุณ ให้เพิ่มรหัสการเข้าถึง Messagebird จากแดชบอร์ด
\
\ หากคุณไม่มี ngrok ในเครื่องของคุณ ให้ติดตั้งจาก ที่นี่ หากคุณมีอยู่แล้วให้เรียกใช้แอปขวดด้วย:
\
flask run
\ จากนั้นเปิดหน้าต่างอื่นจากเทอร์มินัลของคุณและเรียกใช้
\
ngrok http 5000
\ สร้างเว็บฮุคของคุณโดยใช้คำสั่งต่อไปนี้ คุณสามารถสร้างไฟล์แยกต่างหากที่คุณจะเรียกใช้เมื่อแทนที่ accesskey, channelid และ url ด้วยไฟล์ที่คุณได้รับจากการรัน ngrok อย่าลืมเพิ่ม /webhook
\
import requests reqUrl = “https://conversations.messagebird.com/v1/webhooks"headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”, “Content-Type”: “application/json” } payload = json.dumps({ “events”:[“message.created”, “message.updated”], “channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”, “url”:”https://your-domain.ngrok.io/webhook" }) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) print(response.text)
\ และนั่นคือมัน คุณสามารถทดสอบบอทของคุณโดยส่งข้อความไปยังหมายเลขแซนด์บ็อกซ์
เพิ่มไฟล์ Procfile, requirements.txt และ runtime.txt ลงในโฟลเดอร์รูทของคุณ
\
ภายใน Procfile เพิ่ม
\
web: gunicorn — bind 0.0.0.0:$PORT app:app
\ Requirements.txt เพิ่มการแทนที่ต่อไปนี้ด้วยเวอร์ชันจริงที่คุณใช้อยู่
\
flask==2.0.2 Jinja2==3.0.3 gunicorn==20.1.0 requests==2.27.1 urllib3==1.26.8 werkzeug==2.0.3 messagebird==2.0.0
\ runtime.text
\
python-3.9.10
\ ฉันได้ใช้ python เวอร์ชันที่ฉันใช้อยู่อาจแตกต่างจากของคุณ
\ สร้างตัวแปรสภาพแวดล้อมเพื่อซ่อนคีย์ MESSAGEBIRD API ของคุณในสภาพแวดล้อมที่ใช้งานจริง อัปเดตโค้ดของคุณภายใน bot.py
\
import json from flask import Flask, jsonify, request import requests from os import environ MESSAGEBIRD_ACCESS_KEY = environ[“MESSAGEBIRD_ACCESS_KEY”] app = Flask(__name__) @app.route(“/”) def hello(): return “Bot is alive!” @app.route('/webhook', methods=['POST']) def bot(): data = request.json message = data[“message”][“content”][“text”].lower() if (message == “hello”): return conversation_reply(data[“conversation”][“id”],”How are you”) if (message == “bye”): return conversation_reply(data[“conversation”][“id”],”Good bye!”) def conversation_reply(conversation_id, message_text): reqUrl = (“https://conversations.messagebird.com/v1/conversations/" + conversation_id + “/messages”)headersList = {“Authorization”: “AccessKey “ + MESSAGEBIRD_ACCESS_KEY, “Content-Type”: “application/json”,} payload = json.dumps({“type”: “text”, “content”: {“text”: message_text}}) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) return jsonify({“status”: “ok”, “response”: response.text}) if __name__ == '__main__': app.run()
\ หลังจากรันคำสั่ง Heroku ต่อไปนี้ในเทอร์มินัลของคุณ
\
heroku login
\ เมื่อเข้าสู่ระบบแล้วให้รัน
\
heroku create
\ หลังจากที่สร้างแอป Heroku แล้ว ให้เพิ่มคีย์ Messagebird API โดยใช้คำสั่งนี้
\
heroku config:set MESSAGEBIRD_ACCESS_KEY=your-actual-api-key-from-the-messagebird-dashboard
\ จากนั้นคอมมิตการเปลี่ยนแปลงของคุณด้วย git add และ git commit -m “first commit” ตอนนี้คุณควรจะสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อปรับใช้บอท WhatsApp ออนไลน์ได้
\
git push heroku main
\ หลังจากนั้น
\
heroku ps:scale web=1
\ ตอนนี้ ถ้าคุณเข้าถึง Heroku URL ของคุณ คุณจะเห็นข้อความที่บอทของคุณยังมีชีวิตอยู่ เหลือสิ่งเดียวเท่านั้นคือสร้างเว็บฮุคที่มี Heroku URL ของบอทของคุณ
\
import requests reqUrl = “https://conversations.messagebird.com/v1/webhooks" headersList = { “Authorization”: “AccessKey MESSAGEBIRD_ACCESS_KEY”, “Content-Type”: “application/json” } payload = json.dumps({ “events”:[“message.created”, “message.updated”], “channelId”: “YOUR_CHANNEL_ID_FROM_THE_WHATSAPP_SANDBOX”, “url”:”https://your-domain.herokuapp.com/webhook" }) response = requests.request(“POST”, reqUrl, data=payload, headers=headersList) print(response.text)
\ ตอนนี้คุณมีบอท WhatsApp สำหรับข้อมูลเพิ่มเติมและเพื่อปรับปรุงบอทของคุณให้อ่าน เอกสาร
\ พบฉันบน Twitter หากคุณมีปัญหาใดๆ
\ เผยแพร่ก่อนหน้านี้ ที่นี่
การเลือกเทคโนโลยีที่ถูกต้องสำหรับแอพหรือเว็บไซต์ใหม่กลายเป็นเรื่องยากขึ้นเรื่อยๆ React เป็นหนึ่งในเฟรมเวิร์ก Javascript ที่ขยายตัวอย่างรวดเร็วที่สุด มีความต้องการการรับรอง React เพิ่มขึ้นอย่างต่อเนื่อง เนื่องจากเทคโนโลยี JavaScript ได้สร้างตัวเองขึ้นในอุตสาหกรรม React เป็นผู้ชนะที่ชัดเจนสำหรับนักพัฒนา front-end ทั่วโลก เนื่องจากมีช่วงการเรียนรู้ที่สั้น ส่วนประกอบที่นำกลับมาใช้ใหม่ได้ และนามธรรมที่ชัดเจน เพื่อช่วยคุณในการเตรียมการสัมภาษณ์ เราได้รวบรวมรายการคำถามและคำตอบในการสัมภาษณ์ด้วย React ที่พบบ่อยที่สุด
\ มาดูคำถามสัมภาษณ์เกี่ยวกับปฏิกิริยาตอบสนองที่พบบ่อยที่สุดห้าคำถาม:
| JSX: JSX เป็นส่วนขยายวากยสัมพันธ์ของ JavaScript เป็นคำที่ใช้ใน React เพื่อกำหนดลักษณะที่ต้องการของอินเทอร์เฟซผู้ใช้ เป็นไปได้ที่จะเขียนโครงสร้าง HTML ในไฟล์เดียวกับโค้ด JavaScript ด้วยส่วนขยายภาษา JSX | | |—-|—-| | ส่วนประกอบ : มีส่วนประกอบมากมายในแอปพลิเคชัน React เดียว ดังนั้นสิ่งสำคัญคือต้องรู้ว่าส่วนประกอบเหล่านี้คืออะไรและทำงานร่วมกันอย่างไร โดยแยกส่วนต่อประสานผู้ใช้ออกเป็นส่วนประกอบที่อาจใช้ซ้ำและประมวลผลแยกจากกัน |
| | Virtual DOM : ใน React DOM เสมือนเป็นแบบจำลองน้ำหนักเบาของ DOM จริงที่เก็บอยู่ในหน่วยความจำ แทนที่จะอัปเดตทุกรายการใน DOM DOM เสมือนจะอัปเดตทีละรายการ |
| | One-way data-binding : ใน React การผูกข้อมูลทางเดียวทำให้มั่นใจได้ว่าทุกอย่างเป็นแบบโมดูลาร์และรวดเร็ว การไหลของข้อมูลแบบทิศทางเดียวของแอป React จำเป็นต้องมีการซ้อนส่วนประกอบย่อยภายในส่วนประกอบหลัก |
| | ประสิทธิภาพสูง : เพื่อให้สิ่งต่างๆ ทำงานได้อย่างราบรื่น React จะอัปเดตเฉพาะส่วนที่เปลี่ยนแปลงไปเท่านั้น ด้วยเหตุนี้ เว็บแอปพลิเคชันจึงทำงานได้เร็วขึ้นอย่างมาก |
|
| DOM จริง | DOM เสมือน | |:—|—-| | การอัปเดตจะใช้เวลาสักครู่ | มันตอบสนองมากขึ้นในแง่ของการอัปเดต | | เป็นไปได้ที่จะทำการเปลี่ยนแปลง HTML โดยตรงจากบรรทัดคำสั่ง | ไม่สามารถเปลี่ยน HTML ได้โดยตรง | | หากข้อมูลขององค์ประกอบเปลี่ยนแปลง DOM ใหม่จะถูกสร้างขึ้น | หากองค์ประกอบเปลี่ยนแปลง JSX จะได้รับการอัปเดต | | เพื่อจัดการกับ DOM กระบวนการนี้ค่อนข้างใช้เวลานาน | การทำงานกับ DOM นั้นค่อนข้างง่าย | | ความทรงจำกำลังถูกถล่มทลาย | หน่วยความจำจะไม่สูญเปล่า |
เมื่อเปรียบเทียบ ES5 กับ ES6 ฟีเจอร์ต่อไปนี้ของไวยากรณ์ได้รับการอัปเดตแล้ว:
\
การนำเข้าเทียบกับความต้องการ
ส่งออก vs ส่งออก
องค์ประกอบและหน้าที่
อุปกรณ์ประกอบฉาก
สถานะ
\
ES5 var React = require('react');
ES6 import React from 'react';
ES5 module.exports = Component;
export default Component;
// ES5 Component var MyComponent = React.createClass({ render: function () { return <h3>Hello Edureka!</h3>; }, }) // ES6 Function class MyComponent extends React.Component { render() { return <h3>Hello Edureka!</h3> } }
// ES5 var App = React.createClass({ propTypes: { name: React.PropTypes.string }, render: function () { return <h3>Hello, {this.props.name}!</h3> }, }) // ES6 class App extends React.Component { render() { return <h3>Hello, {this.props.name}!</h3> } }
// ES5 var App = React.createClass({ getInitialState: function () { return { name: 'world' } }, render: function () { return <h3>Hello, {this.state.name}!</h3> }, }) // ES6 class App extends React.Component { constructor() { super() this.state = { name: 'world' } } render() { return <h3>Hello, {this.state.name}!</h3> } }
React มีประโยชน์ที่สำคัญหลายประการ รวมถึงสิ่งต่อไปนี้:
เบราว์เซอร์รองรับเฉพาะอ็อบเจ็กต์ JavaScript แต่ JSX ไม่ใช่หนึ่งในนั้น ด้วยเหตุนี้ ไฟล์ JSX จึงต้องแปลงเป็นออบเจ็กต์ JavaScript เช่น Babel ก่อนจึงจะถูกส่งไปยังเบราว์เซอร์
\
Web3.0 เป็นอินเทอร์เน็ตรุ่นต่อไป เป็นอินเทอร์เน็ตที่มีการกระจายอำนาจและทำให้เป็นประชาธิปไตย โดยเน้นที่ความเป็นส่วนตัว ความปลอดภัย และผู้ใช้เป็นศูนย์กลาง โครงสร้างของอินเทอร์เน็ตผ่านการทำซ้ำหลายครั้ง ล่าสุดด้วยการมาถึงของ Web 2.0 เราได้เห็นการปรับเปลี่ยนในแบบของคุณ และแอปโซเชียลมีเดีย เพื่อทำให้เว็บเป็นสถานที่ที่ดีขึ้นสำหรับผู้ใช้
\ การทำซ้ำครั้งต่อไปของ Web 3.0—ไม่เกี่ยวกับไซต์หรือแอปประเภทใหม่มากนัก เนื่องจากเป็นวิธีใหม่สำหรับผู้คนในการใช้ไซต์และแอปที่มีอยู่แล้ว แนวคิดของ Web 3.0 มาจาก ความไว้วางใจ การควบคุม และความเป็นส่วนตัว ซึ่งเป็นสิ่งสำคัญสำหรับผู้ใช้ที่ต้องการมีส่วนร่วมในโลกที่กระจายอำนาจโดยใช้เครื่องมือต่างๆ เช่น แพลตฟอร์มโซเชียลมีเดียและชุดหูฟังเสมือนจริง
\ ความแตกต่างที่สำคัญอย่างหนึ่งระหว่าง Web 2.0 และ Web 3.0 คือการขาดการควบคุมจากส่วนกลาง นี่เป็นภาพประกอบเล็กๆ น้อยๆ ที่น่ายินดีว่าเว็บมีวิวัฒนาการมาอย่างไรตั้งแต่ช่วงปี 1990:
\
เว็บ 1.0 – 1990s สิ่งต่างๆ เช่น อีเมลและเสิร์ชเอ็นจิ้นยังอยู่ในช่วงเริ่มต้น และไม่มีแนวคิดที่แท้จริงของ ‘อินเทอร์เน็ต’
\
เว็บ 2.0 – 2,000 ปัจจุบัน แอพส่วนบุคคลและโซเชียลมีเดียถูกนำมาใช้เพื่อทำให้เว็บเป็นสถานที่ที่ดีขึ้นสำหรับผู้ใช้
\
การทำซ้ำครั้งต่อไป — Web 3.0— ไม่ได้เกี่ยวกับไซต์หรือแอพประเภทใหม่มากนัก แต่เป็นเกี่ยวกับวิธีการใหม่สำหรับผู้ใช้เว็บไซต์และแอพที่มีอยู่แล้ว
\ Web3.0 ถูกเรียกว่า “==the new Web==” หรือ “==the decentralized web==” เพราะมันมีวิวัฒนาการมาจากเว็บปัจจุบัน (หรือ Web2.0) ซึ่งถูกรวมศูนย์และควบคุมโดยบริษัทเช่น Facebook, Google, อเมซอน, ฯลฯ.
\
Web3.0 เป็นวิวัฒนาการต่อไปของอินเทอร์เน็ตที่ตั้งค่าให้เปลี่ยนวิธีที่เราอาศัยอยู่และโต้ตอบกัน เวิลด์ไวด์เว็บในปัจจุบันเป็นเว็บของเอกสาร ซึ่งเอกสารแต่ละฉบับแยกกันอยู่บนเซิร์ฟเวอร์ที่ใดที่หนึ่งบนอินเทอร์เน็ต Web2.0 มีลักษณะเป็นโซเชียลเน็ตเวิร์ก วิกิ และการสร้างเนื้อหาที่ทำงานร่วมกัน เว็บรุ่นแรกเป็นเว็บของเอกสาร แต่ Web1.0 เกี่ยวกับการเชื่อมต่อผู้คน
\
Web3.0 จะเกี่ยวกับการเชื่อมต่อผู้คนและข้อมูลเพื่อขับเคลื่อนแอปพลิเคชันและโอกาสใหม่ๆ สำหรับทุกคนบนโลก ตั้งแต่รัฐบาล องค์กรพัฒนาเอกชน บรรษัทข้ามชาติ ไปจนถึงสตาร์ทอัพ
เว็บเป็นสถานที่แห่งการเปลี่ยนแปลงอย่างต่อเนื่อง และอินเทอร์เน็ตก็ไม่มีข้อยกเว้น เว็บได้ผ่านการปฏิวัติครั้งสำคัญมาแล้วสามครั้งในช่วงชีวิตของมัน โดยแต่ละครั้งมีผลกระทบที่แตกต่างกันบนอินเทอร์เน็ต
\
Web 1.0 เกิดขึ้นในช่วงต้นทศวรรษ 1990 และมีลักษณะเป็นหน้า HTML คงที่ซึ่งอัปเดตได้ยากและไม่อนุญาตให้มีการโต้ตอบ Web 2.0 ปฏิวัติอินเทอร์เน็ตโดยใช้เพจแบบไดนามิกที่สามารถอัปเดตได้อย่างรวดเร็ว อนุญาตให้โต้ตอบได้ และมีการรวมโซเชียลมีเดีย Web 3.0 คือสิ่งที่เราเห็นในปัจจุบันนี้ด้วยการใช้ปัญญาประดิษฐ์ที่เพิ่มขึ้นในชีวิตประจำวันของเรา
\
อินเทอร์เน็ตเป็นสถานที่กว้างใหญ่ที่มีหน้าและเนื้อหานับล้าน เป็นการยากที่จะติดตามทุกสิ่งที่เกิดขึ้นบนเว็บ แต่มีบางเว็บไซต์ที่พยายามทำอย่างนั้น หนึ่งในเว็บไซต์เหล่านี้เรียกว่า Web1 ซึ่งสร้างโดยกลุ่มนักศึกษา MIT ในปี 1995 เว็บไซต์นี้ได้รับการออกแบบเพื่อให้ผู้ใช้ได้สำรวจประวัติศาสตร์ของสิ่งที่เกิดขึ้นบนอินเทอร์เน็ตจนถึงปัจจุบัน
\
Web1 เริ่มต้นจากการเป็นสมุดภาพออนไลน์สำหรับเว็บไซต์เก่าของผู้คน แต่ได้พัฒนาเป็นไทม์ไลน์เชิงโต้ตอบพร้อมคุณสมบัติต่างๆ มากมาย เช่น แผนที่และแถบค้นหา เว็บไซต์นี้มีมานานกว่า 20 ปีแล้วและยังคงเติบโตอย่างต่อเนื่องเนื่องจากมีการเพิ่มเว็บไซต์ในแต่ละวัน
อินเทอร์เน็ตในปัจจุบันเป็นระบบรวมศูนย์ที่มีผู้เล่นหลักเพียงไม่กี่ราย Web3 จะเปลี่ยนสิ่งนี้โดยการสร้างเครือข่ายแบบกระจายศูนย์ซึ่งมีความปลอดภัยมากขึ้น เป็นส่วนตัวมากขึ้น และมีความเท่าเทียมมากขึ้น
\
Web3 คืออนาคตของอินเทอร์เน็ต และจะเปลี่ยนแปลงทุกสิ่ง ไม่ใช่แค่การกระจายอำนาจของเว็บ – มันเกี่ยวกับการกระจายอำนาจทุกอย่าง Web3 หมายถึงการเข้าถึงข้อมูลโดยไม่ต้องผ่านตัวกลาง เช่น ISP หรือ Google หรือ Facebook หมายถึงสามารถโต้ตอบกันได้โดยไม่ต้องผ่านอำนาจกลาง หมายความว่าเราทุกคนสามารถเป็นเจ้าของข้อมูลของเรา แทนที่จะส่งข้อมูลทั้งหมดของเราให้กับบริษัทขนาดใหญ่ เช่น Facebook และ Google เพื่อแลกกับบริการ “ฟรี” และหมายถึงการสร้างระบบที่
Web 3.0 คือเวิลด์ไวด์เว็บเจเนอเรชันถัดไป ซึ่งจะเป็นเว็บที่กระจายอำนาจซึ่งผู้ใช้อยู่ในการควบคุม มันจะเป็นอินเทอร์เน็ตที่ไม่ได้เป็นเจ้าของโดยบริษัทหรือบุคคลใด แต่เป็นของผู้คน เพื่อประชาชน
\ ประโยชน์หลักของ Web3.0 คือ:
\ – อิสระจากการเซ็นเซอร์
\ – อิสระจากการควบคุมจากส่วนกลาง
\ – อิสระจากการเป็นเจ้าของข้อมูลและความเป็นส่วนตัว
\
เราอยู่ที่จุดเริ่มต้นของยุคใหม่ของการพัฒนาเว็บ Web3.0 เป็นกระบวนทัศน์ใหม่ในวิธีที่เราคิดเกี่ยวกับอินเทอร์เน็ต มันถูกเรียกว่า “==Programmable Web==”, “==Web of Apps==”, “==Web of Things==” และชื่ออื่นๆ อีกมากมาย
\
เว็บไม่ได้เป็นเพียงที่สำหรับให้ผู้คนอ่านเนื้อหาอีกต่อไป นอกจากนี้ยังเกี่ยวกับการโต้ตอบและการทำธุรกรรมที่ขับเคลื่อนด้วยข้อมูลระหว่างผู้คนและวัตถุในชีวิตของเรา
\
เฮ้แฮกเกอร์! เรากลับมาอีกครั้งกับการประกาศผล การประกวดการเขียน บล็อกเชนที่ HackerNoon และ Tatum ซื้อมาให้คุณ มาดูกันว่าใครชนะ!
\
เราเลือกเรื่องราวทั้งหมดที่ติดแท็กด้วยแท็ก #blockchain บน HackerNoon ซึ่งเผยแพร่ในเดือนเมษายน 2022 จากนั้นเราจึงเลือกเรื่องเด่นโดยใช้ น้ำหนัก 60:30:10 ตามลำดับ เพื่อ:
\
\ นี่คือการเสนอชื่อเข้าชิง 10 อันดับแรก:
\
ตามปกติแล้ว บรรณาธิการจะโหวตให้เรื่องเด่น นี่คือผู้ชนะในเดือนเมษายน:
ขอแสดงความยินดีกับผู้ชนะ @cryptoengineer! คุณได้รับ 500 USDT! 🙂
แม้แต่ในสกุลเงินดิจิทัล คุณควรคิดว่า ข้อเสนอมูลค่าไม่ซ้ำที่ โครงการของคุณให้มาคืออะไร เว้นแต่ว่าคุณกำลังซื้อขายและพิจารณาเฉพาะราคาเท่านั้น พื้นฐานไม่สำคัญในระยะสั้น แต่เมื่อตลาดคริปโตเติบโตเต็มที่ มูลค่าก็จะยิ่งมีชัย
Rug Pulls เป็นการฉ้อโกงที่ร่ำรวยซึ่งนักพัฒนาสร้างโทเค็นการเข้ารหัสลับใหม่และทำการตลาดให้กับนักลงทุนเพื่อเพิ่มมูลค่าและสภาพคล่องโดยรวม จากนั้นพวกเขาก็ระบายแหล่งเงินทุนและทำให้มูลค่าของโทเค็นกลายเป็นศูนย์ก่อนที่จะหายไปในอากาศและหายไปพร้อมกับเงินสด การหลอกลวงแบบ Rug-pull มีส่วนรับผิดชอบต่อกิจกรรมที่ผิดกฎหมายมากกว่า 2.8 พันล้านดอลลาร์ในปี 2564 ซึ่งใกล้เคียงกับระดับสูงสุดเป็นประวัติการณ์และเพิ่มขึ้น 81 เปอร์เซ็นต์จากปี 2020 ตามระบบติดตามข้อมูลของ Blockchain Chainalaysis
\ เรื่องราวดีๆ @taktomaruf! คุณได้รับรางวัล 300 USDT!
เรากล่าวว่าสัญญาอัจฉริยะคือหัวใจของ NFT และด้วยเหตุผลที่ดี ข้อหนึ่งคือสัญญาอัจฉริยะที่ทำให้โทเค็นที่ไม่สามารถเปลี่ยนรูปแบบได้เป็นไปในลักษณะพื้นฐาน จากที่หายาก ใช้งานไม่ได้ ตรวจสอบได้ ดำเนินการได้เอง เพื่อฝังยูทิลิตี้ที่ให้คุณค่าที่แท้จริงแก่สินทรัพย์นี้มากขึ้น
\ เย้ @cryptomadhatter! คุณได้รับรางวัล 100 USDT ในเดือนนี้!
ขอแสดงความยินดี @mpyllan! คุณได้รับ 100 USDT
\
ด้วย Bitcoin บุคคลสามารถเปิดบัญชีดิจิทัลและเก็บเงินได้มากเท่าที่ต้องการโดยไม่มีค่าใช้จ่าย หากทำอย่างถูกต้อง เงินของพวกเขาจะเข้าถึงได้ด้วยตนเองและป้องกันไม่ให้ผู้อื่นเข้าถึงได้ เมื่อคุณมีเงินในบัญชี Bitcoin หรือกระเป๋าเงินของคุณแล้ว คุณสามารถย้ายเงินนั้น 24/7/365 ไปยังบัญชี Bitcoin อื่น ๆ ทั่วโลกได้ในเวลาไม่นานและด้วยค่าใช้จ่ายที่เข้าใกล้ศูนย์ โดยไม่ขึ้นกับว่าคุณทำธุรกรรมที่ไหน บัญชีเหล่านี้รวมถึงธุรกิจที่ผู้ใช้สามารถซื้อสินค้าและบริการโดยตรงกับ BTC
\ ในบันทึกนั้น มาปิดท้ายประกาศกัน! เราจะติดต่อผู้ชนะในไม่ช้า จับตาดูที่ Contests.hackernoon.com เพื่อดูการ แข่งขัน การเขียนในปัจจุบันและที่กำลังจะมีขึ้น!
\ เจอกันใหม่เดือนหน้า!