<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paul Preibisch</title>
    <description>The latest articles on DEV Community by Paul Preibisch (@firecentaur).</description>
    <link>https://dev.to/firecentaur</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F827112%2F6705c177-0e2e-42b3-b2cf-bc6afc572b65.jpg</url>
      <title>DEV Community: Paul Preibisch</title>
      <link>https://dev.to/firecentaur</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/firecentaur"/>
    <language>en</language>
    <item>
      <title>Great Tweaks for PopOs 22.04</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Tue, 21 Jun 2022 20:38:50 +0000</pubDate>
      <link>https://dev.to/firecentaur/great-tweaks-for-popos-2204-404a</link>
      <guid>https://dev.to/firecentaur/great-tweaks-for-popos-2204-404a</guid>
      <description>&lt;p&gt;Hi everyone, if you are running Linux, chances are you tweak your system, or add utilities here and there.  Ever ran that one liner command and rendered your system utterly useless?&lt;/p&gt;

&lt;p&gt;I sure have!  How can we guard against this?  The answer is - Timeshift and the btrf file system!&lt;/p&gt;

&lt;p&gt;This past week I came across a GREAT YouTube Video by &lt;br&gt;
&lt;a href="https://github.com/wmutschl"&gt;Willi Mutschler&lt;/a&gt; outlining step by step how to create instantaneous recovery snapshots on PopOs using Timeshift. GREAT Video Willi!&lt;/p&gt;

&lt;p&gt;I HIGHLY recommend you check his video out here: &lt;a href="https://www.youtube.com/watch?v=i8HDHAX1RJc"&gt;https://www.youtube.com/watch?v=i8HDHAX1RJc&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xlPcoJpU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9ggf7mk4xrss1mex2tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xlPcoJpU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9ggf7mk4xrss1mex2tv.png" alt="Image description" width="880" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TimeShift has been such a great tool for me, I also checked out the Owners webpage - and found another great Tweaks Blogpost - specifically where he suggests installing nala, a GREAT improvement to the sudo apt install interface&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From his Tony George's Blog (The creator of TimeShift):&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Install Nala&lt;/strong&gt;&lt;br&gt;
Nala is a prettier frontend for APT that makes it easier to install packages from the command line. It has the same syntax as apt. You can substitute the command nala for all commands that use apt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1)Run the below command to install Nala from it’s official repository.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wget -O - https://teejeetech.com/scripts/jammy/install_nala | bash&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Switch to the fastest Ubuntu mirrors in your region:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo nala fetch&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Update your system:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sudo nala update &amp;amp;&amp;amp; sudo nala upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hope you find this info useful!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>linux</category>
    </item>
    <item>
      <title>Laravel and the MetaVerse</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Sun, 12 Jun 2022 22:42:23 +0000</pubDate>
      <link>https://dev.to/firecentaur/laravel-and-the-metaverse-kid</link>
      <guid>https://dev.to/firecentaur/laravel-and-the-metaverse-kid</guid>
      <description>&lt;p&gt;Second Life, and Opensim are old-school Virtual Worlds that have an in-world scripting language called LSL (short for Linden Scripting Language).  LSL Scripts live inside of primitive objects (cubes, spheres, pyramids etc) which can be "rezzed" by your avatar when logged into the game.  The cool thing about these scripts, is that functions exist which can receive and send HTTP requests in and of the game.  &lt;/p&gt;

&lt;p&gt;I've started an opensource project called &lt;a href="https://github.com/firecentaur/laravel-meta-connect/blob/master/README.md"&gt;Laravel-Meta-Connect&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The objective of this project is to examine how Laravel can be used to provide a backend interface for gaming inside of the virtual world. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rwumv7----/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l7g5vq40i51vfe4mxd6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rwumv7----/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l7g5vq40i51vfe4mxd6j.png" alt="Image description" width="880" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To acheive this, Laravel-Meta-Connect will consist of serveral in-world LSL Scripts which, once configured, will communicate with Laravel to provide the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A Laravel View that displays Current Games Being Played In Second Life with Active players.&lt;br&gt;
** A player will be registered as playing if they are sitting in a game chair (to be developed), or has clicked join on a Join Game Button (to be developed)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Laravel view that displays a scoreboard that lists top scores of an in-world Meta-Connect game&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Laravel View that displays the latest Zombie Attacks that have happened in-world from the Zombie Attacks Quiz Game. Users will have to answer questions to defend against a zombie attacks.  Note: I have already created this game in Second Life, Code is just needed to pull in quiz questions from Laravel, and to report all Zombie Attacks. A Laravel backend web interface will be used for creating a quiz and questions for each in-world zombie attacks game&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transporter Quiz: Sit in a Second Life vehicle, and have it move to next location by answering a question. Locations are saved in the database physically in world by moving to the location, and clicking a save-location button on a HUD in Second Life. User will also add a description to the location. A Laravel backend web interface will be used for attaching a question to each location saved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scavenger Hunt Game: Place Scavenger hunt objects around the Virtual World (each registering with Meta Connect), have users collect points by clicking each object placed.  A Laravel view will display a SLURL (SL URL) to each item inside Second Life, that users will need to teleport to.  The View will display a checkmark beside each item collected.  Another Laravel View will list a Grid of each item, and of each user who has joined the game, and who has collected each item.  Points will be awarded to each user when an item is collected.  A Laravel backend web interface will be used for attaching a question to each location saved.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please let me know if you are interested in joining this project.  Once developed, I would like to use it for language learning websites.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Screen Capture tool for Linux and Windows</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Thu, 09 Jun 2022 18:41:20 +0000</pubDate>
      <link>https://dev.to/firecentaur/screen-capture-tool-for-linux-and-windows-5mk</link>
      <guid>https://dev.to/firecentaur/screen-capture-tool-for-linux-and-windows-5mk</guid>
      <description>&lt;p&gt;An essential tool for every developer is a good screen 🎬 recording app 🎬 .  Screen recording helps help record and annotate new feature mock-ups, bug reports, and videos for YouTube.  On a Windows PC, there are a myriad of choices available.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;p&gt;My first choice on the Windows side of things is &lt;a href="https://www.techsmith.com/screen-capture.html"&gt;Snagit&lt;/a&gt;.  You will have to pay for a subscription, but it's video screen annotation tools and ease of use make it worth every penny.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux
&lt;/h2&gt;

&lt;p&gt;But what do we do on the Linux side of things?  Here, we are a bit limited.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.maartenbaert.be/simplescreenrecorder/"&gt;SimpleScreenRecorder&lt;/a&gt; ⭐⭐⭐&lt;br&gt;
In the past, I have used SimpleScreenRecorder.  It has never hung up my system or crashed on me, so I'll give it 5 stars for stability.  Unfortunately, it is missing an editor and annotation tool.  If you are mocking up screenshots and videos, this is a required feature.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://linuxecke.volkoh.de/vokoscreen/vokoscreen-download.html"&gt;VokoScreenNG&lt;/a&gt;.⭐⭐⭐⭐&lt;br&gt;
These days I am testing out VokoScreenNg.  I have it loaded on my PopOs 22.04 Linux system, and it seems to have the annotation features I was looking for.  You can install it using the debian package manager, but I recommend you download it direct from their website so you get the &lt;a href="https://linuxecke.volkoh.de/vokoscreen/vokoscreen-download.html"&gt;latest version&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;An annoying caveat I've found when using VokoScreen, is it seems that all mouse clicks to the buttons in an apps' title bar are not registered.  This means I can not close any windows.  In order to fix this, I need to kill the VokoScreenNg process.  I've filed a issue on their &lt;a href="https://github.com/vkohaupt/vokoscreenNG/issues/221"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>screenrecording</category>
      <category>popos</category>
    </item>
    <item>
      <title>Speeds up Your Tests!</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Fri, 03 Jun 2022 20:36:18 +0000</pubDate>
      <link>https://dev.to/firecentaur/schema-dump-speeds-up-tests-1635</link>
      <guid>https://dev.to/firecentaur/schema-dump-speeds-up-tests-1635</guid>
      <description>&lt;p&gt;Great news! With a simple command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// Dump the current database and save it &lt;span class="k"&gt;in &lt;/span&gt;database/schema
php artisan schema:dump

// Dump the current database schema and prune all existing migrations...
php artisan schema:dump &lt;span class="nt"&gt;--prune&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can greatly speed up your tests! Continue to find out more!&lt;/p&gt;

&lt;p&gt;Hi everyone! These days I have been tasked to implement automated testing for a Laravel that had zero test coverage from the start. &lt;/p&gt;

&lt;p&gt;As you probably know, Laravel's default testing behaviour is to use SQlLite, and in-memory database to run all tests against.  &lt;/p&gt;

&lt;p&gt;When building my first test however, I needed to ensure that my test database had data it could test against. So, I needed to use Laravel's RefreshDatabase Trait in my test.&lt;/p&gt;

&lt;p&gt;The RefreshDatabase trait instructs laravel to run clear the testing database, and run all database migrations to set up the tables.&lt;/p&gt;

&lt;p&gt;At this point in the development stage, we had about 50 migration files already, and some of them used MySql's DropColumn command which is incompatible with SQlLite.  &lt;/p&gt;

&lt;p&gt;To fix the problem, I edited the phpunit.xml file, and changed the server variables to point to a MySql testing database instead&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;server&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"DB_CONNECTION"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"mysql"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;server&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"DB_DATABASE"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"testing"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;server&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"DB_USERNAME"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"testuser1"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
 &lt;span class="nt"&gt;&amp;lt;server&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"DB_PASSWORD"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"mypassword"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then re-ran the unit test, and it completed. Unfortunately, the test took 17 seconds to run!  The culprit?  You guessed it - the 50 migration files!&lt;/p&gt;

&lt;p&gt;But then I got thinking - since the migration files are just a list of steps we took through our development iterations to get the database just perfect, why not just have one migration that creates the entire database in one fell swoop?&lt;/p&gt;

&lt;p&gt;The next though I had was - wait - I bet I am not the only one that has thought of this solution!  And sure enough, as of &lt;a href="https://laravel.com/docs/8.x/migrations"&gt;Laravel 8, there is a new console command&lt;/a&gt; that allows you to do just that:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// Dump the current database and save it &lt;span class="k"&gt;in &lt;/span&gt;database/schema
php artisan schema:dump

// Dump the current database schema and prune all existing migrations...
php artisan schema:dump &lt;span class="nt"&gt;--prune&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, the next time you run "php artisan migrate", the database will be set to the current state it was when you ran the schema dump, and then any other migrations after that point will also be run.&lt;/p&gt;

&lt;p&gt;And guess what?  My 17 second test now ran in 4 seconds!  what a great improvement!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>testing</category>
      <category>artisan</category>
    </item>
    <item>
      <title>Creating a Laravel Website with out of the box authentication system</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Wed, 25 May 2022 19:33:59 +0000</pubDate>
      <link>https://dev.to/firecentaur/creating-a-laravel-website-with-out-of-the-box-authentication-system-jl3</link>
      <guid>https://dev.to/firecentaur/creating-a-laravel-website-with-out-of-the-box-authentication-system-jl3</guid>
      <description>&lt;p&gt;Hi everyone,  recently, I have been trying out several different Web Administration panel kits for my favorite PHP Platform, &lt;a href="https://laravel.com/"&gt;Laravel&lt;/a&gt;. I am looking for an out of the box system that will  provide my end users with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A login page&lt;/li&gt;
&lt;li&gt;A my profile area&lt;/li&gt;
&lt;li&gt;Login with a Social Media account&lt;/li&gt;
&lt;li&gt;Use two factor authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, I’d like the administration panel to have developer tools included in order to facilitate rapid application development.&lt;/p&gt;

&lt;h1&gt;
  
  
  Laravel Auth
&lt;/h1&gt;

&lt;p&gt;If you are working on a custom solution for a client and will not be distributing your app as opensource, then Backpack for Laravel, and Infyom Laravel generator are a great combo.&lt;/p&gt;

&lt;p&gt;Today however, I will be testing out a package I recently found called &lt;a href="https://github.com/jeremykenedy/laravel-auth#installation-instructions"&gt;Laravel Aut&lt;/a&gt;  which is opensource, and looks perfect for satisfying some of my main requirements.&lt;/p&gt;

&lt;p&gt;Lets go ahead and set things up!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using my &lt;a href="https://www.jetbrains.com/phpstorm/"&gt;PHPStorm IDE,&lt;/a&gt; I will add a new mysql data source in the database tab.&lt;/li&gt;
&lt;li&gt;Next, I will create a new schema called laravel-auth, and set the collation to utf8mb4_general_ci (so my users can insert fancy emojis if they like).&lt;/li&gt;
&lt;li&gt;Now I will clone the project using git: git clone &lt;a href="https://github.com/jeremykenedy/laravel-auth.git"&gt;https://github.com/jeremykenedy/laravel-auth.git&lt;/a&gt; laravel-auth&lt;/li&gt;
&lt;li&gt;Once cloned, I next need to create the .env laravel configuration file to set up the database

&lt;ol&gt;
&lt;li&gt;find change the following&lt;/li&gt;
&lt;li&gt;DB_DATABASE\&lt;/li&gt;
&lt;li&gt;DB_USERNAME&lt;/li&gt;
&lt;li&gt;DB_PASSWORD&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;then run “composer upate”. This will run all third party dependencies and libraries.&lt;/li&gt;
&lt;li&gt;Now, we need to publish laravelroles and 2 step authentication. This step will copy important migration files from the vendors folder into to the app, as well as database seeders, and assets.&lt;/li&gt;
&lt;li&gt;Generate a unique app key – From the projects root folder run &lt;code&gt;php artisan key:generate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run database migrations – from the projects root folder run &lt;code&gt;php artisan migrate. This will set up all the database tables for the project.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;From the projects root folder run &lt;code&gt;composer dump-autoload&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;From the projects root folder run &lt;code&gt;php artisan db:seed&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Compile the front end assets with &lt;a href="https://github.com/jeremykenedy/laravel-auth#using-npm"&gt;npm steps&lt;/a&gt; or &lt;a href="https://github.com/jeremykenedy/laravel-auth#using-yarn"&gt;yarn steps&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Set up a Virtual Host
&lt;/h1&gt;

&lt;p&gt;With laravel-auth now installed, lets set up an Apache Virtual Host so we can view the website on our local machine.  For this, I use a nifty bash script called Virtualhost which I got from &lt;a href="https://github.com/RoverWire/virtualhost"&gt;RoverWire/virtualhost&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; sudo virtualhost create laravel-auth.localhost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This created a file for me in /etc/apache2/sites-available, enabled the virtual host, created an entry in /etc/hosts file, and then restarted apache.  A few small tweaks were needed however at this point.  Firstly, Laravel’s public folder is in /public/  so I had to edit /etc/apache2/sites-available/laravel-auth.localhost.conf to fix the document root.  I also noticed that the script created a folder for me in /var/www/laravel-authlocalhsot, so I deleted this and re-updated the laravel-auth.localhost.conf to point to the proper folder of where I cloned the repo (/var/www/laravel-auth/&lt;/p&gt;

&lt;p&gt;I then refreshed the website – and oops – got a laravel error which complained that its log files were not writable. so I had to do a few more sys admin tasks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo chown -R www-data:www-data

sudo find /var/www/laravel-auth -type f -exec chmod 644 {} \;

sudo find /var/www/laravel-auth -type d -exec chmod 755 {} \;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since this is my local development machine however, and not a production environment, I am going to chown my project foler to my user instead of www-data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo chown -R $USER:www-data .

sudo find . -type d -exec chmod 775 {} \;
sudo find . -type f -exec chmod 664 {} \;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I am also going to need to give the webserver write permissions to storage, cache&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we are ready – Lets navigate to &lt;a href="http://laravel-auth.localhost/"&gt;http://laravel-auth.localhost/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But wait! We are NOT done. Further configuration is needed:&lt;/p&gt;

&lt;h2&gt;
  
  
  ReCaptcha
&lt;/h2&gt;

&lt;p&gt;Since we are deploying locally, edit the .env file, and set&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ENABLE_RECAPTCHA=false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then do&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer dump-autoload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wow! It’s beautiful!  With this scaffolding in place, I am now ready to add some API endpoints for my LSL Second Life Metaverse Scripts!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://b3dmultitech.com/creating-a-laravel-website-with-out-of-the-box-authentication-system/laravel-auth-2/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Va1k9Sa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2022/05/laravel-auth-1.png" alt="" width="790" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://b3dmultitech.com/creating-a-laravel-website-with-out-of-the-box-authentication-system/"&gt;Creating a Laravel Website with out of the box authentication system&lt;/a&gt; appeared first on &lt;a href="https://b3dmultitech.com"&gt;Paul Preibisch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>programming</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Metaverse Gaming scripts</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Wed, 25 May 2022 18:00:15 +0000</pubDate>
      <link>https://dev.to/firecentaur/metaverse-gaming-scripts-346m</link>
      <guid>https://dev.to/firecentaur/metaverse-gaming-scripts-346m</guid>
      <description>&lt;p&gt;Hi everyone! The word ‘Metaverse’ is hot again so I’d like to invite you along on a journey I am taking down memory lane by re-immersing myself as an Educational Tool developer in the virtual world of Second Life and Opensim. This blog post will serve as the first part of a series of posts about the tools I am using to get the job done.&lt;/p&gt;

&lt;p&gt;So let’s jump in and get ourselves a good code editor so we can hack away at some juicy LSL scripts! We could actually just use Second Life’s in-world editor, however using it is quite painful.  The text is small and hard to read, and there is on auto code completion! &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qp9SH9H9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2022/05/in-world-script-engine.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qp9SH9H9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2022/05/in-world-script-engine.png" alt="" width="880" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this task, I will download and install the &lt;a href="https://www.eclipse.org/downloads/packages/"&gt;Eclipse IDE&lt;/a&gt; and then install the &lt;a href="https://wiki.secondlife.com/wiki/LSLForge"&gt;LSL Forge&lt;/a&gt; plugin which will provide us the very handy code completion tool, so we won’t have to look up every LSL command&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Please download and install &lt;a href="https://www.eclipse.org/downloads/packages/"&gt;Eclipse IDE&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Then click here to install the &lt;a href="https://wiki.secondlife.com/wiki/LSLForge"&gt;LSL Forge&lt;/a&gt;  plugin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the LSLForge plugin is installed, your Metaverse Scripting experience will improve dramatically.&lt;/p&gt;

&lt;p&gt;Here is what the editor looks like in comparison with the in-world editor displayed above:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://b3dmultitech.com/metaverse-gaming-scripts/eclipse-example/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J2aveQJa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2022/05/eclipse-example-940x1030.png" alt="Eclipse with LLSForge Plugin" width="880" height="964"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Good job!  Now, for fun, here is a script I created called valueKey.lslp.  Second Life’s version of the array is called a “list”.    This script will read through the list, and print it out as key value pairs.  Being able to store and retrieve key’s and values is an essential part when creating scripts with a even a moderate bit of logic and complexity.&lt;/p&gt;

&lt;p&gt;Here it is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keyValuesToString(list keyValues)
{ 
    integer index=0; 
    list records = llList2ListStrided(keyValues,0,-1,2); 
    integer length = llGetListLength(records); 
    llSay(0,"Length of records is : "+(string)length); 
    integer stride=2; 
    while (index &amp;lt; length) { 
      list item = llList2List(keyValues,index+index,index*stride+1); 
      string param = llList2String(item, 0); 
      string value = llList2String(item, 1); 
      llSay(0,(string)index+": key:"+param+", value:"+value); index++; 
   } 
} 
default { 
  state_entry() 
  { 
     llSay(0,"-----"); 
     list paramList=["name","fire","email","fire@b3dmultitech.com"]; keyValuesToString(paramList); 
  } 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://b3dmultitech.com/metaverse-gaming-scripts/"&gt;Metaverse Gaming scripts&lt;/a&gt; appeared first on &lt;a href="https://b3dmultitech.com"&gt;Paul Preibisch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensim</category>
      <category>programming</category>
      <category>secondlife</category>
      <category>virtualeducation</category>
    </item>
    <item>
      <title>Useful PDF Tools</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Tue, 27 Oct 2020 07:01:06 +0000</pubDate>
      <link>https://dev.to/firecentaur/useful-pdf-tools-36da</link>
      <guid>https://dev.to/firecentaur/useful-pdf-tools-36da</guid>
      <description>&lt;p&gt;As you probably know, the web standard for sending documents to another party online while preserving the exact style layouts / fonts etc, is by printing documents as a PDF.&lt;br&gt;&lt;br&gt;
PDF – stands for Portable Document Format, and is owned by Adobe – the same makers of Photoshop.&lt;/p&gt;

&lt;p&gt;Most people on the web however don’t use it as often as they should – instead, they assume that everyone owns a copy of Microsoft Word, or PowerPoint, and thus forward you the word document or PowerPoint document.  This is great if you own one of those Microsoft Applications – but if you don’t you will need a plugin to open the document.  This is where the PDF format comes in handy.  Rather then sending a Word or PowerPoint document, when you press print, users can select “Print to PDF”, and then send the resulting PDF instead.&lt;/p&gt;

&lt;p&gt;I always scold my sister for sending me Word / PowerPoint Documents because I run an Ubuntu Linux machine as my primary workstation.&lt;/p&gt;

&lt;p&gt;If you are interested in starting to use PDF documents however, as a way to send documents that preserve the formatting, then it is helpful to have a few useful tools in your tool-set:&lt;/p&gt;
&lt;h1&gt;
  
  
  Tools for Windows / Mac / Linux Users
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;A PDF Compressor&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sometimes when you create a PDF, it may be too big to send via GMAIL.  To compress it to a smaller size, I found this tool online, straight from Adobe  &lt;a href="https://www.adobe.com/acrobat/online/compress-pdf.html"&gt;https://www.adobe.com/acrobat/online/compress-pdf.html&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  PDF tools for Ubuntu (Linux) users only
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;A PDF Rotator&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
After creating a presentation on Ubuntu, using Open Office, I found that the resulting PDF printed was all in Portrait mode.  This meant that my presentation, once viewed as an email attachment, was on its side!  This made it very hard to read while on a computer.  I needed some way to rotate each page of the PDF. To do this, I found a very neat linux program that rotates all pages with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -jar pdftk.jar in.pdf cat 1-endwest output out.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pdftk is a free java program you can install on ubuntu by following these steps: &lt;a href="https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-and-later"&gt;https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-and-later&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you know of any other useful PDF tools, please let me know.  I will update this post with more PDF tools that I find.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://b3dmultitech.com/useful-pdf-tools/"&gt;Useful PDF Tools&lt;/a&gt; appeared first on &lt;a href="https://b3dmultitech.com"&gt;Paul Preibisch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>pdftools</category>
    </item>
    <item>
      <title>Throwback – Virtual World Education: Puzzle Fun</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Thu, 22 Oct 2020 18:33:27 +0000</pubDate>
      <link>https://dev.to/firecentaur/throwback-virtual-world-education-puzzle-fun-35jd</link>
      <guid>https://dev.to/firecentaur/throwback-virtual-world-education-puzzle-fun-35jd</guid>
      <description>&lt;p&gt;Virtual education via Second Life certainly does provide many advantages.  In this short article I will share with you an educational game I created while living in Seoul, South Korea as an English teacher back in 2004-2009.&lt;/p&gt;

&lt;p&gt;While in Seoul, I became fascinated of the ripe Gaming culture, and South Korean’s obsession with English Education.  Second Life seemed to be a natural fit – so I dove right in, and created my own Island called English Village, for educators around the World.  Below is one of the educational tools I programmed for educators in Second Life.  It is now fully open-source.&lt;/p&gt;

&lt;p&gt;All the scripts for the game can be found on github here &lt;a href="https://github.com/firecentaur/lsl-scripts"&gt;https://github.com/firecentaur/lsl-scripts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your avatar in Secondlife can get the game for FREE here: &lt;a href="https://marketplace.secondlife.com/p/Single-Multi-Player-Puzzle-Fun-14-great-for-events/2766235"&gt;https://marketplace.secondlife.com/p/Single-Multi-Player-Puzzle-Fun-14-great-for-events/2766235&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://b3dmultitech.com/throwback-virtual-world-game-puzzle-game/"&gt;Throwback – Virtual World Education: Puzzle Fun&lt;/a&gt; appeared first on &lt;a href="https://b3dmultitech.com"&gt;Paul Preibisch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>virtualeducation</category>
    </item>
    <item>
      <title>Creating a Subtitle Search Engine using the Stanford Parts of Speech Tagger</title>
      <dc:creator>Paul Preibisch</dc:creator>
      <pubDate>Wed, 21 Oct 2020 09:13:14 +0000</pubDate>
      <link>https://dev.to/firecentaur/creating-a-subtitle-search-engine-using-the-stanford-parts-of-speech-tagger-5928</link>
      <guid>https://dev.to/firecentaur/creating-a-subtitle-search-engine-using-the-stanford-parts-of-speech-tagger-5928</guid>
      <description>&lt;p&gt;In this post, I will be talking about how I integrated the Standford NLP Parts of speech tagger into a subtitle search engine I built for Globify.com Normally, search engines only allow the user to specify the search term they are interested in. In our use case however, we wanted the ability for our editors to be able to specify the parts of speech as well, so that they could find appropriate educational content quicker.&lt;/p&gt;

&lt;p&gt;In the picture below, you will see a screenshot of the Parts of Speech search engine I created. In the top bar is a query field, then a combo-box that allows the user to specify Noun, Verb, Adverb, or Adjective. Next, we have a search button. below that is the results of the search. On the right, are a list of videos where the search term was found. On the left is the current video selected, along with a list of its subtitles. For each subtitle, I then list the Stanford Taggers Parts of Speech conversion. The search query is highlighted in Yellow. The user can mouse over any term to see the converted parts of speech.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/pos-2/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NWrfvAVn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/pos-1030x648.jpg" alt="" width="880" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How I did it:
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Converting Each word into its constituent parts of speech&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In order to convert each word of our subtitle database into its constituent parts of speech, I needed to dive into the world of Natural Language Processing. For this, Google sent me over to The Stanford Natural language Processing Group. The great folks at the Stanford NLP have graciously created a very cool opensource POS tagger called: &lt;a href="https://nlp.stanford.edu/software/tagger.shtml"&gt;Stanford Log-linear Part-of-Speech Tagger&lt;/a&gt;. This software however, was written in JAVA, so in order to integrate it with our &lt;a href="http://laravel.com"&gt;Laravel&lt;/a&gt; Backend I would need a PHP Wrapper class. Fortunately, I was able to utilize an already existing PHP-Wrapper written by of &lt;a href="https://github.com/patrickschur/stanford-nlp-tagger"&gt;Patrick Schur.&lt;/a&gt; Once integrated into &lt;a href="http://laravel.com"&gt;Laravel&lt;/a&gt;, I created a quick test – and wham-mo! I saw beautiful verbs, adjectives, and noun classifications scrolling across my screen. With a functioning prototype in place, I then created code to start converting our entire subtitle database… but that’s when I ran into a speed roadblock. In order to process several millions of words, I would need to dive into the world of Big Data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Big Data and Parallel Processing on Heroku with Laravel / Amazon SQS&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/heroku/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FN5YRdve--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/heroku.jpeg" alt="" width="474" height="474"&gt;&lt;/a&gt;Fortunately, the hosting platform &lt;a href="https://www.heroku.com"&gt;Heroku&lt;/a&gt; allows developers to easily spin up armies of worker servers with a few key presses (and some configuration of course &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CDd67yc0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f609.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CDd67yc0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s.w.org/images/core/emoji/12.0.0-1/72x72/1f609.png" alt="😉" width="72" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But wait a second, its not that easy! Heroku doesn’t provide the software to coordinate process delegation! For that, I utilized &lt;a href="https://laravel.com/docs/8.x/queues"&gt;Laravel’s built in Queuing system&lt;/a&gt;, and connected it to &lt;a href="https://aws.amazon.com/sqs/"&gt;Amazon’s Simple Queue Service (SQS)&lt;/a&gt;. With these tools wired up and ready, I then launched an army of servers on our data to churn out the parts of speech word by word.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delivering fast Search Results with AWS Elastic Search and Kibana&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In order to search through millions of database records for the search query, a good indexing solution was needed. For this, I turned to &lt;a href="https://aws.amazon.com/elasticsearch-service/"&gt;Amazon Elastic&lt;/a&gt; &lt;a href="https://aws.amazon.com/elasticsearch-service/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQ9xSMM9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/elastic.png" alt="" width="292" height="386"&gt;&lt;/a&gt;&lt;a href="https://aws.amazon.com/elasticsearch-service/"&gt;search service&lt;/a&gt;. I had used AWS Elastic Search before, so it was just a mater of getting the search query right. To aid the development of the search query, I used Amazons Built in Query visualizer called &lt;a href="https://aws.amazon.com/elasticsearch-service/the-elk-stack/kibana/"&gt;Kibana&lt;/a&gt;. This too took a bit of configuration, but once set up, I crafted the correct query, and then created an indexing Job in Laravel, which I again through at my army of Heroku servers for processing…. and voila — a subtitle search engine filtered by parts of speech!&lt;/p&gt;

&lt;p&gt;This project was quite fun to put together. I am amazed at the amount of power a developer can harness when utilizing Laravel Queues, Amazon SQS and Heroku!&lt;/p&gt;

&lt;p&gt;For those interested, here is a list of some of the software used for this project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technologies Used&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/laravel/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0yGIbzkJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/laravel-300x300.png" alt="" width="300" height="300"&gt;&lt;/a&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/heroku/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ykqEHc8T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/heroku-300x300.jpeg" alt="" width="300" height="300"&gt;&lt;/a&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/sqs/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F_fIgQaM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/sqs.png" alt="" width="250" height="172"&gt;&lt;/a&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/elastic/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eHtwIs_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/elastic-227x300.png" alt="" width="227" height="300"&gt;&lt;/a&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/kibana/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YTWdS0GN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/kibana.png" alt="" width="339" height="149"&gt;&lt;/a&gt;&lt;a href="https://b3dmultitech.com/portfolio/stanford-parts-of-speech-tagger/stanford/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fg7ZuFrq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://b3dmultitech.com/wp-content/uploads/2020/10/stanford-300x34.png" alt="" width="300" height="34"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://b3dmultitech.com/creating-a-subtitle-search-engine-using-the-stanford-parts-of-speech-tagger/"&gt;Creating a Subtitle Search Engine using the Stanford Parts of Speech Tagger&lt;/a&gt; appeared first on &lt;a href="https://b3dmultitech.com"&gt;Paul Preibisch&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>bigdata</category>
      <category>elasticsearch</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
