Apa Yang Perlu Ditukar Masa Servis Kereta

Maklumat ini berguna untuk semua orang yang ingin melakukan car maintenance dengan lebih baik. Jadi saya post di sini agar senang untuk dibuat rujukan pada masa akan datang

Apa yang perlu ditukar masa servis kereta.

1. Minyak hitam.
Minyak hitam yg bukan sintetik tu – setiap 5,000km atau 3 bulan whichever is earlier.
Kalu yg sintetik – mungkin 7,500km atau 10,000km.

2. filter – sama seperti minyak enjin.
Minyak mineral biasa – 5000km
Minyak Synthetic – 7500km hingga 10000 km
Dalam ertikata lain, bila tukar minyak enjin tu, maka tukar juga la filter minyak tu sekali (oil filter)

3. spark plug – 20,000 km ikut schedule maintenance book!
Tapi kau boleh pakai sampai 30k-40k takde hal…benda ni bukan critical sangat! Tapi kalau dah lebih 40k tak tukar, dia nya electrode pun dah nipis, elok tukar aje…Harga sekitar Rm20-25 untuk 4 biji…

4. bateri kereta – 18 bulan hingga 2 tahun, terpulang pada cara penggunaan…kalau kita selalu topup airsuling tu, ianya boleh tahan sampai 2 tahun…kalau selalu lupa topup dan selalu kering…6 bulan pun bateri boleh kong!

Free maintenance battery lain pulak ceritanya…tak payah top up air , harga lebih mahal dari bateri biasa. Bila beli bateri, jangan main hentam aje, ini kerana di Malaysia banyak barang tipu…so , beli bateri dari jenama yg boleh dipercayai… BOSCH, CENTURY… tapi ada juga jenama yang tak terkenal tapi elok!

Aku ada kawan dekat Puchong keje kat warehouse distribute battery ke kedai kedai spareparts…dia yang bagitahu ilmu kat aku camner nak kenal bateri baik dengan yang tak baik! Bateriyg baik biasanya lebih berat dari bateri yang kurang baik ( compare bateri tersebut dalam kategori yang sama..kalau NS50 tu kau kena compare dengan NS50 dari jenama yg lagi satu! Kalau kancil tak silap aku pakai NS40 atau NS40L..begitu la citernya!

5. timing belt – 60,000km untuk kereta proton wira,saga. WAJA bole tahan sampai90,000km dan Honda CRV tahan sampai 160,000km. Jadi timing belt ni ikut jenis kereta. Banyak orang tak tahu, depa sampai aje 60,000km terus tukar tak kira la diapakai apa keretapun! Mekanik sengeh aje la, buat apa tolak rezeki!

6.clutch plat – clutch plate ni ialah perkara subjektif. Biasanya ikut pengalaman aku, aku hanya tukar bila ada simptom “clutch slipping” berlaku sewaktu pemanduan kita. Ni perkara yang susah nak terangkan,sebab tu mereka kata 100,000km…tukar clutch!

7.Fuel Filter – tukar aje la sekitar 40,000km sekali. Benda ni pun murah RM15-20je.

8.Air Filter atau Filter Udara – yang ni di tukar setiap 20,000km….tapipada mereka yang tukar kepada K&N type…benda ni tak payah tukar,tapi mampu dibersihkan.

9.ATF – Automatic Transmission Fluid. Minyak ni memang penting bagi yang pakai AUTO. Dalam manual dia ada sebut setiap 20,000km tukar. Tapi boleh la extend hingga 30,000km kepada mereka yang nak jimat. Minyak ni memang penting ditukar…jangan abaikan (contohnya tak tukar lebih dari 30,000km) kerana kerosakan kepada AUTO gearbox perlu perbelanjaan yg besar. Kalau kita rajin tukar, kereta tak perluTransmission Flush seperti yg disyorkan oleh sesetengah bengkel. Transmission Flush boleh pergi sampai 7-9 litre.Ini membazir untuk kita…tapi bukan pada pihak yang bikin servis. Cajsekitar RM200 ++. Kalau kau selalu tukar ATF, hanya tukar biasaaje….yang budget kurang dari RM100…ikut saiz kereta anda!

10.Gear Oil – untuk mereka yg pakai manual gearbox. Kereta anda tak perlu pakaiATF, sebaliknya pakai Gear Oil. Benda ni boleh la tukar 60,000km sekali.

11.Brake Fluid dan Power Steering Fluid – Kalau rajin boleh flush keluar ganti baru setiap 60,000 km. Aku sendiri tak buat….sebab aku malas! Lagipun aku tahu sedikit sebanyak pasal mekanikal, bila ada kuar simptom, barulah aku tukar!he he…jangan ikut saya ya!

12.Radiator Coolant -sebotol RM8-RM15… selalunya warna hijau! 60,000km boleh la tukar sekali!!! Kalau air radiator korang warna clear aje…maknanya air paipbiasa aje tu! Pakai coolant, enjin lebih cepat panas dan juga tak mudah mendidih!

13.Air-Cond Belt/ Alternator Belt – Belt-belt ni perlu ditukar sama waktu dengantiming belt. Kalau kita terlupa tukar sewaktu servis sebelum-sebelum ni. Belt Air-con dan juga alternator mudah dikenal pasti akan perlunya ditukar atau tidak.Ini kerana belt-belt ni letaknya diluar dan boleh nampak. Kalau bahagian “ribs”nya dah ada”crack-crack” yang halus…maka eloklah ditukar belt tersebut. Jangan tunggu masa timing belt nak tukar, baru nak ditukar belt-belt ini. Akhir sekali, ingin aku ingatkan maintenance schedule yang ikut “km” atau masa”3bulan” “6 bulan” dan seterusnya ni hanya memudahkan pengguna-pengguna kereta melakukan penyelengaraan atau omputih kata “preventive maintenance”

Maksudnya, benda yang kita tukar tu belum tentu rosak, tapi kita dah tukar…preventive maintenance ni mampu mengelak dari pengguna kereta menghadapi kerosakan yang kritikaldimasa akan datang! Tapi dalam dunia ni, mana ada yang perfect! Preventive Maintenance Schedule ni kalau kita ikut tanpa mengetahui sedikit sebanyak tentang fungsi atau sebab mengapa setiap alatganti tu perlu ditukar. Ianya boleh juga menjadi suatu pembaziran….

Contohnya- kalau kita buta-buta ikut apa yg disyorkan oleh pembuat alatganti. Contohnya “shock absorber”.. perlu diganti setiap 20,000km….! Tentu kita tidak mampu mengikutnya!

Mengikut pengalaman aku yg dah lebih 10 tahun membuat DIY service kereta:-

Minyak hitam mineral utk 5000km/3 bulan, minyak semi-sintetik utk 10,000km/6 bulan, minyak fully sintetik utk 15-20,000km/ 1 tahun. Kalau boleh elakkan beli minyak hitam di kedai spare part sebab byk minyak cap ayam. Botol mungkin ada cap castrol, shell, petronas, eneos, etc,etc tp dlm mungkin minyak murah made in china. Dlm satu hari ada berapa ribu botol minyak hitam kosong wujud di bengkel-bengkel. Sesiapa sahaja boleh ambik botol-botol ini dan refil dan bubuh seal baru. Elok beli minyak di stesen minyak – confirmed genuine. Unless kalau betul2 yakin dgn kedai spare part yg kita beli tu.

Minyak gear manual ditukar setiap 40,000km utk kereta baru (kurang 5 tahun), setiap 20,000km utk kereta atas 5 tahun atau apabila gear shift rasa ketat. Paling bagus utk kereta lama – bubuh gearbox treatment. Minyak gear ATF – ditukar setiap 20,000km. Sama mcm di atas.

Flush? kalau dlm buku takde kata – maka tidak perlu. Air filter pun sama – 20,000km. Coolant – tukar tiap-tiap 20,000km. Nak tukar tiap-tiap 50,000km pun boleh dgn syarat guna air suling or RO water. Timing belt – ditukar setiap 80,000km. Tapi aku pernah stretch sampai 110,000km(wira 1.6xli) tanpa masalah sebab aku guna timing ori mitsubishi dan aku suka inspect timing belt. Merekah takde, gigi still elok – tak perlu tukar. Aircond belt, altrnator belt, power steering belt – tukar semasa tukar timing belt atau apabila nampak crack.

Water pump – ditukar apabila menukar timing belt utk kali ke-2. Let’s say kita tukar timing belt setiap 80,000km, maka apabila kita menukar timing belt utk kali kedua pada 160,000km, elok tukar sekali water pump kerana hayatnya pun hampir tiba. Nak tukar water pump kena bukak timing belt. So kalau buat sekali, tiada extra labor charge. Spark plug – every 20,000km. Atau selagi plastik kat tgh tu masih putih dan tiada kesan terbakar. So kena check spark plug. Kalau spark plug berminyak – engine dah agak uzur dan kena overhaul sebab piston ring dah haus. Asap biru kat ekzos jugak adalah tanda piston ring haus i.e. minyak hitam terbakar. BTW, ini bukan service biasa. Dah kira major work jugak. Head gasket – tukar apabila minyak leaking kat area tu. Atau sekiranya berlaku coolant loss akibat dari blown head gasket. Buat grind valve sekali. Org panggil nie top-overhaul.

Biasanya top overhaul tidak diperlukan dek kereta bawah 7 tahun atau 200,000km. Tp ada gak yg 7-80,000km/kurang 5 tahun dah kena top overhaulsebab suka lenjan engine. Dok main red line manjang. Ini pun major work la jugakskit. Brake pad – tukar bila haus atau bila rasa brake kurang mengigit. Biasanya kereta 3-4 tahun sekali. Minyak brake – pun sama. Anyway brake belakang tahan lebih lama dari brake depan biasanya double. Bercakap tentang timing belt (juga dipanggil cam belt kerana ia memacu camshaft), ianya berbeza antara satu pengeluar ke pengeluar yg lain.

Pada asalnya, enjin pembakaran dalam menggunakan camshaft yg di letak di dalam blok enjin…erm..takmo citer panjang2 lah. Secara standardnya pertukaran timing belt pada setiap 100,000km ikut ketetapan pengeluar jepun. tetapi jepun adalah negara bercuaca sederhana sejuk manakala cuaca di malaysia lebih panas dan mampu mempercepatkan proses wear and tear timingbelt yg dibuat dari adunan getah, plastik dan fibre glass. Maka itu, adalah dinasihatkan pertukarannya dibuat lebih awal iaitu antara 90,000km. Bagi alat ganti timing belt berkualiti rendah, kita perlu menukar lebih awal, maybe 60,000km. Sy tak begitu pasti.

Sesetengah pengeluar seperti Alfa Romeo mencadangkan pertukaran timing belt padajarak hanya 30,000km bagi semua enjin straight 4 twin spark dan juga enjin V6 bagi model sblm thn 1999. Masa aku keja di alfa romeo thn 96 dulu, ada juga pemilik yg kerek dan cakap timing belt boleh tahan sampai 100,000km. Tak perlu tukar pada 30,000km. Then, keta dia kena tarik masuk sebab timing belt putus dan enjin kena overhaul. Bacaan odometer ketika itu = 35,000km. Maka moralnya adalah kita perlu patuhi spesifikasi service dan penyelenggaraan pengeluar. Banyak kenderaan zaman sekarang telah menggunakan timing chain sbg ganti kepada timing belt. Ini termasuk Nissan, Honda dan Toyota .Toyota misalannya menggunakan timing chain bagi semua kenderaan penumpangnya iaitu :-

Camry ACV30 – enjin 2AZ-FE 2000cc
Corolla Altis ZZE121 – enjin 1ZZ-FE 1600cc
Vios NZE10 – enjin 1NZ-FE 1500cc

Model seperti CRV pada mulanya menggunakan timing belt, tetapi untuk CRV baru generasi kedua, Honda juga kembali memperkenalkan timing chain melalui enjin i-VTEC. ianya tidak memerlukan pertukaran biarpun sudah mencecah 500,00km lantas menjimatkan kos dan menjaga alam sekitar. Sekiranya mekanisme rantai mengeluarkan bunyi, hanya perlu tukar tensioner bearing dan segalanya pulih spt sedia kala.

Sumber: Facebook.com

Trello with Butler: Workflow Automation At Your Service

“Trello with Butler” – workflow automation at your service. Say goodbye to the tedious clicks and endless card drags of yesteryear, and say hello to custom automations, rules, scheduled commands, and so much more! Consider Butler to be the robo-sidekick for your team’s productivity, allowing you to create a seamless process for any task or workflow at the board or card level.

Plus, Butler doesn’t require some fancy degree in coding. Automations are easily created using natural language, so it’s like productivity Mad Libs. Simply go through Butler’s command building window and select what you would like Butler to do, and it will do it all for you without your having to write a line of code. No code, FTW!

Best of all, Butler is available to all Trello users, and Butler for Business Class and Enterprise comes with even more advanced features and automation capabilities. To learn more about the Butler features that come with your Trello account, check out this handy help document.

To add Butler’s powerful automations to your boards simply click the Butler icon in the board menu and begin giving your board butler things to do. Since there are infinite ways to use Butler’s superpowers, we’ve provided a few examples.

Play By The Rules (Trust Us!)

Imagine this: You’ve finished your latest project, you wipe the sweat off your brow, you drag a card to Done, and *instantly* the remaining checklist items are marked complete, the due date is marked complete, and you are removed from the card—all without you having to do a thing.

Setting automatic rules with Butler

Rules will automatically react to actions on your boards like magic and operate across the entire board for all members. Plus, they can be built to handle a lot of complex actions and bring an automated process to your boards.

For instance, if you are on a Sales team and have a contract that needs review by Legal, you can set up a rule so that whenever a card is moved into the “Legal Review” list, your legal review process checklist is added to the card with a due date for 2 days from then, and have it assigned to your team’s lawyer.

Rule

Setting up a rule is as simple as filling in the fields for what you’d like to happen when a specific action or trigger takes place. For instance, in my initial example a trigger would be set for when a card is moved into the “Done” list by anyone on the board. Then establish the actions that would automatically occur when that action is triggered:

  • Mark the due date as complete
  • Check all the items in all the checklists on the card
  • Remove all the members from the card.

Triggers can be set for a variety of actions including:

  • When cards are added, moved, or archived
  • Labels, attachments, members, and votes are added to cards
  • Due dates are added, marked complete, or included in card names
  • Actions are taken on checklists or checklists are added to cards
  • Comments and card description updates
  • When Custom Field data is entered, updated, set, etc.

When a trigger is activated some of the possible actions could be:

  • Moving, archiving, or copying cards
  • Adding or removing labels, attachments, and more
  • Setting, changing, or updating due dates
  • Adding, completing, or resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Renaming cards, editing descriptions, adding comments
  • Modifying, adding, or removing Custom Field data
  • Sorting lists by a variety of criteria
  • Interacting with related cards
  • Sending emails (available with Business Class, Enterprise, and Gold)
  • Gets, posts, and puts to URLs (available with Business Class, Enterprise, and Gold)
  • And so much more!

Honestly, it is amazing to simply dig around and see what Butler can do to tackle almost any request you send its way.

Example Use Cases For Rules

  • Get an overview of your team’s work getting done across all of your boards in a single place. For example, set a rule on each of your team boards to make a copy of every card that is moved to a board’s Done list to the team overview board.
  • When a card is created in a “To Do” list, add the “Steps” checklist so that you don’t miss a beat.
  • When someone is added to a card, have Butler automagically set the due date to five working days in the future and post comments like, “I got this.” What a team player!
  • When you enter a card name ending with a date, set the card to be due on that date. Perfect for when emailing cards to your board.
  • When the checklist “Phase 1 Steps” is completed by anyone, move the card to list “Phase 2” and add checklist “Phase 2 Steps.” As they say, process makes perfect.

Building Buttons For A Better Way To Work

Butler also allows you to create custom automations for cards and boards that are executed at the click of a button. Card buttons handle card level tasks, and appear on the card back. Board buttons, on the other hand, appear at the top of your board and accomplish tasks across your entire board.

Trello-Butler-Card-Button2-1

What’s really exciting is that you can create buttons that can perform multiple operations in a single click.

For instance, a card button, when clicked, could move that card to a specific list, add a due date for two days in the future, add a board member, and apply a specified label. Or, a board button could move every card with an overdue due date to a specified list and sort them by label.

Plus, Butler is a team player which means that card and board buttons created by anyone on the board can be used by everyone. This keeps your entire team on the same page when creating a process around actions, whether it’s to notify the next person in a workflow, or prioritize tasks for the week.

Butler-Due-Date-Command

To create custom buttons, start by selecting whether you want to create a card button or a board button and name the button. Then, creating a task is as simple as going through and adding the actions you want to occur and filling in the details, like which list or label.

Create Board Button

Card button actions can include any or all of the following:

  • Moving or archiving a card
  • Adding/removing labels and due dates
  • Marking due dates complete
  • Checking/unchecking checklist items, adding checklists to cards, and resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Adding comments, renaming cards, and modifying card descriptions

Board button actions can include:

  • Creating new cards with descriptions in specified lists
  • Creating, archiving, and arranging lists
  • Moving and archiving cards in a list
  • Sorting cards in a list by date, name, votes, custom fields, labels, and time on list

Example Use Cases For Buttons

Card Button

  • Ready to get to work? Create a card button to start a task that moves the card to list “In Progress,” and adds you to the card with a due date.
  • Start each week fresh with a board button to archive the past week’s “Done” list and create a new “Done” list.
  • Add a card button that automatically moves the card to “Done,” marks the due date as complete, and removes you from the card. You can even set up Butler to automatically add a comment that lets your boss know how awesome you are.
  • Never know what to work on next? Add a board button to move a randomly-selected card from the “To Do” list to the “Doing” list. Don’t let analysis paralysis curb your productivity.
  • Let’s say you apply a green label to every bug you fix, so your team knows what’s already shipped. Create a board button to auto-archive all of those cards with a green label and save a lot of precious clicks.
  • Get insight into your infinite backlog by creating a button to sort cards by Custom Field story points, due date, votes, and more so you know what to prioritize next sprint.

Make Time Work For You

If you are rocking a Business Class, Enterprise, or Trello Gold account then you have the ability to setup Butler to work on whatever schedule works for you with scheduled commands based on calendar dates or a card’s due date.

Calendar commands are great for recurring tasks and regular board maintenance like moving and archiving cards, sorting lists, and adding new lists to a board. These commands can be set to run at specific times on daily, weekly, monthly, and yearly times of your choosing.

Butler Calendar Command

For instance, on a weekly sprint board you could set a calendar command to make the start of each week as smooth as possible:

  • Every Monday at 9 AM,
  • Archive all of the cards in the Last Week list
  • Move the cards from the This Week list to the Last Week list
  • Move all of the cards from Up Next to This week and sort them by due date.

If only Butler could also make sure there was a fresh pot of coffee ready for you as well when you stepped into the office. ☕️

Due date commands use a card’s due date as a trigger and can be programmed to take a series of actions as a card’s due date gets closer, the moment is due, or a set period of time after the card is due.

Butler-Due-Date-Command

Setting due date commands is a great way to make sure nothing important falls through the cracks by flagging incomplete cards that are overdue:

  • The moment a card is due
  • Move the card to the top of the list
  • Add the red label to the card
  • Post a comment “@card What’s the status of this?”

Scheduled commands offer a powerful way to keep your boards and cards organized and maintained so that you can spend more time focussing on the finer things in life, like that blog post you were supposed to write last week that Butler totally just reminded you about.

Butler Brings The White Glove Service

Suggestions

If that’s not enough, what makes Butler truly a cut above the rest is that as soon as Butler is enabled on your boards it immediately has ideas to make your life easier. When you open the Butler, click the “Automation Tips” button and Butler will automatically take a quick scan of your board to analyze the most common actions, and suggest them as recommended buttons that can be created in a click. Talk about being prepared for your first day on the job.

So go ahead and bring the power of automation with Butler to your boards today!

Want to get an in-depth overview of everything Butler has to offer? Watch our free on-demand webinar:

Bring Powerful Automation To Your Boards With Butler

Source: Trello.Com

Mengapa gasket silinder terbakar bila enjin panas (overheat)

Overheating atau kepanasan melampau adalah keadaan dimana enjin mengalami kepanasan yang melebihi dari sepatutnya.Tahap kepanasan enjin adalah dikawal supaya berada pada satu tahap sejuk untuk enjin beroperasi seterusnya.

Jika terjadi overheating meter penunjuk suhu enjin akan berada lebih dari setengah ataupun berterusan bergerak sedikit demi sedikit ke tanda merah pada meter suhu.Prestasi enjin akan terus menurun dan seterusnya menjadi tersangat panas sehingga enjin akan berhenti sendiri.Penunjuk suhu tidak boleh melebihi dari had minima ,jika melebihi had tersebut ia adalah diklasifikasikan sebagai overheating (kepanasan melampau).

Akibat daripada kepanasan tersebut keadaan seperti enjin berbunyi kuat,berbau hangit,asap berkepul dan enjin mati sendiri adalah keadaan akhir selepas overheating berlaku.

Komponen penyejukan enjin

Komponen-komponen yang berkaitan untuk mengawal suhu enjin supaya tidak mengalami kepanasan adalah seperti berikut:-

1)Radiator
2)Water pump
3)Water jacket
4)Kipas radiator
5)Thermostat
6)Enjin blok

Diantara 6 komponen tersebut hanya enjin blok yang berfungsi tetap dalam enjin untuk mengawal suhu sejuk untuk enjin beroperasi. Diatas blok enjin terdapat llubang-lubang kecil yang akan dilitupi dengan air untuk mengawal kesejukan dari dalam bila enjin dihidupkan.

Air yang berada pada lubang-lubang kecil tersebut akan berada kekal sementara silinder gasket berfungsi menyekat air dan minyak hitam  dari memasuki ruang pembakaran .Di sinilah fungsi sebenar gasket silinder yang bertujuan melemahkan kepanasan kepada tahap yang sesuai untuk enjin beroperasi.Akantetapi bagaimanakah gasket silinder ini boleh terbakar sedangkan dilitupi oleh air pada dasarnya?

Mengapa silinder gasket terbakar dan enjin berhenti

Pada satu ketka dimana enjin terlalu panas iaitu melebihi dari had maksima untuk enjin beroperasi silinder akan menjadi panas sedikit demi sedikit dan terus melekat pada blok dan seterusnya melimpahkan sedikit demi sedikit air ke ruang pembakaran .Bila ruang pembakaran dipenuhi air inilah yang akan menyebabkan kereta berhenti terus tanpa boleh dihidupkan.

Perkara perlu dilakukan sebelum enjin jadi terlalu panas

1.Berhentikan kereta
2.Biarkan enjin sejuk kira2 satu jam
3.Buka penutup radiator setelah enjin sejuk
4.Isikan air semula dalam jacket dan radiator
5.Pastikan kipas berpusing setelah enjin panas semula
6.Jumpa mekanik jika enjin terlalu cepat jadi panas-(silinder gasket telah terbakar)

Carakerja pembaikan berdasarkan kerosakan

1.Servis radiator-jika enjin panas ketika berhenti sahaja
2.Tukar thermostat-jika kipas radiator tidak berpusing dan enjin panas sekejap2
3.Tukar hose bocor-jika terdapat mana2 kebocoran air
4.Tukar head gasket sahaja-jika panas yang kadangkala terjadi sahaja
5.Tukar  motor kipas radiator-jika panas berterusan dan kipas berhenti berpusing
6.Tukar water pump jika air pada water jaket susut selalu
6.Top Overhaul adalah carakerja penuh untuk semua dia atas.

Pengawalan awal supaya tidak terjadi overheating

1.Pastikan coolant mencukupi dalam radiator dan water jaket,pastikan air berwarna biru gelap sentiasa
2.Flush radiator atau tukar air radiator setiap kali servis
3.Pastikan tiada hose air yang bocor
4.Pastikan kipas radiator berfungsi
5.Tukar water pump jika air dalam water jacket susut
6.Picit hose di thermostat berulang kali supaya thermostat tidak melekat dengan coolant sahaja
7.Sembur air pada sirip radiator untuk hilangkan habuk ,daun atau batu kecil yang terselit pada sirip radiator
8.Parking kereta pada tempat berbumbung jika ada
9.Semasa mengisi semula air radiator hidupkan enjin seketika supaya air dapat memenuhi semua ruang.
10.Gunakan coolant yang disarankan sahaja

Sumber: MekanikKereta.Blogspot.Com

Workflow Automation At Your Service With Trello’s Butler

Say goodbye to the tedious clicks and endless card drags of yesteryear, and say hello to custom automations, rules, scheduled commands, and so much more! Consider Butler to be the robo-sidekick for your team’s productivity, allowing you to create a seamless process for any task or workflow at the board or card level.

Plus, Butler doesn’t require some fancy degree in coding. Automations are easily created using natural language, so it’s like productivity Mad Libs. Simply go through Butler’s command building window and select what you would like Butler to do, and it will do it all for you without your having to write a line of code. No code, FTW!

Best of all, Butler is available to all Trello users, and Butler for Business Class and Enterprise comes with even more advanced features and automation capabilities. To learn more about the Butler features that come with your Trello account, check out this handy help document.

To add Butler’s powerful automations to your boards simply click the Butler icon in the board menu and begin giving your board butler things to do. Since there are infinite ways to use Butler’s superpowers, we’ve provided a few examples.

Play By The Rules (Trust Us!)

Imagine this: You’ve finished your latest project, you wipe the sweat off your brow, you drag a card to Done, and *instantly* the remaining checklist items are marked complete, the due date is marked complete, and you are removed from the card—all without you having to do a thing.

Setting automatic rules with Butler

Rules will automatically react to actions on your boards like magic and operate across the entire board for all members. Plus, they can be built to handle a lot of complex actions and bring an automated process to your boards.

For instance, if you are on a Sales team and have a contract that needs review by Legal, you can set up a rule so that whenever a card is moved into the “Legal Review” list, your legal review process checklist is added to the card with a due date for 2 days from then, and have it assigned to your team’s lawyer.

Rule

Setting up a rule is as simple as filling in the fields for what you’d like to happen when a specific action or trigger takes place. For instance, in my initial example a trigger would be set for when a card is moved into the “Done” list by anyone on the board. Then establish the actions that would automatically occur when that action is triggered:

  • Mark the due date as complete
  • Check all the items in all the checklists on the card
  • Remove all the members from the card.

Triggers can be set for a variety of actions including:

  • When cards are added, moved, or archived
  • Labels, attachments, members, and votes are added to cards
  • Due dates are added, marked complete, or included in card names
  • Actions are taken on checklists or checklists are added to cards
  • Comments and card description updates
  • When Custom Field data is entered, updated, set, etc.

When a trigger is activated some of the possible actions could be:

  • Moving, archiving, or copying cards
  • Adding or removing labels, attachments, and more
  • Setting, changing, or updating due dates
  • Adding, completing, or resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Renaming cards, editing descriptions, adding comments
  • Modifying, adding, or removing Custom Field data
  • Sorting lists by a variety of criteria
  • Interacting with related cards
  • Sending emails (available with Business Class, Enterprise, and Gold)
  • Gets, posts, and puts to URLs (available with Business Class, Enterprise, and Gold)
  • And so much more!

Honestly, it is amazing to simply dig around and see what Butler can do to tackle almost any request you send its way.

Example Use Cases For Rules

  • Get an overview of your team’s work getting done across all of your boards in a single place. For example, set a rule on each of your team boards to make a copy of every card that is moved to a board’s Done list to the team overview board.
  • When a card is created in a “To Do” list, add the “Steps” checklist so that you don’t miss a beat.
  • When someone is added to a card, have Butler automagically set the due date to five working days in the future and post comments like, “I got this.” What a team player!
  • When you enter a card name ending with a date, set the card to be due on that date. Perfect for when emailing cards to your board.
  • When the checklist “Phase 1 Steps” is completed by anyone, move the card to list “Phase 2” and add checklist “Phase 2 Steps.” As they say, process makes perfect.

Building Buttons For A Better Way To Work

Butler also allows you to create custom automations for cards and boards that are executed at the click of a button. Card buttons handle card level tasks, and appear on the card back. Board buttons, on the other hand, appear at the top of your board and accomplish tasks across your entire board.

Trello-Butler-Card-Button2-1

What’s really exciting is that you can create buttons that can perform multiple operations in a single click.

For instance, a card button, when clicked, could move that card to a specific list, add a due date for two days in the future, add a board member, and apply a specified label. Or, a board button could move every card with an overdue due date to a specified list and sort them by label.

Plus, Butler is a team player which means that card and board buttons created by anyone on the board can be used by everyone. This keeps your entire team on the same page when creating a process around actions, whether it’s to notify the next person in a workflow, or prioritize tasks for the week.

Butler-Due-Date-Command

To create custom buttons, start by selecting whether you want to create a card button or a board button and name the button. Then, creating a task is as simple as going through and adding the actions you want to occur and filling in the details, like which list or label.

Create Board Button

Card button actions can include any or all of the following:

  • Moving or archiving a card
  • Adding/removing labels and due dates
  • Marking due dates complete
  • Checking/unchecking checklist items, adding checklists to cards, and resetting checklists
  • Joining, subscribing, and adding/removing members from cards
  • Adding comments, renaming cards, and modifying card descriptions

Board button actions can include:

  • Creating new cards with descriptions in specified lists
  • Creating, archiving, and arranging lists
  • Moving and archiving cards in a list
  • Sorting cards in a list by date, name, votes, custom fields, labels, and time on list

Example Use Cases For Buttons

Card Button

  • Ready to get to work? Create a card button to start a task that moves the card to list “In Progress,” and adds you to the card with a due date.
  • Start each week fresh with a board button to archive the past week’s “Done” list and create a new “Done” list.
  • Add a card button that automatically moves the card to “Done,” marks the due date as complete, and removes you from the card. You can even set up Butler to automatically add a comment that lets your boss know how awesome you are.
  • Never know what to work on next? Add a board button to move a randomly-selected card from the “To Do” list to the “Doing” list. Don’t let analysis paralysis curb your productivity.
  • Let’s say you apply a green label to every bug you fix, so your team knows what’s already shipped. Create a board button to auto-archive all of those cards with a green label and save a lot of precious clicks.
  • Get insight into your infinite backlog by creating a button to sort cards by Custom Field story points, due date, votes, and more so you know what to prioritize next sprint.

Make Time Work For You

If you are rocking a Business Class, Enterprise, or Trello Gold account then you have the ability to setup Butler to work on whatever schedule works for you with scheduled commands based on calendar dates or a card’s due date.

Calendar commands are great for recurring tasks and regular board maintenance like moving and archiving cards, sorting lists, and adding new lists to a board. These commands can be set to run at specific times on daily, weekly, monthly, and yearly times of your choosing.

Butler Calendar Command

For instance, on a weekly sprint board you could set a calendar command to make the start of each week as smooth as possible:

  • Every Monday at 9 AM,
  • Archive all of the cards in the Last Week list
  • Move the cards from the This Week list to the Last Week list
  • Move all of the cards from Up Next to This week and sort them by due date.

If only Butler could also make sure there was a fresh pot of coffee ready for you as well when you stepped into the office. ☕️

Due date commands use a card’s due date as a trigger and can be programmed to take a series of actions as a card’s due date gets closer, the moment is due, or a set period of time after the card is due.

Butler-Due-Date-Command

Setting due date commands is a great way to make sure nothing important falls through the cracks by flagging incomplete cards that are overdue:

  • The moment a card is due
  • Move the card to the top of the list
  • Add the red label to the card
  • Post a comment “@card What’s the status of this?”

Scheduled commands offer a powerful way to keep your boards and cards organized and maintained so that you can spend more time focussing on the finer things in life, like that blog post you were supposed to write last week that Butler totally just reminded you about.

Butler Brings The White Glove Service

Suggestions

If that’s not enough, what makes Butler truly a cut above the rest is that as soon as Butler is enabled on your boards it immediately has ideas to make your life easier. When you open the Butler, click the “Automation Tips” button and Butler will automatically take a quick scan of your board to analyze the most common actions, and suggest them as recommended buttons that can be created in a click. Talk about being prepared for your first day on the job.

So go ahead and bring the power of automation with Butler to your boards today!

Source: Trello.Com

7 Trello Keyboard Shortcuts That Will Make You Swoon

Your Trello game is strong. You’ve mastered some big moves slinging cards across lists like Serena Williams on the court, kicking your to-do list’s butt, and completing due dates at rapid speed.

I imagine you’ve taken things to the next level adding Power-Ups to your boards as fast as Lizzo drops her next hit.

Perhaps, you’ve even cozied up to the easy automation that Butler brings to your workflow.

Luckily, you’re in the right place, because I’m going to show how a touch of fancy finger work can take your productivity to new heights.

What am I talking about? Shortcuts! Trello keyboard shortcuts to be exact.

In fact, Trello is loaded with handy shortcuts that can help you shave time and free your mind to work on more important tasks (like figuring where to order lunch from today).

While everyone’s favorite shortcuts are unique to their personal workflow, I’m going to share my seven favorite keyboard shortcuts that anyone can take away and start using today.

Of course, you can always just hit the question mark key (?) while on a Trello board to bring up the keyboard shortcuts menu. (We’ll consider that tip a freebie 😎)

Insert A Card Anywhere

Let’s start with the basics: You’ve got a brand new board that needs cards or you have new cards you need to add to a board that is already in motion. Simply press the ‘n’ key to add a new card to a list.

how to add a new card to a list in trello

You can also hover your mouse over a card that already exists and press ‘n’ to add a new card right below the hovered card.

✨ Bonus: While not a keyboard shortcut, double-click in between any two cards on a list to add a new card into that position!

Assign Yourself Or Delegate

With all of your new cards on your board, someone needs to own those tasks to start getting things done. If that lucky person is you, simply tap the spacebar while mousing over a card or when the card is open to add yourself to it.

assign yourself to a trello card with the spacebar

Tapping the spacebar on a card that you’ve been added to will remove you from it (should you come to your better judgment).

While picking up your fair share of the work is what makes you a team player, the best leaders delegate, and delegate quickly you shall when you tap the ‘a’ key to reveal the ‘assign members window’ while either a card is open or when hovering over a card.

Stay Organized And On Time With The Due Date Shortcut

Keeping things moving along often requires a deadline, because otherwise, you would just be at the beach letting your cards age, blissfully unaware of the bottlenecks you’ve created.

To hold yourself and your teammates accountable, due dates are a must! (They also really make a board’s calendar look nice.)

Quickly toggle the due date selector while a card is open or when mousing over a card on a list by pressing ‘d’. While you’re there, set up a custom due date reminder to make sure you don’t miss the mark on that deadline.

Of course, with so many cards on your board, you may want to organize them by type or category in a visual way with labels.

Press the ‘l’ key to open the label menu from the card back or while hovering over a card on a list and select the labels you’d like to apply.

But what if you want to move even faster while applying labels?

Here’s a bonus keyboard shortcut for you: Use the number keys 1-9 and 0 to apply labels without having to go through the work to open the menu and select them individually.

Fewer clicks, FTW! Here’s a handy menu to help you out:

Key Label Color
1 Green
2 Yellow
3 Orange
4 Red
5 Purple
6 Blue
7 Sky
8 Lime
9 Pink
0 Black

Alright, here’s one more bonus keyboard shortcut related to labels that I just can’t keep to myself (and won’t count towards the original promise of just seven shortcuts.)

If you name your labels and want to quickly reveal and hide the label names, just press the semicolon key.

Surface The Important Information With Keyboard Shortcuts

Finally, you’ve created all of your cards, assigned tasks to team members, set the due dates, made sure to organize related cards with labels, and now it’s time to get to work.

To quickly remove everyone else from your view press ‘q’ to display only the cards that are assigned to you. Press ‘q’ again to bring everyone else back to the party.

Another way to find what you need is to press ‘f’ to open up the search function in the board’s menu.

Your cursor will automatically be focused in the input field so that you can start searching by term, label, member, or due date. This easy search will help you quickly find what you are looking for across the board.

And there you have it—Seven of my favorite keyboard shortcuts that are sure to boost your Trello productivity.

Of course, I urge everyone to explore the shortcuts menu for themselves and see what works best for you and your workflow. Also, share your favorite Trello tips and tricks on Twitter with the hashtag #trellotips.


Good or bad, we’d love to hear your thoughts. Find us on Twitter (@trello) or write in to support@trello.com.

Source: Trello.Com

Keselamatan Siber: Open Source bukan punca kelemahan keselamatan siber

Keselamatan Siber

BARU-BARU ini, terdapat laporan akhbar yang menyalahkan penggunaan Perisian Sumber Terbuka atau Open Source Software (OSS) sebagai salah satu punca laman web digodam.

Di sini, saya ingin menjelaskan apa sumbangan Perisian Terbuka ini kepada pembangunan teknologi maklumat.

Perisian Sumber Terbuka atau Open Source Software (OSS), adalah hasil daripada satu amalan bersifat sukarela dan gotong royong.

Ia adalah usaha untuk memastikan tiada siapa yang memiliki perisian dengan lesen yang hadkan penggunaan dan kenakan kos yang tidak berpatutan kepada penggunaan.

Ia bertujuan untuk memastikan perisian yang dibangunkan dapat dikongsikan pembangunan dan disebarkan tanpa kerisauan kepada milikan dan juga kos lesen.

Untuk memastikan prinsip ini berterusan dan sah disisi undang-undang, komuniti Sumber Terbuka melalui Open Source Initiative (OSI) iaitu satu organisasi antarabangsa, menyediakan platform untuk menjamin semua perisian sumber terbuka mempunyai lesen yang bersifat terbuka dan boleh diguna pakai oleh pelbagai pihak sama ada individu, organisasi bukan kerajaan, syarikat-syarikat dan kerajaan.

Usaha ini telah berlaku sejak Februari 1998, lebih 20 tahun perlesenan sumber terbuka dan usaha secara komuniti, sukarela dan gotong royong ini dilakukan, malah ia terus semakin kuat dan berterusan dengan sokongan pelbagai pihak dan syarikat yang menerima manfaat yang besar daripada segi kewangan dan juga faedah-faedah lain.

Lebih 20 tahun sejak 1998, perisian sumber terbuka telah menjadi tulang belakang industri ICT dunia seiring dengan keselamatan siber yang mengikuti rapat perisian sumber terbuka.

Terlalu banyak untuk disenaraikan daripada dahulu hingga sekarang pada setiap perisian sumber terbuka yang dibangunkan; daripada compiler C yang menjadi asas pembangunan kepada pelbagai lagi perisian sumber terbuka sehinggalah kepada Kernel Linux yang menjadi asas kepada perisian komputer-komputer dan peralatan rangkaian yang menjalankan internet dan juga perisian Android yang kuasakan telefon bimbit yang kita gunakan.

Kebanyakan syarikat-syarikat besar sekarang ini adalah berasas teknologi yang dibina atas perisian sumber terbuka. Bermula dengan syarikat Red Hat, yang pada awalnya mahu memudahkan pemasangan sistem operasi untuk komputer dan kemudiannya menjadi syarikat ‘Bilion Dolar’ yang kemudian dibeli oleh IBM, gergasi ICT dunia.

Google merupakan penyokong kuat kepada perisian sumber terbuka sejak daripada penubuhannya lagi.

Komputer-komputer yang menyokong infrastuktur Google dalam menjalankan perniagaan enjin carian yang dibina atas perisian sumber terbuka, kini berkembang penggunaan di seluruh dunia.

Google menjadi gergasi industri ICT dengan perisian sumber terbuka, begitu juga dengan Facebook, yang mula dibangunkan dengan perisian sumber terbuka PHP.

PHP adalah bahasa atur cara yang menjalankan Facebook malah ribuan laman-laman web seluruh dunia. Ia sungguh popular hingga sebarang isu keselamatan yang berlaku terasa bagai ia satu kelemahan PHP, sedangkan ia disebabkan oleh ralat yang berlaku kerana pembangunan perisian dengan cara amalan yang tidak selamat dan cekap.

Ia juga disebabkan tiada tindakan segera untuk membetulkan ralat.

Kerajaan Malaysia melalui agensi Unit Pemodenan Tadbiran Dan Perancangan Pengurusan Malaysia (MAMPU) dan juga CyberSecurity Malaysia (CSM) turut menyediakan program latihan khusus untuk pegawai-pegawai ICT dalam kerajaan dalam penggunaan Perisian Sumber Terbuka dan Keselamatan Siber.

Ia menjadi keperluan kepada kerajaan kerana penggunaan luas perisian sumber terbuka dan menangani masalah keselamatan siber dalam pelbagai kemudahan dan perkhidmatan ICT kerajaan Malaysia.

Ia harus dikekal peranan dan berterusan untuk melatih dan melahirkan kakitangan ICT yang setaraf, berkemahiran tinggi dan bekemampuan mengendalikan perisian sumber terbuka dan keselamatan kod serta aplikasi.

Tidak dapat dinafikan ada laman-laman web yang bocor atau ditembusi, namun kita perlu lihat dalam pandangan yang lebih luas, dalam beribu-ribu laman web, dengan ratusan laman-laman web perkhidmatan utama, semuanya dapat dipertahankan dan tiada isu-isu keselamatan.

Sebahagian kecil laman-laman web yang tembus apabila diperiksa semula adalah laman-laman web yang tidak penting atau perkhidmatan dalam peringkat untuk ditamatkan.

Malah ada juga yang sedang dalam usaha pembaikan, hanya keadaan tidak kesempatan pada masanya disebabkan isu isu tertentu.

Tiada mana mana aplikasi sumber terbuka yang 100 peratus bebas dari ancaman siber tetapi harus diingatkan bahawa kesedaran dalam menguruskan aplikasi sumber terbuka ini harus menjadi perkara yang utama iaitu “Update, Patching, Maintenance & Support (UPMS)” kerana ia saling berkait antara satu sama lain.

Ia harus berterusan dan tidak ditinggalkan separuh jalan hanya kerana mungkin disebabkan ramai beranggapan perisian sumber terbuka adalah percuma dan FOC  tetapi tidak bagi servisnya yang perlu disediakan bajet yang sepatutnya.

Kami dalam Industri ICT sama ada individu, swasta dan juga kerajaan, sentiasa berusaha untuk memastikan perkhidmatan ICT dan Internet Malaysia ini sentiasa dalam keadaan selamat dan dikemas kini.

Perisian Sumber Terbuka dan Keselamatan Siber  komuniti-komunitinya adalah satu usaha sukarela. Ia dilakukan dengan bertujuan untuk kebaikan untuk semua.

Tanpanya kita semua tidak akan dapat perkhidmatan yang canggih dan maju seperti sekarang ini.

Harisfazillah Jamel & Mohd Fazli Azran
Komuniti Sumber Terbuka Malaysia & Komuniti Keselamatan Siber

Sumber: AstroAwani

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