Categories
Learning

दुनियां का पहला हवाई जादा

दुनियां का पहला हवाई जादा- शिवकर बापूजी तरपदे एक भारतीय विद्वान थे। उन्होंने 1895 में एक मानवरहित विमान का निर्माण किया था।इनका जन्म 1864 ईसवी में मुंबई ,महाराष्ट्र के एक मराठा यादव परिवार में हुआ था।इन्होंने जे. जे. स्कूल ऑफ आर्ट मुंबई के स्कूल में अध्ययन किया और वहीं शिक्षक नियुक्त हुए।अपने विद्यार्थी जीवन काल में इनको श्री चिरंजी लाल वर्मा से वेद में वर्णित विधाओं की जानकारी इनको मिली। इन्होंने स्वामी दयानंद सरस्वती कृत ऋग्वेदादीभास्यभूमिका एवम् ऋग्वेद एवम् यजुर्वेद भास्य एवम् महर्षि भारद्वाज की विमान सहिंता का अध्यन कर प्राचीन भारतीय विमानविद्या पर कार्य करने का निर्णय लिया। इसके लिए उन्होंने संस्कृत सीखकर वैदिक विमान विद्या पर रिसर्च शुरू किया। सुब्रमण्यम शास्त्री ने शिवकर की मदद से एक लैब स्थापित किया और वेद मंत्रो के आधार पर आधुनिक काल में पहला वैदिक विमान का मॉडल निर्माण किया। इसका परीक्षण सन 1895 ईसवी में मुंबई के चौपाटी समुद्रतट पर किया गया था जिसे देखने तिलक भी आये थे। ऐसा पढ़ने को मिलता है।परंतु उपलब्ध प्रमाणों के अनुसार विमान उड़ाने का पहला प्रयास सन 1915 से सन 1917 ईस्वी के मध्य हुआ था।यह कार्य बेंगलुरु के पंडित सुब्रमण्यन के स्वर्गवास 17 सितंबर 1917 को उनका स्वर्गवास हुआ एवम् मरूत सखा विमान निर्माण का कार्य अधूरा रह गया। पंडित शिवकर बापूजी तलपदे का विवाह श्रीमती लक्ष्मी बाई से हुआ था।उनके दो पुत्र एवम् एक पुत्री थे।जेष्ठ पुत्र मोरेश्वर मुंबई पौरपालिका के स्वास्थ्य विभाग में कार्यरत थे एवम् कनिष्ठ पुत्र बैंक ऑफ बॉम्बे में लिपिक थे। पुत्री का नाम नबुबाई था। पंडित शिवकर बापूजी तलपदे ने निम्न पांच पुस्तके लिखीं हैं।1- प्राचीन विमान कला का शोध। 2- ऋग्वेद प्रथम शुक्त व उसका अर्थ। 3- पतंजलि योगदर्शन अंतर गत शब्दों का भूतार्थ दर्शन। 4- मन और उसका बल। 5- गुरु मंत्र महिमा। उड्डयन का इतिहास – उड्डयन संबंधी यांत्रिक युक्तियों के विकास का इतिहास है। यह पतंगों,ग्लाइडर आदि से शुरू होकर सुपर सानिक विमानों एवम् अंतरिक्ष यानों तक जाता है। वैमानिक शास्त्र – संस्कृत पद्य में रचित एक ग्रंथ है जिसमें विमानों के बारे में जानकारी दी गई है।इस ग्रंथ में बताया गया है कि प्राचीन भारतीय ग्रंथों में वर्णित विमान रॉकेट के समान उड़ने वाले प्रगत वायु गतिकिय यान थे।यही विमान के बारे में लिखीं पहली किताब है। 1250- रोजर बैकन यांत्रिक उड़ान के बारे में लिखा। 1485-1500- लिओनार्डो डाविंची ने उड़ने वाली मशीन व पैराशूट की डिजाइन की। 1783- मंटा गालफियर बन्धु ने प्रथम हवा से हल्की यान बनाया(गुब्बारा )। 1895- शिवकर बापूजी तलपदे ने मुंबई के जुहू चौपाटी के समुद्र तट पर विमान उड़ाया जो 1500 फिट ऊपर उड़ा और फिर नीचे गिर गया।1903- ऑर्विल राइट और बिल्वर राइट ने पहला सफल स्वतः अग्रगामी वायुयान उड़ाया। पुष्पक विमान – हिन्दू पौराणिक महाकाव्य रामायण में वर्णित वायु वाहन था। इसमें लंका का राजा रावण आवागमन किया करता था।इसी विमान का उल्लेख सीता हरण प्रकरण में भी मिलता है।यह विमान मूलतः धन के देवता,कुबेर के पास हुआ करता था,किन्तु रावण ने अपने इस बड़े भाई कुबेर से बलपूर्वक उसकी नगरी सुवर्नमंडित लंकापुरी तथा इसे छीन लिया था।अन्य ग्रंथों में उलेख अनुसार पुष्पक विमान का प्रारूप एवम् निर्माण विधि अंगिरा ऋषि द्वारा एवम् इसका निर्माण एवम् साज सज्जा देव शिल्पी विश्वकर्मा द्वारा कि गई थी।भारत के प्राचीन हिंदू ग्रंथो में लगभग दस हज़ार वर्ष पूर्व विमान एवम् युद्धों में तथा उनके प्रयोग का विस्तृत वर्णन दिया है।इसमें बहुतायत में रावण के पुष्पक विमान का उल्लेख मिलता है।इसके अलावा अन्य सैनिक छमतावो वाले विमानों,उनके प्रयोग,विमानों की आपस में भिड़ंत अदृश्य होना और पीछा करना,ऐसा उल्लेख मिलता है। यहां प्राचीन विमानों कि मुख्यत दो श्रेणियां बताई गई है – प्रथम मानव निर्मित विमान, जो आधुनिक विमानों कि भांति ही पंखों के सहायता से उड़ान भरते थे,एवम् द्वितीय आश्चर्य जनक विमान, जो मानव द्वारा निर्मित नहीं थे किन्तु उनका आकार प्रकार आधुनिक उड़न तश्तरियों के अनुरूप हुआ करता था। पौराणिक संदर्भ – विमान निर्माण,उसके प्रकार एवम् संचालन का संपूर्ण विवरण महर्षि भारद्वाज विरचित वैमानिक शास्त्र में मिलता है।यह ग्रंथ उनके मूल प्रमुख ग्रंथ यंत्र – सर्वेश्वम का एक भाग है।इसके अतिरिक्त भारद्वाज ने अंशु बोधिनी नामक ग्रंथ भी लिखा है,जिसमें ब्रह्माण्ड विज्ञान का ही वर्णन है। उस समय के इसी ज्ञान से निर्मित व परिचालित होने वाले विमान,ब्रह्माण्ड के विभिन्न ग्रहों में विचरण किया करते थे।इस वैमानिक शास्त्र में आठ अध्याय ,एक सौ अधिकरण,पांच सौ सूत्र और तीन हजार श्लोक है। यह ग्रंथ वैदिक संस्कृत भाषा में लिखा है। इस विमान में जो तकनीक प्रयोग हुई है,उसके पीछे आध्यात्मिक विज्ञान ही है। ग्रंथो के अनुसार आज में किसी भी पदार्थ को जड़ माना जाता है,किन्तु प्राचीन काल में सिद्धि प्राप्त लोगो के पास इन्हीं पदार्थो में चेतना उत्पन्न करने की छमता उपलब्ध थी,जिसके प्रयोग से ही वे विमान की भांति परिस्थितियों के अनुरूप ढलने वाले यंत्र का निर्माण कर पाते थे। वर्तमान काल में विज्ञान के पास ऐसे तकनीकी उत्कृष्ट समाधान उपलब्ध नहीं है,तभी ये बाते काल्पनिक एवम् अतिशयोक्ति लगती हैं।उस काल में विज्ञान में पदार्थ की चेतना को जागृत करने की क्षमता संभवतः रही होगी जिसके प्रभाव से ही यह विमान स्व संवेदना से क्रियाशील होकर आवश्यकता के अनुसार आकार परिवर्तित कर लेता था।पदार्थ की चेतना को जागृत करने जैसी विधावो के अन्य प्रमाण भी रामायण एवम् विभिन्न हिंदू धर्म ग्रंथो में प्राप्त होते है।पुष्पक विमान में यह भी विशेषता थी कि वह उसी व्यक्ति से संचालित होता था,जिसने विमान संचालन यंत्र सिद्ध किया हो। दुनिया का पहला हवाई जहाज बनाने वाला राइट ब्रदर्स नहीं बल्कि एक भारतीय था। आपको बस यह पता है कि राइट ब्रदर्स ने अमेरिका के कैरोलीन तट पर17दिसंबर सन् 1903 को यह कारनामा किया था और उनका बनाया हवाई जहाज करीब 120 फीट की ऊंचाई तक उड़ कर गिर गया था।क्युकी हमें यह पड़ाया गया है लेकिन सच्चाई यह है कि एक भारतीय कई वर्षों पहले यह कारनामा कर चुका था जिन्होंने सन् 1895 में बहुत बड़ा विमान बनाया था और उसे मुंबई कि चौपाटी के समुद्र तट पर उड़ाया था।यह हवाई जहाज 1500 फीट ऊपर उड़ा और तब नीचे आया था।इनका नाम शिवकर बापूजी तलपदे था जो मुंबई के चिरा बाजार के रहने वाले थे और मुंबई स्कूल ऑफ आर्ट्स के अध्यापक व वैदिक विद्वान थे।उन्होंने महर्षि भारद्वाज द्वारा लिखे विमान शास्त्र नामक पुस्तक पड़कर ऐसा किया था,जिसके 8 अध्याय में विमान बनाने की तकनीक का वर्णन है। इस विमान का नाम शिवकर बापूजी तलपदे ने मरुत्सखा रखा था जिसका अर्थ हवा का मित्र होता है।इस घटना को बाल गंगाधर तिलक ने अपने पंजाब केसरी के संपादकीय में भी जगह दी थी,साथ ही इस मौके पर दो अंग्रेज पत्रकार भी वहां मौजूद थे। और लंदन के अखबारों में भी यह खबर छपी थी।तत्कालीन भारतीय जज महादेव गोविंदा रानाडे और बड़ोदरा के राजा सत्याजी राव गायकवा ड भी इस घटना के गवाह रहे थे।हजारों लोगों की उपस्थिति में यह विमान उड़ा था। 18 वीं सदी से पहले पूरे विश्व में हवाई जहाज की कोई कल्पना नहीं थी,जब अंग्रेज भारत में आए तो उन्होंने हमारे धर्म ग्रंथों को पढ़ने समझने के लिए संस्कृत सीखी।लॉर्ड मैकाले ने 25वर्ष तक संस्कृत से हिंदू ग्रंथो का अध्यन किया।भारत का ज्ञान रूप से इतना समृद्ध देख कर उसको विश्वास हो गया कि बौद्धिक ज्ञान विज्ञान की समृद्धि के वजह से वो लंबे समय तक भारत को गुलाम बनाने में असफल रहेंगे।अतः उसने हमारे धर्म ग्रंथों में मिलावट तथा झूठी बातों का प्रचार प्रसार करना शुरू किया और राम और पुष्पक विमान को कोरी कल्पना कहना शुरू कर दिया। वो कहते की दिखावों कहा कुछ हवा में उड़ता है ।यह रामायण काल्पनिक है।शिवकर बापूजी तलपदे ने इस कथित कल्पना को सत्य सिद्ध करने में कोई कसर नहीं छोड़ी और अंग्रेजो के सामने गुलामी के काल में ही अपने संस्कृत व वेद – उपनिषद के ज्ञान से विश्व का सबसे पहला हवाई जहाज बना के दिखा दिया था।लेकिन इस घटना के बाद वे हमेशा अंग्रेजो के नजरो में खटकते रहे और उनको साजिशों का शिकार होकर गुमनाम हो गए। लंदन की एक कंपनी रिले ब्रदर्स कू के कुछ लोग तलपड़े से मिलने आए और उनसे कहा कि वो डिजाइन मुझे सौंप दे।वे उनकी मदद देने के लिए कहा अंग्रेजो ने धोखा किया ,उन्होंने तकनीक समझ लिया और लंदन से अमेरिका यह डिजाइन पहुंचा दिया।यह कंपनी ब्रिटेन से संबंधित थी। विमान शास्त्र में8 अध्यावो में 3000 हजार श्लोकों और 100 खंडो में विमान बनाने की तकनीक बताई गई है।विमान शास्त्र के मुताबिक 32 तरीको से 500 तरह के विमान बनाए जा सकते है। ये हिंदुस्तान के पहले हवाई जादा थे केसरी अखबार भी इसका उल्लेख करता है ।कुछ लोगो ने कहा तलपदे का विमान हवा में 30 मील तक उड़ा था और 17 मिनट बाद क्रैश हो गया।पत्नी की मृत्यु के बाद उनको तोड़ दिया।53 साल की उम्र में1917 में इनकी मृत्यु हो गई ।इसके बाद हवाई जहाज के ढांचे को उनके रिश्तेदारों ने बेंच दिया।

लेखक – ब्रिजेश कुमार पटेल

Brijesh Kumar Patel

Writer, Thinker Scientific Learner & Teacher

Siroli, Jaunpur UP | +91 8382831904 | brijeshkumarp83@gmail.com

Categories
Learning

मोटे अनाज

मोटे अनाज

मोटे अनाज है सेहत का खजाना- अंतरराष्ट्रीय पोषक अनाज वर्ष2023 को हम मोटे अनाजो के वर्ष के रूप मना रहे है।यू तो हम सभी स्वस्थ रहना चाहते है पर अगर हम सभी खाने – पीने पर विशेष ध्यान दे तो एकदम स्वस्थ रहे। यदि महिलाएं मोनोपॉज अर्थात रजो धर्म से पहले मोटे अनाजों कोदो तथा रागी आदि अनाज 30ग्राम प्रति दिन के हिसाब से सेवन करे तो छाती के कैंसर का खतरा लगभग52०/० कम हो जाता है।रोजाना अपने डाइट में 20 से30 फीसदी मोटे अनाजों का सेवन करने पर बीमारियों का खतरा बेहद ही कम हो जाता है।इससे शरीर की प्रतिरोधक क्षमता बेहतर बनती है और शारीरिक – मानसिक मजबूती भी मिलती है।वैसे तो दुनिया में मिलेत की 13 वराइटी मौजूद है,लेकिन अन्तर्राष्ट्रीय पोषक अनाज वर्ष2023 के लिए 8 अनाजों – बाजरा,रागी,कुटकी,सेवा,ज्वार,कंगनी,चेना और कोदो को शामिल किया गया है। यदि हम बात करे मोटे अनाजों के पौष्टिक महत्व की तो कई रोगों से छुटकारा पाने में ये मोटे अनाज महत्वपूर्ण भूमिका अदा करते है। ह्रदय रोग ,कैंसर गठिया रोग ,सूजन का खतरा कम करते है और शरीर की प्रतिरोधक तंत्र को बेहतर बनाते है। इसमें प्रोटीन,वसा,लौह,रेशा,कैल्शियम और जिंक की भी भरपूर मात्रा होती है। मोटे अनाजों में रेशा की मात्रा काफी अधिक होती है लेकिन सामान्य खाने से यह नहीं मिल पाता है।इसलिए मोटे अनाजों का सेवन करने की सलाह दी जाती है।कोदो,बाजरा,हरी कंगनी और बर्री में सबसे ज्यादा रेशा होता है। बिषेसेज्ञ यह नहीं कहते कि चावल,गेहूं या मक्का को भोजन में ही न शामिल करे बल्कि मोटे अनाजों को भी शामिल करे क्योंकि अन्तर्राष्ट्रीय पोषक अनाज वर्ष का प्रमुख उद्देश्य खाने में विविधता पैदा करना है ताकि शरीर स्वस्थ रहे, जब सभी लोग इनका सेवन करेगे तो देश में इसका उत्पादन बढ़ेगा और किसान कम खर्च में इसे पैदा करने के लिए प्रेरित होंगे और इससे उनकी आय के खर्च में भी इजाफा होगा। चावल और गेहूं के मुकाबले बाजरा,रागी,ज्वार ,कुटकी,कोदो, कागनी चेना सवा,हरी कागानी में प्रचूर मात्रा में लौह तत्व पाए जाते है।मोटे अनाजों बाजरा,रागी,कुटकी ,बर्री,शमक में जिंक भरपूर मात्रा में होता है ।

मोटे अनाज

आइए जनता है मोटे अनाजों के बारे में – रागी(finger millet)- रागी में प्रोटीन7.2ग्राम,वसा 1.92ग्राम ,लौह 4.6 एमजी,रेशा 11.18एमजी,कैल्शियम 364एमजी,जिंक 2.50एमजी। यह बैड कोलेस्ट्रॉल को नियंत्रित करता है जो कि हृदय रोग एथरोस्क्लेरोसी स को बढ़ावा देता है। रागी को देशी भाषा में नचनी भी कहते है।इस अनाज का रंग लाल भुरा और स्वाद अखरोट जैसा होता है।रागी के नियमित सेवन से मधुमेह और रक्तचाप जैसी बीमारियों को नियंत्रित कर सकते है। यह विटामिन बी से भरपूर होता है। कंगनी (foxtail millet) – कंगनी में प्रोटीन12.3ग्राम ,वसा 4.3ग्राम, लौह 2.8एमजी,रेशा 4.25एमजी,कैल्शियम31एमजी,जिंक2.40एमजी होता है। कंगनी को एसियाई देशों में उगाया जाता है। इस मिल्लेट का दाना पीला होता है जिसे दलिया से लेकर पुलाव जैसे कई व्यंजन बनने में इस्तेमाल किया जाता है। इसका स्वाद अखरोट जैसा होता है। यह आयरन पोटैसियम और मैग्नेशियम से भरपूर होता है। चेना (proso millet ) – चेना एक ऐसा अनाज है जो पूरी दुनिया में उगाया जाता है।भारत के साथ साथ यूरोप ,चीन और अमेरिका में इससे सूप,दलिया और नूडल बनाए जाते है। ये मिल्लेत फैट और कोलेस्ट्रोल फ्री होता है साथ ही चेना प्रोटीन ,रेशा,विटामिन बी,आयरन और जिंक समेत कई विटामिन और खनिजों का मुख्य स्रोत है। कोदो – कोदो एक पारंपरिक अनाज है। इसे केद्रव भी कहते है।कोदो में प्रोटीन8.3ग्राम,वसा 1.4ग्राम,लौह.5एमजी,रेशा 9.०एमजी,कैल्शियम27एमजी,,जिंक1.65एमजी होता है। इसमें कैंसर,पेट और मधुमेह के रोग दूर करने कि शक्ति होती है। इसमें पाए जाने वाले पोषक तत्व शरीर को स्वस्थ रखने में मदद करते है।इसकी फसल धान की तरह होती है। सावा – सावा को देश के अलग- अलग भागो में उड़ालू या झंगोरा के नाम से जाना जाता है सावा का इतिहास भी बाकी मोटे अनाजों की तरह हजारों साल पुराना है इसका मौजूद रेशा ,प्रोटीन ,आयरन,कैल्शियम और विटामिन बी आदि शरीर को खास ऊर्जा देते है। इसके नियमित सेवन से सूजन,हृदय रोग और डायबिटीज का खतरा भी कम होता है।किसान भी सावा उगाना बेहद पसंद करते है क्युकी इसमें कीट या बीमारियां लगने का खतरा नहीं रहता है। ज्वार(sorghum)- ज्वार में प्रोटीन10.4ग्राम,वसा3.1ग्राम,लौह5.4एमजी,रेशा 2.98एमजी, कैल्शियम23एमजी,जिंक3.00एमजी होता है।ज्वार कैंसर ,डायबिटीज के खतरे को कम करता है और इसमें मैग्नेशियम पर्याप्त मात्रा में होता है जो कि कैल्शियम के अवशोषण को बढ़िया बनाता है और हड्डी को मजबूत बनाता है।यह रक्त दाब, बैड कोलेस्ट्रॉल को कम करता है ।यह एल्कलाइन होता है और अमलता को कम करता है। इसमें फोलिक अमला पाया जाता है जो कि नया कोसिकावो का निर्माण करता है और d.n.a के परिवर्तन को रोकता है जो कि कैंसर का कारण बनता है। यह आंखो के लिए बढ़िया होता है जोकि हमारे शरीर में एक इंजाइम की क्रियाविधि को बढ़ावा देता है जोकि विटामिन ए का निर्माण करता है और विटामिन ए रतौंधी के उपचार में उपयोगी है। खांसी जुकाम होने पर ज्वार के दानों को गुड़ में मिलाकर खाया जाता है।ज्वार के आंटे से बना काजल आंखो को ठंडक देता है। कुटकी(little millet) – कुटकी के ज्यादातर गुड़ चेना से मिलते है। कुटकी में प्रोटीन7.7ग्राम,वसा4.7ग्राम,लौह9.3एमजी,रेशा7.6एमजी,कैल्शियम17एमजी,जिंक1.82एमजी होता है।इसकी खेती करना किसानों के लिए जितना आसान है ,इसके सेवन से भी उतने फायदे होते है।कुटकी की फसल 65से75 दिनों में पक जाती है।कैंसर जैसी गंभीर बीमारियों से लेकर सुगर को नियंत्रित करने में असरदार माना जाता है। बाजरा (pearl millet)- बाजरा सबसे ज्यादा उगाए और खाए जाने वाला मोटा अनाज है,जिसकी सबसे ज्यादा खेती भारत और अफ्रीका में की जाती है।बाजरा को कई इलाकों में बजरी और कंबू के नाम से भी जानते है। बाजरा को हर तरह की मिट्टी में उगाया जा सकता है।कम सिंचाई वाले इलाकों के लिए बाजरा की फसल वरदान है।इसमें प्रोटीन 11.6ग्राम,वसा 2.7से7.1०ग्राम,लौह7.1एमजी,रेशा 2.6से4…0एमजी,कैल्शियम4.5एमजी,जिंक2.76एमजी होता है। यह बाइल एसिड के स्राव को कम करता है जो कि gallstones शरीर में बनाता है। इसमें थियामिन,रीबिफ्लावी न और नियासिन भी होता है। यह मोटापा कम करता है। इससे मोटे दानों को अलग करने के बाद पशु चारे के तौर पर इस्तेमाल किया जाता है ।इतना ही नहीं बाजरे के फसल अवावशेशो से जैव ईंधन भी बनाया जाता है। प्रोटीन, फाइबर ,अमीनो अम्ल समेत कई पोषक तत्वों से भरपूर millet se ब्रेड,कोक्कीज समेत कई व्यंजन बनाए जाते है। मोटे अनाजों में पल्प अर्थात गुदा अधिक होता है।इसके सेवन से कब्ज की समस्या नहीं रहती है। यह पचने में आसान होता है जिससे आपका हाजमा भी दुरुस्त रहता है।यह शरीर में फैट को बढ़नेनहीं देता।बेशक सर्दियों में लोग मोटे अनाज को प्राथमिकता देते है पर आप तासीर के अनुसार इसका सेवन गर्मियों में कर सकती है।जैसे बाजरा गर्म तासीर का होता है और इसी तरह ज्वार की तासीर बीच की होती है। जबकि मक्के की तासीर ठंडी होती है।आइए मोटे अनाजों का प्रयोग पुनः अपने भोजन में शामिल करे और अपने आपको स्वस्थ रखे।

लेखक – बृजेश कुमार पटेल

Brijesh Kumar Patel

Writer, Thinker Scientific Learner & Teacher

Siroli, Jaunpur UP | +91 8382831904 | brijeshkumarp83@gmail.com

Categories
Learning

Understanding How Disabled and Readonly Attributes Affect HTML (input, select) Form Field Submissions

Welcome to this post! Let’s quickly dive into the main topic.

I recently encountered an issue while working with Laravel (PHP) forms. I had a scenario where I needed to submit an EDIT form with certain fields disabled and their values already pre-filled. However, upon form submission on the server side, I noticed that the values of these fields were missing.

I became curious about why these fields were behaving this way and decided to update the code. I used the ‘disabled’ attribute for these fields to prevent editing. While I had previously used the ‘readonly’ attribute, it didn’t provide the desired user interface as it didn’t visually convey that the field was non-editable.

As a result, I received a question: “If a form field has the ‘disabled’ attribute, will it not submit its value with the form?”

After conducting a quick search, I found the answer that not only resolved my issue but also refreshed my understanding of the basics related to this challenge.

Answer: Yes, that’s correct. When a form field has the ‘disabled’ attribute, its value will not be submitted with the form upon submission to the server. This is because web browsers consider disabled fields as non-editable and exclude them from form submissions. If you need to submit the value of a field while preventing users from editing it, using the ‘readonly’ attribute is a better option. Unlike the ‘disabled’ attribute, the ‘readonly’ attribute allows the field’s value to be submitted with the form while still preventing user edits.

I hope you found this succinct post informative and valuable for your learning journey.

Thank you for taking the time to read, and happy learning!

Categories
Learning Tech

Laravel; How to pull existing records on select change event using session type and date passed to dynamic web route in Laravel?

Welcome to Post,

Lets learn how to do the thing in the question, assuming you have basic or advance knowledge or learning something of your own to understand the things or you have got stuck due to simple issues of mistakes.

Using jQuery, HTML, Laravel Blade, Controller, Web Route and AJAX.

Lets begin.

Lets we talk first and defined about the HTML form field and its jQuery functionality. (I will be skipping middle parts of the code what it does and how its populated for the form fields ) and we will be using two fields here to show the example : session_date and session_type, which would look like below in the html code. session_type values would be morning, evening and so on for the day session.

<div class="row">
                            
                            <div class="form-group col-md-3">
                                <label for="session_date">Session Date:<sup>*</sup> </label>
                                <input type="date" name="session_date" id="session_date" class="form-control jsSessionDate" 
                                    value="{{ old('session_date', now()->format('Y-m-d'))}}"    
                                />
                                <!--<div class="text-end"><small class="text-muted"></small></div>-->
                            </div>
                            
                            <div class="form-group col-md-3">
                                <!--<input type="hidden" name="session_type" class="form-control hide mt-1" value="morning" />-->
                                                
                                <label for="session_type">Select Session Type:<sup>*</sup></label>
                                <select name="session_type" id="session_type" class="form-select text-capitalize jsSessionTypeChange" 
                                    >
                                    @foreach ($sessions_types as $ddSession)
                                        <option value="{{ $ddSession }}" {{old('session_type') ==  $ddSession ? 'selected' : ''}}>{{ $ddSession }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>

Once we have the basic fields ready in HTML side we can write the jQuery side of it to fetch the records and make the AJAX call our server side of Laravel Controller.

$(document).on('change', '.jsSessionTypeChange', function(e) {
                const { value } = e.target;
                const sessionDateVal = $('.jsSessionDate').val();
                console.log(value)
                
                if(!value) return;
                
                const $this = $(this);
                const payload = { 
                    _token:  $('meta[name="csrf-token"]').attr('content'),
                };
                
                const sessionType = value || 'morning';
                const sessionDate = sessionDateVal ?? {{now()->format('Y-m-d')}};
                
                const baseUrl = window.location.origin+'/ams';
                const url = `${baseUrl}/existing-session/${sessionType}/${sessionDate}`;
                    
                console.log({url, sessionType, sessionDate});
                
                $.ajax({
                    url,
        			type: "get",
        			cache: false,
                }).done(function(resp) {
                    if(resp) {
                          console.log({
                              resp
                          })
                    }
                   })
                   .fail(function(err) {
                     console.error("Existing session fetch  error: ", err, err.responseText);
                });
            });

//IGNORE THE CONSOLE LOGS

Here, I am getting values from date filed and select dropdown for session type, on session type change event forming server side api end point url, not using PHP Laravel Blade example with javascript is its very difficult for blade to understand passing dynamic javascript variable to it.

Because PHP code executed on the page load even we defining the blade {{ }} in onChange event function scope. so its looks for that variable and its goes undefined , tried otherways around the then get the error from rotue generation syntax as route is forming dynamically.

So I thought to set back with simple Javascript code for forming the base URL and its endpoint for ajax call to happen.

Giving you context what I said above and for what thing i was trying to do in Javascript of code using Laravel Blade syntax, which didn’t worked out simply.

Try 1:

const type = value || 'morning';
const url = "{{ route('existing-session', ['sessionType' => '${type}']) }}";

$.ajax({
    url: url,
    // ... rest of your AJAX configuration
});

Try 2:
const type = value || 'morning';
const url = "{{ route('existing-session', ['sessionType' => '${type}']) }}";

$.ajax({
    url: url,
    // ... rest of your AJAX configuration
});

Try 3: Finally
const type = value || 'morning';
const baseUrl = window.location.origin;
const url = `${baseUrl}/existing-session/${type}`;

$.ajax({
    url: url,
    // ... rest of your AJAX configuration
});

Okay, now our HTML and JQUERY code is ready, lets quickly add in to our routes/web.php, dynamic route for ajax to work!

// To get existing Session on Create View
Route::get('existing-session/{sessionType}/{sessionDate}', [App\Http\Controllers\EventSessionController::class, 'existingSession'])->name('existing-session');

Now Finally in Controller side, write as method to get the sessionType and sessionDate and pull it the data from database and return as json response to the ajax call. Then we are good to finish!

public function existingSession($sessionType, $sessionDate) {
    // Fetch session with today's date and specific session type

    if($sessionType  !== '' && $sessionDate !== '') {
        $existingSession = EventSession::with(['members', 'samagams'])->where('session_type', $sessionType)
        ->whereDate('session_date', $sessionDate ?? now()->format('Y-m-d'))
        ->first();

        $response = ["data" => $existingSession, "success" => true, "error" => false, "message" => $sessionType." session found for date ".$sessionDate];
    } else {
        $response = [ "data" => null, "success" => false, "error" => true, "message" => "No existing session found for given session type ". $sessionType ." and date " .$sessionDate];
    }

    return response()->json($response);
}

Voila, your quick AJAX example ready in Laravel with pulling in data with dynamic passing of data to the GET route.

Hope this gives you hints, idea how to do the things in PHP Laravel.

Thanks for reading the post and happy learning!

Categories
Laser Learning

Snapmaker 10W Laser Foam Cutting Test Results in 2023

Hello.

Welcome to the post.

I would like to share the test results with you for my EV Foam or just black Foam came with Snapmaker A350.2 Enclosure Packaging for cutting with newly purchased Snapmaker 10W laser.

Follow the Test results

10W Laser

Jog Speed: 3000 and Work Speed: 600 kept constant.

Mode chosen for cutting : Corrugated Paper Preset value to 3mm
With Power 100% : burns lot creates big hole around and bottom didn’t go through till bottom.
With Power 60,50% less burn, but didn’t go through well till bottom.
With Power 40% Similar and less burn, but didn’t go through well till bottom.

Thickness set to 20mm for all above
Slight bottom go through remaining
Test with 40% thickness set to 20.5 but didn’t went through

Test with 30% power – Repeat 2, Z Step 1mm Thicness input: 20.3 mm Result: cut went through and slighly at bottom some part didn’t cut, but forcefully removed and works

Test with 20% 2 pass, Z step 1mm, Thickness input: 20.4mm
Result: Didn’t reach to bottom

Test with 35% 2 pass, Z step 1mm, Thickness input: 20.3mm
Result: Pass through well little slight stick at bottom due to hotness of foam with other, but easily pull off and with very less noticeable smoke! Happy!

Final toolset settings screenshot:

Foam Result out Camera Capture Mode screenshot:

Real output Photos of Foam Cut Test:

Hope this gives you idea on testing Foam cutting test with Snapmaker 2.0 with Laser 10W.

Categories
Learning Learning Tech

Quick Things Learned about React JS HOOKS in details with the help of AI ChatGPT for Interview Preparations 2023

Hello, welcome to this precious post on learning of most advance and interview questioned ReactJS Hooks

Topics covered to be learned:

We will learn all this in reverse order so it stays the harder ones more in our mind for longer time or get it clear in our mind for ever lasting.
Each topic can help you to understand and learn about why each hook used in react and it purpose and one use case scenario for detail understandings. (topic maybe cut and shorten for its sweetness for you to read and grasp the main understandings)

Let’s Dive into each one by one by one

useDebugValue – Hook

The useDebugValue is not a hook for managing state or performing side effects like other hooks such as useState, useEffect, etc. Instead, it is a hook provided by React that allows you to display custom labels for custom hooks in React DevTools. It’s primarily used for debugging purposes to provide more descriptive labels and information about custom hooks when inspecting them in the browser’s development tools.

Use Case: Custom Hook Labeling for Debugging:

When you create custom hooks, they may appear in the React DevTools as “Custom Hook” by default, which might not be very informative when you have multiple custom hooks in your application. useDebugValue allows you to customize the label displayed in the DevTools for better debugging and understanding.

Here’s an example of how you might use useDebugValue in a custom hook:

import { useEffect, useDebugValue, useState } from 'react';

// Custom hook to fetch data and display debug value
function useDataFetcher(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      setLoading(true);
      try {
        const response = await fetch(url);
        const jsonData = await response.json();
        setData(jsonData);
        setLoading(false);
      } catch (error) {
        console.error('Error fetching data:', error);
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  // Use the custom hook's url as the debug value label
  useDebugValue(url);

  return { data, loading };
}

In this example, we have a custom hook called useDataFetcher, which fetches data from a given URL using the fetch API. By using useDebugValue with the url parameter as an argument, we’re setting the custom label to the url. When you inspect this custom hook in React DevTools, you will see the specified label instead of a generic “Custom Hook.”

Open DevTools in your Browser (Chrome) (Windows Keyboard Shortcut : CTL+SHIFT+I )

Remember that useDebugValue is used only for debugging purposes and has no effect on the actual behavior of the custom hook. It’s a helpful tool for developers to gain more insights into custom hooks during the development process.

Back to Topics

useLayoutEffect – Hook

The useLayoutEffect hook in React is similar to the useEffect hook, but it runs synchronously after the DOM has been updated but before the browser repaints. This makes it suitable for performing DOM manipulations or measurements that require the latest DOM layout information before the user sees the updated content.

Use Case: DOM Measurements and Synchronous Updates:

A common use case for useLayoutEffect is when you need to interact with the DOM, such as reading element measurements (e.g., width, height, position) or updating the DOM synchronously after a render. This is useful when you need to adjust or animate elements based on their current size or position.

Here’s an example to illustrate its use case:

import React, { useState, useLayoutEffect, useRef } from 'react';

function ElementSizeDisplay() {
  const [width, setWidth] = useState(0);
  const [height, setHeight] = useState(0);
  const divRef = useRef();

  useLayoutEffect(() => {
    const updateSize = () => {
      if (divRef.current) {
        setWidth(divRef.current.clientWidth);
        setHeight(divRef.current.clientHeight);
      }
    };

    updateSize();

    // Attach a resize event listener to update size on window resize
    window.addEventListener('resize', updateSize);

    // Clean up the event listener on component unmount
    return () => {
      window.removeEventListener('resize', updateSize);
    };
  }, []);

  return (
    <div ref={divRef}>
      <p>Width: {width}px</p>
      <p>Height: {height}px</p>
    </div>
  );
}

In this example, we have a ElementSizeDisplay component that displays the width and height of a div element. We use useLayoutEffect to set up a resize event listener and update the state variables width and height whenever the div element’s size changes. We also trigger the initial update immediately after the component mounts.

Using useLayoutEffect ensures that we get the most up-to-date measurements of the div element before it’s displayed to the user, which is essential when working with layout calculations or animations that rely on accurate dimensions.

Note: The key difference between useEffect and useLayoutEffect is the timing of their execution. While useEffect runs after the render is committed to the screen, useLayoutEffect runs before the actual painting, so it can cause the component to block painting if the logic inside it is too slow. For most cases, useEffect is sufficient, but if you need to make synchronous DOM updates or perform measurements, useLayoutEffect is the appropriate choice. Just be aware of potential performance implications and use it judiciously.

Back to Topics

useImperativeHandle – Hook

The useImperativeHandle hook in React is used to customize the instance value that is exposed when a parent component calls ref on a child component. It allows you to define what properties or functions of the child component’s instance should be accessible from the parent component.

Use Case: Exposing Child Component’s Functionality to Parent Component:

A common use case for useImperativeHandle is when you want to allow the parent component to interact with specific methods or properties of a child component directly. This can be useful when the child component encapsulates certain behaviors or actions, and you want to provide an easy-to-use API for the parent component to access those behaviors.

Let’s see an example to illustrate its use case:

import React, { forwardRef, useImperativeHandle, useRef } from 'react';

// Child component that uses useImperativeHandle
const ChildComponent = forwardRef((props, ref) => {
  const inputRef = useRef();

  // Exposing the focusInput function to the parent component using useImperativeHandle
  useImperativeHandle(ref, () => ({
    focusInput: () => {
      inputRef.current.focus();
    },
  }));

  return <input ref={inputRef} type="text" />;
});

// Parent component
function ParentComponent() {
  const childRef = useRef();

  const handleButtonClick = () => {
    // Using the exposed function to focus the input inside the child component
    childRef.current.focusInput();
  };

  return (
    <div>
      <ChildComponent ref={childRef} />
      <button onClick={handleButtonClick}>Focus Input</button>
    </div>
  );
}

In this example, we have a ChildComponent that encapsulates an input element and exposes a focusInput function to the parent component using useImperativeHandle. The useImperativeHandle hook is used to define an object with the properties and functions that the parent component can access through the ref of the ChildComponent.

The ParentComponent renders the ChildComponent and a button. When the button is clicked, the handleButtonClick function is called, and it, in turn, calls the focusInput function exposed by the ChildComponent, focusing the input element inside the child component.

Using useImperativeHandle can be handy when you want to expose specific functionalities of a child component to its parent, especially when dealing with custom components or third-party libraries. However, be cautious when using this pattern, as it might break encapsulation and lead to a less maintainable codebase. Whenever possible, prefer to manage state and interactions through props and callbacks to maintain a more predictable and React-friendly component architecture.

Back to Topics

useRef – Hook

The useRef hook in React is used to create a mutable reference to a value that persists across renders. Unlike state variables (useState), updating a useRef value does not trigger a re-render. This makes useRef suitable for storing and accessing mutable values or accessing DOM elements imperatively.

Use Case: Storing Mutable Values:

One of the primary use cases for useRef is to store mutable values that don’t need to trigger a re-render when updated. Since the component won’t re-render when the useRef value changes, it can be useful for keeping track of some data that doesn’t affect the component’s visual output.

Here’s an example where useRef is used to keep track of a previous value:

import React, { useState, useEffect, useRef } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  const prevCountRef = useRef();

  useEffect(() => {
    prevCountRef.current = count;
  }, [count]);

  const prevCount = prevCountRef.current;

  return (
    <div>
      <p>Current Count: {count}</p>
      <p>Previous Count: {prevCount}</p>
      <button onClick={() => setCount((prev) => prev + 1)}>Increment</button>
    </div>
  );
}

In this example, we use useRef to create a prevCountRef that keeps track of the previous value of the count state variable. We update the prevCountRef using the useEffect hook whenever count changes. Since updating prevCountRef does not trigger a re-render, we can safely access its current value without causing an infinite loop.

Use Case: Accessing DOM Elements:

Another common use case for useRef is to access and interact with DOM elements directly. Since React components are typically declarative, there might be cases where you need to manipulate a DOM element imperatively (e.g., focusing an input, measuring its size, etc.).

Here’s an example of using useRef to focus an input element when a button is clicked:

import React, { useRef } from 'react';

function FocusInput() {
  const inputRef = useRef();

  const handleButtonClick = () => {
    inputRef.current.focus();
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleButtonClick}>Focus Input</button>
    </div>
  );
}

In this example, we use useRef to create the inputRef, which is attached to the input element through the ref attribute. When the button is clicked, the handleButtonClick function is called, which uses inputRef.current to access the underlying DOM element and invoke the focus() method on it.

Remember that using useRef for accessing DOM elements should be done sparingly, as it goes against React’s declarative approach. Whenever possible, try to manage component state and behavior through props and state variables to maintain the React flow of data and rendering. However, there are cases where direct DOM manipulation with useRef can be necessary or more efficient.

Back to Topics

useMemo – Hook

The useMemo hook in React is used for memoizing expensive computations, so they are only recomputed when their dependencies change. It helps optimize the performance of functional components by avoiding unnecessary re-computations of values that haven’t changed between renders.

Use Case: Memoizing Expensive Computations:

The primary use case for useMemo is when you have a computationally expensive function or calculation that doesn’t need to be re-evaluated on every render, especially if the function relies on some props or state that might remain unchanged for a while.

Let’s see an example to illustrate its use case:

import React, { useMemo, useState } from 'react';

function ExpensiveComponent({ data }) {
  // This is a computationally expensive function that we want to memoize
  const expensiveResult = useMemo(() => {
    let result = 0;
    for (let i = 0; i < data.length; i++) {
      result += data[i];
    }
    return result;
  }, [data]); // The dependency array contains 'data'

  return <div>{expensiveResult}</div>;
}

function App() {
  const [dataArray, setDataArray] = useState([1, 2, 3, 4, 5]);

  return (
    <div>
      <ExpensiveComponent data={dataArray} />
      <button onClick={() => setDataArray([1, 2, 3, 4, 5])}>Update Data</button>
    </div>
  );
}

In this example, ExpensiveComponent takes an array called data as a prop and computes the sum of its elements. The computation can be costly, especially if the data array is large.

By using useMemo with the data array as a dependency, we ensure that the expensiveResult is only recalculated when the data array changes. So, when the parent component (App) renders and updates the dataArray, ExpensiveComponent will not recompute the sum unless the dataArray changes.

useMemo should be used when the computation is relatively expensive and depends on certain inputs (props or state) that might not change often. It’s essential to remember that using useMemo comes with some overhead, so you should only use it when the performance benefits outweigh the costs.

It’s also worth noting that the improvement in performance gained by using useMemo depends on the nature of the computation and the size of the data. For simple or small computations, the performance gain might be negligible, and in such cases, using useMemo might not be necessary. Always profile and measure your application’s performance to determine the most effective optimizations.

Back to Topics

useReducer – Hook

The useReducer hook in React is used for managing more complex state logic in functional components. It is an alternative to using the useState hook when the state has a complex structure or when the state transitions depend on previous state values. useReducer follows the same principles as the standard Reducer concept in JavaScript, similar to how it works with the Array.reduce method.

Use Case: Managing Complex State Logic:

The primary use case for useReducer is when you need to handle state changes that are more involved and involve multiple sub-values or when you have actions that depend on the previous state. It’s beneficial when the state transitions are not straightforward and need to be calculated based on existing state.

Here’s an example to illustrate its use case:

import React, { useReducer } from 'react';

// Reducer function
function reducer(state, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { count: state.count + 1 };
    case 'DECREMENT':
      return { count: state.count - 1 };
    default:
      return state;
  }
}

function Counter() {
  // useReducer returns the current state and a dispatch function to send actions.
  const [state, dispatch] = useReducer(reducer, { count: 0 });

  return (
    <div>
      <p>Count: {state.count}</p>
      <button onClick={() => dispatch({ type: 'INCREMENT' })}>Increment</button>
      <button onClick={() => dispatch({ type: 'DECREMENT' })}>Decrement</button>
    </div>
  );
}

In this example, the useReducer hook is used to manage the state of a simple counter component. The reducer function defines how state transitions should happen based on different action types. The state is initialized with { count: 0 }, and clicking the buttons dispatches actions to increment or decrement the count.

useReducer provides a structured way to handle more complex state updates, especially when you need to consider multiple factors before updating the state. It can be particularly useful when working with state machines, form handling, or managing state in contexts and reducers for more extensive applications.

However, for simpler cases where the state doesn’t involve complex transitions or doesn’t depend on the previous state, useState may be more suitable and easier to manage. Choose the right approach based on the specific requirements and complexity of your component’s state management.

Back to Topics

useCallback – Hook

The useCallback hook in React is used to memoize functions, which helps to optimize the performance of functional components that rely on callbacks, especially when passing them down to child components. Memoization means that the function returned by useCallback will only change if its dependencies change, otherwise, the same memoized function instance will be reused.

The syntax of the useCallback hook is as follows:

const memoizedCallback = useCallback(callbackFunction, dependencies);
  • callbackFunction: The function that you want to memoize.
  • dependencies (optional): An array of dependencies. If any of these dependencies change, the memoized callback will be recomputed; otherwise, it will be reused.

Use Case: Preventing Unnecessary Re-renders:

In React, passing down new function references to child components can lead to unnecessary re-renders. For example, consider a parent component rendering multiple instances of a child component, and each child component receives a callback prop from the parent. If the parent component creates a new function instance for the callback prop on every render, each child component will think that its prop has changed, resulting in re-renders even if the actual logic of the callback hasn’t changed.

Using useCallback, you can avoid this behavior by memoizing the callback function:

import React, { useCallback } from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const handleClick = useCallback(() => {
    // Callback logic
  }, []);

  return (
    <div>
      <ChildComponent onClick={handleClick} />
    </div>
  );
}

By providing an empty dependency array ([]) as the second argument to useCallback, we ensure that the handleClick function remains the same across re-renders, preventing unnecessary re-renders of the child component.

Remember, while useCallback can help with performance optimizations in certain situations, it’s essential to use it judiciously. Overusing useCallback might lead to less predictable behavior and unnecessary overhead. As with all performance optimizations, it’s best to measure and profile your application to identify actual performance bottlenecks before applying optimizations like useCallback.

Back to Topics

Hope this helps you in interview preparation and your successful selection.

Drop us your love and kindness, by sharing this article. Thank you!

Categories
Learning

All in here no waits, Emojis with their Titles, Unicode code points, and Hexadecimal code values, HTML embedding

Hello,

Welcome, here is the list of emojis with there Unicode Points and hexadecimal code values, easy to embed in HTML CSS.

(Please note: that the hexadecimal code values may vary slightly depending on the platform and encoding)

EmojiEmoji TitleEmoji HexCodeEmoji Unicode PointEmoji Unicode PointEmoji Unicode Point
😀Grinning Face&#128512;U+1F600
😃Grinning Face with Big Eyes&#128515;U+1F603
😄Grinning Face with Smiling Eyes&#128516;U+1F604
😁Beaming Face with Smiling Eyes&#128513;U+1F601
😆Grinning Squinting Face&#128518;U+1F606
😅Grinning Face with Sweat&#128517;U+1F605
😂Face with Tears of Joy&#128514;U+1F602
🙂Slightly Smiling Face&#128578;U+1F642
😉Winking Face&#128521;U+1F609
😊Smiling Face with Smiling Eyes&#128522;U+1F60A
😇Smiling Face with Halo&#128519;U+1F607
🥰Smiling Face with Hearts&#129392;U+1F970
😍Smiling Face with HeartEyes&#128525;U+1F60D
🤩StarStruck&#129321;U+1F929
😘Face Blowing a Kiss&#128536;U+1F618
😗Kissing Face&#128535;U+1F617
😚Kissing Face with Closed Eyes&#128538;U+1F61A
😙Kissing Face with Smiling Eyes&#128537;U+1F619
😋Face Savoring Food&#128523;U+1F60B
😛Face with Tongue&#128539;U+1F61B
😜Winking Face with Tongue&#128540;U+1F61C
🤪Zany Face&#129322;U+1F92A
😝Squinting Face with Tongue&#128541;U+1F61D
🤑MoneyMouth Face&#129297;U+1F911
🤗Hugging Face&#129303;U+1F917
🤭Face with Hand Over Mouth&#129325;U+1F92D
🤫Shushing Face&#129327;U+1F92F
🤔Thinking Face&#129300;U+1F914
🤐ZipperMouth Face&#129296;U+1F910
🤨Face with Raised Eyebrow&#129296;U+1F928
😐Neutral Face&#128528;U+1F610
😑Expressionless Face&#128529;U+1F611
😶Face Without Mouth&#128566;U+1F636
😏Smirking Face&#128527;U+1F60F
😒Unamused Face&#128530;U+1F612
🙄Face with Rolling Eyes&#128580;U+1F644
😬Grimacing Face&#128564;U+1F62C
🤥Lying Face&#129317;U+1F925
😌Relieved Face&#128524;U+1F60C
😔Pensive Face&#128532;U+1F614
😪Sleepy Face&#128554;U+1F62A
🤤Drooling Face&#129316;U+1F924
😴Sleeping Face&#128564;U+1F634
😷Face with Medical Mask&#128567;U+1F637
🤒Face with Thermometer&#129298;U+1F912
🤕Face with HeadBandage&#129301;U+1F915
🤢Nauseated Face&#129314;U+1F922
🤮Face Vomiting&#129326;U+1F92E
🤧Sneezing Face&#129319;U+1F927
🥵Hot Face&#129395;U+1F975
🥶Cold Face&#129396;U+1F976
🥴Woozy Face&#129397;U+1F974
😵Dizzy Face&#128565;U+1F635
🤯Exploding Head&#129327;U+1F92F
🤠Cowboy Hat Face&#129313;U+1F920
🥳Party Face&#129395;U+1F973
😎Smiling Face with Sunglasses&#128526;U+1F60E
🤓Nerd Face&#129299;U+1F913
🧐Face with Monocle&#129488;U+1F9D0
😕Confused Face&#128533;U+1F615
😟Worried Face&#128543;U+1F61F
🙁Slightly Frowning Face&#128577;U+1F641
😮Face with Open Mouth&#128562;U+1F62E
😯Hushed Face&#128575;U+1F62F
😲Astonished Face&#128562;U+1F632
😳Flushed Face&#128563;U+1F633
🥺Pleading Face&#129402;U+1F97A
😦Frowning Face with Open Mouth&#128559;U+1F626
😧Anguished Face&#128567;U+1F627
😨Fearful Face&#128552;U+1F628
😰Anxious Face with Sweat&#128560;U+1F630
😥Sad but Relieved Face&#128549;U+1F625
😢Crying Face&#128546;U+1F622
😭Loudly Crying Face&#128557;U+1F62D
😱Face Screaming in Fear&#128561;U+1F631
😖Confounded Face&#128550;U+1F616
😣Persevering Face&#128547;U+1F623
😞Disappointed Face&#128542;U+1F61E
😓Downcast Face with Sweat&#128531;U+1F613
😩Weary Face&#128553;U+1F629
😫Tired Face&#128555;U+1F62B
🥱Yawning Face&#129471;U+1F971
😤Face with Steam From Nose&#128548;U+1F624
😡Pouting Face&#128545;U+1F621
😠Angry Face&#128544;U+1F620
🤬Face with Symbols on Mouth&#129324;U+1F92C
😈Smiling Face with Horns&#128520;U+1F608
👿Angry Face with Horns&#128127;U+1F47F
💀Skull&#128128;U+1F480
☠️Skull and Crossbones&#9760;U+2620
💩Pile of Poo&#128169;U+1F4A9
🤡Clown Face&#129313;U+1F921
👹Ogre&#128121;U+1F479
👺Goblin&#128122;U+1F47A
👻Ghost&#128123;U+1F47B
👽Alien&#128125;U+1F47D
👾Alien Monster&#128126;U+1F47E
🤖Robot&#129302;U+1F916
😺Grinning Cat Face&#128570;U+1F63A
😸Grinning Cat Face with Smiling Eyes&#128568;U+1F638
😹Cat Face with Tears of Joy&#128569;U+1F639
😻Smiling Cat Face with HeartEyes&#128571;U+1F63B
😼Cat Face with Wry Smile&#128572;U+1F63C
😽Kissing Cat Face&#128573;U+1F63D
🙀Weary Cat Face&#128576;U+1F640
😿Crying Cat Face&#128575;U+1F63F
😾Pouting Cat Face&#128574;U+1F63E
🙈SeeNoEvil Monkey&#128584;U+1F648
🙉HearNoEvil Monkey&#128585;U+1F649
🙊SpeakNoEvil Monkey&#128586;U+1F64A
💋Kiss Mark&#128139;U+1F48B
💌Love Letter&#128140;U+1F48C
💘Heart with Arrow&#128152;U+1F498
💝Heart with Ribbon&#128157;U+1F49D
💖Sparkling Heart&#128150;U+1F496
💗Growing Heart&#128151;U+1F497
💓Beating Heart&#128147;U+1F493
💞Revolving Hearts&#128158;U+1F49E
💕Two Hearts&#128149;U+1F495
💟Heart Decoration&#128159;U+1F49F
❣️Heart Exclamation&#10083;U+2763
💔Broken Heart&#128148;U+1F494
❤️Red Heart&#10084;U+2764
🧡Orange Heart&#129505;U+1F9E1
💛Yellow Heart&#128155;U+1F49B
💚Green Heart&#128154;U+1F49A
💙Blue Heart&#128153;U+1F499
💜Purple Heart&#128156;U+1F49C
🤎Brown Heart&#129534;U+1F90E
🖤Black Heart&#128420;U+1F5A4
💯Hundred Points&#128175;U+1F4AF
💢Anger Symbol&#128162;U+1F4A2
💥Collision&#128165;U+1F4A5
💫Dizzy&#128171;U+1F4AB
💦Sweat Droplets&#128166;U+1F4A6
💨Dashing Away&#128168;U+1F4A8
🕳️Hole&#128371;U+1F573
💣Bomb&#128163;U+1F4A3
💬Speech Balloon&#128172;U+1F4AC
👁️‍🗨️Eye in Speech Bubble&#128065;&#65039;
&#8205;&#128488;&#65039;
U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F
🗨️Left Speech Bubble&#128488;&#65039;U+1F5E8 U+FE0F
🗯️Right Anger Bubble&#128495;&#65039;U+1F5EF U+FE0F
💭Thought Balloon&#128173;U+1F4AD
💤Zzz&#128164;U+1F4A4
👋Waving Hand&#128075;U+1F44B
🤚Raised Back of Hand&#129306;U+1F91A
🖐️Hand with Fingers Splayed&#128070;&#65039;U+1F590 U+FE0F
Raised Hand&#9995;U+270B
🖖Vulcan Salute&#128406;U+1F596
👌OK Hand&#128076;U+1F44C
✌️Victory Hand&#9996;U+270C
🤞Crossed Fingers&#129310;U+1F91E
🤟LoveYou Gesture&#129311;U+1F91F
🤘Sign of the Horns&#129304;U+1F918
🤙Call Me Hand&#129305;U+1F919
👈Backhand Index Pointing Left&#128072;U+1F448
👉Backhand Index Pointing Right&#128073;U+1F449
👆Backhand Index Pointing Up&#128070;U+1F446
🖕Middle Finger&#128405;U+1F595
👇Backhand Index Pointing Down&#128071;U+1F447
☝️Index Pointing Up&#9757;U+261D
👍Thumbs Up&#128077;U+1F44D
👎Thumbs Down&#128078;U+1F44E
Raised Fist&#9994;U+270A
👊Oncoming Fist&#128074;U+1F44A
🤛LeftFacing Fist&#129307;U+1F91B
🤜RightFacing Fist&#129308;U+1F91C
🤝Handshake&#129309;U+1F91D
👏Clapping Hands&#128079;U+1F44F
🙌Raising Hands&#128588;U+1F64C
👐Open Hands&#128080;U+1F450
🤲Palms Up Together&#129309;U+1F932
🙏Folded Hands&#128591;U+1F64F
✍️Writing Hand&#9997;U+270D
💅Nail Polish&#128133;U+1F485
🤳Selfie&#129303;U+1F933
💪Flexed Biceps&#128170;U+1F4AA
👂Ear&#128066;U+1F442
👃Nose&#128067;U+1F443
👣Footprints&#128099;U+1F463
👀Eyes&#128064;U+1F440
👁️Eye&#128065;&#65039;U+1F441 U+FE0F
👅Tongue&#128069;U+1F445
👄Mouth&#128068;U+1F444
👶Baby&#128118;U+1F476
👦Boy&#128102;U+1F466
👧Girl&#128103;U+1F467
👨Man&#128104;U+1F468
👩Woman&#128105;U+1F469
👱‍♂️Man: Blond Hair&#128113;&#8205;&#9794;U+1F471 U+200D U+2642
👱‍♀️Woman: Blond Hair&#128113;&#8205;&#9792;U+1F471 U+200D U+2640
👴Old Man&#128116;U+1F474
👵Old Woman&#128117;U+1F475
👲Person Wearing Turban&#128114;U+1F472
👳‍♂️Man Wearing Turban&#128115;&#8205;&#9794;U+1F473 U+200D U+2642
👳‍♀️Woman Wearing Turban&#128115;&#8205;&#9792;U+1F473 U+200D U+2640
👮‍♂️Man Police Officer&#128110;&#8205;&#9794;U+1F46E U+200D U+2642
👮‍♀️Woman Police Officer&#128110;&#8205;&#9792;U+1F46E U+200D U+2640
👷‍♂️Man Construction Worker&#128119;&#8205;&#9794;U+1F477 U+200D U+2642
👷‍♀️Woman Construction Worker&#128119;&#8205;&#9792;U+1F477 U+200D U+2640
💂‍♂️Man Guard&#128130;&#8205;&#9794;U+1F482 U+200D U+2642
💂‍♀️Woman Guard&#128130;&#8205;&#9792;U+1F482 U+200D U+2640
🕵️‍♂️Man Detective&#128373;&#65039;&#8205;&#9794;U+1F575 U+FE0F U+200D U+2642
🕵️‍♀️Woman Detective&#128373;&#65039;&#8205;&#9792;U+1F575 U+FE0F U+200D U+2640
👩‍⚕️Woman Health Worker&#128105;&#8205;&#9877;U+1F469 U+200D U+2695
👨‍⚕️Man Health Worker&#128104;&#8205;&#9877;U+1F468 U+200D U+2695
👩‍🌾Woman Farmer&#128105;&#8205;&#127793;U+1F469 U+200D U+1F33E
👨‍🌾Man Farmer&#128104;&#8205;&#127793;U+1F468 U+200D U+1F33E
👩‍🍳Woman Cook&#128105;&#8205;&#127859;U+1F469 U+200D U+1F373
👨‍🍳Man Cook&#128104;&#8205;&#127859;U+1F468 U+200D U+1F373
👩‍🎓Woman Student&#128105;&#8205;&#127891;U+1F469 U+200D U+1F393
👨‍🎓Man Student&#128104;&#8205;&#127891;U+1F468 U+200D U+1F393
👩‍🎤Woman Singer&#128105;&#8205;&#127925;U+1F469 U+200D U+1F3A4
👨‍🎤Man Singer&#128104;&#8205;&#127925;U+1F468 U+200D U+1F3A4
👩‍🏫Woman Teacher&#128105;&#8205;&#127979;U+1F469 U+200D U+1F3EB
👨‍🏫Man Teacher&#128104;&#8205;&#127979;U+1F468 U+200D U+1F3EB
👩‍🏭Woman Factory Worker&#128105;&#8205;&#127981;U+1F469 U+200D U+1F3ED
👨‍🏭Man Factory Worker&#128104;&#8205;&#127981;U+1F468 U+200D U+1F3ED
👩‍💻Woman Technologist&#128105;&#8205;&#128187;U+1F469 U+200D U+1F4BB
👨‍💻Man Technologist&#128104;&#8205;&#128187;U+1F468 U+200D U+1F4BB
👩‍💼Woman Office Worker&#128105;&#8205;&#128188;U+1F469 U+200D U+1F4BC
👨‍💼Man Office Worker&#128104;&#8205;&#128188;U+1F468 U+200D U+1F4BC
👩‍🔧Woman Mechanic&#128105;&#8205;&#128295;U+1F469 U+200D U+1F527
👨‍🔧Man Mechanic&#128104;&#8205;&#128295;U+1F468 U+200D U+1F527
👩‍🔬Woman Scientist&#128105;&#8205;&#128300;U+1F469 U+200D U+1F52C
👨‍🔬Man Scientist&#128104;&#8205;&#128300;U+1F468 U+200D U+1F52C
👩‍🎨Woman Artist&#128105;&#8205;&#128306;U+1F469 U+200D U+1F3A8
👨‍🎨Man Artist&#128104;&#8205;&#128306;U+1F468 U+200D U+1F3A8
👩‍🚒Woman Firefighter&#128105;&#8205;&#128658;U+1F469 U+200D U+1F692
👨‍🚒Man Firefighter&#128104;&#8205;&#128658;U+1F468 U+200D U+1F692
👩‍✈️Woman Pilot&#128105;&#8205;&#9992;U+1F469 U+200D U+2708
👨‍✈️Man Pilot&#128104;&#8205;&#9992;U+1F468 U+200D U+2708
👩‍🚀Woman Astronaut&#128105;&#8205;&#128640;U+1F469 U+200D U+1F680
👨‍🚀Man Astronaut&#128104;&#8205;&#128640;U+1F468 U+200D U+1F680
👩‍🚀Woman Judge&#128105;&#8205;&#128661;U+1F469 U+200D U+1F9A1
👨‍⚖️Man Judge&#128104;&#8205;&#9876;U+1F468 U+200D U+2696
👰Bride with Veil&#128112;U+1F470
🤵Man in Tuxedo&#129333;U+1F935
🤰Pregnant Woman&#129296;U+1F930
👼Baby Angel&#128124;U+1F47C
🎅Santa Claus&#127877;U+1F385
🤶Mrs. Claus&#129395;U+1F936
🧙‍♀️Woman Mage&#129497;&#8205;&#9792;U+1F9D9 U+200D U+2640
🧙‍♂️Man Mage&#129497;&#8205;&#9794;U+1F9D9 U+200D U+2642
🧚‍♀️Woman Fairy&#129498;&#8205;&#9792;U+1F9DA U+200D U+2640
🧚‍♂️Man Fairy&#129498;&#8205;&#9794;U+1F9DA U+200D U+2642
🧛‍♀️Woman Vampire&#129499;&#8205;&#9792;U+1F9DB U+200D U+2640
🧛‍♂️Man Vampire&#129499;&#8205;&#9794;U+1F9DB U+200D U+2642
🧜‍♀️Mermaid&#129504;&#8205;&#9792;U+1F9DC U+200D U+2640
🧜‍♂️Merman&#129504;&#8205;&#9794;U+1F9DC U+200D U+2642
🧝‍♀️Woman Elf&#129505;&#8205;&#9792;U+1F9DD U+200D U+2640
🧝‍♂️Man Elf&#129505;&#8205;&#9794;U+1F9DD U+200D U+2642
🧞‍♀️Woman Genie&#129510;&#8205;&#9792;U+1F9DE U+200D U+2640
🧞‍♂️Man Genie&#129510;&#8205;&#9794;U+1F9DE U+200D U+2642
🧟‍♀️Woman Zombie&#129511;&#8205;&#9792;U+1F9DF U+200D U+2640
🧟‍♂️Man Zombie&#129511;&#8205;&#9794;U+1F9DF U+200D U+2642
🧖‍♀️Woman in Steamy Room&#129499;&#8205;&#9792;U+1F9D6 U+200D U+2640
🧖‍♂️Man in Steamy Room&#129499;&#8205;&#9794;U+1F9D6 U+200D U+2642
🧗‍♀️Woman Climbing&#129511;&#8205;&#9792;U+1F9DF U+200D U+2640
🧗‍♂️Man Climbing&#129511;&#8205;&#9794;U+1F9DF U+200D U+2642
🧘‍♀️Woman in Lotus Position&#129498;&#8205;&#9792;U+1F9D8 U+200D U+2640
🧘‍♂️Man in Lotus Position&#129498;&#8205;&#9794;U+1F9D8 U+200D U+2642
🛀Person Taking Bath&#128704;U+1F6C0
🛌Person in Bed&#128716;U+1F6CC
🕴️Person in Suit Levitating&#128372;&#65039;U+1F574 U+FE0F
👯‍♀️Women with Bunny Ears&#128129;&#8205;&#9792;U+1F46F U+200D U+2640
👯‍♂️Men with Bunny Ears&#128129;&#8205;&#9794;U+1F46F U+200D U+2642
🕺Man Dancing&#129330;U+1F57A
🤺Person Fencing&#129466;U+1F93A
🏇Horse Racing&#127943;U+1F3C7
⛷️Skier&#9975;&#65039;U+26F7 U+FE0F
🏂Snowboarder&#127938;U+1F3C2
🏌️‍♀️Woman Golfing&#127948;&#65039;&#8205;&#9792;U+1F3CC U+FE0F U+200D U+2640
🏌️‍♂️Man Golfing&#127948;&#65039;&#8205;&#9794;U+1F3CC U+FE0F U+200D U+2642
🏄‍♀️Woman Surfing&#127940;&#8205;&#9792;U+1F3C4 U+200D U+2640
🏄‍♂️Man Surfing&#127940;&#8205;&#9794;U+1F3C4 U+200D U+2642
🚣‍♀️Woman Rowing Boat&#128675;&#8205;&#9792;U+1F6A3 U+200D U+2640
🚣‍♂️Man Rowing Boat&#128675;&#8205;&#9794;U+1F6A3 U+200D U+2642
🏊‍♀️Woman Swimming&#127946;&#8205;&#9792;U+1F3CA U+200D U+2640
🏊‍♂️Man Swimming&#127946;&#8205;&#9794;U+1F3CA U+200D U+2642
⛹️‍♀️Woman Bouncing Ball&#9977;&#65039;&#8205;&#9792;U+26F9 U+FE0F U+200D U+2640
⛹️‍♂️Man Bouncing Ball&#9977;&#65039;&#8205;&#9794;U+26F9 U+FE0F U+200D U+2642
🏋️‍♀️Woman Lifting Weights&#127947;&#65039;&#8205;&#9792;U+1F3CB U+FE0F U+200D U+2640
🏋️‍♂️Man Lifting Weights&#127947;&#65039;&#8205;&#9794;U+1F3CB U+FE0F U+200D U+2642
🚴‍♀️Woman Biking&#128693;&#8205;&#9792;U+1F6B4 U+200D U+2640
🚴‍♂️Man Biking&#128693;&#8205;&#9794;U+1F6B4 U+200D U+2642
🚵‍♀️Woman Mountain Biking&#128695;&#8205;&#9792;U+1F6B5 U+200D U+2640
🚵‍♂️Man Mountain Biking&#128695;&#8205;&#9794;U+1F6B5 U+200D U+2642
🤸‍♀️Woman Cartwheeling&#129377;&#8205;&#9792;U+1F938 U+200D U+2640
🤸‍♂️Man Cartwheeling&#129377;&#8205;&#9794;U+1F938 U+200D U+2642
🤼‍♀️Women Wrestling&#129396;&#8205;&#9792;U+1F93C U+200D U+2640
🤼‍♂️Men Wrestling&#129396;&#8205;&#9794;U+1F93C U+200D U+2642
🤽‍♀️Woman Playing Water Polo&#129437;&#8205;&#9792;U+1F93D U+200D U+2640
🤽‍♂️Man Playing Water Polo&#129437;&#8205;&#9794;U+1F93D U+200D U+2642
🤾‍♀️Woman Playing Handball&#129438;&#8205;&#9792;U+1F93E U+200D U+2640
🤾‍♂️Man Playing Handball&#129438;&#8205;&#9794;U+1F93E U+200D U+2642
🤹‍♀️Woman Juggling&#129441;&#8205;&#9792;U+1F939 U+200D U+2640
🤹‍♂️Man Juggling&#129441;&#8205;&#9794;U+1F939 U+200D U+2642
🧘Person in Lotus Position&#129497;U+1F9D8
🧑‍🤝‍🧑People Holding Hands&#129465;&#8205;&#129309;&#8205;&#129465;U+1F9D1 U+200D U+1F91D U+200D U+1F9D1
👭Women Holding Hands&#128107;U+1F46D
👫Woman and Man Holding Hands&#128108;U+1F46B
👬Men Holding Hands&#128109;U+1F46C
💏Kiss&#128143;U+1F48F
👩‍❤️‍💋‍👩Kiss: Woman, Woman&#128105;&#8205;&#10084;&#65039;&#8205;&#128139;&#8205;&#128105;U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469
👨‍❤️‍💋‍👨Kiss: Man, Man&#128104;&#8205;&#10084;&#65039;&#8205;&#128139;&#8205;&#128104;U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468
💑Couple with Heart&#128145;U+1F491
👩‍❤️‍👩Couple with Heart: Woman, Woman&#128105;&#8205;
&#10084;&#65039;
&#8205;&#128105;
U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469
👨‍❤️‍👨Couple with Heart: Man, Man&#128104;&#8205;&#10084;
&#65039;&#8205;&#128104;
U+1F468 U+200D U+2764 U+FE0F U+200D U+1F468
👪Family&#128106;U+1F46A
👨‍👩‍👧Family: Man, Woman, Girl&#128104;&#8205;&#128105;
&#8205;&#128103;
U+1F468 U+200D U+1F469 U+200D U+1F467
👨‍👩‍👧‍👦Family: Man, Woman, Girl, Boy&#128104;&#8205;&#128105;
&#8205;&#128103;
&#8205;&#128102;
U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466
👨‍👩‍👦‍👦Family: Man, Woman, Boy, Boy&#128104;&#8205;&#128105;
&#8205;&#128102;&#8205;&#128102;
U+1F468 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466
👨‍👩‍👧‍👧Family: Man, Woman, Girl, Girl&#128104;&#8205;&#128105;
&#8205;&#128103;&#8205;
&#128103;
U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467
👩‍👩‍👦Family: Woman, Woman, Boy&#128105;&#8205;&#128105;
&#8205;&#128102;
U+1F469 U+200D U+1F469 U+200D U+1F466
👩‍👩‍👧Family: Woman, Woman, Girl&#128105;&#8205;&#128105;
&#8205;&#128103;
U+1F469 U+200D U+1F469 U+200D U+1F467
👩‍👩‍👧‍👦Family: Woman, Woman, Girl, Boy&#128105;&#8205;&#128105;
&#8205;&#128103;&#8205;&#128102;
U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466
👩‍👩‍👦‍👦Family: Woman, Woman, Boy, Boy&#128105;&#8205;&#128105;
&#8205;&#128102;&#8205;&#128102;
U+1F469 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466
👩‍👩‍👧‍👧Family: Woman, Woman, Girl, Girl&#128105;&#8205;&#128105;
&#8205;&#128103;&#8205;&#128103;
U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467
👨‍👨‍👦Family: Man, Man, Boy&#128104;&#8205;&#128104;
&#8205;&#128102;
U+1F468 U+200D U+1F468 U+200D U+1F466
👨‍👨‍👧Family: Man, Man, Girl&#128104;&#8205;&#128104;
&#8205;&#128103;
U+1F468 U+200D U+1F468 U+200D U+1F467
👨‍👨‍👧‍👦Family: Man, Man, Girl, Boy&#128104;&#8205;&#128104;
&#8205;&#128103;&#8205;&#128102;
U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466
👨‍👨‍👦‍👦Family: Man, Man, Boy, Boy&#128104;&#8205;&#128104;
&#8205;&#128102;&#8205;&#128102;
U+1F468 U+200D U+1F468 U+200D U+1F466 U+200D U+1F466
👨‍👨‍👧‍👧Family: Man, Man, Girl, Girl&#128104;&#8205;&#128104;
&#8205;&#128103;&#8205;&#128103;
U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F467
👩‍👦Family: Woman, Boy&#128105;&#8205;&#128102;U+1F469 U+200D U+1F466
👩‍👧Family: Woman, Girl&#128105;&#8205;&#128103;U+1F469 U+200D U+1F467
👩‍👧‍👦Family: Woman, Girl, Boy&#128105;&#8205;&#128103;
&#8205;&#128102;
U+1F469 U+200D U+1F467 U+200D U+1F466
👩‍👦‍👦Family: Woman, Boy, Boy&#128105;&#8205;&#128102;
&#8205;&#128102;
U+1F469 U+200D U+1F466 U+200D U+1F466
👩‍👧‍👧Family: Woman, Girl, Girl&#128105;&#8205;&#128103;
&#8205;&#128103;
U+1F469 U+200D U+1F467 U+200D U+1F467
🤳Selfie&#129305;U+1F933
💪Flexed Biceps&#128170;U+1F4AA
👈Backhand Index Pointing Left&#128072;U+1F448
👉Backhand Index Pointing Right&#128073;U+1F449
☝️Index Pointing Up&#9757;&#65039;U+261D U+FE0F
👆Backhand Index Pointing Up&#128070;U+1F446
🖕Middle Finger&#128405;U+1F595
👇Backhand Index Pointing Down&#128071;U+1F447
✌️Victory Hand&#9996;&#65039;U+270C U+FE0F
🤞Crossed Fingers&#129310;U+1F91E
🖖Vulcan Salute&#128406;U+1F596
🤘Sign of the Horns&#129304;U+1F918
🤙Call Me Hand&#129305;U+1F91A
👌OK Hand&#128076;U+1F44C
Raised Hand&#9995;U+270B
🤚Raised Back of Hand&#129306;U+1F91A
👋Waving Hand&#128075;U+1F44B
👏Clapping Hands&#128079;U+1F44F
👍Thumbs Up&#128077;U+1F44D
👎Thumbs Down&#128078;U+1F44E
👊Oncoming Fist&#128074;U+1F44A
Raised Fist&#9994;U+270A
🤛LeftFacing Fist&#129307;U+1F91B
🤜RightFacing Fist&#129308;U+1F91C
🤝Handshake&#129309;U+1F91D
🙏Folded Hands&#128591;U+1F64F
✍️Writing Hand&#9997;&#65039;U+270D U+FE0F
💅Nail Polish&#128133;U+1F485
🤳Selfie&#129305;U+1F933
✌️Victory Hand&#9996;&#65039;U+270C U+FE0F
🤞Crossed Fingers&#129310;U+1F91E
🖖Vulcan Salute&#128406;U+1F596
🤘Sign of the Horns&#129304;U+1F918
🤙Call Me Hand&#129305;U+1F91A
👌OK Hand&#128076;U+1F44C
Raised Hand&#9995;U+270B
🤚Raised Back of Hand&#129306;U+1F91A
👋Waving Hand&#128075;U+1F44B
👏Clapping Hands&#128079;U+1F44F
👍Thumbs Up&#128077;U+1F44D
👎Thumbs Down&#128078;U+1F44E
👊Oncoming Fist&#128074;U+1F44A
🤛LeftFacing Fist&#129307;U+1F91B
🤜RightFacing Fist&#129308;U+1F91C
👐Open Hands&#128080;U+1F450
🤲Palms Up Together&#129308;U+1F932
🙌Raising Hands&#128588;U+1F64C
🙆Raising Both Hands in Celebration&#128582;U+1F646
🙅Gesturing No&#128581;U+1F645
🙇Bowing&#128589;U+1F647
🤦Face Palm&#129318;U+1F926
🤷Shrugging&#129319;U+1F937
🙋Raising Hand&#128587;U+1F64B
🤳Selfie&#129305;U+1F933

Thanks for visiting & Thanks to ChatGPT

Categories
Learning

How to get familiar with Tailwind CSS?

Hello, Welcome to the post.

Here is the common question first you have in your mind to when get started with Tailwind CSS for your first project or go-to learning project for Tailwind and other frontend tech you were learning together.

So, Lets Get’s close familiar with Tailwind CSS to start with.

More content is boiling and will be coming up soon!

Keep your focused till then here!

PS. Okay, well will start now with some basic code from Tailwind CSS docs to familiarize with CSS class names we will be generally using to start our basics structure for any UI component building in frontend or html.

<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-lg flex items-center space-x-4">
  <div class="shrink-0">
    <img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo">
  </div>
  <div>
    <div class="text-xl font-medium text-black">ChitChat</div>
    <p class="text-slate-500">You have a new message!</p>
  </div>
</div>

Here lets talk about all the classes used in the above code to create the small chat notification pop box for example:

p-6 applies padding to the box, ranges suffix starts from number 0 to 96 with also some decimal values unto 3 number, like, p-1.5, p-2.5 and p-3.5
also suffix available to handle specific paddings are like; p – all side, ps – padding start (on left side), pe padding for end (right side only), px – for padding left and right side, py – for padding top and bottom , px-auto

Similarly, you can learn for margin would be having same sets of rules to apply margin to the box using the same above like suffix and prefix name, just you might need to change ‘p‘ to ‘m‘.

max-w-sm is to set max width on smaller devices or for smaller devices.

mx-auto is setting margin left and right auto to center align the box element. (note as we discussed for padding suffix and prefix same applies to margin)

bg-white – apply white background color to the element, for more possible values are available in Tailwind CSS Background list latest versions, you can also apply variations and calculation with class names

rounded-xl – rounding the box with xl size value, there are bunch of options and ways to round the box or make the rounded to none using rounded-none, check the rounded classes and variations list on Tailwind CSS Rounded Corners
shadow-lg – applies outer box shadow to the element, possible values available are shadow-smshadowshadow-mdshadow-lgshadow-xl, or shadow-2xl, you can also apply inner shadow and no shadow using class like shadow-inner and shadow–none

in Tailwind CSS we can use variant modifies, what are they? they are just utility class to apply styles like when you hover and element or so, for example apply shadow-lg on hover right through CSS class name code here it is an example of variant modifiers class: hover:shadow-lg, will apply shadow effect on hover of the that particular element, isn’t it easy? For more styling options check Tailwind CSS Shadow

flex – applies flex box styles to the element its child elements how they grow or shrink using more utility class names like flex-1, flex-initial, flex-auto and flex-none, also breakpoints and variants are available for the class flex. Check out Tailwind CSS Flex for more details information.

items-center – abasically to align child items in center respect to flex direction column or row

space-x-4 – to creates space between child elements or help to create gaps between the elements, various class option with gap size available, checkout Tailwind CSS Space

h-12 and w-12 – are to apply width and height to the logo element, there are many height and width utility classes available, just heads up class names starting from w-0, w-px, w-1,and so on … till end w-ful, w-screen, w-min, w-max, w-fit, similarity for height, Tailwind CSS Width

Next remaining are text- and font- they applies text variant size and colors and font variant size and weights and more, check underline-offset-1 and so on variant till 8 applies underline offset between text line to the bottom. Tailwind CSS Underline Offset Tailwind CSS Font Weight and more variants classes we can look straight through the doc for more deeper learning of CSS class names.

I hope this gives us the highlight what lies under Tailwind CSS styling guides and what classes we can utilize from the bunch out in the tail of wind CSS, make sense!?

Happy learning, for tips or corrections please leave message or drop us note on hello@tortoisefeel.com

Categories
Learning Learning Tech

How to build Android APK/apk from command line interface on windows/mac?

Hello,

If you are looking for, to build or generate the android apk file (in your capacitor project) directly from the command line rather then opening Android Studio and building up.

I will share few steps and challenges face to build android apk from CLI on windows and also would share below the mac version of command line code too incase you are mac user.

First step first,

Before running the CLI command which I will be sharing below, we make sure we add the two things under Environment variables of windows system.

  • Java JDK or JAVA_HOME path
  • zipalign if not set or when you run command your cli throw error not zipalign command (so we need it too in the PATH variable of the windows system)
See last two entries in the image above, second entry were zipalign.exe is available under your real Android Studio folder.

Next, just try out these command you will be good to go

Windows CLI command for Android APK release build
cd android && 
gradlew.bat assembleRelease && 
cd app/build/outputs/apk/release &&
jarsigner -keystore YOUR_KEYSTORE_PATH -storepass YOUR_KEYSTORE_PASS app-release-unsigned.apk YOUR_KEYSTORE_ALIAS &&
zipalign 4 app-release-unsigned.apk app-release.apk

In Code above, note we are using gradlew.bat which is important to note for window users reset is same for MAC command too (didn’t tested on mac, channel of command source from the post), result would working for me on windows!

Note the date and time of output (compare to post date and time, I renamed the file to mdw-app-release.apk for use)
Mac CLI command for Android APK release build
cd android && 
./gradlew assembleRelease && 
cd app/build/outputs/apk/release &&
jarsigner -keystore YOUR_KEYSTORE_PATH -storepass YOUR_KEYSTORE_PASS app-release-unsigned.apk YOUR_KEYSTORE_ALIAS &&
zipalign 4 app-release-unsigned.apk app-release.apk

If you like to generate for debug just changed assembleRelease to assembleDebug and change the file names accordingly, from release to debug or whatever names you would like to prefix or suffix.

Hope this gives ideas and info for the challenge you might facing.

Happy Learning & Thanks for visit.

Categories
Learning Tech

What does this actually means: Warning: The signer’s certificate is self-signed. POSIX file permission and/or symlink attributes detected.

If you encounter this warning message on CLI

What does this actually means: Warning: The signer's certificate is self-signed. POSIX file permission and/or symlink attributes detected. These attributes are ignored when signing and are not protected by the signature.

on after your local Android APK build for release version, basically it means, as learned from AI source to understand it real cause of the warning, so no need to worry much, you can continue reading the details for more understandings.

It indicates that the certificate used to sign the file is self-signed, meaning it was generated by the developer rather than being issued by a trusted certificate authority.

Additionally, the warning mentions POSIX file permission and/or symlink attributes. POSIX refers to the Portable Operating System Interface, which defines a standard set of APIs for compatibility between different Unix-like operating systems. The warning suggests that the file permissions and symbolic links present in the file are ignored during the signing process and are not protected by the digital signature.

This warning is informational and does not necessarily indicate an error or problem. Self-signed certificates are commonly used during development or testing stages, but for production or public distribution, it is recommended to use certificates issued by trusted certificate authorities.

If you are encountering this warning while signing an APK file, you can consider obtaining a certificate from a trusted certificate authority to replace the self-signed certificate. This will provide users with more confidence in the authenticity and integrity of the application. However, if you are using a self-signed certificate for personal or internal use, you can generally ignore this warning as long as you trust the source of the file and its contents.

It’s important to note that the warning regarding POSIX file permission and symlink attributes being ignored during signing does not have a significant impact on the functionality of the signed file. The signature primarily ensures the integrity of the file contents and detects any modifications made after signing.

Happy Learning!