The PHP development team announces the immediate availability of PHP 7.3.23. This is a security release. All PHP 7.3 users are encouraged to upgrade to this version. For source downloads of PHP 7.3.23 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: <https://php.net/releases/7_3_23.php> Downloads: <https://www.php.net/downloads> Windows downloads: <https://windows.php.net/download> Changelog: <https://www.php.net/ChangeLog-7.php#7.3.23> Many thanks to all the contributors and supporters! Stanislav Malyshev, Christoph M. Becker php-7.3.23.tar.bz2 SHA256 hash: fd6666ad4605508042c6964151379475daea36c43e03b11b1e79d4ae6b04c04c PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9y8b8MHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2GTAP/Aq9Z+ChPy3opLePbQP0JvR1QBT7Ocgo9ea0CkH2 c3SOXkPz8uYDMPuSL0avf9vA1LEVjTpD4KiTAju/Jo4bW3m7g820OzjRmhoH/rqB IRD4bixlrf+cQJyg/3Oq8Y7Gvw7F5Kp7IhgHq4UtfT9zrsbJpWyohWymzd7Od/3W 6Ojoaeq/+p62MkA65no2mUic+ELG0Z90lO1eCJVskOATcIKUCCWUPl9aYzI3uwHY cR3h9oAi2ab/JUxLIt1cW49/hRKWkbs5w2mqRDc+KjGCS/z5HLlTr78wUoUuBSzh 0ejgZQxnRbk93g5/TOg6P4wQIr4RSt3QojkXwHJ8daqeUkFlwq65vVVHQBdxzx45 ySCANnhPAWHEPNVDpGOCzIcmtgGzLk3ILoqJ4NRIlp7cN3qTAdNW276nms/INwIW QGF+iIfdTRTcUA0fViWMq0b/qxvjJfaHwnhHA0v91+VwZeaLdQmx+fuXxtOe9SrP 5pTDLRrQak4ek5sN8lvai2U6lPHFC2SecIW/CDfvXca5eIpsHAIOUqm1LSabuneg pzVDf09YrAhqsVAt6JaWHRDS5sNkRHslk2xlc4JqHQGVVDhgPg34BhlaOduhnmw6 LPKk7Nr9RmvK80VnFjSAEaovsAdc8Ws8vqYWXm3lhoT37Bvtfly43VSe9VuD8pNP t/0u =j5wS -----END PGP SIGNATURE----- php-7.3.23.tar.gz SHA256 hash: a21094b9ba2d8fe7fa5838e6566e30cf4bfaf2c8a6dce90ff707c45d0d8d494d PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9y8b8MHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2N9cP/0DzFyHCtDGYnbXI+VwCXTYnzfoBD1Y1SjvXmAdy Icgczy9Mdi4w60LVmNRy/dEdQrd0xwCiLWuIs9c5cayg62Yi9EuwVrP5Lqn5dZQW tZjhC+a2Uan/9VUGpGf/Bhfe9bP5ztt1mInFjtBGiqcKGS9guLIZgPq9QqNGsJxb CSivYsiFQfVKpuBk73lNJ6nx6XETVp+VtQxd8h6W2eoSlKg2QLIR66VD3dhVTGdR +dp/8KSK+VKpz6WMZh+3WZv7pr1Gf8oCehDDxc5YeFVgJ/42DG27yZ8NdxJ3CUAe aEXW8KnwzKrHK4N97thUUe5aKS9MfSD5W8NaP0pCk+21wv743B49hBOtrOP9oLw2 NZX2QfR5OvF06lQt1KCVoPKYvuFSb/iH8xYGC9C6tPhF/IpGzL4i/OscaejkUx/r tHWwxU4UPwAf5+ijvN8k5djHS5yIe/sFdOAI5sgKKUucaZvkqvT85uafq9VFgHrQ gCEZlZi+okUmU33CShMm4JACT4BwVha0AVD5SfDpGLLsutTs8PMkwwuel0AxxtNf ac6OE7Duk2NMcVXPKQdBve5fgZiE3iF3TaRasnN4GaZzF2JolyMNasU31VSDNLpI jGRty0BvacjpuGMjJP6WEZ28lgTlO3jNonhD8HrBLP6zARiuROiZwrodZujuxJ3m /J+2 =RfU2 -----END PGP SIGNATURE----- php-7.3.23.tar.xz SHA256 hash: 2bdd36176f318f451fb3942bf1e935aabb3c2786cac41a9080f084ad6390e034 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9y8b8MHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2ndkP/RZStW3W/qLdvDeoxQR35+446xDp7aI1Q7uPurrn ZkRhJP6lND11fRj7cCowJ0Mn2GgWB2jXxwKTAtbGhD9mwb2NSwcYTXR1/CatwXCs vu5jwfez6aBPn6kPtZ2+97eQFNI6nVzEX2+d2CUr8Ep3f/8Mqe75XGhfWlNk87fs zRxFRPoI/crSk+mrL67zNovtuOEH0BDc0QSgvcPSM2EiT7WsXGaZr2J8/VqRy0EH yW8pPWHnIwnJCne7snnubrtQWIO+nn3yy7P514Ldd0RWBrRyOLChRoPfvwql+6En OQ8wLIx0EpfyUUndwDrgKr+MTREBA2ODSl40Z06thIr786CkmXS5LTAVu7G7cJOL nK0MMwHF3iQjWFtNdee0njd8PmW61zrVngooj2G1PpA6Grq2yqQqCb1VBSph4HN/ NTeSVQ0K7NlW0DXKsdG9FfyJM+N+DzGAlS6cMTOsqMmKHUyMp6b02FEGDUPgj9VW aFBckO7LFzdAZqnv0rv0jdxKe/qKwuZuxsq0EkOwSxEYdIjuGycSeDOLgnfo8vY/ DPWZkPNe6yfhSusz5QN/1Dj1nyEYVlYvoANPCN5AoPqIwnQ0tMS2VVGspH+J0ZIF n88XBCK3w0it1MJsGADyetFbDSmaVFG6MOKALJX23d32ASwbMyJA7clOmBhg4V0m 0/wJ =/dnY -----END PGP SIGNATURE-----
Category: Uncategorized
PHP 7.2.34 Released
Hi, The PHP development team announces the immediate availability of PHP 7.2.34. This is a security release. All PHP 7.2 users are encouraged to upgrade to this version. For source downloads of PHP 7.2.34 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: https://php.net/releases/7_2_34.php Downloads: https://www.php.net/downloads Windows downloads: https://windows.php.net/download#php-7.2 Changelog: https://www.php.net/ChangeLog-7.php#7.2.34 Many thanks to all the contributors and supporters! Sara Golemon, Remi Collet php-7.2.34.tar.gz SHA256 hash: 8b2777c741e83f188d3ca6d8e98ece7264acafee86787298fae57e05d0dddc78 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfdBT1AAoJENyf+NPuWvJ/40IP/29rWc3h1/MyopXjuUn1w1T8 JVGtQ4cJYujlWDe2/NkNwClEFkTbvQMMdat8+B0GuONvw93+N6EGmkJlmA6KRGiN wn600x4m45eTwao2MjpQJILgmHgeLAtG9JKCUly8PZCkfetbI1i+r0qrvtB+Z600 nFPX1PUaRdeo9EeM4Jfey2xLwuVgACYpWlY5oWjaQRBkB736tqdh7ZYtyCHh21F6 oEF8kaRdXRynWNKGTSikjFx4eMdj0z9sU7cAkqkLCUg2QJ8xumPpiTrzeph71iJE eQoVspcCs8AkRECW38YrL9FJD1HBe/0BA5IzLxtnBhq5N01wCGnWMKucRf2KqARw 0LFjqIgT/W6R9+Nq1gw5yrQQAFpntpINwtfmN/89o7LOPGKE1yhJTLS1r2Sn4+dL ZGeNy3b+BRJdTp26mfNQiEXXuYMsN7q8Z+OocP90lri4gktNuL9maKtew0z8uVYX 7mJSFxhPyn+8UOxtowtljhT14gd4p4/DIuI91IgpX+OxkIN0dcPE7JUIbACNDVTf liGHtcSCl3+yMlc+Uk1EIkLSCdr/jydi/SAlLNO8miGZj/BEV/cEhwDKAiIeUn+U AgxqkZQhk8cKhnjmYiYVGIwoOgZ/a6JO9EhsV6jKPB9HOPc5PJ2U0oKjLa8+Pq2R 6EsTFHet/oCL6AA8VvUj =5qT8 -----END PGP SIGNATURE----- php-7.2.34.tar.bz2 SHA256 hash: 0e5816d668a2bb14aca68cef8c430430bd86c3c5233f6c427d1a54aac127abcf PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfdBT5AAoJENyf+NPuWvJ/lWEP+wa1Pqr0l79zEC6Ca9D9wPtC TdJFCSNZ+D6htPJ4JekQqdWTh0LG093InylPtnWPY/WeVNCBkFYyxOcsuCCQO0kA h6ti8LJhBcm8L3GWOh+NRtqCkjyzXOlVM0np8j6Tc4hC4Zf4cu6g6g3LxHpjVwjN XbKyYrPLnoyhKpcrJMrNxYdKrQA7ZC8kFd+R2+siNrU38F8LTWO0lve8STxWOLAQ lOqkScF3U7SaKjjHa5uPOKSziNX3EaPHZ0/Ny4zau0xTVJ9SS0Q2N69F2x4RZMiz R1XguF78ywbD3MTGoxUsIJJNIzow7dPA3HodpSDmucweHtZspqDW7yrvG0A/cylC tDUFPlKH1SCI82ys35cATrrwZ7k4ZeBL7bYy8z52ahQuhJYNrFHdQ6rf27JestMP VQ4Zu3plVkmGbTf4G260ANSPMf7s2ic9ydl22BGJT+rsNU5xhiZQKx6jtCcRNhVf PC/vx3XVDYGll1PG3a9LpOh9P0bx6ZuBZxisRdvpQQ4DUQDsm+GGOkB/1ioI+uMI duElGFiM066/0MGfuV0u3T04clD/4OIz2qBN6jOpz02LQNBymz6V08R0lbBGZaNp LP2GBbDYZDJjqHfusGb6Q9mT90LQ6Yn7k7Mjx3+YjLesUOPAHgEOWr2ytD7MRl0i Fm87SKodoKUOCLiO8Jo/ =i9lE -----END PGP SIGNATURE----- php-7.2.34.tar.xz SHA256 hash: 409e11bc6a2c18707dfc44bc61c820ddfd81e17481470f3405ee7822d8379903 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfdBT8AAoJENyf+NPuWvJ/4KMQALrAHu6YRwhslzec5jFHqfKO c+Jo1RhWlAlZHBkUXXHvsrOwBBjzRUC2FITfsH6CyNXUhYTEp/XHg+gupQBsPeM4 ojYB+omauHYPgLgsvb7U0seqDKUzccIQdFgJkN7JxhjucTkdEiDmUsgkzgtbbtiy R4j+N+/5m82VM0kmK5gc5Yx66mtvrHvYGZza3Lixvk1R/R/cDgcsF2ArOYggBqIl IykVD6Yto2A4gUygJ8nObEPkUOQqTwXhvvHc9eqb3xXae4biRgzsdLD3/z6g0np8 sC9ZVweIf8o/htWYHQgzfmKty5I3yuqwlH1S0iPv4mnJ7aY6hi7XK/s7gypyHorp x4ihe1ghMZvDKc03iz7QUx6jzpKonX+jX2u8Axgjyx/714ndlvrKCJYVBzwNXQUv I6TTHOp+Ix9XyZnQP0HCfkiBjBL2PZPGiRtt6msjVhyuwTZt6elNEUBR77jYuaDa UYu9i1RnIExPVo9wcnVFp3kq+X6/VTlFNso/elgFV0DArQrUWYxwT3Jt+LAIt4Sa gDRiUpkTXxrmWKbDg9nJoeVTJ2sIUUt2hDRGPWDuAAVjeUKfeVY8k6AF6vPPCDfb NPYw9XPHEIITd4R8DRC+A/Zy4rzi+e1yG4pZEdGurwSzRcIxdA5NgKzg/gI/zt+o kGNNHvRhUX6YL0d4+Mao =KOFn -----END PGP SIGNATURE-----
Incremental backups with Btrfs snapshots
Snapshots are an interesting feature of Btrfs. A snapshot is a copy of a subvolume. Taking a snapshot is immediate. However, taking a snapshot is not like performing a rsync or a cp, and a snapshot doesn’t occupy space as soon as it is created.
Editors note: From the BTRFS Wiki – A snapshot is simply a subvolume that shares its data (and metadata) with some other subvolume, using Btrfs’s COW capabilities.
Occupied space will increase alongside the data changes in the original subvolume or in the snapshot itself, if it is writeable. Added/modified files, and deleted files in the subvolume still reside in the snapshots. This is a convenient way to perform backups.
Using snapshots for backups
A snapshot resides on the same disk where the subvolume is located. You can browse it like a regular directory and recover a copy of a file as it was when the snapshot was performed. By the way, a snapshot on the same disk of the snapshotted subvolume is not an ideal backup strategy: if the hard disk broke, snapshots will be lost as well. An interesting feature of snapshots is the ability to send them to another location. The snapshot can be sent to an external hard drive or to a remote system via SSH (the destination filesystems need to be formatted as Btrfs as well). To do this, the commands btrfs send and btrfs receive are used.
Taking a snapshot
In order to use the send and the receive commands, it is important to create the snapshot as read-only, and snapshots are writeable by default.
The following command will take a snapshot of the /home subvolume. Note the -r flag for readonly.
Instead of day1, the snapshot name can be the current date, like home-$(date +%Y%m%d). Snapshots look like regular subdirectories. You can place them wherever you like. The directory /.snapshots could be a good choice to keep them neat and to avoid confusion.
Editors note: Snapshots will not take recursive snapshots of themselves. If you create a snapshot of a subvolume, every subvolume or snapshot that the subvolume contains is mapped to an empty directory of the same name inside the snapshot.
Backup using btrfs send
In this example the destination Btrfs volume in the USB drive is mounted as /run/media/user/mydisk/bk . The command to send the snapshot to the destination is:
This is called initial bootstrapping, and it corresponds to a full backup. This task will take some time, depending on the size of the /home directory. Obviously, subsequent incremental sends will take a shorter time.
Incremental backup
Another useful feature of snapshots is the ability to perform the send task in an incremental way. Let’s take another snapshot.
In order to perform the send task incrementally, you need to specify the previous snapshot as a base and this snapshot has to exist in the source and in the destination. Please note the -p option.
And again (the day after):
Cleanup
Once the operation is complete, you can keep the snapshot. But if you perform these operations on a daily basis, you could end up with a lot of them. This could lead to confusion and potentially a lot of used space on your disks. So it is a good advice to delete some snapshots if you think you don’t need them anymore.
Keep in mind that in order to perform an incremental send you need at least the last snapshot. This snapshot must be present in the source and in the destination.
Note: the day 3 snapshot was preserved in the source and in the destination. In this way, tomorrow (day 4), you can perform a new incremental btrfs send.
As some final advice, if the USB drive has a bunch of space, you could consider maintaining multiple snapshots in the destination, while in the source disk you would keep only the last one.
Ankur Sinha: How do you Fedora?

We recently interviewed Ankur Sinha on how he uses Fedora. This is part of a series on the Fedora Magazine. The series profiles Fedora users and how they use Fedora to get things done. Contact us on the feedback form to express your interest in becoming an interviewee.
Who is Ankur Sinha?
Ankur is a Computational Neuroscientist and has just started his first post-doctoral fellowship at University College London and a FLOSS enthusiast trying to spread the message of FOSS and evidence based science. Ankur started using Linux a decade ago, when he was introduced to Linux in a LUG doing an install fest during his undergraduate degree.
Ankur loves reading:
“I read a lot and tend to get attached to characters from books quite easily. Holmes, Poirot (I’m a detective fiction fan), Francisco D’Anconia (fan of the book Atlas Shrugged, but not so much Ayn Rand’s philosophy), lots of random characters from books I’d read. I also read lots of Hindi comics as a child—Doga, Super commando Dhruv, Naagraj, and Chacha Chaudhary—loved them all!”.
As far as all time favorite movies go, Swades comes to his mind. His favorite genre is science fiction thrillers (think “The Prestige” and ” Predestination”). When not busy working or engaging people on IRC channels, he enjoys listening to podcasts and classic rock.
Ankur’s favorite food is his mother’s Chhole Bhature. Otherwise, if he’s away from home, his go-tos are Butter chicken, Butter Naan, and Chilli Chicken from North Indian restaurants.
The Fedora Community
Ankur found about Fedora after a distro hopping phase in 2008, and since then he has been a fedora user. His first memory of the Fedora community is an IRC workshop on packaging fonts that the Fedora India community had organised back in 2008.
Talking to and meeting other community members has been one of the most exciting parts of the Fedora community for him. “I found this great bunch of people to hang out and geek out with! It was so much fun, and extremely educational both in terms of technical knowledge and the social/philosophical side of FOSS and life in general.”
When asked what he would change in the Fedora Project if he could change one thing, he said that he prefers “Smaller tweaks” since “Smaller tweaks also allow work to be spread out, and that really helps”. Specifically, he would like to see more discussion on the philosophy and nuances of FOSS in the community.
"Perhaps we all know it so well that we take it for granted and focus on the work that needs to be done. It’s so easy to get bogged down in the work, though, that I worry that we forget the bigger picture sometimes. The end for us is to promote FOSS, and everything we do is the means to this end. So, I worry that the means sometimes becomes the end for us — that we focus so
much on producing deliverables that we forget why we produce them."
Since he works in academia and science, Ankur would like the Fedora community (and FOSS in general) to get more involved with academic/scientific communities.
“I think we have an excellent platform to enable education and research. NeuroFedora is a start in this direction.”
He wishes that other people knew that the Fedora community are not just OS developers, but a global community, and he’d like folks to just hang out and communicate even if they’re not contributing in the traditional sense of the word.
Ankur tries to help wherever he can, especially if newbies are involved. Nowadays, he tries to focus more on NeuroFedora as it fits well for his day-job and there’s so much to do in this Field + Open Science.
Ankur learnt most of the things from his >10 years of experience in Fedora and FOSS. He had learned theories of software development at undergrad but got to experience practical implementations from his colleagues in the community. He is a firm believer of “No question is a stupid question”. He adds that Fedora is perfect because it gets better as you start working with it.
His piece of advice for anyone thinking of getting involved in Fedora is to just go ahead and start. One doesn’t need to know anything at all. All of it can be learned over time. Secondly, don’t focus on tasks. Yes, that’s a good way of learning, but it is far more important to get to know the people of Fedora! As one meets more people, one learns more about how Fedora works and one has way more fun working and learning!!
Just like a lot of our community members, Ankur struggles from time constraints. His new challenge is to find more time to work on FOSS and Fedora. During his college years, it was to learn more and more.
One of the challenges Ankur faces about promoting open source is to explain to non-FOSS people that Windows/Mac aren’t the only OSes present. He thinks that having Fedora shipped with Lenovo systems will give a start for the community. It makes Fedora and FOSS more "official".
What Hardware?
Ankur has three machines and runs Fedora 32 on each of them:

- Thinkpad E490 laptop
- a custom workstation that university IT set up for research work
- a headless MacPro5,1
- 2x Microsoft Sculpt Ergonomic keyboard/mouse/numpad
- Netgear wifi extender
- TP-Link TL-PA8033PKIT AV1300 3-Port Gigabit Passthrough Powerline Adapters
- Moto g7 phone with Android 10
What Software?
Fedora 32 workstation, and server on the MacPro.
– Workstation/Gnome3 with a few extensions: caffeine, pomodoro,
– byobu with tmux: multiple sessions: default, work, fedora
– taskwarrior, vit, timewarrior, gnome-pomodoro, gnome-calendar/evolution for calendars
– neomutt with msmtp + offlineimap + notmuch for e-mail
– vim for *everything* possible – vimrc link
– qutebrowser, weechat, zathura, vimiv
– syncthing + dropbox + git for syncing/version control
For research work:
– NEST + lots of python and Gnuplot for analysis, LaTeX for writing
(stuff from NeuroFedora!)
– inkscape + gimp + dia + freemind for figures/mind mapping
– jabref for bibliography management
Other bits: – occasional gamer?
– Oad + endless sky + openttd!
PHP 7.4.10 Released!
The PHP development team announces the immediate availability of PHP 7.4.10. This is a security bug fix release. All PHP 7.4 users are encouraged to upgrade to this version. For source downloads of PHP 7.4.10 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. A migration guide is available in the PHP Manual. Please consult it for the detailed list of new features and backward incompatible changes. Release Announcement: <https://www.php.net/releases/7_4_10.php> Downloads: <https://www.php.net/downloads> Windows downloads: <https://windows.php.net/download> Changelog: <https://www.php.net/ChangeLog-7.php#7.4.10> Migration guide: <https://www.php.net/manual/migration74.php> Many thanks to all the contributors and supporters! Derick Rethans P.S. Below is the verification information for the downloads, which is also available on <https://gist.github.com/derickr/bc9f10ff9ab15df3d8f077b1cc575463>. php-7.4.10.tar.gz SHA256 hash: e720f1286f895ca37f1c75a2ca338ad2f2456664d7097298167181b25b212feb PGP signature: -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEWlKIB4H3VWCL+BX8kQ3rRvU+oxIFAl9OU74ACgkQkQ3rRvU+ oxKnTg/9EYFnzv3ENm2IdZGDuaCxVQ09WatsRUCaCwpbgzcz93G1ouasfnmjJ/zJ DW0TGJofGoKoTRSr46zM4MtalobzRGIjRS+4voV8TKGQsKuR5j54I3jwkASb+8Ar 3LJX6YOYbP0ZuaZ1br5Ee2RC4rPhDVOLr2vjaRz24SE3uIlXogNBfheTvpY8np1i k0th7tg0a1y06JyzqTz0x983vSwQPtPGrdIX03cL9VYtpF/C6F8Lno6XSwhNs+Qs qq3FO5j1FkLs5DqAoNpGcuIVanGhYqjBBA851OY0l5SyzDNxxaPT62qg5k4BqIck /GkJRkfJ8sT/9b2hrMz1LO+iWli9JWstiNwGqvcIruOmTb1Ca3rP5TZkb08yTq8Z 2b1YUNQb34QizrjHxo9hkaVd8zAPdQMiy9WTVpzRb4w9K0SD1ipNJF5lJqnU7sIj n2n0fzmU0JIkLTDeDXC+JrW0rpLbCDCZ3cD7VYsSJRWeMB3YGSHEYC84te2qwvbw 5Wb0nHMtve7PQB2emwQaaei5VTLPmo90j8t22R28yT3xYGfDw6IMxovs+L0kkqch 45saXPi3GPg8fCDUwoRX2VM3VNAmlq2+NFUZf0VUXusUyTin97qEVkXOcT4R/tQ/ Y+oCNRWdReXPFI4HFFCRHts/+ZsFaCPQU/npiUHR3a5hmuNUU+4= =gnGa -----END PGP SIGNATURE----- php-7.4.10.tar.bz2 SHA256 hash: e90bfc9ed98d24e53b51ffd4eb636cf5cd9d71ed7c6f8e4b6e9981e9882174e7 PGP signature: -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEWlKIB4H3VWCL+BX8kQ3rRvU+oxIFAl9OU8IACgkQkQ3rRvU+ oxIUyA//TmgEA/vO+Crnv04M1Ty0iBidfHK5UnIfM+tusqtyj88PAFOkbkSZzvym JM/m+TuyMKLWyirKfI0MFhSvxpXFPfBCbS6GMnrL4uVlwf3jxyHmQoQI0c39bPcV xx1LNYeLesbu8qtPYBDzP1GIW8PRM3Efmu+H7/Sb1SjT4ngHcpdlzudqqF3y+I8Y ZmgwDqC4XThglJoO84Z7ahvxgxqarQ8GX2VGWnnSKoPu6RB1ZZkXo2GP/MIf3xhv kBcTk1Km3LbSsPMWfSSZ7xFzTP2cqM2JKVI7g14YNXq92cfvZJyhHF4KOKhGoqOP ldoK/zwMLKJMymOHo1SWRyQKzWipIhsdC46BBOWoTTeKMPidSevY3ZEuyiVPFZIe 5RkiCFJrNS7UbvT8wvaJigHRuxDxXZmoZ1n3L0gcmxpQlJ48zlsVvjn6litOI6ge VQl2M8wMITcCC9e++iKhMky/PdTEHvp5qSrP0FlrRHnlJ3hqVpQIJCAieg0Qlgf4 lMdSQ6aw+xRmWMx1mkLA+OGYmWdfAPEMl3JOfjG/cTPcxP+8rW1dANny+mbe0G/k IPlDtsl9lNxU93/66g9+dkxA9985cG1EyXEy848RXtamWEg2zGi6GADqvfTigCrB sObn0+la3iOb7Sq4XLCY9KkYXpqAb0qfRw9+oE7cgI4z5+Ion3E= =a9kp -----END PGP SIGNATURE----- php-7.4.10.tar.xz SHA256 hash: c2d90b00b14284588a787b100dee54c2400e7db995b457864d66f00ad64fb010 PGP signature: -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEWlKIB4H3VWCL+BX8kQ3rRvU+oxIFAl9OU8MACgkQkQ3rRvU+ oxLGbw//dWhAOQyrzCXb4Xcbm83IS1n457ZzwOgkFANcVL8oT/3AgXJ0fiBfgYVI DwTOb781s7rTnV6isRgQi1nRX7PC3Bg7pr2wjINQx8zQQmYl3xwlvdS+Be2ADIAB 4UwCRJPT22YyqJL0YO/z4MhfRDqLy6DrY8SnorXLkPsAzlfECz6QSWNz1VUS2l0G ozfay1ENTjFsZnxXHMIpcZCN0UENIYdy8cZe7K8b9HFdCq8n/cgVqdYfNOZsvFPG BsygoZZ0nvVvru5Ot8oa4g4/IU+3jDpnFvV80glO8Az4601au96uwIzx2sD7ALm9 uJt0Uie8baV85fA6kBm5jy3xHj63xpqIRpRjTqInIwUvFR6fFYsVA8YZLbubq0Jz mdZCx3g430qz8kMmSC0i4JEX8ZeIQEN0x1Bl2VgoYgeN4PYKBBTu+vy6EVTtLDIB yAdwtlI5y8qHnVzEvXWpyUAeXFzVAsp+TbJgbFPOCbdbNjM2SKKSZDVUZC+XtCRl MvDNXwS3itX2KjYbRliLZl/I5y9Me+uyuaZKlP4DDefvYoxvC+5E1yp/fDQH1dDa wQqUFku6+was4zs251XrSilxf2Vt1rCYtBTLTOpeDY6NpviJ0zmjGbZm5C6UnmKG aZk+X2zEDfcvQ2kvFGBYUJLwN1HCLxIXWRTSsEjXKZdXdikZLYk= =vybB -----END PGP SIGNATURE----- -- PHP 7.4 Release Manager Host of PHP Internals News: https://phpinternals.news Like Xdebug? Consider supporting me: https://xdebug.org/support https://derickrethans.nl | https://xdebug.org | https://dram.io twitter: @derickr and @xdebug
PHP 7.3.22 Released!
The PHP development team announces the immediate availability of PHP 7.3.22. This is a bugfix release. All PHP 7.3 users are encouraged to upgrade to this version. For source downloads of PHP 7.3.22 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: <https://php.net/releases/7_3_22.php> Downloads: <https://www.php.net/downloads> Windows downloads: <https://windows.php.net/download> Changelog: <https://www.php.net/ChangeLog-7.php#7.3.22> Many thanks to all the contributors and supporters! Stanislav Malyshev, Christoph M. Becker php-7.3.22.tar.bz2 SHA256 hash: c790b8172520b2ff773d6cf80774ea0a678a2f16e8ee6b11d68802094448689e PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9OGrMMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2vLwQAIr26thaKdmq7D8MZLHWAQCB7Wwd1s08nVlssFj1 DKU6t5bEmB48nAqe8fOA/jQSnR8tZRviBMPMFwsDxp6KlOAJtJ06xA3tGg8Er9G/ BapEf5KGgOfXSgrwH9ZbmiLCUsB8Gw5q70NU+D8XPd3M78HlXE70Rv89V27i9Q1a F8kQ3WMAAGmb23XuHd8RXVr2jsLnEAPDj3G3Q9BOfeYFuoguFubb1o4PgYzEj6LX 0+aoutgwJGuXw6bp9rPOGdFNX1gmsltovuYEee96FVvsIH7tbBjbd7z+fNZpmhs3 w8N5HNNaRUZBB/RopUklMmjv1G0TxavfJ4domy3Qd/DtVWVT5gdpuQDgwgMZUH5c Gv/zBrrebOquIR+gnYu/o7E6E2yQ1kIpm+XdFxmcYnEEze3IRJpSqYmaD79v/tKD Ais2SWXvaGrugSFlPzGbVJuDNKj2wTdD8uag549fJnTNIrSFlOBnwkOUculgesPf Jaq5k1isnUp451yzljWpPiup50g1xPa1XEJ5F4xLEpMYWSocanfZurjZIv8btjSE oopez94judITEWfeEbtTwtITCcDY4usvjMCl1JAsR62sRJaHdRmnG0inH+YLXvOj TxzQzAiHMegPukAlAqniJ+QKosNSg7pX9CWJwpPcQMN96IwDitripqu06JQOE1uo JFGT =TJ4u -----END PGP SIGNATURE----- php-7.3.22.tar.gz SHA256 hash: 759426cb4054e3f23316c39710faff0bb8063fd0ea50fc2c5efa590429af1a22 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9OGrkMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2nnIP/Rsg0X33u0wIzc2WRq67auIuniZBDPWPsD+iVv+F lMlRH4Q2WV2HXOuEuRji2js0p9dAbhna5SInKqxCor8kWNyQ71bHLJ/tT4tby8sE fwbgUvOWKt/JeiYCSsn/AAVy8QuJzwPYxDKrrxMmPhBhOU2DjkhjMQuLIR8M1QTg n1yA2XN7mdLEaj44suktXskSu/SyFGcSwWPmXW+NhdfuTboPFBOTAKWk3af7+9eo gr/pxTVR3egnQH3+LYBNjDUaTWJQ/rNGFjrfmgy6I5d1NdiSdUN8PgNYVi4gzqM6 4d0idwqNpIXVA1pQt5vZFiPIKnFAEZZy2Awgh6U7oU8tqxqyZ/CEgMv512hSikOq lJLoBWEHZBsEtJ+i81tCFdzids7d8f8FPWpyjb4UUntCeh4RtKr+Ur0PIxeWpA2T vSf7mH1d/SLGurgTudNR96T/I1tFi8qpqRGCegfGLLOk5nqiV/e0hpw7w2I1XHaw LMCdKlJ3/40onznlSp57z0Oq00A2ASuktCaEHvAAoKDcG3dtr/xInFEgBR646sso o5+GzRsS1s69Na0617tIc3MbdhUOu4GTaEaoPyIjGWIp4DUAw19gvvOP3xyh9S25 lHEqu5ehqBzU5wMSAsGJf2RAyX4OhnmjaBcgK1UFDomdOEHMF3caBXbxJEkhGaNK Jg9D =xhuX -----END PGP SIGNATURE----- php-7.3.22.tar.xz SHA256 hash: 0e66606d3bdab5c2ae3f778136bfe8788e574913a3d8138695e54d98562f1fb5 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl9OGrkMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2cD4P+QG/cbbXRlKVZ4VsqXdgaZbBLH4XV72kkrOMq8VG 9ioOIClKNq9y932vK8PGUCmodZeWbrQ+EUJTpj5aP+g+jb7nl415wDfu613FWrZf TzEdQAROMY7TwkmleK1UcHgla9a0aASsgU5xEf1JJftpuN1zhh0kTUPij6e2HEbp +C92hs2bCSllLznSgl/lsPIEoSlwM6hH3xhyJp+UOYr55DWic9t23NpIgzc5s6Fd 1RFcuFEzo/zZ89zcV7JvzIzw5oPDNq17iVeRUKf92P464QYZG4OtZsBuAIGr/Qpl nob2XkFMTZrxGvgAL0lqWQhw6BoJhNiMYIq0I2P0P40hRkSU7DX6avNOeHdXGhOO uD8LKWOh+tpz4NRrIz5PyyajWOAvuWzCW7U5C8dE7bvyjZYVgBahcZscO3+T81qm mRwf6DWNDu8GNvAxe9LqYjBl2tY7WC90L9G3ky7RmlyspUbmSiyiJrZ4/N6J12rr VIq4/3DH0zqqCMMowFbdE6DF+rPtidEqgGBlCLgu8gXjqmNEo2GrbV/BGOmxax0K PIgMdH1tLjmh8HcXYnjhq65o7PDzEE4Y+7LemZZbHL+4wX0y57skVyFgWzR9AzAA 8DEwzFcSSw5KQQIDJP1ECqtjg0FYlqMAmW8tJHGg2OV6BtvzeeqOndktdJ3mVyOq LcTB =bUDc -----END PGP SIGNATURE-----
PHP 7.3.21 Released
The PHP development team announces the immediate availability of PHP 7.3.21. This is a security release. All PHP 7.3 users are encouraged to upgrade to this version. For source downloads of PHP 7.3.21 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: <https://php.net/releases/7_3_21.php> Downloads: <https://www.php.net/downloads> Windows downloads: <https://windows.php.net/download> Changelog: <https://www.php.net/ChangeLog-7.php#7.3.21> Many thanks to all the contributors and supporters! Stanislav Malyshev, Christoph M. Becker php-7.3.21.tar.bz2 SHA256 hash: dbb0ea39e7e4b3814d6d1dd3ac5983aed6c38cdf55464645da11a8b134a9f7a7 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8pGIwMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2JkUP/3PYJ9MDXc/K0wJ0QO2Vv0WHRpKoi0qGCi/3diGY Gw1JV62xa9L5etkIUizrDEqTlWyKRh2aDgMgKgqF9+CBgF7JEfad9jDkoxUDlb+1 k44pe2qwkep3vR+W/jQKROn/YdSeaI2/LfoI+FQ+85eCr8dlCDpR2LIvq47NnAIH ac17up8iuw7EQ9Yr+xUU/IJ800cdzvyKJxfb83cVqVS5kV5dmsOYfVZlahgHh5J/ DUC87/wXaMndaAo/4auG0Nrfn27GVqnKNwgLTm4Qd/kh2SJm+IHPV5FAwGq1bgqb 1a0BnzjE8JuJSuMkITgYjkY6Rj5Qrs0OGQg1LciVxVwtFdpUrv2Azw6EicrbHb5A 9wrZndcGqz4pM+6gLkKCBYX6MXGMJR8dHCwi3ILejzpQ63rNVmzhIVvUjMTkSj6e KUKbm9wXvv4SkTDVnZy7wFKARzlnsTp5sNuz+KKKzjCG8qRmjY0dVqnCa3adaEU3 gHK32Hm3yJUViFqkjiFiH8YSNeUpCwOyWmaYTejkRm+KfIIDZNavbWUr4+ncZvZ3 zTcZG4638E+SBPG6IQlzL76oQKj3v8Z2TmidYBKJva19pweBQNis01Q4q4wjoB2N ofv/URSYijs9kn/GGAuscbrXGhxOrOW9V8bpyCQzSa2ng603Si3K6fEvm3EejgbQ Fb6B =1vns -----END PGP SIGNATURE----- php-7.3.21.tar.gz SHA256 hash: f5d6e136768522edd025c4a97b9b6a98a2fda20b68445cbc5ca2efce1e73c7d0 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8pGJEMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2v6QP/3Q5fA6HOIGAI3Msi9n+ESHVjnt8/Hinp6KUFcj2 OKZ5pYsVCONcGeXccQ5DIiZ+TS6V+lFnSdNYWZVmJmkOdzTbzZt9G81QXauLTObB IeXS69wb67OUdqWwwhtZKfcx+ubrQz5YlIS//+N2s/7oN3LJRLRv82yI8kD1YYkG GYFZ95IFS/8UhROU9psrPUX7OC7fkan/V11pFtdenmWBiHOeIki5rtBK1jYd3APb pL3wuQTqxGET/bK/91wAqL7UmHw/L/dzJC/azE29EArplvsMgmq/IZByey3CRExV xpjfIpOZATqZp4GjUQo7KjVcPS9ePgs6bvjcyli59+TF9xyjrQxp0hCJqK4KASXZ lUAhlsCo4Xvpp1JrhhZUuq7ts/FQj1fOLNb3cJ1sNOokwe25Hux4B0nc5AsAZHFs eExLS1Ssvf49QrZEZIVMryPD2YJtRlHm+deMo0ICZq7DqtoLTBNnBgLfIoG+GErz 5lFYuaiRNZ3mMvlgLFQUZBp28TZTMV1S5JAtp2iMc+h0OFnXk/tSiGBfOzjMoFAF dia6vP3C2AhV+kVm3d2mdicsSNOFlUDvmhM55VR2/IV1A/6UPsBO7rKo2ow2r8Rz cdVD29t4cOAV5janwajusT0Yj6Bnjs+vNE6sgoaeZbOQ/F1iaWEDNYyPtdk1Hs2q sB8l =haxj -----END PGP SIGNATURE----- php-7.3.21.tar.xz SHA256 hash: 4c8b065746ef776d84b7ae47908c21a79e3d4704b86b60d816716b8697c58ce9 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8pGJEMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2R44P/0KK8tU7FqDXrPhOlXEAtAB3Uaocw54A7gG/HwV1 QV4zUdlITUjuLAi8OHIWJmD/9ixc2EDnD35qkbQFP/8XnUoOZu2QkqKoUeIH5vP5 snmLY9tS9P6x/4GvV5zBtVNS0SgkTU/7ZUrL5QR7HxO7sBr2BZp+j2C2y7x23E7c zGODXTTuY3U/57cYZdUsETxtI/MMI4N+gw9ypTPoLXtnmIaWeMvv330PlzRdAHw0 cNJ0BJYKmY8cxD5XQ+dIbUUKOo68+qjPdqlZyRQZ/zYxvJx60Rs3S7QzCb4IhuAz aKPL/96Vq0cxuoEw3yBc/Umbh5xvbzjUmArmX0W6jGd11BhZisWXMgdq3KZa6kxY zEVEL02ZhTI6A3NXao0w9/bXJUBJjyEVF+bIdy1sddLQTzVr8W6JC8vNM0U8Sir1 7TEv2ubQNnG1yE/v/eLRNThH5S4i6PZxdp/EhT5ZY36wYcgQ7hAjlgr3P4fwUzlu 6ggsApc/jdo8MHKEPyhsqX+Va5Pm9hlvsZwx+8sJ0Z5hGzkf9CCJnhaW8g9NsdPx DTxZoZRZt/t62q0ECZDAFbplvcwLAFWc26099In/BasJxClKzWIu19Tf1nyuKLrZ 6cdXUqJeV6MYXtV8p2Lq6PegdwD9xVgk8gqhwsWTlI4mRwMedJEMMVWfh4DJEZzE K5CU =2e0a -----END PGP SIGNATURE-----
PHP 7.2.33 Released
Hi, The PHP development team announces the immediate availability of PHP 7.2.33. This is a security release. All PHP 7.2 users are encouraged to upgrade to this version. For source downloads of PHP 7.2.33 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: https://php.net/releases/7_2_33.php Downloads: https://www.php.net/downloads Windows downloads: https://windows.php.net/download Changelog: https://www.php.net/ChangeLog-7.php#7.2.33 Many thanks to all the contributors and supporters! Sara Golemon, Remi Collet php-7.2.33.tar.gz SHA256 hash: 97bb6b88ddfa44f36c4fc84a1a718faef476f61b532d26ea29e3e9f6cd79d839 PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfKRDcAAoJENyf+NPuWvJ/QYoP/3slqXlp8yx5juQEsMf56na1 Qnhf5NvKCJilANcDQb7COGYCPiO9Bg8WoqIdwXIgtYlPGUxTtohiuqr6BlN2PqAA PhtUE7cmrXsJtIoOEwdEBuyxM8mjdOy1gld1fHr390OefcjvmT0H+mKeyJmPmvpk xZREJjHF1nHmbD+7i9Ne2EayU9VFRxiTKLw7/QDJ4vezyZyVPzmpN6V0ROtjIoS+ TbCUQeqKqENGoeLB6sZfjwizX4oK7NPrel9LbjaRjnXObYixCmpXi/luNP+F9rgK Visxdla61vqn6bTZrxws/EIilmXrdl2X8BN7iCkgAFP3pHjZ3WpSc6kul0gY1nyz CwCU07vhmbeSOksoz4zBMhUvLUYsAMCBXqxgvlKTSLzwYzqPRjSXJn9Pc9cMPd+R ZO1DSFIPVmr6VKYLWip2DN8sKDYfnEExxOaqHo2x3Zcwnam12iiYg+X5xD8MoXae 1+3QrzcF/RYKHCF6czsaluJUutBDtJbk8C9U8F1leD4cMCB6cMxQRVIagJyV/Hxl 7tFRjksz8dCNP+bC84lDQBOyaBVuHcfPIyGdVqqX8Z6PqDqimyNzsc1Agsv8dCKE MulXNBfzMHi5ea+tYL3UUVrNcLlUKSAnxizupJt5BfkuzEzfRS7jIeM6XdRmTocM I1JfnPnwMt5bpFzo56BA =5pmK -----END PGP SIGNATURE----- php-7.2.33.tar.bz2 SHA256 hash: 03dda3a3a0c8befc9b381bc9cf4638d13862783fc7b8aef43fdd4431ab85854d PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfKRDeAAoJENyf+NPuWvJ/u3wP/3Kzzqt8EUwhRlA3fCV1jZrX BnhsteT7Bpe9R7WxNeLWE8FhuqVWRHDIPExjyBf5on/s/XYLCiBHFY0kPdb+wY1o IQ+VSRmggs4ca2wTOJEZXYYiTX8NnWMkoW+NihkD5bxlzus9oxDl+tovucyP1dwc aAqtW9CbA+3lo/UE5iqQA1EPWxsmDNrKIqHsApd5BgPPFW/l0Bfr+LqeY4s2LO4J o9Kpx9NztaF40mlAd+89Hao0iwkI2CYkk8M1UxT14VPPRm0z59aHj6aS9Yp5DCWt vu+3X6ttykRuD1/L9/aX8Hngx8Mptjyxkvp5vskaSg624QUsG8zR/3cTTCfK1fnI fOQwePd6GYBxwqzdOLp8UYaOA19Xy+lOpJL5aqTXD9PQH/jqy8WSZh5JRvpsHYTc ZlLTTJG1Vp44+RZtrrZM/9KcTfUk5E3FNdT+oXVZBHXrQINil9ziZUXNh83BlVLA ytzf8LfHup+BIWqWuTnzXCTN4JbhiwlnP3ospvHDXIr6UIt5P66gzmUnMM3O0Isp Uui/eTiModfFeaEMK730zl46npu90cieyar2CZDIpEDyjDyyTYyQdi3RUHSfZeTZ cfVDuBsvVqM31FV7kxHSDA1dcDjFSQcb/S8YeTsZkEbCZWC5gHTRkUmIktq7MBjy Ojej5xzwDPJmwhB5X1o2 =Iamw -----END PGP SIGNATURE----- php-7.2.33.tar.xz SHA256 hash: 0f160a3483ffce36be5962fab7bcf09d605ee66c5707df83e4195cb796bbb03a PGP signature: -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJfKRDhAAoJENyf+NPuWvJ/3DQP/3vgghiSAL3odrN4gTw3ZwS5 RAFpNMTtOD7/jWzbTCVca0TmocjNLoS9Mp1GpGJjyaz+APSPuWMqvi17S5TgU2hG eGcaCyuRA+U/37uNUR7fO8gpow9M0FvMJ7XZABXVql1L3gQkrZ6fTpI22BQ8cZGC k4QoYMLomrU0aSLMuUUUkNqTKe3/mQjkgbHg9lPEeQkCDDHtLjzqPXl9vzDrDj+S RWploMyixvh/e1HSinMzApYIjnUQ4y1iMN8IFkZUhj9TzX6cNdNiMhjpemsQmX9I YZwwnxZ9uoBx5guU5zqhhW/Ajm8OkbRNobXuizdPHMrKEOPyydYZYYEoVJqGmhtB 02MKYMVfxz5cNBA543fiMoDNb+1AxNMD2CKYmlKbeqqt1zNvauZ/49H8AJhVJGUA 3ihPuJqEUFIleP/bujaHilLLIM8+N8VzOvUEAsColsxoYckZeamZNYppVb3YGoCD nQUuwAUEXAUbZiZsSQMZJMybjpjS9whqUKeLIjP7MrDDBB2jP+D34s2SVJmTJdyU dKmAxiP4WLHfkUulA+gk7cmEzqKBrmSgHhQCdHvSJr0Ng6oWSSouGbgFd6dnv8+h qPBx48s7g0+w6ozEs04xQ5Y8RRdxBj71nPL20aJHWQmyfMbJmDwfwuTrEpN4zHD6 ONdwHXj1oT6gXu5OFuEZ =Ku/n -----END PGP SIGNATURE-----
Spam Classification with ML-Pack
Introduction
ML-Pack is a small footprint C++ machine learning library that can be easily integrated into other programs. It is an actively developed open source project and released under a BSD-3 license. Machine learning has gained popularity due to the large amount of electronic data that can be collected. Some other popular machine learning frameworks include TensorFlow, MxNet, PyTorch, Chainer and Paddle Paddle, however these are designed for more complex workflows than ML-Pack. On Fedora, ML-Pack is packaged by its lead developer Ryan Curtin. In addition to a command line interface, ML-Pack has bindings for Python and Julia. Here, we will focus on the command line interface since this may be useful for system administrators to integrate into their workflows.
Installation
You can install ML-Pack on the Fedora command line using
$ sudo dnf -y install mlpack mlpack-bin
You can also install the documentation, development headers and Python bindings by using …
$ sudo dnf -y install mlpack-doc \ mlpack-devel mlpack-python3
though they will not be used in this introduction.
Example
As an example, we will train a machine learning model to classify spam SMS messages. To keep this article brief, linux commands will not be fully explained, but you can find out more about them by using the man command, for example for the command first command used below, wget
$ man wget
will give you information that wget will download files from the web and options you can use for it.
Get a dataset
We will use an example spam dataset in Indonesian provided by Yudi Wibisono
$ wget https://drive.google.com/file/d/1-stKadfTgJLtYsHWqXhGO3nTjKVFxm_Q/view
$ unzip dataset_sms_spam_bhs_indonesia_v1.zip
Pre-process dataset
We will try to classify a message as spam or ham by the number of occurrences of a word in a message. We first change the file line endings, remove line 243 which is missing a label and then remove the header from the dataset. Then, we split our data into two files, labels and messages. Since the labels are at the end of the message, the message is reversed and then the label removed and placed in one file. The message is then removed and placed in another file.
$ tr 'r' 'n' < dataset_sms_spam_v1.csv > dataset.txt $ sed '243d' dataset.txt > dataset1.csv $ sed '1d' dataset1.csv > dataset.csv $ rev dataset.csv | cut -c1 | rev > labels.txt $ rev dataset.csv | cut -c2- | rev > messages.txt $ rm dataset.csv $ rm dataset1.csv $ rm dataset.txt
Machine learning works on numeric data, so we will use labels of 1 for ham and 0 for spam. The dataset contains three labels, 0, normal sms (ham), 1, fraud (spam), and 2 promotion (spam). We will label all spam as 1, so promotions and fraud will be labelled as 1.
$ tr '2' '1' < labels.txt > labels.csv $ rm labels.txt
The next step is to convert all text in the messages to lower case and for simplicity remove punctuation and any symbols that are not spaces, line endings or in the range a-z (one would need expand this range of symbols for production use)
$ tr '[:upper:]' '[:lower:]' < \ messages.txt > messagesLower.txt $ tr -Cd 'abcdefghijklmnopqrstuvwxyz n' < \ messagesLower.txt > messagesLetters.txt $ rm messagesLower.txt
We now obtain a sorted list of unique words used (this step may take a few minutes, so use nice to give it a low priority while you continue with other tasks on your computer).
$ nice -20 xargs -n1 < messagesLetters.txt > temp.txt $ sort temp.txt > temp2.txt $ uniq temp2.txt > words.txt $ rm temp.txt $ rm temp2.txt
We then create a matrix, where for each message, the frequency of word occurrences is counted (more on this on Wikipedia, here and here). This requires a few lines of code, so the full script, which should be saved as ‘makematrix.sh’ is below
#!/bin/bash declare -a words=() declare -a letterstartind=() declare -a letterstart=() letter=" " i=0 lettercount=0 while IFS= read -r line; do labels[$((i))]=$line let "i++" done < labels.csv i=0 while IFS= read -r line; do words[$((i))]=$line firstletter="$( echo $line | head -c 1 )" if [ "$firstletter" != "$letter" ] then letterstartind[$((lettercount))]=$((i)) letterstart[$((lettercount))]=$firstletter letter=$firstletter let "lettercount++" fi let "i++" done < words.txt letterstartind[$((lettercount))]=$((i)) echo "Created list of letters" touch wordfrequency.txt rm wordfrequency.txt touch wordfrequency.txt messagecount=0 messagenum=0 messages="$( wc -l messages.txt )" i=0 while IFS= read -r line; do let "messagenum++" declare -a wordcount=() declare -a wordarray=() read -r -a wordarray <<> wordfrequency.txt echo "Processed message ""$messagenum" let "i++" done < messagesLetters.txt # Create csv file tr ' ' ',' data.csv
Since Bash is an interpreted language, this simple implementation can take upto 30 minutes to complete. If using the above Bash script on your primary workstation, run it as a task with low priority so that you can continue with other work while you wait:
$ nice -20 bash makematrix.sh
Once the script has finished running, split the data into testing (30%) and training (70%) sets:
$ mlpack_preprocess_split \ --input_file data.csv \ --input_labels_file labels.csv \ --training_file train.data.csv \ --training_labels_file train.labels.csv \ --test_file test.data.csv \ --test_labels_file test.labels.csv \ --test_ratio 0.3 \ --verbose
Train a model
Now train a Logistic regression model:
$ mlpack_logistic_regression \ --training_file train.data.csv \ --labels_file train.labels.csv --lambda 0.1 \ --output_model_file lr_model.bin
Test the model
Finally we test our model by producing predictions,
$ mlpack_logistic_regression \ --input_model_file lr_model.bin \ --test_file test.data.csv \ --output_file lr_predictions.csv
and comparing the predictions with the exact results,
$ export incorrect=$(diff -U 0 lr_predictions.csv \ test.labels.csv | grep '^@@' | wc -l) $ export tests=$(wc -l < lr_predictions.csv) $ echo "scale=2; 100 * ( 1 - $((incorrect)) \ / $((tests)))" | bc
This gives approximately 90% validation rate, similar to that obtained here.
The dataset is composed of approximately 50% spam messages, so the validation rates are quite good without doing much parameter tuning. In typical cases, datasets are unbalanced with many more entries in some categories than in others. In these cases a good validation rate can be obtained by mispredicting the class with a few entries. Thus to better evaluate these models, one can compare the number of misclassifications of spam, and the number of misclassifications of ham. Of particular importance in applications is the number of false positive spam results as these are typically not transmitted. The script below produces a confusion matrix which gives a better indication of misclassification. Save it as ‘confusion.sh’
#!/bin/bash
declare -a labels
declare -a lr
i=0
while IFS= read -r line; do labels[i]=$line let "i++"
done < test.labels.csv
i=0
while IFS= read -r line; do lr[i]=$line let "i++"
done < lr_predictions.csv
TruePositiveLR=0
FalsePositiveLR=0
TrueZerpLR=0
FalseZeroLR=0
Positive=0
Zero=0
for i in "${!labels[@]}"; do if [ "${labels[$i]}" == "1" ] then let "Positive++" if [ "${lr[$i]}" == "1" ] then let "TruePositiveLR++" else let "FalseZeroLR++" fi fi if [ "${labels[$i]}" == "0" ] then let "Zero++" if [ "${lr[$i]}" == "0" ] then let "TrueZeroLR++" else let "FalsePositiveLR++" fi fi done
echo "Logistic Regression"
echo "Total spam" $Positive
echo "Total ham" $Zero
echo "Confusion matrix"
echo " Predicted class"
echo " Ham | Spam "
echo " ---------------"
echo " Actual| Ham | " $TrueZeroLR "|" $FalseZeroLR
echo " class | Spam | " $FalsePositiveLR " |" $TruePositiveLR
echo ""
then run the script
$ bash confusion.sh
You should get output similar to
Logistic Regression
Total spam 183
Total ham 159
Confusion matrix
| Predicted class | |||
| Ham | Spam | ||
| Actual class | Ham | 128 | 26 |
| Spam | 31 | 157 | |
which indicates a reasonable level of classification. Other methods you can try in ML-Pack for this problem include Naive Bayes, random forest, decision tree, AdaBoost and perceptron.
To improve the error rating, you can try other pre-processing methods on the initial data set. Neural networks can give upto 99.95% validation rates, see for example here, here and here. However, using these techniques with ML-Pack cannot be done on the command line interface at present and is best covered in another post.
For more on ML-Pack, please see the documentation.
PHP 7.3.20 Released
The PHP development team announces the immediate availability of PHP 7.3.20. This is a security release impacting the official Windows builds of PHP. For Windows users running an official build, this release contains a patched version of libcurl addressing CVE-2020-8159. For all other consumers of PHP, this is a bug fix release. All PHP 7.3 users are encouraged to upgrade to this version. For source downloads of PHP 7.3.20 please visit our downloads page. Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog. Release Announcement: <https://php.net/releases/7_3_20.php> Downloads: <https://www.php.net/downloads> Windows downloads: <https://windows.php.net/download> Changelog: <https://www.php.net/ChangeLog-7.php#7.3.20> cURL sec advisory: <<https://curl.haxx.se/docs/CVE-2020-8169.html> Many thanks to all the contributors and supporters! Stanislav Malyshev, Christoph M. Becker php-7.3.20.tar.bz2 SHA256 hash: c6ed7894911acfe075381c01b07745d92e9259fac510a849f742edb6b95c89de PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8EK/oMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2S4YP/i9GiSHcvrhl0QGag8+fyT/HSdn09Z6n19on5NMB XjjhttphYVo2B8qoHxXCGT8zQ/Tb21U7lkTs8gYSCFJtES0QAk8JnApMmBTftLuX uczF29JX5xbL1uLRpAQ7nXUpNFULANz223xfJDx+lgyV3r1m3J+djSkj/eueV32X 1vivMeLoEtVxGtNJoGpL8FBUz2ryDuGuC8wMZA5mgwSVwfcyEyOfn/PKTKzK+Rsu /fAIwdWJyL1mM4vrsscW3f7acpGN19vgSqy/iMAok7bA1NeGYWhN80dbXA4Ms91M 3t0RtQIPwlhGYQO5SnxGFX8Oh0EJetoOihRq5r6BxgCJbCaiZcNSaCG/xa7ontuy yqFOHFarAUXJUH+EJl1V2NQ742qNY2NHoIIXdpZBa7iQGHnHW/wIVgQpIfAVy7/d R6qIjgM/V6m1a7l8byvrS5ih5c1YKuxgGde9926oA029P6cEeMWS9PtWQ7bNyEJI DlDwev5MHrOwBg27xTVteWWJXY563NtW7w+VoOVjYU3R3LMCru0M3dAOGZzakL/S uGogbed7+frdlUh9w89E4owF3nA7gEBpynTrennEUAzQSN7EEi2L3CtvpLrMspW+ kL/BzSNu9J3o2c0mt5YC7sE8phuGho7PLP/RtnJsJpabhmxITSF2SfEEnb9MRkCG fVKZ =Xgc8 -----END PGP SIGNATURE----- php-7.3.20.tar.gz SHA256 hash: d0579b8a6bcdd5e1ae334d83261f2389b0d3d4fd54cc808e20a5031121f97d87 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8ELAkMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y2/G0P/0MxN7hnN9r/rEr8AkHh5H8DrxE5Z1KidCYBuy/r +zKV1RT6GeQuR4gtJij1eOUDPLJtV02Dg7rIrH18GLqEwxH7eL6oBiC8bOePipWZ hPW8pn7okm5GoJzpVVicQq1Qc7SCVtBdd/XuQKt082ldgYnyxU1u3BNOA8FFh92G Aa4GRSCMXsKcTaUNMm5TZthylii4O61x1iHzY85r6L4sUy2SuQrw8w6FNaOtQmP6 6DYXAODdfsbvSNF8keqaayXz/RmN0zHTqivrb0TzdAVK0mAGcpF/ZQN5xquAuB66 dUNwrEG8LSys7/1Lcof4zC7RCmEhhwt3XEd9iJoFsx5YNhlPn/ny2crjDRL9Nt22 30O3I+7GUD5ZxhMaKSl0bhSfExYK/cyYyOq4FK2jF8NlcUDuClNM6sgUzPgLjprc B7hPiKe1iT45wCNfDq3rrmM7eYHrUKy13AAZDIB/ytGe89JiOiPpJKM9wfyPh+Mg xbaJaugA1GazIZp4iEQZDfRavj013Yh73yBRDCIvzuKis/+MQ3b2GYdS4Uu86kRj ntH+W3KffwaT7poK8dXwDXlTL5p0pJ+himzh2S5rGbDT0cgYVM6UOPov2AaiQUrf Mc4CYI6GB0gSgl/dzYQ/7bCvdP/tT5ul75TAT7N8U5Grz4SCHQbo4ZMmKyI/EiM/ ELLD =1DBT -----END PGP SIGNATURE----- php-7.3.20.tar.xz SHA256 hash: 43292046f6684eb13acb637276d4aa1dd9f66b0b7045e6f1493bc90db389b888 PGP signature: -----BEGIN PGP SIGNATURE----- iQJABAABCAAqFiEEy69p8XOg/qS1N/Rw1myVkxGLzLYFAl8ELAkMHGNtYkBwaHAu bmV0AAoJENZslZMRi8y240EP/2Ed4Fa6u+0kYDg0d0Tn0E9zjJTI3oIX64kvUnA9 368L0AzCpCEHMZoE36oeLHs+pmqm2Irz2FrjvwnmXlKbf7k9iZsgo/IZxTesetE4 wBmzGZCWEgEcpUTHav/scejEysD70GbzBo3wpIzIps3D+4wcMFXYSpygFiEtMGiM MqNnTn+Q/i8krNIGtuV20RnuGkzDedogUb99B1E0LjiuS9Lq/obFeWGWnNMsgYlv TEPxcMgqsglovXZd3Z2tdAqQ34A89gdOkK97oUDeBrLJfJabgFrCprMlOWiECkNs VuKKqiHSQOcPoebpKzwYh0rsLD3glIW7MXU1koyXFS2QTiLNsaUTv+8vxWnr6JNg 9nuZfD2OgI0gSLMbpjvTBLJFIUA43/Sp/iQAlA1sQJZXnOSi+xjkqgtNw8hnwURT lDrCnCqcBb0L11aDamBVE4E/2UVTg7bRRxFrMRnsQtr6SqXO/QBbhnpyHQLsnBd/ tcGDZw7uSTIoAoy6PpIWg70E5lDArZcHHJ51IXfCvTMPSx0IkzdNUg1VOeUzlHtX 1zR1Ms2Umr6EWvwC9krzow16iSty3pUfzs57qVBYAt5jS776qIvHmo+kIMcYQzki X4sn3IQntksLevOh+RNIuSWoLgtmNpCc8TMfhHEU2tapoLxgaNaHbxqNAv7cNqL0 /wRc =zju5 -----END PGP SIGNATURE-----
