Bootstrap vs Tailwind: Mana Satu Pilihan Terbaik?

Pengenalan

Responsive design adalah wajib dalam web development hari ni. Bootstrap boleh bantu korang achieve tu dengan mudah. Tapi ramai yang tak sedar ada beberapa tips yang boleh buat kerja korang lebih efisien.

Dalam artikel ni, saya akan terangkan satu persatu dengan detail supaya korang faham dan boleh apply terus dalam projek korang. Jadi, jangan skip mana-mana section sebab setiap tip ada value tersendiri.

Kenapa Tips Ni Penting?

Dalam dunia bootstrap, setiap perkara kecil boleh memberi impak yang besar. Dengan guna teknik yang betul, korang boleh tingkatkan produktiviti dan hasilkan kerja yang lebih berkualiti. Tips-tips ni bukan sahaja buat korang jadi lebih mahir, tapi juga bantu korang jimat masa dan kurangkan mistakes.

Tip-Tips Yang Korang Perlu Tahu

1. Custom Theme Dengan CSS Variables

Bootstrap 5 support CSS variables yang power. Korang boleh customize colors, fonts, dan spacing dengan mudah. Cuma define variable dalam :root selector dan gunakan di mana-mana dalam CSS korang.

Common mistake: Tak guna CSS variables yang menyebabkan susah nak customize theme.

2. Gunakan JavaScript Plugins Dengan Bijak

Bootstrap ada banyak JavaScript plugins yang boleh enhance user experience. Tapi jangan overuse plugins sebab ia boleh buat website jadi lambat. Pilih plugins yang benar-benar diperlukan.

Common mistake: Overuse plugins yang menyebabkan website jadi lambat dan buruk performance.

3. Responsive Images Dengan img-fluid

Gambar adalah penting dalam web design. Dengan guna class img-fluid, gambar korang akan auto-resize mengikut container. Ni buat gambar nampak cantik di semua device tanpa perlu tulis media query sendiri.

Common mistake: Tak guna img-fluid yang menyebabkan gambar tak responsif di mobile.

4. Optimize Untuk Mobile

Mobile-first approach adalah penting dalam web design hari ni. Bootstrap memang dirancang untuk mobile-first, tapi korang kena pastikan code korang juga follow approach ni.

Common mistake: Tak optimize untuk mobile yang menyebabkan website tak cantik di small screens.

5. Fahami Grid System Bootstrap

Grid system adalah teras kepada responsive design dalam Bootstrap. Bootstrap gunakan 12 column grid system yang fleksibel. Korang boleh gunakan container, row, dan column untuk buat layout yang responsif.

Common mistake: Tak faham grid system menyebabkan layout yang tak responsif dan cantik di semua device.

6. Gunakan Utility Classes

Bootstrap ada banyak utility classes yang boleh jimat masa korang. Contohnya, d-flex untuk flexbox, m-3 untuk margin, p-2 untuk padding, dan text-center untuk text alignment.

Common mistake: Tulis custom CSS untuk benda-benda yang dah ada utility classes.

7. Gunakan Components Yang Sedia Ada

Bootstrap ada banyak components yang sedia ada seperti navbar, card, modal, dan dropdown. Sebelum korang tulis custom component, check dulu apa yang Bootstrap dah sediakan.

Common mistake: Tulis custom components sedangkan Bootstrap dah sediakan components yang serupa.

Tips Tambahan

Selain tips-tips di atas, korang juga boleh:

  • Gunakan Bootstrap Icons – Bootstrap ada library icons yang free dan boleh digunakan terus. Tak perlu cari icons dari sumber lain.
  • Customize Dengan Sass – Bootstrap gunakan Sass untuk styling. Korang boleh customize colors, fonts, dan spacing dengan mudah guna Sass variables.
  • Gunakan CDN Untuk Production – Untuk production, gunakan CDN untuk serve Bootstrap files. Ni buat loading lebih cepat sebab user boleh cache files tu.
  • Test Di Pelbagai Device – Sentiasa test website korang di pelbagai device dan screen size. Gunakan Chrome DevTools untuk test responsive design.
  • Learn The Grid System – Fahami grid system Bootstrap dengan mendalam. Ia adalah teras kepada responsive design dalam Bootstrap.

Kesimpulan

Bootstrap terus berkembang dan menambah features baru setiap masa. Pastikan korang follow updates terkini untuk manfaatkan semua features yang ada. Jangan takut untuk explore features baru yang Bootstrap tawarkan. Siapa tahu, mungkin ada features yang sesuai dengan projek korang. Yang paling penting, korang kena practice. Tanpa practice, semua tips ni hanyalah teori semata-mata. Selamat coding dan semoga artikel ni bermanfaat untuk korang semua! Jangan lupa untuk follow kami untuk dapatkan lebih banyak tips dan trik web development yang lain.


Sumber Rujukan:

  • Artikel ini ditulis oleh AI untuk blog haqis.com

Sumber Rujukan:

  • Artikel ini diterjemahkan dari None
  • Diterjemahkan ke Bahasa Melayu untuk haqis.com

Laravel Eloquent: Cara Guna ORM Dengan Betul

Pengenalan

Laravel memang power untuk buat web application. Tapi tanpa knowledge yang betul, korang mungkin akan struggle. Hari ni saya nak kongsi beberapa tips yang saya guna dalam projek saya.

Dalam artikel ni, saya akan terangkan satu persatu dengan detail supaya korang faham dan boleh apply terus dalam projek korang. Jadi, jangan skip mana-mana section sebab setiap tip ada value tersendiri.

Kenapa Tips Ni Penting?

Dalam dunia laravel, setiap perkara kecil boleh memberi impak yang besar. Dengan guna teknik yang betul, korang boleh tingkatkan produktiviti dan hasilkan kerja yang lebih berkualiti. Tips-tips ni bukan sahaja buat korang jadi lebih mahir, tapi juga bantu korang jimat masa dan kurangkan mistakes.

Tip-Tips Yang Korang Perlu Tahu

1. Optimize Database Queries

Database queries adalah salah satu performance bottleneck. Gunakan eager loading untuk elak N+1 query problem. Korang juga boleh gunakan query caching untuk kurangkan beban database.

Common mistake: Tak guna eager loading yang menyebabkan N+1 query problem dan performance teruk.

2. Security Best Practices

Security adalah penting dalam web development. Laravel dah sediakan banyak fitur security seperti CSRF protection, SQL injection prevention, dan XSS prevention. Pastikan korang gunakan fitur-fitur ni.

Common mistake: Tak guna security features yang sedia ada menyebabkan website mudah dieksploitasi.

3. Testing Dengan PHPUnit

Testing adalah penting dalam software development. Laravel support PHPUnit yang memudahkan korang untuk tulis test. Pastikan korang tulis test untuk setiap feature yang korang buat.

Common mistake: Tak tulis tests yang menyebabkan bugs sukar dikesan dan production crash.

4. Gunakan Eloquent Dengan Betul

Eloquent adalah ORM yang power dalam Laravel. Tapi jangan overuse Eloquent sebab ia boleh buat query jadi slow. Gunakan Eloquent untuk operasi CRUD biasa, dan raw query untuk operasi yang kompleks.

Common mistake: Overuse Eloquent yang menyebabkan queries sangat slow terutamanya untuk data yang besar.

5. Gunakan Artisan Commands

Artisan adalah command line interface untuk Laravel. Korang boleh gunakan Artisan untuk automate task repetitive seperti membuat model, controller, dan migration.

Common mistake: Buat tasks secara manual sedangkan Artisan boleh automate semua tu.

6. Gunakan Queues Untuk Heavy Tasks

Jangan run heavy tasks dalam request cycle. Sebaliknya, gunakan queues untuk proses task yang mengambil masa. Ni buat response korang lebih cepat dan user pun happy.

Common mistake: Run heavy tasks dalam request cycle yang menyebabkan response sangat lambat.

7. Package Development

Laravel support package development yang memudahkan korang untuk reuse code. Korang boleh create package sendiri atau gunakan package yang sedia ada dari community.

Common mistake: Tulis code ulang-alik sedangkan boleh guna packages yang sedia ada.

Tips Tambahan

Selain tips-tips di atas, korang juga boleh:

  • Gunakan Laravel Horizon – Untuk manage queues, korang boleh gunakan Laravel Horizon. Ia provide dashboard yang cantik untuk monitor queues dan jobs.
  • Learn Livewire – Livewire adalah full-stack framework untuk Laravel yang memudahkan korang buat interactive UI tanpa perlu tulis banyak JavaScript.
  • Gunakan Laravel Telescope – Telescope adalah debugging assistant untuk Laravel. Ia boleh bantu korang monitor requests, exceptions, database queries, dan lain-lain.
  • Optimize For Production – Untuk production, korang perlu optimize Laravel dengan cara caching config, routes, dan views. Korang juga boleh gunakan opcache untuk improve performance.
  • Join Laravel Community – Laravel ada komuniti yang sangat active. Join Laravel Malaysia Facebook group atau Laravel News untuk dapatkan tips dan tricks terkini.

Kesimpulan

Dengan Laravel, korang boleh jimat masa yang banyak dan hasilkan application yang professional. Tapi ingat, Laravel hanyalah tools. Korang masih perlu faham prinsip asas web development seperti OOP, database design, dan security. Laravel bantu korang dari segi implementation, tapi korang still perlu gunakan otak korang untuk buat decision yang betul. Practice tips ni setiap hari dan korang akan nampak perbezaannya. Selamat mencuba dan semoga korang menjadi Laravel developer yang lebih baik dari sebelumnya!


Sumber Rujukan:

  • Artikel ini ditulis oleh AI untuk blog haqis.com

Laravel Blade: Tips Tulis Template Lebih Cepat

Pengenalan

Laravel adalah salah satu PHP framework yang paling popular di dunia. Dengan fitur-fitur yang lengkap dan syntax yang elegan, Laravel memudahkan pembangunan web application. Hari ni saya nak kongsi beberapa tips yang boleh bantu korang jadi Laravel developer yang lebih baik.

Dalam artikel ni, saya akan terangkan satu persatu dengan detail supaya korang faham dan boleh apply terus dalam projek korang. Jadi, jangan skip mana-mana section sebab setiap tip ada value tersendiri.

Kenapa Tips Ni Penting?

Dalam dunia laravel, setiap perkara kecil boleh memberi impak yang besar. Dengan guna teknik yang betul, korang boleh tingkatkan produktiviti dan hasilkan kerja yang lebih berkualiti. Tips-tips ni bukan sahaja buat korang jadi lebih mahir, tapi juga bantu korang jimat masa dan kurangkan mistakes.

Tip-Tips Yang Korang Perlu Tahu

1. Optimize Database Queries

Database queries adalah salah satu performance bottleneck. Gunakan eager loading untuk elak N+1 query problem. Korang juga boleh gunakan query caching untuk kurangkan beban database.

Common mistake: Tak guna eager loading yang menyebabkan N+1 query problem dan performance teruk.

2. Testing Dengan PHPUnit

Testing adalah penting dalam software development. Laravel support PHPUnit yang memudahkan korang untuk tulis test. Pastikan korang tulis test untuk setiap feature yang korang buat.

Common mistake: Tak tulis tests yang menyebabkan bugs sukar dikesan dan production crash.

3. Gunakan Artisan Commands

Artisan adalah command line interface untuk Laravel. Korang boleh gunakan Artisan untuk automate task repetitive seperti membuat model, controller, dan migration.

Common mistake: Buat tasks secara manual sedangkan Artisan boleh automate semua tu.

4. Gunakan Eloquent Dengan Betul

Eloquent adalah ORM yang power dalam Laravel. Tapi jangan overuse Eloquent sebab ia boleh buat query jadi slow. Gunakan Eloquent untuk operasi CRUD biasa, dan raw query untuk operasi yang kompleks.

Common mistake: Overuse Eloquent yang menyebabkan queries sangat slow terutamanya untuk data yang besar.

5. Package Development

Laravel support package development yang memudahkan korang untuk reuse code. Korang boleh create package sendiri atau gunakan package yang sedia ada dari community.

Common mistake: Tulis code ulang-alik sedangkan boleh guna packages yang sedia ada.

6. Gunakan Queues Untuk Heavy Tasks

Jangan run heavy tasks dalam request cycle. Sebaliknya, gunakan queues untuk proses task yang mengambil masa. Ni buat response korang lebih cepat dan user pun happy.

Common mistake: Run heavy tasks dalam request cycle yang menyebabkan response sangat lambat.

7. Security Best Practices

Security adalah penting dalam web development. Laravel dah sediakan banyak fitur security seperti CSRF protection, SQL injection prevention, dan XSS prevention. Pastikan korang gunakan fitur-fitur ni.

Common mistake: Tak guna security features yang sedia ada menyebabkan website mudah dieksploitasi.

Tips Tambahan

Selain tips-tips di atas, korang juga boleh:

  • Gunakan Laravel Horizon – Untuk manage queues, korang boleh gunakan Laravel Horizon. Ia provide dashboard yang cantik untuk monitor queues dan jobs.
  • Learn Livewire – Livewire adalah full-stack framework untuk Laravel yang memudahkan korang buat interactive UI tanpa perlu tulis banyak JavaScript.
  • Gunakan Laravel Telescope – Telescope adalah debugging assistant untuk Laravel. Ia boleh bantu korang monitor requests, exceptions, database queries, dan lain-lain.
  • Optimize For Production – Untuk production, korang perlu optimize Laravel dengan cara caching config, routes, dan views. Korang juga boleh gunakan opcache untuk improve performance.
  • Join Laravel Community – Laravel ada komuniti yang sangat active. Join Laravel Malaysia Facebook group atau Laravel News untuk dapatkan tips dan tricks terkini.

Kesimpulan

Itulah 7 tips Laravel yang korang boleh cuba hari ni juga. Saya tahu mungkin nampak teknikal, tapi korang tak perlu apply semua sekaligus. Mulakan dengan Eloquent dulu sebab ia是最常用 features dalam Laravel. Bila dah selesa, baru explore queues, testing, dan features lain. Insya-Allah, dalam masa beberapa minggu, korang akan nampak perbezaan yang ketara dalam code Laravel korang. Lebih clean, lebih maintainable, dan lebih professional. Jangan lupa share tips ni dengan rakan-rakan developer korang. Kalau korang ada tips Laravel lain yang korang rasa berguna, boleh kongsi di section comments ya! Selamat mencuba dan selamat coding!


Sumber Rujukan:

  • Artikel ini ditulis oleh AI untuk blog haqis.com

Ekosistem Pangkalan Data Moden: Panduan Lengkap Jenis Database dan Kegunaannya

Pengenalan

Dalam era transformasi digital, pangkalan data (database) merupakan teras utama kepada hampir semua sistem maklumat, aplikasi web, aplikasi mudah alih dan platform analitik. Imej di atas memaparkan ekosistem pangkalan data moden yang merangkumi pelbagai jenis database seperti Relational (SQL), NoSQL, Time-Series, Graph dan Distributed Database.

Artikel ini menghuraikan jenis-jenis pangkalan data utama berdasarkan imej tersebut, fungsi setiap database, serta kegunaannya dalam pembangunan sistem moden.

Apakah Itu Pangkalan Data?

Pangkalan data ialah sistem yang digunakan untuk menyimpan, mengurus, memproses dan mendapatkan semula data secara tersusun dan selamat. Pemilihan jenis database yang betul akan memberi kesan besar kepada:

  • Prestasi sistem
  • Keselamatan data
  • Kebolehskalaan (scalability)
  • Kos operasi

Kategori Utama Pangkalan Data dalam Ekosistem Moden

1. Pangkalan Data Relasional (SQL Database)

Pangkalan data jenis ini menggunakan struktur jadual, baris dan lajur serta bahasa SQL.

Contoh utama:

  • MySQL – Stabil, berprestasi tinggi dan popular untuk aplikasi web.
  • MariaDB – Fork MySQL dengan ciri prestasi dan keselamatan yang dipertingkat.
  • PostgreSQL – Database enterprise dengan pematuhan piawaian, extensibility dan integriti data tinggi.
  • SQLite – Database ringan untuk aplikasi mudah alih.
  • CockroachDB – SQL teragih dengan konsistensi tinggi dan kebolehskalaan mendatar.

Sesuai untuk:

  • Sistem kerajaan
  • Sistem hospital
  • Sistem kewangan
  • Aplikasi transaksi tinggi

2. Pangkalan Data NoSQL

NoSQL direka untuk data tidak berstruktur atau separa berstruktur serta skala besar.

Jenis dan contoh:

  • MongoDB – Document-based (JSON-like), fleksibel dan mudah diskala.
  • Cassandra – High availability, sesuai untuk data berskala besar.
  • Couchbase – Gabungan document dan key-value.
  • ScyllaDB – Prestasi tinggi, serasi dengan Cassandra.

Sesuai untuk:

  • Sistem IoT
  • Aplikasi masa nyata
  • Media sosial
  • Data berskala besar (Big Data)

3. Pangkalan Data In-Memory

Redis merupakan contoh utama yang menyimpan data dalam memori.

Fungsi utama:

  • Cache
  • Session management
  • Message broker

Kelebihan:

  • Akses data sangat pantas
  • Mengurangkan beban database utama

4. Pangkalan Data Time-Series

Direka khusus untuk data yang mempunyai elemen masa.

Contoh:

  • InfluxDB – Penyimpanan data sensor, log dan metrik.
  • TimescaleDB – Dibina atas PostgreSQL, sesuai untuk analitik kompleks.

Sesuai untuk:

  • Sistem pemantauan
  • IoT
  • Data suhu, kelembapan, prestasi sistem

5. Pangkalan Data Graph

Neo4j memfokuskan hubungan antara data (nodes dan edges).

Sesuai untuk:

  • Analisis rangkaian
  • Sistem cadangan
  • Hubungan sosial dan organisasi

6. Pangkalan Data Multi-Model dan Big Data

  • ArangoDB – Menyokong graph, document dan key-value.
  • Apache HBase – Database teragih untuk data berskala besar.
  • PrestoDB – Enjin SQL untuk analitik pantas merentasi pelbagai sumber data.

Bagaimana Memilih Database yang Sesuai?

Pemilihan pangkalan data bergantung kepada beberapa faktor utama:

  1. Jenis data (berstruktur / tidak berstruktur)
  2. Skala sistem (kecil, sederhana, besar)
  3. Keperluan prestasi
  4. Keselamatan dan pematuhan
  5. Kos dan kemahiran teknikal pasukan

Tiada satu database yang sesuai untuk semua situasi. Pendekatan moden sering menggunakan gabungan beberapa database (polyglot persistence).

Kepentingan Memahami Ekosistem Pangkalan Data

Imej ini menggambarkan realiti pembangunan sistem hari ini di mana:

  • Cloud computing
  • Integrasi sistem
  • Analitik masa nyata
  • Keselamatan data

menjadi keperluan utama. Pemahaman ekosistem database membantu organisasi membuat keputusan teknologi yang lebih strategik dan mampan.

Kesimpulan

Ekosistem pangkalan data moden sangat luas dan dinamik. Daripada MySQL hingga MongoDB, Redis hingga InfluxDB, setiap database mempunyai peranan tersendiri. Memilih database yang tepat akan meningkatkan kecekapan, prestasi dan kebolehpercayaan sistem.

Artikel ini sesuai dijadikan rujukan untuk:

  • Pentadbir sistem
  • Pembangun aplikasi
  • Pengurus IT
  • Organisasi kerajaan dan swasta

The Rise of AI: Unleashing the Power of Artificial Intelligence

Introduction

Artificial Intelligence (AI) has emerged as a transformative force, revolutionizing industries and reshaping our world. With its exponential growth and advancements, AI has become an integral part of our daily lives, from voice assistants and personalized recommendations to autonomous vehicles and smart cities. In this article, we explore the remarkable rise of AI, its impact on various sectors, and the future possibilities it holds.

Defining AI

Artificial Intelligence refers to the development of computer systems capable of performing tasks that typically require human intelligence. It encompasses a range of technologies, including machine learning, natural language processing, computer vision, and robotics. By analyzing vast amounts of data and learning from patterns, AI systems can make predictions, recognize patterns, and automate complex tasks.

AI in Everyday Life

AI has seamlessly integrated into our daily routines, enhancing our experiences and simplifying tasks. Voice assistants like Siri and Alexa have become household companions, responding to our queries and executing commands. AI algorithms power personalized recommendations on streaming platforms, e-commerce websites, and social media, helping us discover relevant content. Moreover, AI has made its way into healthcare, finance, transportation, and entertainment, augmenting efficiency and decision-making processes.

AI in Industries

a. Healthcare: AI has the potential to revolutionize healthcare by analyzing medical data, diagnosing diseases, and assisting in treatment decisions. It can detect patterns in patient data, predict disease outcomes, and optimize medication regimens. AI-powered robots can also assist in surgeries, reducing human error and improving precision.

b. Finance: The financial industry has embraced AI for fraud detection, algorithmic trading, and risk assessment. AI algorithms can analyze vast amounts of financial data in real-time, identifying anomalies and suspicious patterns. This technology enables quicker, more accurate decision-making and helps prevent fraudulent activities.

c. Transportation: AI is reshaping the transportation sector with autonomous vehicles. Self-driving cars powered by AI algorithms can navigate roads, recognize obstacles, and make real-time decisions. This technology has the potential to reduce accidents, optimize traffic flow, and provide more efficient transportation solutions.

d. Manufacturing: AI-driven automation has transformed the manufacturing industry, improving productivity and reducing costs. Robots equipped with AI capabilities can perform repetitive tasks with precision and efficiency. AI systems can also optimize supply chain management, predicting demand patterns and streamlining inventory management.

Ethical Considerations

As AI becomes more pervasive, it raises ethical concerns that need careful attention. Issues like bias in algorithms, privacy invasion, and job displacement need to be addressed. Developers and policymakers must ensure transparency, accountability, and fairness in AI systems. Regulation frameworks should be in place to protect individuals’ rights and prevent misuse of AI technologies.

The Future of AI

The future of AI holds immense potential. As technology continues to advance, AI systems will become more sophisticated, capable of understanding complex human emotions, reasoning, and creativity. We can expect AI to play a significant role in solving grand challenges like climate change, healthcare accessibility, and sustainable development. Collaboration between humans and AI will enable breakthrough innovations, making our world smarter and more efficient.

Conclusion

The rise of AI has been nothing short of transformative. From its integration into our everyday lives to revolutionizing industries, AI has showcased its capabilities in various domains. As we move forward, it is crucial to harness the power of AI ethically and responsibly, ensuring that its benefits are accessible to all. With continued research, collaboration, and careful consideration of ethical implications, AI will undoubtedly shape a future that is smarter, more efficient, and filled with boundless possibilities.

p/s: This article was generate by ChatGPT

Jomlaunch Edisi Ke-9

Pengenalan

JomLaunch merupakan salah satu acara komuniti yang popular dan sering menyaksikan pelbagai produk dan idea baru dilancarkan melaluinya. Pada 04-08 Oktober 2021 telah berlangsung acara Jomlaunch Edisi Ke-9 yang dianjurkan oleh komuniti Facebook Group JOMWEB. Melalui acara ini, programmers, developers, UI/UX designers, pakar security, dan lain-lain penggiat ICT tanah air berhimpun untuk mengetengahkan projek-projek mereka. Ini semua bagi meraikan bakat dan kepakaran ICT tanah air, dan mengambil peluang untuk kenal mengenali dan belajar daripada satu sama lain.

Seperti edisi sebelum ini, penganjuran Jomlaunch Edisi Ke-9 juga diadakan negara masih lagi berada dalam era pandemik COVID-19. Untuk itu Jomlaunch Edisi Ke-9 diteruskan lagi secara digital melalui aplikasi Airmeet.

Format Acara Jomlaunch Edisi Ke-9

Untuk sesi kali ini, Jomlaunch telah merancang untuk mempelbagaikan aktiviti bagi memeriahkan acara yang diadakan. Bermula dengan sesi pagi iaitu perkongsian  daripada projek terpilih untuk membentangkan projek mereka kepada umum. Kemudian sesi perkongsian ilmu teknikal dan bisnes startup dan ICT daripada pakar dan mereka yang berpengalaman dari dalam dan luar negara pada sebelah petang dan malamnya. Tidak lupa juga sesi networking untuk memberi peluang kepada peserta untuk berkongsi diskusi mengenali co-founder bisnes, klien, kenalan dan pelbagai lagi.

Seperti edisi yang diadakan sebelum ini, setiap sesi pembentangan projek terpilih akan diakhiri dengan soalan kuiz kepada peserta dan merebut hadiah menarik yang ditawarkan. Istimewa pada edisi kali ini, pencarian telur emas (Gold Egg) diperkenalkan bagi membolehkan peserta menambah mata QR Code yang juga melayakkan peserta menerima kategori hadiah istimewa.

Projek-projek Yang Dibentangkan

Jomlaunch Edisi Ke-9 2021 kali ini telah menampilkan kategori baru iaitu untuk penuntut ICT membentangkan projek-projek mereka. Kategori penuntut ICT ini ditaja oleh RunCloud. Setiap kali penganjuran Jomlaunch diadakan, pasti akan ada projek-projek yang mempunyai nilai dan impak yang besar.

Antara projek-projek yang dibentangkan sepanjang 5 hari acara ini diadakan ialah:

  1. SecurePay oleh Amir Haris – SecurePay is the official payment platform for Jomlaunch which using security feature (ISO/IEC 15408)
  2. Workbeat oleh Samantha Liew – An establish digitalized HR Management which using PHP, CakePHP and jQuery in the development
  3. eKV oleh Muhammad Hanis Irfan – A centralized system for Kolej Vokasional student. Invented to ease the access for Lecturers and Student, and integrating the different features into one easy access portal
  4. TutorXcess oleh Ziyad Rashid – A one stop solution for Tutor and Class booking. This will simplify the process in choosing tutors based on user’s preferences. It is also a platform for tutors to promote their class and teaching expertise
  5. EasyDrop oleh Siti Nabilah – A system that applied a contactless delivery approach for users. No more hassle in receiving the parcel ie: waiting for delivery. Just drop the parcel into Easy Drop and there will be tracking by SMS platform
  6. Planet Mahir oleh Ferdy Fauzi – platform perkongsian kemahiran dalam talian berbentuk Video On Demand (VOD) pertama di dunia yang menggunakan Bahasa Melayu dalam penyampaian di mana ia boleh diakses melalui laman web dan aplikasi mudah alih
  7. IBEDS oleh Dr. Alia Nadhirah – Integrated Bed Entry and Database System
  8. GetOTP oleh Fathur Rahman – With just a simple API call, you can implement your one time password authentication flow without worrying about retry or multiple authentication channel logic
  9. BDxAcademy oleh Khairul Fikri – Membantu pelajar untuk membina projek dan mendalami penggunaan Arduino dan Raspberry Pi
  10. AIRDrone oleh Said Zalehan Said Johan – The drone that powered by an autonomous system by using Python language. The drone build from manual control to the drone that control by itself
  11. C-HAT oleh Raja Hafiz – A mobile application for Ampang Hospital services, where their tagline is “Do not come to the hospital”
  12. ToyyibGold oleh Nurina Amira Mohd Isham – A platform to provide online physical gold trading opportunities
  13. Juno oleh Ariff Azraai – Open source intelligence data hub. Help people to analyze current affairs
  14. Stafy oleh Erymuzuan – A Human Resource Management System for SMEs and SMEs that is almost free to use
  15. Dynanity oleh Said Nizamuddin Nadim – eunification Literacy For Dynamic Evaluation With Artificial Intelligence project, a student final year project (FYP) organizing and judging system
  16. PetotumVET oleh Shifa Azahar – A management system for veterinary clinics
  17. Playlab Classroom oleh Ridzwan Azhar – An interactive gamification learning platform for kids (3 – 7 years old)
  18. Lapasar Wholesale oleh Farhan Syah – Lapasar Wholesale aims to improve the supply chain process of SMEs mainly in the Restaurant and Groceries by providing a platform to buy supplies and on-demand supply logistic
  19. Teamfantasia oleh Shahrir Bahar – The Malaysia Super League (Liga Super Malaysia) is the men’s top professional football division of the Malaysia football league system
  20. KUIS E-Voting System oleh Luqman Haqeem – KUIS E-Voting System project
  21. Parkir Pintar Kecerdasan Buatan oleh Hamizi Jaminan – Artificial Intelligence Smart Parking project, which is an intelligent parking management system (using AI)
  22. Open Petro oleh Muhammad Farhan Helmy – Petrol Station Automation System with IoT Pump
  23. TropikaAG oleh Farid Jasni – Democratizing AI, machine learning and tech to every farmers. A garden management system built using .Net
  24. Basetribes oleh Ramzan Rozali – WordPress CRM plugin that help to identify your top 20 customers and make them repeat orders by contacting them via whatsapp
  25. Stencil oleh Shulhi Sapli – Stencil is an image generation API that automatically creates share images for your content from custom templates

Seperti edit sebelum ini, sesi pembentangan Jomlaunch Asia Conference edisi ke-9 ini juga tidak kurang menariknya oleh speaker-speaker jemputan berikut:

  1.  Build your High Concurrency App with PHP and Swoole oleh Albert Chen -How to build high concurrency app with PHP and Swoole? A coroutine-based asynchronous PHP programming framework
  2. StoreApp – One Platform, Multiple Ways To Sell oleh Tan Yin See – A comprehensive app that aims to make the store management experience easier and efficient for consumers
  3. The Freelancer’s Guide to Building a Sustainable Digital Business oleh Nathan Onn – Sharing about the freelance framework ‘One Coder Agency: The Freelancer’s Guide to Building a Sustainable Digital Business’
  4. Hyper Freelance oleh Ben Issen – Discovered more on the bright side of freelancing. Also introduced the Hyper Freelance model that consist of three activities: freelancing, teaching and product building
  5. Let it Crash! An approach on Building Reliable Services oleh Hatta Zainal – Sharing the ‘Let it Crash’ concept using Erlang technology and how the approach can be used in app development
  6. NFT’s Future Potential oleh Irsyad Saidin – NFT’s Future Potential from a variety of technology such as Smart Contract, Solidity, including the use cases, and much more
  7. Fundamentals of Application Performance Tuning oleh Radzi Tajuddin – A sharing session about the ‘Fundamentals of Application Tuning’
  8. How to Build an Audience-Driven Business oleh Arvid Kahl – The Bootstrap Founder sharing the business ideas generation which derive from the audience perspective

Pada sesi sebelah malam, perkongsian yang hebat daripada pembentang-pembentang berikut:

  1. Kisah Bermulanya Noor App – Izzairi Yamin – Some helpful hacks for developer and tips for startup, apart from the development journey of The Noor App
  2. Digital Marketing oleh Syahmi Sadan – How to market the products through three structures of FB Ads which are Campaign, Ad Set and Ad?
  3. How to DIY Your Dream Career? oleh Safinah Mohd Zin – How to figure out either my salary is reasonable with my position and skillset? How to DIY my resume with the right content?
  4. DevOps: Pengaruhnya Kepada Pengurusan Projek oleh Harisfazillah Jamel dan Fazli Azran – What is the role of DevOps in project management? Who is responsible in DevOps? How to adopt DevOps in project management?
  5. Kisah Bermulanya Baituljannah oleh Muhammad Azrain – One of the main Jomlaunch 2021 supporters. A digital matchmaking platform for Muslims which launched in March 2018. How does Baituljannah come into the picture in the first place?

Pandangan peribadi saya, penganjuran Jomlaunch Edisi Ke-9 kali ini telah mencapai sasarannya kerana tempoh 5 hari yang dirancang telah diisi dengan penuh perkongsian ilmu dan teknologi ICT daripada pembentang-pembentang yang hebat dan telah mempunyai nama dalam industri ICT di Malaysia khususnya. Ucapan terima kasih saya kepada tuan Diktator Dino Iszuddin yang telah bertungkus lumus bersama pasukkan bagi menjayakan program ini. Dan tidak lupa juga kepada semua sponsor serta mereka yang terlibat secara langsung atau tidak langsung dalam acara sebegini.

Harapan saya agar acara sebegini diteruskan lagi pada masa-masa akan datang dengan menjemput mana-mana VVIP yang dalam bidang berkaitan agar program seperti ini mendapat perhatian pihak yang lebih sewajarnya untuk mengangkat industri ICT tanah air dengan menggunakan kemampuan dan kepakaran anak Malaysia.

PHP 7.4 Upgrade Notes

PHP 7.4 Upgrade Notes

1. Backward Incompatible Changes
2. New Features
3. Changes in SAPI modules
4. Deprecated Functionality
5. Changed Functions
6. New Functions
7. New Classes and Interfaces
8. Removed Extensions and SAPIs
9. Other Changes to Extensions
10. New Global Constants
11. Changes to INI File Handling
12. Windows Support
13. Migration to pkg-config
14. Other Changes
15. Performance Improvements

========================================
1. Backward Incompatible Changes
========================================

– Core:
. Trying to use values of type null, bool, int, float or resource as an
array (such as $null[“key”]) will now generate a notice. This does not
affect array accesses performed by list().
RFC: https://wiki.php.net/rfc/notice-for-non-valid-array-container
. get_declared_classes() no longer returns anonymous classes that haven’t
been instantiated yet.
. “fn” is now a reserved keyword. In particular it can no longer be used as a
function or class name. It can still be used as a method or class constant
name.
. Passing the result of a (non-reference) list() assignment by reference is
consistently disallowed now. Previously this worked if the right hand side
was a simple (CV) variable and did not occur as part of the list().
. `<?php` at the end of the file (without trailing newline) will now be
interpreted as an opening PHP tag. Previously it was interpreted either as
`<? php` and resulted in a syntax error (with short_open_tag=1) or was
interpreted as a literal `<?php` string (with short_open_tag=0).
. When using include/require on a stream, stream_set_option() will be invoked
with the STREAM_OPTION_READ_BUFFER option. Custom stream wrapper
implementations may need to implement the stream_set_option() method to
avoid a warning (always returning false is a sufficient implementation).

– BCMath:
. BCMath functions will now warn if a non well-formed number is passed, such
as “32foo”. The argument will be interpreted as zero (as before).

– Curl:
. Attempting to serialize a CURLFile class will now generate an exception.
Previously the exception was only thrown on unserialization.
. Using CURLPIPE_HTTP1 is deprecated, and is no longer supported as of cURL
7.62.0.
. The $version parameter of curl_version() is deprecated. If any value not
equal to the default CURLVERSION_NOW is passed, a warning is raised and the
parameter is ignored.

– Date:
. Calling var_dump() or similar on a DateTime(Immutable) instance will no
longer leave behind accessible properties on the object.
. Comparison of DateInterval objects (using ==, < and so on) will now generate
a warning and always return false. Previously all DateInterval objects were
considered equal, unless they had properties.

– Intl:
. The default parameter value of idn_to_ascii() and idn_to_utf8() is now
INTL_IDNA_VARIANT_UTS46 instead of the deprecated INTL_IDNA_VARIANT_2003.

– MySQLi:
. The embedded server functionality has been removed. It was broken since
at least PHP 7.0.
. The undocumented mysqli::$stat property has been removed in favor of
mysqli::stat().

– Openssl:
. The openssl_random_pseudo_bytes() function will now throw an exception in
error situations, similar to random_bytes(). In particular, an Error is
thrown if the number of requested bytes is less than *or equal to* zero,
and an Exception is thrown if sufficient randomness cannot be gathered.
The $crypto_strong output argument is guaranteed to always be true if the
function does not throw, so explicitly checking it is not necessary.
RFC: http://php.net/manual/de/function.openssl-random-pseudo-bytes.php

– PCRE:
. When PREG_UNMATCHED_AS_NULL mode is used, trailing unmatched capturing
groups will now also be set to null (or [null, -1] if offset capture is
enabled). This means that the size of the $matches will always be the same.

– PEAR:
. Installation of PEAR (including PECL) is no longer enabled by default. It
can be explicitly enabled using –with-pear. This option is deprecated and
may be removed in the future.

– PDO:
. Attempting to serialize a PDO or PDOStatement instance will now generate
an Exception rather than a PDOException, consistent with other internal
classes which do not support serialization.

– Reflection:
. Reflection objects will now generate an exception if an attempt is made
to serialize them. Serialization for reflection objects was never
supported and resulted in corrupted reflection objects. It has been
explicitly prohibited now.

– SPL:
. Calling get_object_vars() on an ArrayObject instance will now always return
the properties of the ArrayObject itself (or a subclass). Previously it
returned the values of the wrapped array/object unless the STD_PROP_LIST
flag was specified. Other affected operations are:

* ReflectionObject::getProperties()
* reset(), current(), etc. Use Iterator methods instead.
* Potentially others working on object properties as a list.

(array) casts are *not* affected. They will continue to return either the
wrapped array, or the ArrayObject properties, depending on whether the
STD_PROP_LIST flag is used.
. SplPriorityQueue::setExtractFlags() will throw an exception if zero is
passed. Previously this would generate a recoverable fatal error on the
next extraction operation.
. ArrayObject, ArrayIterator, SplDoublyLinkedList and SplObjectStorage now
support the __serialize() + __unserialize() mechanism in addition to the
Serializable interface. This means that serialization payloads created on
older PHP versions can still be unserialized, but new payloads created by
PHP 7.4 will not be understood by older versions.

– Standard:
. The “o” serialization format has been removed. As it is never produced by
PHP, this may only break unserialization of manually crafted strings.
. Password hashing algorithm identifiers are now nullable strings rather
than integers.

* PASSWORD_DEFAULT was int 1; now is null
* PASSWORD_BCRYPT was int 1; now is string ‘2y’
* PASSWORD_ARGON2I was int 2; now is string ‘argon2i’
* PASSWORD_ARGON2ID was int 3; now is string ‘argon2id’

Applications correctly using the constants PASSWORD_DEFAULT,
PASSWORD_BCRYPT, PASSWORD_ARGON2I, and PASSWORD_ARGON2ID will continue to
function correctly.
. htmlentities() will now throw a notice (instead of a strict standards
warning) if it is used with an encoding for which only basic entity
substitution is supported, in which case it is equivalent to
htmlspecialchars().
. fread() and fwrite() will now return false if the operation failed.
Previously an empty string or 0 was returned. EAGAIN/EWOULDBLOCK are not
considered failures.
. fread() and fwrite() on plain files will now throw a notice on failure,
such as when trying to write to a read-only file resource.

– Tokenizer:
. token_get_all() will now emit a T_BAD_CHARACTER token for unexpected
characters instead of leaving behind holes in the token stream.

========================================
2. New Features
========================================

– Core:
. Added support for typed properties. For example:

class User {
public int $id;
public string $name;
}

This will enforce that $user->id can only be assigned integers and
$user->name can only be assigned strings. For more information see the
RFC: https://wiki.php.net/rfc/typed_properties_v2

. Added support for arrow functions with implicit by-value scope binding.
For example:

$factor = 10;
$nums = array_map(fn($num) => $num * $factor, $nums);

RFC: https://wiki.php.net/rfc/arrow_functions_v2

. Added support for limited return type covariance and argument type
contravariance. The following code will now work:

class A {}
class B extends A {}

class Producer {
public function method(): A {}
}
class ChildProducer extends Producer {
public function method(): B {}
}

Full variance support is only available if autoloading is used. Inside a
single file only non-cyclic type references are possible, because all
classes need to be available before they are referenced.
RFC: https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters

. Added support for coalesce assign (??=) operator. For example:

$array[‘key’] ??= computeDefault();
// is roughly equivalent to
if (!isset($array[‘key’])) {
$array[‘key’] = computeDefault();
}

RFC: https://wiki.php.net/rfc/null_coalesce_equal_operator

. Added support for unpacking inside arrays. For example:

$arr1 = [3, 4];
$arr2 = [1, 2, …$arr1, 5];
// $arr2 == [1, 2, 3, 4, 5]

RFC: https://wiki.php.net/rfc/spread_operator_for_array

. Added support for underscore separators in numeric literals. Some examples:

6.674_083e-11; // float
299_792_458; // decimal
0xCAFE_F00D; // hexadecimal
0b0101_1111; // binary

RFC: https://wiki.php.net/rfc/numeric_literal_separator

. Support for WeakReferences has been added.
RFC: https://wiki.php.net/rfc/weakrefs

. Throwing exceptions from __toString() is now permitted. Previously this
resulted in a fatal error. Existing recoverable fatals in string conversions
have been converted to Error exceptions.
RFC: https://wiki.php.net/rfc/tostring_exceptions

– CURL:
. CURLFile now supports stream wrappers in addition to plain file names, if
the extension has been built against libcurl >= 7.56.0. The streams may
need to be seekable.

– Filter:
. The FILTER_VALIDATE_FLOAT filter now supports the min_range and max_range
options, with the same semantics as FILTER_VALIDATE_INT.

– FFI:
. A new extension which provides a simple way to call native functions, access
native variables and create/access data structures defined in C libraries.
RFC: https://wiki.php.net/rfc/ffi

– GD:
. Added the “scatter” image filter (IMG_FILTER_SCATTER) to apply a scatter
filter to images. This filter has the following prototype:

imagefilter($im, IMG_FILTER_SCATTER, int $sub, int $plus, array $colors = []);

The $colors array can be populated with a set of indexed colors to
apply the scatter pixel shifting on.

Note, the result of this filter is always random.

– Hash:
. Added “crc32c” hash using Castagnoli’s polynomial. This crc32 variant is
used by storage systems, such as iSCSI, SCTP, Btrfs and ext4.

– Mbstring:
. Added mb_str_split() function, which provides the same functionality as
str_split(), but operating on code points rather than bytes.
RFC: https://wiki.php.net/rfc/mb_str_split

– OPcache:
. Support for preloading code has been added.
RFC: https://wiki.php.net/rfc/preload

– PCRE:
. The preg_replace_callback() and preg_replace_callback_array() functions now
accept an additional $flags argument, with support for the
PREG_OFFSET_CAPTURE and PREG_UNMATCHED_AS_NULL flags. This influences the
format of the matches array passed to to the callback function.

– PDO:
. The username and password can now be specified as part of the PDO DSN for
the mysql, mssql, sybase, dblib, firebird and oci drivers. Previously this
was only supported by the pgsql driver. If a username/password is specified
both in the constructor and the DSN, the constructor takes precedence.

new PDO(“mysql:host=xxx;port=xxx;dbname=xxx;user=xxx;password=xxx”);

– PDO_OCI:
. PDOStatement::getColumnMeta() is now available

– PDO_SQLite:
. PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT) allows
checking whether the statement is read-only, i.e. if it doesn’t modify
the database.
. PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true) enables the
use of SQLite3 extended result codes in errorInfo().

– SQLite3:
. Added SQLite3::lastExtendedErrorCode() to fetch the last extended result
code.
. Added SQLite3::enableExtendedResultCodes($enable = true), which will make
SQLite3::lastErrorCode() return extended result codes.

– Standard:
. strip_tags() now also accepts an array of allowed tags: Instead of
strip_tags($str, ‘<a><p>’) you can now write strip_tags($str, [‘a’, ‘p’]).

. A new mechanism for custom object serialization has been added, which
uses two new magic methods:

// Returns array containing all the necessary state of the object.
public function __serialize(): array;

// Restores the object state from the given data array.
public function __unserialize(array $data): void;

The new serialization mechanism supersedes the Serializable interface,
which will be deprecated in the future.

RFC: https://wiki.php.net/rfc/custom_object_serialization

. array_merge() and array_merge_recursive() may now be called without any
arguments, in which case they will return an empty array. This is useful
in conjunction with the spread operator, e.g. array_merge(…$arrays).

. proc_open() now accepts an array instead of a string for the command. In
this case the process will be opened directly (without going through a
shell) and PHP will take care of any necessary argument escaping.

proc_open([‘php’, ‘-r’, ‘echo “Hello World\n”;’], $descriptors, $pipes);

. proc_open() now supports “redirect” and “null” descriptors. For example:

// Like 2>&1 on the shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘redirect’, 1]], $pipes);
// Like 2>/dev/null or 2>nul on the shell
proc_open($cmd, [1 => [‘pipe’, ‘w’], 2 => [‘null’]], $pipes);

. password_hash() has argon2i(d) implementations from ext/sodium when PHP is
built without libargon.

RFC: https://wiki.php.net/rfc/sodium.argon.hash

========================================
3. Changes in SAPI modules
========================================

========================================
4. Deprecated Functionality
========================================

– Core:
. Nesting ternary operators without explicit parentheses is deprecated:

// Code like
$a ? $b : $c ? $d : $e
// should be replaced by (current interpretation)
($a ? $b : $c) ? $d : $e
// or (likely intended interpretation)
$a ? $b : ($c ? $d : $e)

RFC: https://wiki.php.net/rfc/ternary_associativity
. The array and string offset access syntax using curly braces is deprecated.
Use $str[$idx] instead of $str{$idx}.
RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access
. The (real) cast is deprecated, use (float) instead.
. Unbinding $this of a non-static method through a combination of
ReflectionMethod::getClosure() and closure rebinding is deprecated. Doing
so is equivalent to calling a non-static method statically, which has been
deprecated since PHP 7.0.
. Unbinding $this of a non-static closure is deprecated.
. Using “parent” inside a class without a parent is deprecated, and will throw
a compile-time error in the future. Currently an error will only be
generated if/when the parent is accessed at run-time.
. The allow_url_include ini directive is deprecated. Enabling it will generate
a deprecation notice at startup.

– COM:
. Importing type libraries with case-insensitive constant registering has been
deprecated.

– Filter:
. FILTER_SANITIZE_MAGIC_QUOTES is deprecated, use FILTER_SANITIZE_ADD_SLASHES
instead.

– Mbstring:
. Passing a non-string pattern to mb_ereg_replace() is deprecated. Currently
non-string patterns are interpreted as ASCII codepoints. In PHP 8 the
pattern will be interpreted as a string instead.
. Passing the encoding as 3rd parameter to mb_strrpos() is deprecated. Instead
pass a 0 offset and encoding as 4th parameter.

– LDAP:
. ldap_control_paged_result_response and ldap_control_paged_result are
deprecated. Pagination controls can be sent along with ldap_search instead.

– Reflection:
. Calls to ReflectionType::__toString() now generate a deprecation notice.
This method has been deprecated in favor of ReflectionNamedType::getName()
in the documentation since PHP 7.1, but did not throw a deprecation notice
for technical reasons.
. The export() methods on all Reflection classes are deprecated. Construct a
Reflection object and convert it to string instead:

// ReflectionClass::export(Foo::class, false) is:
echo new ReflectionClass(Foo::class), “\n”;
// $str = ReflectionClass::export(Foo::class, true) is:
$str = (string) new ReflectionClass(Foo::class);

– Standard:
. Passing invalid characters to ”base_convert()”, ”bindec()”, ”octdec()”
and ”hexdec()” will now generate a deprecation notice. The result will
still be computed as if the invalid characters did not exist. Leading and
trailing whitespace, as well as prefixes of type 0x (depending on base)
continue to be allowed.
. Using array_key_exists() on objects is deprecated. Instead either isset()
or property_exists() should be used.
. The is_real() function is deprecated, use is_float() instead.
. The get_magic_quotes_gpc() and get_magic_quotes_runtime() functions are
deprecated. They always return false.
. The hebrevc() function is deprecated. It can be replaced with
nl2br(hebrev($str)), or preferably the use of Unicode RTL support.
. The convert_cyr_string() function is deprecated. It can be replaced by one
of mb_convert_string(), iconv() or UConverter.
. The money_format() function is deprecated. It can be replaced by the
intl NumberFormatter functionality.
. The ezmlm_hash() function is deprecated.
. The restore_include_path() function is deprecated. It can be replaced by
ini_restore(‘include_path’).
. Passing parameters to implode() in reverse order is deprecated, use
implode($glue, $parts) instead of implode($parts, $glue).

========================================
5. Changed Functions
========================================

– SPL:
. SplFileObject::fputcsv(), ::fgetcsv() and ::setCsvControl() now accept an
empty string as $escape argument, which disables the proprietary PHP
escaping mechanism. SplFileObject::getCsvControl() now may also return an
empty string for the third array element, accordingly.

– Standard:
. fputcsv() and fgetcsv() now accept an empty string as $escape argument,
which disables the proprietary PHP escaping mechanism. The behavior of
str_getcsv() has been adjusted accordingly (formerly, an empty string was
identical to using the default).
. proc_open() on Windows can be passed a “create_process_group” option. It
is required, if the child process is supposed to handle CTRL events.
. password_hash() now accepts nullable string and int as $algo argument.
. password_needs_rehash() now accepts nullable string and int as $algo
argument.

========================================
6. New Functions
========================================

– Core:
. Added get_mangled_object_vars($object) function, which returns the mangled
object properties. It returns the same result as (array) $object, with the
exception that it ignores overloaded array casts, such as used by
ArrayObject.

– GD:
. Added imagecreatefromtga() function, which allows reading images in TGA
format. TGA support is now also indicated by gd_info() and imagetypes().
Note that TGA images are not recognized by imagecreatefromstring() and
getimagesize().

– OpenSSL:
. Added openssl_x509_verify(mixed cert, mixed key) function that verifies the
signature of the certificate using a public key. A wrapper around the
OpenSSL’s X509_verify() function.
See <https://github.com/php/php-src/pull/3624>.

– Pcntl:
. Added bool pcntl_unshare(int flags) function which allows dissociating
parts of the process execution context which are currently being shared with
other processes. Explicitly, it allows you to unshare the mount, IPC, UTS,
network, PID, user and cgroup namespaces.

– SQLite3:
. Added SQLite3Stmt::getSQL() to retrieve the SQL of the statement. If true is
passed as $expanded argument, query parameters will be replaced in the
return value by their currently bound value, if libsqlite ≥ 3.14 is used.
. Added SQLite3::backup() to create database backups via the SQLite3 online
backup API.

– Standard
. bool sapi_windows_set_ctrl_handler(callable handler, [, bool add = true]) –
set or remove a handler function upon receiving a CTRL event. The handler
function is expected to have this signature: “function handler(int $event)”.
. bool sapi_windows_generate_ctrl_event(int type, int pid) – send a CTRL event
to another process.
. array password_algos() – return a complete list of all registered password
hashing algorithms. For more details see the RFC:
https://wiki.php.net/rfc/password_registry

========================================
7. New Classes and Interfaces
========================================

– Reflection:
. A new ReflectionReference class has been added, which allows detecting
references and comparing them for identity. For more details see the RFC:
https://wiki.php.net/rfc/reference_reflection

========================================
8. Removed Extensions and SAPIs
========================================

– Interbase:
. The interbase extension has been moved to PECL. Access to an InterBase
and/or FireBird based database is still available with the PDO_Firebird
extension. For more details see the RFC:
https://wiki.php.net/rfc/deprecate-and-remove-ext-interbase

– Recode:
. The recode extension has been moved to PECL. For character set/encoding
conversion the iconv or mbstring extensions could be used instead.
RFC: https://wiki.php.net/rfc/unbundle_recode

– WDDX:
. The WDDX extension has been deprecated and moved to PECL.
RFC: https://wiki.php.net/rfc/deprecate-and-remove-ext-wddx

========================================
9. Other Changes to Extensions
========================================

– GD:
. The behavior of imagecropauto() in the bundled libgd has been synced with
that of system libgd:
* IMG_CROP_DEFAULT is no longer falling back to IMG_CROP_SIDES
* Threshold-cropping now uses the algorithm of system libgd
. The default $mode parameter of imagecropauto() has been changed to
IMG_CROP_DEFAULT; passing -1 is now deprecated.
. imagescale() now supports aspect ratio preserving scaling to a fixed height
by passing -1 as $new_width.

– Filter:
. The filter extension no longer exposes –with-pcre-dir for Unix builds and
can now reliably be built as shared when using ./configure once more.

– Hash:
. The hash extension cannot be disabled anymore and is always an integral part
of any PHP build, similar to the date extension.

– Intl:
. The Intl extension now requires at least ICU 50.1.
. ResourceBundle now implements Countable.

– Libxml:
. All libxml based extensions now require libxml 2.7.6 or newer.

– Mbstring:
. The oniguruma library is no longer bundled with PHP, instead libonig needs
to be available on the system. Alternatively –disable-mbregex can be used
to disable the mbregex component.

– OPcache:
. The –disable-opcache-file|–enable-opcache-file configure options have been
removed in favor of the opcache.file_cache INI directive.

– PDO:
. It is now possible to escape question marks in SQL queries to avoid them
being interpreted as parameter placeholders. Writing “??” allows sending
a single question mark to the database and e.g. use the PostgreSQL JSON key
exists “?” operator. For more details see the RFC:
https://wiki.php.net/rfc/pdo_escape_placeholders

– Reflection:
. Numeric value of class, property, function and constant modifiers was
changed. Don’t filter methods and properties through
ReflectionClass::getMethods() and ReflectionClass::getProperties(), or test
results of Reflection…::getModifiers(), using hard-coded numeric values.
Use corresponding constants instead (e.g. ReflectionMethod::IS_PUBLIC).

– SimpleXML:
. SimpleXMLElement now implements Countable.

– SQLite3:
. The bundled libsqlite has been removed. To build the SQLite3 extension a
system libsqlite3 ≥ 3.7.4 is now required. To build the PDO_SQLite extension
a system libsqlite3 ≥ 3.5.0 is now required.
. (Un)serialization of SQLite3, SQLite3Stmt and SQLite3Result is now
explicitly forbidden. Formerly, serialization of instances of these classes
was possible, but unserialization yielded unusable objects.
. The @param notation can now also be used to denote SQL query parameters.

– Zip:
. The bundled libzip library has been removed. A system libzip >= 0.11 is now
necessary to build the extension.

========================================
10. New Global Constants
========================================

– Mbstring:
. MB_ONIGURUMA_VERSION specifies the version of the oniguruma library against
which mbregex has been built.

– Socket:
. Added FreeBSD-specific socket options:
. SO_LABEL
. SO_PEERLABEL
. SO_LISTENQLIMIT
. SO_LISTENQLEN
. SO_USER_COOKIE

– Standard:
. PHP_WINDOWS_EVENT_CTRL_C
. PHP_WINDOWS_EVENT_CTRL_BREAK

– Tidy:
. TIDY_TAG_ARTICLE
. TIDY_TAG_ASIDE
. TIDY_TAG_AUDIO
. TIDY_TAG_BDI
. TIDY_TAG_CANVAS
. TIDY_TAG_COMMAND
. TIDY_TAG_DATALIST
. TIDY_TAG_DETAILS
. TIDY_TAG_DIALOG
. TIDY_TAG_FIGCAPTION
. TIDY_TAG_FIGURE
. TIDY_TAG_FOOTER
. TIDY_TAG_HEADER
. TIDY_TAG_HGROUP
. TIDY_TAG_MAIN
. TIDY_TAG_MARK
. TIDY_TAG_MENUITEM
. TIDY_TAG_METER
. TIDY_TAG_NAV
. TIDY_TAG_OUTPUT
. TIDY_TAG_PROGRESS
. TIDY_TAG_SECTION
. TIDY_TAG_SOURCE
. TIDY_TAG_SUMMARY
. TIDY_TAG_TEMPLATE
. TIDY_TAG_TIME
. TIDY_TAG_TRACK
. TIDY_TAG_VIDEO

========================================
11. Changes to INI File Handling
========================================

– zend.exception_ignore_args
. New INI directive to include or exclude arguments from stack traces
generated for exceptions.

========================================
12. Windows Support
========================================

– stat:
. The stat implementation has been refactored.
– An inode number is delivered and is based on the NTFS file index.
– The device number is now based on the volume serial number.

Note that both values are derived from the system and provided as is on 64-bit
systems. On 32-bit systems, these values might overflow the 32-bit integer in
PHP, so they’re fake.

– CTRL+C and CTRL+BREAK on console can be caught by setting a handler function
with sapi_windows_set_ctrl_handler().

– configure now regards additional CFLAGS and LDFLAGS set as environment
variables.

– OPcache now supports an arbitrary amount of separate caches per user via the
the INI directive opcache.cache_id. All processes with the same cache ID and
user share an OPcache instance.

========================================
13. Migration to pkg-config
========================================

A number of extensions have been migrated to exclusively use pkg-config for the
detection of library dependencies. Generally, this means that instead of using
–with-foo-dir=DIR or similar only –with-foo is used. Custom library paths can
be specified either by adding additional directories to PKG_CONFIG_PATH or by
explicitly specifying compilation options through FOO_CFLAGS and FOO_LIBS.

The following extensions and SAPIs are affected:

– Curl:
. –with-curl no longer accepts a directory.

– Enchant:
. –with-enchant no longer accepts a directory.

– FPM:
. –with-fpm-systemd now uses only pkg-config for libsystem checks. The
libsystemd minimum required version is 209.

– GD:
. –with-gd becomes –enable-gd (whether to enable the extension at all) and
–with-external-gd (to opt into using an external libgd, rather than the
bundled one).
. –with-png-dir has been removed. libpng is required.
. –with-zlib-dir has been removed. zlib is required.
. –with-freetype-dir becomes –with-freetype.
. –with-jpeg-dir becomes –with-jpeg.
. –with-webp-dir becomes –with-webp.
. –with-xpm-dir becomes –with-xpm.

– IMAP:
. –with-kerberos no longer accepts a directory.

– Intl:
. –with-icu-dir has been removed. If –enable-intl is passed, then libicu is
always required.

– Ldap:
. –with-ldap-sasl no longer accepts a directory.

– Libxml:
. –with-libxml-dir has been removed.
. –enable-libxml becomes –with-libxml.
. –with-libexpat-dir has been renamed to –with-expat and no longer accepts a
directory.

– LiteSpeed:
. –with-litespeed becomes –enable-litespeed.

– Mbstring:
. –with-onig has been removed. Unless –disable-mbregex has been passed,
libonig is required.

– ODBC:
. –with-iodbc no longer accepts a directory.
. –with-unixODBC without a directory now uses pkg-config (preferred).
Directory is still accepted for old versions without libodbc.pc.

– OpenSSL:
. –with-openssl no longer accepts a directory.
. –with-kerberos no longer accepts a directory.

– PCRE:
. –with-pcre-regex has been removed. Instead –with-external-pcre is provided
to opt into using an external PCRE library, rather than the bundled one.

– PDO_SQLite:
. –with-pdo-sqlite no longer accepts a directory.

– Readline:
. –with-libedit no longer accepts a directory.

– Sodium:
. –with-sodium no longer accepts a directory.

– SQLite3:
. –with-sqlite3 no longer accepts a directory.

– XSL:
. –with-xsl no longer accepts a directory.

– Zip:
. –with-libzip has been removed.
. –enable-zip becomes –with-zip.

========================================
14. Other Changes
========================================

========================================
15. Performance Improvements
========================================

– Core:
. A specialized VM opcode for the array_key_exists() function has been added,
which improves performance of this function if it can be statically
resolved. In namespaced code, this may require writing \array_key_exists()
or explicitly importing the function.

– PCRE:
. When preg_match() in UTF-8 mode (“u” modifier) is repeatedly called on the
same string (but possibly different offsets), it will only be checked for
UTF-8 validity once.

Referrence: PHP.Net