Monthly Archiv: December, 2021

Updating The Single Most Influential Book of the BASIC Era

In a way, these two books are responsible for my entire professional career.

With early computers, you didn't boot up to a fancy schmancy desktop, or a screen full of apps you could easily poke and prod with your finger. No, those computers booted up to the command line.

From here, if you were lucky, you might have a cassette tape drive. If you knew the right commands, you could type them in to load programs from cassette tape. But that was an expensive add-on option with early personal computers. For many of us, if we wanted the computer to do anything, we had to type in entire programs from books like 101 Basic Computer Games, by hand... like so.

Yep, believe it or not, circa 1983, this was our idea of a good time. No, we didn't get out much. The book itself was a sort of greatest hits compilation of games collected from Ahl's seminal Creative Computing magazine in the 1970s:

As soon as Ahl made up his mind to leave DEC, he started laying the groundwork for Creative Computing. He announced intentions to publish the magazine at NCC in June 1974 and over the next few months contacted prospective authors, got mailing lists, arranged for typesetting and printing, and started organizing hundreds of other details.
In addition, he also moved his family to Morristown, NJ, and settled into his new job at AT&T. He had little spare capital, so he substituted for it with "sweat equity." He edited submitted articles and wrote others. He specified type, took photos, got books of "clip art," drew illustrations, and laid out boards. He wrote and laid out circulation flyers, pasted on labels, sorted and bundled mailings.
By October 1974, when it was time to specify the first print run, he had just 600 subscribers. But Ahl had no intention of running off just 600 issues. He took all the money he had received, divided it in half, and printed 8000 copies with it. These rolled off the presses October 31, 1974. Ahl recounts the feeling of euphoria on the drive to the printer replaced by dismay when he saw two skids of magazines and wondered how he would ever get them off the premises. Three trips later, his basement and garage were filled with 320 bundles of 25 magazines each. He delivered the 600 subscriber copies to the post office the next day, but it took nearly three weeks to paste labels by hand onto the other 7400 copies and send them, unsolicited, to libraries and school systems throughout the country.

I also loved Creative Computing, but it was a little before my time. And it took a while for inexpensive personal computers to trickle down to the mainstream, which brings us to roughly 1984 when the sequels started appearing.

There was a half-hearted attempt to modernize these early BASIC programs in 2010 with SmallBasic, but I didn't feel these ports did much to bring the code up to date, and overall had little relevance to modern code practices. You can compare the original 1973 BASIC Civil War with the 2010 SmallBasic port to see what I mean:

Certainly we can do a bit better than merely removing the line numbers? What about our old buddy the subroutine, merely the greatest invention in computer science? It's nowhere to be seen. šŸ¤”

So it was with considerable enthusiasm that I contacted David H. Ahl, the author, and asked for permission to create a website that attempted to truly update all these ancient BASIC programs.

Thankfully, permission was granted. It's hard to understate how important this book was to an entire generation of programmers. At one point, there were more copies of this book in print than there were personal computers, period!

... in 1973, DEC published an anthology, 101 BASIC Computer Games. The book quickly went into a second printing, for a total of 10,000 copies sold. ā€œThat was far more books than there were computers around, so people were buying three, four, five of them for each computer.ā€

It went on to be the first computer book to sell a million copies. Quite a legacy. I think we owe it to the world to bring this book up to date using modern, memory safe languages that embody the original spirit of BASIC, and modern programming practices including subroutines.

So let's do this. Please join us on GitHub, where we're updating those original 101 BASIC games in memory safe, general purpose scripting languages:

  • Java
  • Python
  • C#
  • VB.NET
  • JavaScript
  • Ruby
  • Delphi / Object Pascal
  • Perl

Now, bear in mind these are very primitive games from the 1970s. They aren't going to win any awards for gameplay, or programming sophistication. But they are precious artifacts of early computing that deserve to be preserved for future generations, including the wonderful original art by George Beker.

We need your help to do this right, and collaboratively together, as with all modern programming projects. Imagine we're all typing these programs in simultaneously together online, all over the world, instead of being isolated alone in our room in 1984, cursing at the inevitable typo we made somewhere when typing the code in by hand out of the bookšŸ¤¬.

Thanks Mr. Ahl. To encourage contributions, by the end of 2022, for every functioning program submitted in each of the 8 indicated languages, I'll donate $5 to Girls Who Code. Before beginning, please read the guidelines in the readme, and if you have questions, scan through this discussion topic. And most of all, remember, this stuff is supposed to be fun.

(I don't want to be "that one guy", so I'm also looking for project co-owners who can help own and organize this effort. If this is a project that really appeals to you, show me what you can do and let's work together as a team.)

Perhaps as your new year's resolution you can see fit to carve off some time to take part in our project to update a classic programming book ā€“ one of the most influential books in computing history ā€“ for 2022 and beyond! šŸŽ‰

Laravel Forge Backup

Package:
Laravel Forge Backup
Summary:
Backup service that uses Laravel Forge
Groups:
Databases, Libraries, PHP 5, Systems administration
Author:
DeGraciaMathieu
Description:
This package implements a backup service that uses Laravel Forge...

Read more at https://www.phpclasses.org/package/12342-PHP-Backup-service-that-uses-Laravel-Forge.html#2021-12-30-20:49:23

People of WordPress: Collins Agbonghama

In this series, we share some of the inspiring stories of how WordPress and its global network of contributors can change peopleā€™s lives for the better. This month we feature a website builder from Nigeria, who uses the open source WordPress platform to support his family and to share learning with others in his home country and beyond.

Collins Agbonghama

Creating a life in the WordPress Ecosystem

Collins Agbonghama started his journey to becoming a web developer by reading the football news headlines on a friendā€™s mobile phone. His fascination with development and learning continued to grow, and he now makes a living using WordPress and the web.

Read on to discover his story, which shows with creativity and determination you can create products and make a living using WordPress. 

Starting web building on a phone

Collins Agbonghama headshot photo

Collins began his exploration of the internet while attending Secondary School in Nigeria, or High School as it is known in some other countries. 

A friend at the school had a simple mobile phone which could browse the internet. Collins had his first introduction to the World Wide Web through access to this device. He became hooked by reading headlines on a sports site about a famous English Premier League Football Club, Chelsea, a soccer team which he has long supported.

ā€œBeing a very inquisitive person, I wanted to learn how the web works as well as have my own website. I was able to buy a classic mobile phone through the menial jobs I did after school,ā€ he said. 

His first website was a wapsite or Wireless Application Protocol site optimized for mobile devices. 

He took to Google to learn how to actually build a site. He discovered he needed something called an ā€˜email addressā€™ to sign-up for site builders. Google Search came to the rescue again, and he created the first email account for his first website.

A desire for a website was the catalyst for further learning, starting with HTML and CSS from an online provider. His interest in building sites with more advanced tools grew, and then he came across WordPress. 

Using his savings, he bought the cheapest hosting plan from a local Nigerian web host. He installed WordPress and started writing tutorials for a mobile device platform. He built the site, created the lessons, and started his entry into WordPress all on a mobile phone. 

This led to him having the confidence to start building sites for others, and he was able to earn a small income from that. 

Collins said: ā€œI couldnā€™t go to the university because of my precarious financial situation. I continued to do menial jobs during the day and started learning PHP in the evenings and at night using my mobile phone via online learning platforms.ā€

He was later able to get an old laptop, which helped him access ebooks to learn more and practice his coding. 

Keen to share this learning, he started blogging about what he was learning on his website.  

Collins said: ā€œI later took up a job teaching children at a school primarily because I got tired of the menial jobs and wanted to earn enough to take care of my internet data plan. After a while, I became fairly proficient in PHP and even took up a job to build a school management system.ā€

Using WordPress to make a living

Collinsā€™ blog wasnā€™t making money through advertisements, but he discovered opportunities to write tutorials for other platforms. 

ā€œI started writing PHP and WordPress development tutorials and got paid a few hundred dollars per article. In Nigeria, thatā€™s quite a lot of money. I was able to improve the life and wellbeing of my family and myself,ā€ he said.

After getting into a higher education program to study computer science, his life dramatically changed. He decided to stop writing and began to focus on building and selling WordPress plugins. His first one was a user and profile plugin for WordPress sites.

ā€œThankfully, after a year, it started making enough revenue for me to live pretty comfortably here in Nigeria because the cost of living here is relatively low,ā€ he said

Today, Collins has several plugins which have given him a sustainable source of income. Heā€™s also a Core and Translation volunteer contributor to the WordPress.org Open Source project.

I am thankful for WordPress because without it, Iā€™m really not sure I would have been able to live a decent quality life.
Who knows what would have become of me?

Collins Agbonghama

ā€œI am also thankful for the community. I have made lots of friends that have been very supportive and helpful in my journey.ā€

He added: ā€œI tell people, life wonā€™t give you what you want. You demand from life what you want. You make these demands by being determined and never giving up on your dreams and aspirations.

ā€œIf you are poor, perhaps because you came from a humble and poor background, it is not your fault. You canā€™t go back in time to change things. I implore you to be strong, determined, and work hard.ā€

Meet more WordPress community members in our People of WordPress series.

Contributors

Thanks to Michael Geheren (@geheren), Abha Thakor (@webcommsat), for writing this feature, to @MeherBala (@meher) for follow-ups and photo-editing, and to Chloe Bringmann (@cbringmann) and Nalini Thakor (@nalininonstopnewsuk) for the final proofing. Thank you to Collins Agbonghama (@collizo4sky) for sharing his Contributor Story.

Thanks to Josepha Haden Chomphosy (@chanthaboune), Topher DeRosia (@topher1kenobe) and others for their support of this initiative.

The People of WordPress feature is inspired by an essay originally published on HeroPress.com, a community initiative created by Topher DeRosia, which highlights people in the WordPress community who have overcome barriers. 

#HeroPress #ContributorStory

Advent of Functional PHP: Review

Advent of Functional PHP: Review

Over the last few weeks, I've been following Advent of Code 2021, using Functional PHP as an approach. It's been a fun and educational process, at least for me and apparently for a few other people, at least given how popular the articles have been.

For reference, the full list of articles in this series is here:

Larry 29 December 2021 - 7:10pm

Laravel JSON Responses and Errors

Package:
Laravel JSON Responses and Errors
Summary:
Generate JSON for HTTP responses and exceptions
Groups:
HTTP, Language, PHP 5
Author:
Moamen Eltouny
Description:
This package can generate JSON for HTTP responses and exceptions...

Read more at https://www.phpclasses.org/package/12341-PHP-Generate-JSON-for-HTTP-responses-and-exceptions.html#2021-12-29-14:24:33

Writable PHP Session Path

Package:
Writable PHP Session Path
Summary:
Start sessions assuring the save directory exists
Groups:
PHP 5, User Management
Author:
Ali YILMAZ
Description:
This package can start sessions assuring the save directory exists...

Read more at https://www.phpclasses.org/package/12338-PHP-Start-sessions-assuring-the-save-directory-exists.html#2021-12-28-23:56:14

SE Ranking Launches SE Ranking Academy

SE Ranking Academy

SE Ranking has launched SE Ranking Academy, an online learning platform for everyone who wants to learn about search engine optimization. Currently they have two courses available for digital marketers and everyone else: SEO Basics, which is an 8 module course, and Content SEO, which has 7 modules. The SEO Basics course is expected to take 6 hours to complete, while the Content SEO course is expected to take 3 hours to complete.

According to SE Ranking, the SEO Basics course “helps students learn the fundamentals of search engine optimization and teaches how to leverage SEO to promote businesses online. The course was prepared by SEO experts and designed to be clear to everyone, regardless of their background and experience in digital marketing.

SEO Basics course hosted by Jason Barnard

The SEO Basics course is free to anyone, and when completed you get a certificate of completion. The SEO Basics course is hosted by Jason Barnard.

The SEO Basics course modules are as follows:
Introduction to SEO
Keyword Research
Content Creation
Website Setup
Technical SEO
On-Page SEO
Link Building
SEO Analytics

I haven’t had time yet to take the course, so I’m not sure what is included in each module. However, from looking at the list of modules, I would have included a separate module called “On-Site SEO”, which is different than On-Page SEO. There are certainly a lot of things that you can do on the site that aren’t page-specific SEO tactics, such as internal linking, that is important to understand. Regardless, it looks like a good course for anyone to take, even if you just want to brush up on your SEO skillset.

Community News: Latest PECL Releases (12.28.2021)

Latest PECL Releases:

  • openswoole 4.9.1
    - Bug fixed: Added type validation and value length validation at Swoole Table

    • Fix build with old libcurl, thanks @remicollet
  • phalcon 5.0.0beta1
    Full changelog can be found at: https://github.com/phalcon/cphalcon/blob/master/CHANGELOG-5.0.md

    Changed

    • Marked as deprecated:
    • PhalconMvcModel::existsBelongsTo()
    • PhalconMvcModel::existsHasMany()
    • PhalconMvcModel::existsHasOne()
    • PhalconMvcModel::existsHasOneThrough()
    • PhalconMvcModel::existsHasManyToMany()
    • PhalconTranslateAdapterCsv::exists()
    • PhalconTranslateAdapterGettext::exists()
    • PhalconTranslateAdapterNativeArray::exists() #15785
    • Moved PhalconContainer to PhalconContainerContainer #15796
    • Changed the PhalconSupportCollection::get() to return the default value if the key does not exist or the value is null to mirror the behavior of v3. #15370
    • Moved PhalconRegistry to PhalconSupportRegistry #15802
    • Moved PhalconUrl to PhalconMvcUrl #15798
    • Moved PhalconLoader to PhalconAutoloadLoader #15797
    • Changes to PhalconAutoloadLoader:
    • Renamed registerClasses() to setClasses()
    • Renamed registerDirectories() to setDirectories()
    • Renamed registertExtensions() to setExtensions()
    • Renamed registertFiles() to setFiles()
    • Renamed registertNamespaces() to setNamespaces() #15797
    • Moved PhalconDi to PhalconDiDi #15799
    • Removed references to PhalconTag from the framework in favor of PhalconHtmlTagFactory #15801
    • PhalconFormsForm requires a PhalconHtmlTagFactory to be set before it can render elements #15801
    • PhalconDiFactoryDefault will now return a PhalconHtmlTagFactory for the tag service #15801

    Fixed

    • PhalconLoggerLoggerFactory::load() to correctly use the key of the adapters array as the name of the adapter #15831

    Added

    • Added:
    • PhalconMvcModel::hasBelongsTo()
    • PhalconMvcModel::hasHasMany()
    • PhalconMvcModel::hasHasOne()
    • PhalconMvcModel::hasHasOneThrough()
    • PhalconMvcModel::hasHasManyToMany()
    • PhalconTranslateAdapterCsv::has()
    • PhalconTranslateAdapterGettext::has()
    • PhalconTranslateAdapterNativeArray::has() #15785
    • Added filter, camelize, dynamic and uncamelize in PhalconSupportHelperFactory #15805
    • Added PhalconAutoloadLoader::getDebug() to collect debugging information from the loader (enabled from the constructor) #15797

    Fixed

    • Fixed PhalconDispatcherDispatcher::setParams() not updating local params during dispatch() loop #15603
    • Fixed related records auto-save with belongsTo() relation #15148

    Removed

    • Removed PhalconException; replaced by Exception #15800
  • scoutapm 1.5.1
    - Fix json_encode usage where ext-json is shared or does not exist - thanks @remicollet (#100)
  • swoole 4.8.5
    - Revert parameter type of Table - Fix crash when received wrong data with websocket protocol
  • scoutapm 1.5.0
    - file_get_contents and curl_exec now record HTTP methods (#96)
  • selinux 0.6.0
    - add type hinting with PHP 8
  • datadog_trace 0.68.0
    ### Added - Bring priority sampling to internal #1366 - SpanData::$parent property #1369 - Add queue and channel components #1388 - Add log component #1390 - Add arena component #1391 - Add stack sample component #1392 - Add uuid component #1393 - Add time component #1394, #1408 - Add profiler installation #1422 - Zai/json #1378, #1397 - Add Code Coverage #1389

    Changed

    • (PHP 8) Migrate ObjectKVStore to WeakMap internally #1362
    • Adjust components #1387
    • Export only specific symbols #1407
    • Sanitize user information from urls #1396
    • Split INI setting in installer so they can be added separately when missing #1415
    • Use the new targz bundle format with the new PHP installer #1421
    • Have both legacy and new installer to fail when json PHP extension is not enabled #1410

    Fixed

    • Fix Laravel unnamed route with caching and domain specification #1364
    • Fix http.url of internal root span #1360
    • Add small framework to stress test our internal API with bogus inputs #1365
    • PDOIntegration::parseDSN fails to parse some DSN #1373
    • Fix constructor of OpenTracing wrapper when no Datadog tracer is provided #1406 - thanks @OGKevin for the reproduction case
    • Fix parsing of urls without schema into host name #1385

D3 BTL

Package:
D3 BTL
Summary:
Get machine project from BTL file into a database
Groups:
Design Patterns, Files and Folders, Hardware, Parsers, PHP 5
Author:
Uldis Nelsons
Description:
This package can process BTL files get machine projects into a database...

Read more at https://www.phpclasses.org/package/12337-PHP-Get-machine-project-from-BTL-file-into-a-database.html#2021-12-27-23:33:05
Powered by Gewgley