<?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: Jitendra</title>
    <description>The latest articles on DEV Community by Jitendra (@adhocore).</description>
    <link>https://dev.to/adhocore</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%2F91886%2Fe4b84a3f-03cd-44dd-bf9d-273afb46dcb6.jpeg</url>
      <title>DEV Community: Jitendra</title>
      <link>https://dev.to/adhocore</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adhocore"/>
    <language>en</language>
    <item>
      <title>A spinner (aka loading animation) for terminal in Go</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Wed, 26 Oct 2022 14:24:00 +0000</pubDate>
      <link>https://dev.to/adhocore/a-spinner-aka-loading-animation-for-terminal-in-go-1cjn</link>
      <guid>https://dev.to/adhocore/a-spinner-aka-loading-animation-for-terminal-in-go-1cjn</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/chin" rel="noopener noreferrer"&gt;
        chin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A Go lang library to show a spinner as user waits for any long running jobs to finish.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;adhocore/chin&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/adhocore/chin" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8f0d90d5c7220588abaefeb217a86e338ccecdaa9d338579cdd35f98cdec4898/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6164686f636f72652f6368696e" alt="Go Report"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/chin/actions/workflows/lint-action.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/adhocore/chin/actions/workflows/lint-action.yml/badge.svg" alt="Lint"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Golang+spinner+library+for+the+terminal&amp;amp;url=https://github.com/adhocore/chin&amp;amp;hashtags=golang,terminal,spinner,spin" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f677ce944dfdeb7a8cd741560d35d006363ef6160adeb63ee3d8c73373b1f51/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sponsors/adhocore" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96b594869d92a30454a0b8824ed33727ce4ba738f604730345be4436bf6b68e4/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d537570706f7274266d6573736167653d254532253944254134266c6f676f3d476974487562" alt="Support"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A Golang command line tool to show a spinner as you wait for some long running jobs to finish.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a simple project but carries a tremendous value to me [❤️].&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Install &lt;code&gt;chin&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get -u github.com/adhocore/chin&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Use in Go code with &lt;code&gt;WaitGroup&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;var&lt;/span&gt; &lt;span class="pl-s1"&gt;wg&lt;/span&gt; sync.&lt;span class="pl-smi"&gt;WaitGroup&lt;/span&gt;

&lt;span class="pl-s1"&gt;s&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;chin&lt;/span&gt;.&lt;span class="pl-en"&gt;New&lt;/span&gt;().&lt;span class="pl-en"&gt;WithWait&lt;/span&gt;(&lt;span class="pl-c1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="pl-s1"&gt;wg&lt;/span&gt;)
&lt;span class="pl-k"&gt;go&lt;/span&gt; &lt;span class="pl-s1"&gt;s&lt;/span&gt;.&lt;span class="pl-en"&gt;Start&lt;/span&gt;()

&lt;span class="pl-c"&gt;// invoke some long running task&lt;/span&gt;
&lt;span class="pl-c"&gt;// (you can also call s.Stop() from that task)&lt;/span&gt;
&lt;span class="pl-en"&gt;longTask&lt;/span&gt;(&lt;span class="pl-c1"&gt;&amp;amp;&lt;/span&gt;&lt;span class="pl-s1"&gt;wg&lt;/span&gt;)

&lt;span class="pl-s1"&gt;s&lt;/span&gt;.&lt;span class="pl-en"&gt;Stop&lt;/span&gt;()
&lt;span class="pl-s1"&gt;wg&lt;/span&gt;.&lt;span class="pl-en"&gt;Wait&lt;/span&gt;()&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Refer and run working &lt;a href="https://github.com/adhocore/chin./examples/main.go" rel="noopener noreferrer"&gt;examples&lt;/a&gt; with: &lt;code&gt;go run examples/main.go&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Custom Spinner&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;You can choose from provided spinner sets &lt;code&gt;chin.Default&lt;/code&gt;, &lt;code&gt;chin.Arrows&lt;/code&gt; and &lt;code&gt;chin.Dots&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;s&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;chin&lt;/span&gt;.&lt;span class="pl-en"&gt;New&lt;/span&gt;(&lt;span class="pl-s1"&gt;chin&lt;/span&gt;.&lt;span class="pl-c1"&gt;Arrows&lt;/span&gt;)
&lt;span class="pl-c"&gt;// or&lt;/span&gt;
&lt;span class="pl-s1"&gt;s&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;chin&lt;/span&gt;.&lt;span class="pl-en"&gt;New&lt;/span&gt;(&lt;span class="pl-s1"&gt;chin&lt;/span&gt;.&lt;span class="pl-c1"&gt;Dots&lt;/span&gt;)

&lt;span class="pl-k"&gt;go&lt;/span&gt; &lt;span class="pl-s1"&gt;s&lt;/span&gt;.&lt;span class="pl-en"&gt;Start&lt;/span&gt;()&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;chin.Default&lt;/code&gt; is selected…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/chin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Install &lt;code&gt;chin&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get &lt;span class="nt"&gt;-u&lt;/span&gt; github.com/adhocore/chin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use in Go code with &lt;code&gt;WaitGroup&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;wg&lt;/span&gt; &lt;span class="n"&gt;sync&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WaitGroup&lt;/span&gt;

&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;chin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithWait&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;wg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;// invoke some long running task&lt;/span&gt;
&lt;span class="c"&gt;// (you can also call s.Stop() from that task)&lt;/span&gt;
&lt;span class="n"&gt;longTask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;wg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;wg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Wait&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Refer &lt;a href="https://github.com/adhocore/chin/tree/main/examples" rel="noopener noreferrer"&gt;example&lt;/a&gt; for more (there is also one without waitgroup).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Screen
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fadhocore%2Fchin%2Fmain%2Fassets%2Fchin.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fadhocore%2Fchin%2Fmain%2Fassets%2Fchin.gif" alt="CHIN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback?
&lt;/h2&gt;

&lt;p&gt;Just drop a comment here, or open issues/PR in the repo. Thanks. 😎&lt;/p&gt;

</description>
      <category>go</category>
      <category>terminal</category>
      <category>cli</category>
    </item>
    <item>
      <title>Cron expression parser for Golang</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Sat, 24 Apr 2021 12:58:17 +0000</pubDate>
      <link>https://dev.to/adhocore/cron-expression-parser-for-golang-4f45</link>
      <guid>https://dev.to/adhocore/cron-expression-parser-for-golang-4f45</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/gronx" rel="noopener noreferrer"&gt;
        gronx
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Lightweight, fast and dependency-free Cron expression parser (due checker, next/prev due date finder), task runner, job scheduler and/or daemon for Golang (tested on v1.13+) and standalone usage. If you are bold, use it to replace crontab entirely.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;adhocore/gronx&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/gronx/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fe32631730ac1db9289550c2879450c402fb23c6a0da09dd5f666a5450708f4d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f67726f6e782e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/gronxLICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;
&lt;a href="https://goreportcard.com/report/github.com/adhocore/gronx" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c1be8017e4425e44aaa8b7b0aa0ee905a4882a3a490d0d0b3c608328621fddef/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6164686f636f72652f67726f6e78" alt="Go Report"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/gronx/actions/workflows/test-action.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/adhocore/gronx/actions/workflows/test-action.yml/badge.svg" alt="Test"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/gronx/actions/workflows/lint-action.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/adhocore/gronx/actions/workflows/lint-action.yml/badge.svg" alt="Lint"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/gronx" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b9e5b46fa4550101d3e9da932109e4e804e9b719cbad56e7f587c9c293c4ab64/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f67726f6e782f6d61696e2e7376673f7374796c653d666c61742d737175617265" alt="Codecov"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sponsors/adhocore" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96b594869d92a30454a0b8824ed33727ce4ba738f604730345be4436bf6b68e4/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d537570706f7274266d6573736167653d254532253944254134266c6f676f3d476974487562" alt="Support"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Lightweight+fast+and+deps+free+cron+expression+parser+for+Golang&amp;amp;url=https://github.com/adhocore/gronx&amp;amp;hashtags=go,golang,parser,cron,cronexpr,cronparser" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f677ce944dfdeb7a8cd741560d35d006363ef6160adeb63ee3d8c73373b1f51/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gronx&lt;/code&gt; is Golang &lt;a href="https://github.com/adhocore/gronx#cron-expression" rel="noopener noreferrer"&gt;cron expression&lt;/a&gt; parser ported from &lt;a href="https://github.com/adhocore/php-cron-expr" rel="noopener noreferrer"&gt;adhocore/cron-expr&lt;/a&gt; with task runner
and daemon that supports crontab like task list file. Use it programatically in Golang or as standalone binary instead of crond. If that's not enough, you can use gronx to find the next (&lt;code&gt;NextTick()&lt;/code&gt;) or previous (&lt;code&gt;PrevTick()&lt;/code&gt;) run time of an expression from any arbitrary point of time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zero dependency.&lt;/li&gt;
&lt;li&gt;Very &lt;strong&gt;fast&lt;/strong&gt; because it bails early in case a segment doesn't match.&lt;/li&gt;
&lt;li&gt;Built in crontab like daemon.&lt;/li&gt;
&lt;li&gt;Supports time granularity of Seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find gronx in &lt;a href="https://pkg.go.dev/github.com/adhocore/gronx" rel="nofollow noopener noreferrer"&gt;pkg.go.dev&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get -u github.com/adhocore/gronx&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-go notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; (
    &lt;span class="pl-s"&gt;"time"&lt;/span&gt;
    &lt;span class="pl-s"&gt;"github.com/adhocore/gronx"&lt;/span&gt;
)

&lt;span class="pl-s1"&gt;gron&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s1"&gt;gronx&lt;/span&gt;.&lt;span class="pl-en"&gt;New&lt;/span&gt;()
&lt;span class="pl-s1"&gt;expr&lt;/span&gt; &lt;span class="pl-c1"&gt;:=&lt;/span&gt; &lt;span class="pl-s"&gt;"* * * * *"&lt;/span&gt;

&lt;span class="pl-c"&gt;// check if expr is even valid, returns bool&lt;/span&gt;
&lt;span class="pl-s1"&gt;gron&lt;/span&gt;.&lt;span class="pl-en"&gt;IsValid&lt;/span&gt;(&lt;span class="pl-s1"&gt;expr&lt;/span&gt;) &lt;span class="pl-c"&gt;// true&lt;/span&gt;

&lt;span class="pl-c"&gt;// check if expr is due for current time, returns bool and error&lt;/span&gt;
&lt;span class="pl-s1"&gt;gron&lt;/span&gt;.&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/gronx" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

go get &lt;span class="nt"&gt;-u&lt;/span&gt; github.com/adhocore/gronx


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"time"&lt;/span&gt;

    &lt;span class="s"&gt;"github.com/adhocore/gronx"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;gron&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gronx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;expr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"* * * * *"&lt;/span&gt;

&lt;span class="c"&gt;// check if expr is even valid, returns bool&lt;/span&gt;
&lt;span class="n"&gt;gron&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsValid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// true&lt;/span&gt;

&lt;span class="c"&gt;// check if expr is due for current time, returns bool and error&lt;/span&gt;
&lt;span class="n"&gt;gron&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsDue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// true|false, nil&lt;/span&gt;

&lt;span class="c"&gt;// check if expr is due for given time&lt;/span&gt;
&lt;span class="n"&gt;gron&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsDue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2021&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;April&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c"&gt;// true|false, nil&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;In a more practical level, you would use this tool to manage and invoke jobs in app itself and not&lt;br&gt;
mess around with &lt;code&gt;crontab&lt;/code&gt; for each and every new tasks/jobs. It doesn't yet replace that but rather supplements it.&lt;br&gt;
There is a plan though &lt;a href="https://github.com/adhocore/gronx/issues/1" rel="noopener noreferrer"&gt;#1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In crontab just put one entry with &lt;code&gt;* * * * *&lt;/code&gt; which points to your Go entry point that uses this tool.&lt;br&gt;
Then in that entry point you would invoke different tasks if the corresponding Cron expr is due.&lt;br&gt;
Simple map structure would work for this.&lt;/p&gt;




&lt;h3&gt;
  
  
  Cron Expression
&lt;/h3&gt;

&lt;p&gt;Cron expression normally consists of 5 segments viz:&lt;/p&gt;

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

&amp;lt;minute&amp;gt; &amp;lt;hour&amp;gt; &amp;lt;day&amp;gt; &amp;lt;month&amp;gt; &amp;lt;weekday&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;and sometimes there can be 6th segment for &lt;code&gt;&amp;lt;year&amp;gt;&lt;/code&gt; at the end.&lt;/p&gt;

&lt;p&gt;For each segments you can have multiple choices separated by comma:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eg: &lt;code&gt;0,30 * * * *&lt;/code&gt; means either 0th or 30th minute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To specify range of values you can use dash:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eg: &lt;code&gt;10-15 * * * *&lt;/code&gt; means 10th, 11th, 12th, 13th, 14th and 15th minute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To specify range of step you can combine a dash and slash:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eg: &lt;code&gt;10-15/2 * * * *&lt;/code&gt; means every 2 minutes between 10 and 15 i.e 10th, 12th and 14th minute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the 3rd and 5th segment, there are additional modifiers (optional).&lt;/p&gt;

&lt;p&gt;And if you want, you can mix them up:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;5,12-20/4,55 * * * *&lt;/code&gt; matches if any one of &lt;code&gt;5&lt;/code&gt; or &lt;code&gt;12-20/4&lt;/code&gt; or &lt;code&gt;55&lt;/code&gt; matches the minute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Real Abbreviations
&lt;/h3&gt;

&lt;p&gt;You can use real abbreviations for month and week days. eg: &lt;code&gt;JAN&lt;/code&gt;, &lt;code&gt;dec&lt;/code&gt;, &lt;code&gt;fri&lt;/code&gt;, &lt;code&gt;SUN&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tags
&lt;/h3&gt;

&lt;p&gt;Following tags are available and they are converted to real cron expressions before parsing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;@yearly&lt;/em&gt; or &lt;em&gt;@annually&lt;/em&gt; - every year&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@monthly&lt;/em&gt; - every month&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@daily&lt;/em&gt; - every day&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@weekly&lt;/em&gt; - every week&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@hourly&lt;/em&gt; - every hour&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@5minutes&lt;/em&gt; - every 5 minutes&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@10minutes&lt;/em&gt; - every 10 minutes&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@15minutes&lt;/em&gt; - every 15 minutes&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;@30minutes&lt;/em&gt; - every 30 minutes&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;a class="mentioned-user" href="https://dev.to/always"&gt;@always&lt;/a&gt;&lt;/em&gt; - every minute&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="n"&gt;gron&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsDue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"@5minutes"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Modifiers&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;Following modifiers supported&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Day of Month / 3rd segment:&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;L&lt;/code&gt; stands for last day of month (eg: &lt;code&gt;L&lt;/code&gt; could mean 29th for February in leap year)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;W&lt;/code&gt; stands for closest week day (eg: &lt;code&gt;10W&lt;/code&gt; is closest week days (MON-FRI) to 10th date)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;em&gt;Day of Week / 5th segment:&lt;/em&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;L&lt;/code&gt; stands for last weekday of month (eg: &lt;code&gt;2L&lt;/code&gt; is last monday)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;#&lt;/code&gt; stands for nth day of week in the month (eg: &lt;code&gt;1#2&lt;/code&gt; is second sunday)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>go</category>
      <category>cron</category>
      <category>parser</category>
      <category>cronexpr</category>
    </item>
    <item>
      <title>Library to support JSON with comments and trailing comma in PHP</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Mon, 05 Apr 2021 12:57:39 +0000</pubDate>
      <link>https://dev.to/adhocore/library-to-support-json-with-comments-and-trailing-comma-in-php-2nga</link>
      <guid>https://dev.to/adhocore/library-to-support-json-with-comments-and-trailing-comma-in-php-2nga</guid>
      <description>&lt;p&gt;Unlike XML and YAML, JSON lacks native support for comments which is often missed. In addition, the trailing comma which would make diff on multiline value neat is also not available in JSON. If you are on PHP, then here is a little library &lt;a href="https://github.com/adhocore/php-json-comment" rel="noopener noreferrer"&gt;&lt;code&gt;adhocore/json-comment&lt;/code&gt;&lt;/a&gt; to fix it in the userland.&lt;/p&gt;

&lt;p&gt;Thanks to this library, a JSON like this will be possible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"adhocore/json-comment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"JSON comment stripper library for PHP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="err"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;creepy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;*/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"library"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"comment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Single&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Notice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comma&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;below:&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"strip-comment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;/*&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="err"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;multiline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;comment.&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="err"&gt;*/&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"authors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jitendra Adhikari"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jiten.adhikary@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"autoload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"psr-4"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"Ahc\\Json\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"autoload-dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"psr-4"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"Ahc\\Json\\Test\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tests/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"require"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"php"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;=7.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ext-ctype"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"require-dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"phpunit/phpunit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.5 || ^7.5 || ^8.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"phpunit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"echo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"echo '// This is not comment'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"test:cov"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"phpunit --coverage-text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Installation and Usage
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer req adhocore/json-comment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Ahc\Json\Comment&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Only strip and do not decode it already:&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Comment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'{
  "a":1,
  // Hmmm
  "b":2,,
}'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Strip comment and decode as JSON:&lt;/span&gt;
&lt;span class="nc"&gt;Comment&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'{
  "a":1,
  // Hmmm
  "b":2,,
}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Read JSON file, strip comments and decode as JSON:&lt;/span&gt;
&lt;span class="nc"&gt;Comment&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;parseFromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/path/to/commented.json'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;PS: A new version &lt;a href="https://github.com/adhocore/php-json-comment/releases/tag/1.1.0" rel="noopener noreferrer"&gt;1.1.0&lt;/a&gt; of this library has been just released.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Please use it and let know in the feedback or repo ticket if any issues.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/php-json-comment" rel="noopener noreferrer"&gt;
        php-json-comment
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Lightweight JSON comment and trailing comma stripper library for PHP with support for literal newlines and nested JSON strings.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;adhocore/json-comment&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/adhocore/php-json-comment/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2ed8ba4a41391ea7ce6764b1379ee7421409476f5318b9a1599849ec2f8266f0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f7068702d6a736f6e2d636f6d6d656e742e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/adhocore/php-json-comment?branch=main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/34987e3dd8d603ac4b9639bbb6f13563f3db08c9e6696d36d7a87f19e1b95ee3/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f6164686f636f72652f7068702d6a736f6e2d636f6d6d656e742f6d61696e2e7376673f7374796c653d666c61742d737175617265" alt="Travis Build"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/adhocore/php-json-comment/?branch=main" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/eb3f17188d9b5844918118d61bfe30b825762861308ced9a0f8953161599cdeb/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6164686f636f72652f7068702d6a736f6e2d636f6d6d656e742e7376673f7374796c653d666c61742d737175617265" alt="Scrutinizer CI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/php-json-comment" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6466d1493e732a74f95a7a095d0ae9868b102dfcb64e9c2087ee5f1d369a3470/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f7068702d6a736f6e2d636f6d6d656e742f6d61696e2e7376673f7374796c653d666c61742d737175617265" alt="Codecov branch"&gt;&lt;/a&gt;
&lt;a href="https://styleci.io/repos/100117199" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ddca178e8da5c3e8c20d2ce9f3a30c80f564ecd58f3b7b6b1bea54a5c70e896f/68747470733a2f2f7374796c6563692e696f2f7265706f732f3130303131373139392f736869656c64" alt="StyleCI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/php-json-commentLICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Flexible+JSON+parser+with+comments+and+newline+support+in+PHP&amp;amp;url=https://github.com/adhocore/php-json-comment&amp;amp;hashtags=php,json,flexible-json,json-comment" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f677ce944dfdeb7a8cd741560d35d006363ef6160adeb63ee3d8c73373b1f51/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sponsors/adhocore" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96b594869d92a30454a0b8824ed33727ce4ba738f604730345be4436bf6b68e4/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d537570706f7274266d6573736167653d254532253944254134266c6f676f3d476974487562" alt="Support"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lightweight JSON comment stripper library for PHP.&lt;/li&gt;
&lt;li&gt;Makes possible to have comment in any form of JSON data.&lt;/li&gt;
&lt;li&gt;Supported comments: single line &lt;code&gt;// comment&lt;/code&gt; or multi line &lt;code&gt;/* comment */&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Also strips trailing comma at the end of array or object, eg
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;[1,2,,]&lt;/code&gt; =&amp;gt; &lt;code&gt;[1,2]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{"x":1,,}&lt;/code&gt; =&amp;gt; &lt;code&gt;{"x":1}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Handles literal LF (newline/linefeed) within string notation so that we can have multiline string&lt;/li&gt;
&lt;li&gt;Supports JSON string inside JSON string (see ticket &lt;a href="https://github.com/adhocore/php-json-comment/issues/15" rel="noopener noreferrer"&gt;#15&lt;/a&gt; and PR &lt;a href="https://github.com/adhocore/php-json-comment/pull/16" rel="noopener noreferrer"&gt;#16&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Zero dependency (no vendor bloat).&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;composer require adhocore/json-comment

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; for php5.6&lt;/span&gt;
composer require adhocore/json-comment:^0.2&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-text-html-php notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;use&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;Json&lt;/span&gt;\&lt;span class="pl-v"&gt;Comment&lt;/span&gt;
&lt;span class="pl-c"&gt;// The JSON string!&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;someJsonText&lt;/span&gt; = &lt;span class="pl-s"&gt;'&lt;span class="pl-s"&gt;{"a":1,&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;"b":2,// comment&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;"c":3 /* inline comment */,&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;// comment&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;"d":/* also a comment */"d",&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;/* creepy comment*/"e":2.3,&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;/* multi line&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;comment */&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;&lt;span class="pl-s"&gt;"f":"f1",}&lt;/span&gt;'&lt;/span&gt;;

&lt;span class="pl-c"&gt;// OR&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;someJsonText&lt;/span&gt; = &lt;span class="pl-en"&gt;file_get_contents&lt;/span&gt;(&lt;span class="pl-s"&gt;'&lt;span class="pl-s"&gt;...&lt;/span&gt;'&lt;/span&gt;);

&lt;span class="pl-c"&gt;// Strip only!&lt;/span&gt;
(&lt;span class="pl-k"&gt;new&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/php-json-comment" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>php</category>
      <category>json</category>
      <category>jsoncomment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Weekend hack: a tiny tool to check internet speed right from Terminal</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Sat, 03 Apr 2021 14:21:14 +0000</pubDate>
      <link>https://dev.to/adhocore/weekend-hack-a-tiny-tool-to-check-internet-speed-right-from-terminal-514f</link>
      <guid>https://dev.to/adhocore/weekend-hack-a-tiny-tool-to-check-internet-speed-right-from-terminal-514f</guid>
      <description>&lt;p&gt;Introducing a tiny utility built on Go using chromedp to check internet speed right from the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use it?
&lt;/h2&gt;

&lt;p&gt;Make sure you have a Chrome browser installed, then install &lt;code&gt;fast&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get github.com/adhocore/fast/cmd/fast
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finally, make sure &lt;code&gt;$GOPATH&lt;/code&gt; or &lt;code&gt;$HOME/go/bin&lt;/code&gt; is in your &lt;code&gt;$PATH&lt;/code&gt; or &lt;code&gt;%path%&lt;/code&gt;, then run&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fast
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You will see something like this&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k5bvM_Dn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/adhocore/fast/main/assets/usage.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k5bvM_Dn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/adhocore/fast/main/assets/usage.png" alt="fast" width="786" height="239"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/fast"&gt;
        fast
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Check your internet speed right from your terminal. Built on GOlang using chromedp
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
adhocore/fast&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://goreportcard.com/report/github.com/adhocore/fast" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/d4ccc941f52c203be6f24c69a7f2b69520240f89fc68bfb646b44884b3bd5b11/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6164686f636f72652f66617374" alt="Go Report"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/fast/actions/workflows/lint-action.yml"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vSjVbCli--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/adhocore/fast/actions/workflows/lint-action.yml/badge.svg" alt="Lint"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/15usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/35e7ae613e708d98559979e99b6f8b031d9b04dfb5f49f740adc646d15d18f97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3135" alt="Donate 15"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/25usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/44ad64f20d492591124cc6b7118dfc12fdce3d8e501ca556cfb1e79da8766162/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3235" alt="Donate 25"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/50usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a21459579bc232f91e58322c1d21df4ea1439288c197f86fb8f098d5e653a770/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3530" alt="Donate 50"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Golang+tool+to+check+internet+speed+right+from+the+terminal&amp;amp;url=https://github.com/adhocore/fast&amp;amp;hashtags=php,jwt,auth" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/90bc908826728c0e4261acfff5619fd732c7be2b2a00624fce6363c9a3623c90/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A GO lang command line tool to check internet speed right from the terminal.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Uses &lt;a href="https://fast.com" rel="nofollow"&gt;fast.com&lt;/a&gt; through headless chrome.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
Prerequistie&lt;/h2&gt;
&lt;p&gt;Chrome browser must be installed. &lt;strong&gt;&lt;code&gt;chromedp&lt;/code&gt;&lt;/strong&gt; will try to locate the chrome executable automatically from these &lt;a href="https://github.com/chromedp/chromedp/blob/master/allocate.go#L334-L352"&gt;paths&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you get error regarding chrome availability, and you have chrome in custom path then check &lt;a href="https://github.com/adhocore/fast#troubleshooting"&gt;Troubleshooting&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;p&gt;Install &lt;code&gt;fast&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get -u github.com/adhocore/fast/cmd/fast
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or in recent go versions:&lt;/span&gt;
go install github.com/adhocore/fast/cmd/fast@v1.1.0&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Finally, make sure &lt;code&gt;$GOPATH&lt;/code&gt; or &lt;code&gt;$HOME/go/bin&lt;/code&gt; is in your &lt;code&gt;$PATH&lt;/code&gt; or &lt;code&gt;%path%&lt;/code&gt;, then run:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;fast

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; if you just want download speed (pass -noup aka no upload speed)&lt;/span&gt;
fast -noup&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Wait a while or &lt;code&gt;Ctrl+C&lt;/code&gt; if you can't. That's all.&lt;/p&gt;
&lt;h2&gt;
Screen&lt;/h2&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/adhocore/fast./assets/usage.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5kbQICVj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/adhocore/fast./assets/usage.png" alt="FAST"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Troubleshooting&lt;/h2&gt;
&lt;p&gt;In &lt;strong&gt;MacOS&lt;/strong&gt;, you can do something like this:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;echo&lt;/span&gt; &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;#!/bin/sh\n\n/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome $@&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; /usr/local/bin/chrome

chmod +x /usr/local/bin/chrome&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;In &lt;strong&gt;WSL&lt;/strong&gt;, you can symlink chrome from host WinOS like this:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/fast"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



</description>
      <category>showdev</category>
      <category>go</category>
      <category>weekendhack</category>
    </item>
    <item>
      <title>GOlang URL shortener service using postgres, redis, bulma</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Mon, 29 Mar 2021 14:53:53 +0000</pubDate>
      <link>https://dev.to/adhocore/golang-url-shortener-service-using-postgres-redis-bulma-53ae</link>
      <guid>https://dev.to/adhocore/golang-url-shortener-service-using-postgres-redis-bulma-53ae</guid>
      <description>&lt;p&gt;You can use it via the mobile friendly web UI or automate it with API already provided. I'm also thinking of building a browser extension to shorten any URL in a click (context menu for example).&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Just visit &lt;a href="https://urlsh.xyz" rel="noopener noreferrer"&gt;urlssh.xyz&lt;/a&gt;. You can also integrate API for programmatic usage.&lt;/p&gt;

&lt;p&gt;PS: &lt;a href="https://urlssh.xyz/6OTMTS" rel="noopener noreferrer"&gt;https://urlssh.xyz/6OTMTS&lt;/a&gt; is short link to this article 😎&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/urlsh" rel="noopener noreferrer"&gt;
        urlsh
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Golang URL shortener and bookmarker service with UI, API, Cache, Hits Counter and forwarder using postgres and redis in backend, bulma in frontend. Think of it as self hosting ready url shortener.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;urlsh&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/urlsh/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/960022ffcfa8fbe7e84c34161c551d305c65970e48add85d65bc2bba8f0c4738/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f75726c73682e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/urlshLICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/urlsh/actions/workflows/lint-github-action.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/adhocore/urlsh/actions/workflows/lint-github-action.yml/badge.svg" alt="lint"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/urlsh/actions/workflows/test-github-action.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/adhocore/urlsh/actions/workflows/test-github-action.yml/badge.svg" alt="test"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=URL+shortener+app+built+on+Golang&amp;amp;url=https://github.com/adhocore/urlsh&amp;amp;hashtags=go,golang,url,urlshortener" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f677ce944dfdeb7a8cd741560d35d006363ef6160adeb63ee3d8c73373b1f51/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sponsors/adhocore" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96b594869d92a30454a0b8824ed33727ce4ba738f604730345be4436bf6b68e4/68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d537570706f7274266d6573736167653d254532253944254134266c6f676f3d476974487562" alt="Support"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://urlssh.xyz" rel="nofollow noopener noreferrer"&gt;urlsh&lt;/a&gt;&lt;/strong&gt; is URL shortener application built on &lt;a href="https://golang.org" rel="nofollow noopener noreferrer"&gt;Go&lt;/a&gt; language.&lt;/p&gt;
&lt;p&gt;It does not use external libraries except the &lt;a href="http://gorm.io" rel="nofollow noopener noreferrer"&gt;&lt;code&gt;gorm&lt;/code&gt;&lt;/a&gt; for
&lt;a href="https://github.com/go-gorm/postgres" rel="noopener noreferrer"&gt;&lt;code&gt;postgres&lt;/code&gt;&lt;/a&gt; database and minimal redis
module &lt;a href="https://github.com/gomodule/redigo" rel="noopener noreferrer"&gt;redigo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/adhocore/urlsh./assets/urlsh.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fadhocore%2Furlsh.%2Fassets%2Furlsh.png" alt="URLSH"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Usage&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Web client&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Just visit &lt;a href="https://urlssh.xyz" rel="nofollow noopener noreferrer"&gt;urlssh.xyz&lt;/a&gt;. You can also integrate API for programmatic usage.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Terminal client&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;If you live inside the command line terminal, you can install a client:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go get github.com/adhocore/urlsh/cmd/urlshc&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or, with newer go versions&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go install github.com/adhocore/urlsh/cmd/urlshc&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Make sure &lt;code&gt;$GOPATH&lt;/code&gt; or &lt;code&gt;$HOME/go/bin&lt;/code&gt; is in your &lt;code&gt;$PATH&lt;/code&gt; or &lt;code&gt;%path%&lt;/code&gt;, then use it like so:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; show help&lt;/span&gt;
urlshc -h

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; shorten a url&lt;/span&gt;
urlshc -url &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;https://your.long.url/here&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; shorten a url with keywords and expiry date&lt;/span&gt;
urlshc -url &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;https://your.long.url/here&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; -keywords &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;word-1,word2&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; -expires &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;2022-12-31&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; if you have self hosted or local instance of urlsh, pass in URLSH_HOST (with domain only)&lt;/span&gt;
URLSH_HOST=https://your.urlsh-instance.com urlshc -url &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;https://your.long.url/here&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Read below for self hosting…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/urlsh" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>go</category>
      <category>showdev</category>
      <category>gorm</category>
      <category>redigo</category>
    </item>
    <item>
      <title>PHP Code Syntax highlighting (pretty printing) for CLI.</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Mon, 23 Dec 2019 07:36:09 +0000</pubDate>
      <link>https://dev.to/adhocore/php-code-syntax-highlighting-pretty-printing-for-cli-110h</link>
      <guid>https://dev.to/adhocore/php-code-syntax-highlighting-pretty-printing-for-cli-110h</guid>
      <description>&lt;p&gt;Introducing a small library I wrote over the weekend which prints syntax highlighted (colored) PHP code into the terminal.&lt;/p&gt;

&lt;p&gt;You can use it in any PHP CLI applications to pretty print PHP code OR to take screenshot of code and use somewhere.&lt;/p&gt;

&lt;p&gt;Right now screenshot is manual process but it will soon be automated into this library so you can save a PNG image of your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;$ composer require adhocore/cli-syntax&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;use Ahc\CliSyntax\Highlighter;

// PHP code
echo new Highlighter('&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="na"&gt;php&lt;/span&gt; &lt;span class="na"&gt;echo&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;Hello&lt;/span&gt; &lt;span class="na"&gt;world&lt;/span&gt;&lt;span class="err"&gt;!";');&lt;/span&gt;
&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="na"&gt;OR&lt;/span&gt;
&lt;span class="na"&gt;echo&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;new&lt;/span&gt; &lt;span class="na"&gt;Highlighter&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="na"&gt;-&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;highlight('&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello world!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="s1"&gt;');

// PHP file
echo Highlighter::for('&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;php&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/php-cli-syntax" rel="noopener noreferrer"&gt;
        php-cli-syntax
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      PHP Code Syntax Highlighter and/or exporter for CLI. Zero Dependency.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;adhocore/cli-syntax&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/adhocore/php-cli-syntax/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1c8be0af4126de3cf97c462648037ead94324934cb1abf3f10021b7388501a13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f7068702d636c692d73796e7461782e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.com/adhocore/php-cli-syntax?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f7a68fc88e46548c2a848da8387adf2012971c93fda5387e05442eec115284ea/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f636f6d2f6164686f636f72652f7068702d636c692d73796e7461782e7376673f6272616e63683d6d6173746572267374796c653d666c61742d737175617265" alt="Travis Build"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/adhocore/php-cli-syntax/?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/92f325e55ff055efe97c48e34166d5f9688a932303244d2ab2ed9dc9812cd689/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6164686f636f72652f7068702d636c692d73796e7461782e7376673f7374796c653d666c61742d737175617265" alt="Scrutinizer CI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/php-cli-syntax" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8b2b34c30c29712ddc0ed165f48f018203aff1bc014800784d5bfacb2b338109/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f7068702d636c692d73796e7461782f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Codecov branch"&gt;&lt;/a&gt;
&lt;a href="https://styleci.io/repos/229348504" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e00a2b392cbf4377c410a5abb89d404b9d27c419d720ed1347a6a6b44db9eaa8/68747470733a2f2f7374796c6563692e696f2f7265706f732f3232393334383530342f736869656c64" alt="StyleCI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/php-cli-syntax./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;        _   _          _
  ___  | | (_)  ___   | |__
 / __| | | | | / __|  '  _  \
| (__  | | | | \___ \ | | | |
 \___| |_| |_| |____/ |_| |_|
PHP CLI Syntax Highlight Tool
=============================
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;As phar binary&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl -SsLo &lt;span class="pl-k"&gt;~&lt;/span&gt;/clish.phar https://github.com/adhocore/php-cli-syntax/releases/latest/download/clish.phar

chmod +x &lt;span class="pl-k"&gt;~&lt;/span&gt;/clish.phar &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo ln -s &lt;span class="pl-k"&gt;~&lt;/span&gt;/clish.phar /usr/local/bin/clish&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Follow same steps to upgrade.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;As standalone binary&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;composer global require adhocore/cli-syntax&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Follow same steps to upgrade.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;As project dependency&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;composer require adhocore/cli-syntax&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Shell command&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;If you installed as binary following any of the above methods, then:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; you will be able to run it as&lt;/span&gt;
clish -h
clish -f file.php
&lt;span class="pl-c1"&gt;echo&lt;/span&gt; &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;&amp;lt;?php date("Ymd");&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="pl-k"&gt;|&lt;/span&gt; clish
cat file.php &lt;span class="pl-k"&gt;|&lt;/span&gt; clish

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; export png&lt;/span&gt;
clish -f file.php -o file.png&lt;/pre&gt;

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;clish&lt;/code&gt; stands for CLI syntax highlight.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Options&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Parameter options:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;  [-e|--echo]            Forces echo to&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/php-cli-syntax" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Feedbacks and contributions are welcome. Thank you.&lt;/p&gt;

</description>
      <category>php</category>
      <category>showdev</category>
      <category>syntaxhighlighter</category>
      <category>codehighlight</category>
    </item>
    <item>
      <title>Lazy load images and videos in twig</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Sun, 15 Dec 2019 04:22:32 +0000</pubDate>
      <link>https://dev.to/adhocore/lazy-load-images-and-videos-in-twig-4339</link>
      <guid>https://dev.to/adhocore/lazy-load-images-and-videos-in-twig-4339</guid>
      <description>&lt;p&gt;Eager loading of images and videos not only makes webpage slow and clumsy but also consumes a lot of bandwidth.&lt;br&gt;
If you use &lt;code&gt;twig&lt;/code&gt; templating system for your view layer, here's a small extension that defers loading of resources so they are loaded when required in viewport.&lt;/p&gt;

&lt;p&gt;This extension based on awesome &lt;a href="https://github.com/malchata/yall.js" rel="noopener noreferrer"&gt;malchata/yall.js&lt;/a&gt; aka &lt;code&gt;yet another lazy loader&lt;/code&gt; is fully customisable.&lt;/p&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require adhocore/twig-yall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;First setup twig to register this extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use your loader of choice&lt;/span&gt;
&lt;span class="nv"&gt;$twig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Twig\Environment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Twig\Loader\ArrayLoader&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Register Yall with defaults&lt;/span&gt;
&lt;span class="nv"&gt;$twig&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;addExtension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Ahc\TwigYall\Yall&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="c1"&gt;// customisation config:&lt;/span&gt;
    &lt;span class="s1"&gt;'placeholder'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'default.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then wrap your twig template in &lt;code&gt;{% lazyload %}...{% endlazyload %}&lt;/code&gt;  like so:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight twig"&gt;&lt;code&gt;&lt;span class="c"&gt;{# sometemplate.twig #}&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"apple.jpg"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;                   &lt;span class="c"&gt;{# not lazyloaded #}&lt;/span&gt;

&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="nv"&gt;lazyload&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"ball.jpg"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;                    &lt;span class="c"&gt;{# lazyloaded #}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cat.jpg"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"no-lazy"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;     &lt;span class="c"&gt;{# not lazyloaded #}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cat.jpg"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;      &lt;span class="c"&gt;{# not lazyloaded #}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;poster=&lt;/span&gt;&lt;span class="s"&gt;"vid.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;                  &lt;span class="c"&gt;{# lazyloaded #}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"vid1.mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;                 &lt;span class="c"&gt;{# lazyloaded #}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"vid2.mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;                 &lt;span class="c"&gt;{# lazyloaded #}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'no-lazy'&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/video&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;{# not lazyloaded #}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"pic.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/picture&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;{# lazyloaded #}&lt;/span&gt;
&lt;span class="cp"&gt;{%&lt;/span&gt; &lt;span class="nv"&gt;endlazyload&lt;/span&gt; &lt;span class="cp"&gt;%}&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;                           &lt;span class="c"&gt;{# not lazyloaded #}&lt;/span&gt;

&lt;span class="cp"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;yallify&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="cp"&gt;}}&lt;/span&gt;                           &lt;span class="c"&gt;{# place it in footer #}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finally when twig compiles to html, above will be rendered as:&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;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"apple.jpg"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lazy yall"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"default.png"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"ball.jpg"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cat.jpg"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"no-lazy"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cat.jpg"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lazy yall"&lt;/span&gt; &lt;span class="na"&gt;poster=&lt;/span&gt;&lt;span class="s"&gt;"default.png"&lt;/span&gt; &lt;span class="na"&gt;data-poster=&lt;/span&gt;&lt;span class="s"&gt;"vid.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lazy yall"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"vid1.mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lazy yall"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"vid2.mp4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'no-lazy'&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"lazy yall"&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"pic.jpg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://polyfill.io/v2/polyfill.min.js?features=IntersectionObserver"&lt;/span&gt; &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://unpkg.com/yall-js@3.1.7/dist/yall.min.js"&lt;/span&gt; &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DOMContentLoaded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;yall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lazyClass&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lazy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/twig-yall" rel="noopener noreferrer"&gt;
        twig-yall
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Resource lazy loader extension for twig using malchata/yall.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;adhocore/twig-yall&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;It is a twig extension around &lt;a href="https://github.com/malchata/yall.js" rel="noopener noreferrer"&gt;&lt;code&gt;malchata/yall.js&lt;/code&gt;&lt;/a&gt;
for lazy loading &lt;code&gt;img&lt;/code&gt;, &lt;code&gt;picture&lt;/code&gt;, &lt;code&gt;video&lt;/code&gt;, &lt;code&gt;iframe&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;(Also supports &lt;code&gt;source&lt;/code&gt; tag and &lt;code&gt;srcset&lt;/code&gt; attribute).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/twig-yall/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9fa2f79a37bd98385711cdad0a02fdee5584d9019790b8ee870a83ff19499a13/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f747769672d79616c6c2e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.com/adhocore/twig-yall?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9ff73333672b95e2945c6bd119d0347d90bc2425940734e7ae1faac078284f1d/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f636f6d2f6164686f636f72652f747769672d79616c6c2e7376673f6272616e63683d6d6173746572267374796c653d666c61742d737175617265" alt="Travis Build"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/adhocore/twig-yall/?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/178ddb7eb64675d2012401e7081e0283f9a3701286d4086d25a745affe29aa5f/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6164686f636f72652f747769672d79616c6c2e7376673f7374796c653d666c61742d737175617265" alt="Scrutinizer CI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/twig-yall" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4334f23d6402ef662d6fc3578b72043fb54ce96b345f26b3c60c7d5831d45a86/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f747769672d79616c6c2f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Codecov branch"&gt;&lt;/a&gt;
&lt;a href="https://styleci.io/repos/172214338" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13a2da2f2623ccd768461446cecf05377719f92161558cfbcede48d1f1903995/68747470733a2f2f7374796c6563692e696f2f7265706f732f3137323231343333382f736869656c64" alt="StyleCI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/twig-yall./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Eager loading of images and videos not only makes webpage slow and clumsy but also consumes a lot of bandwidth.&lt;/p&gt;
&lt;p&gt;If you use twig templating system for your view layer, this extension defers loading of resources so they are loaded only when required in viewport.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;composer require adhocore/twig-yall&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;First setup twig to register this extension:&lt;/p&gt;
&lt;div class="highlight highlight-text-html-php notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;// Use your loader of choice&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;twig&lt;/span&gt; = &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Twig&lt;/span&gt;\&lt;span class="pl-v"&gt;Environment&lt;/span&gt;(&lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Twig&lt;/span&gt;\&lt;span class="pl-v"&gt;Loader&lt;/span&gt;\&lt;span class="pl-v"&gt;ArrayLoader&lt;/span&gt;)
&lt;span class="pl-c"&gt;// Register Yall with defaults&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;twig&lt;/span&gt;-&amp;gt;&lt;span class="pl-en"&gt;addExtension&lt;/span&gt;(&lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;TwigYall&lt;/span&gt;\&lt;span class="pl-v"&gt;Yall&lt;/span&gt;);

&lt;span class="pl-c"&gt;// Configuring Yall instance:&lt;/span&gt;
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;twig&lt;/span&gt;-&amp;gt;&lt;span class="pl-en"&gt;addExtension&lt;/span&gt;(&lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;TwigYall&lt;/span&gt;\&lt;span class="pl-v"&gt;Yall&lt;/span&gt;(
    &lt;span class="pl-s"&gt;'&lt;span class="pl-s"&gt;polyfillJs&lt;/span&gt;'&lt;/span&gt;  =&amp;gt; &lt;span class="pl-s"&gt;'&lt;span class="pl-s"&gt;&amp;lt;custom url to polyfill&amp;gt;&lt;/span&gt;'&lt;/span&gt;,
    &lt;span class="pl-s"&gt;'&lt;span class="pl-s"&gt;yallJs&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/twig-yall" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>twig</category>
      <category>lazyload</category>
      <category>php7</category>
      <category>lazyloadimages</category>
    </item>
    <item>
      <title>Hands on with PHP7.4</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Sat, 30 Nov 2019 07:44:03 +0000</pubDate>
      <link>https://dev.to/adhocore/hands-on-with-php7-4-e52</link>
      <guid>https://dev.to/adhocore/hands-on-with-php7-4-e52</guid>
      <description>&lt;p&gt;As most of us already know, PHP7.4 became production ready few days back. It comes with some cool features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Short Arrow Functions&lt;/li&gt;
&lt;li&gt;Spread Operator for Arrays&lt;/li&gt;
&lt;li&gt;Typed Properties&lt;/li&gt;
&lt;li&gt;Opcache Preloading&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... and much more! We can't thank the team behind PHP enough!&lt;/p&gt;

&lt;p&gt;If you are a PHP developer or PHP enthusiast you must be excited already to get hands on with PHP7.4.&lt;/p&gt;

&lt;p&gt;If you want to give it a try with ease - the docker way, then I have created a docker image with not just PHP7.4 but tons of common and useful PHP extensions. Check it out.&lt;/p&gt;

&lt;p&gt;TLDR: &lt;code&gt;docker pull adhocore/phpfpm:7.4&lt;/code&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/docker-phpfpm"&gt;
        docker-phpfpm
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Docker PHP FPM on alpine 3.15 with PHP7.4.32 with 87 extensions and PHP8.0.24/PHP8.1.11 with 85 useful extensions (you can disable not necessary ones easily)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h2&gt;
docker-phpfpm&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/docker-phpfpm/actions/workflows/build.yml"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vypke4kP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/adhocore/docker-phpfpm/actions/workflows/build.yml/badge.svg" alt="Docker build"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/15usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/35e7ae613e708d98559979e99b6f8b031d9b04dfb5f49f740adc646d15d18f97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3135" alt="Donate 15"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/25usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/44ad64f20d492591124cc6b7118dfc12fdce3d8e501ca556cfb1e79da8766162/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3235" alt="Donate 25"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/50usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a21459579bc232f91e58322c1d21df4ea1439288c197f86fb8f098d5e653a770/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3530" alt="Donate 50"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Production+ready+PHP7+and+PHP8+docker+images+with+plenty+extensions&amp;amp;url=https://github.com/adhocore/docker-phpfpm&amp;amp;hashtags=docker,dockerimage,php7,php8,phpext" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/90bc908826728c0e4261acfff5619fd732c7be2b2a00624fce6363c9a3623c90/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Docker PHP FPM with lean alpine base. The download size is just about ~150MB.&lt;/p&gt;
&lt;p&gt;It contains PHP8.1.11 and PHP8.0.24 with plenty of common and useful extensions.&lt;/p&gt;
&lt;p&gt;You can also continue using &lt;a href="https://github.com/adhocore/docker-phpfpm./7.4.Dockerfile"&gt;&lt;code&gt;adhocore/phpfpm:7.4&lt;/code&gt;&lt;/a&gt; for PHP7.4.30.&lt;/p&gt;
&lt;p&gt;If you are looking for a complete local development stack then check
&lt;a href="https://github.com/adhocore/docker-lemp"&gt;&lt;code&gt;adhocore/lemp&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It comes prepackaged with &lt;code&gt;composer&lt;/code&gt; - both v1 and v2
Use &lt;code&gt;composer2&lt;/code&gt; command for v2 and &lt;code&gt;composer&lt;/code&gt; for v1.&lt;/p&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;p&gt;To pull latest image:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docker pull adhocore/phpfpm:8.0

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or for alpine 3.13&lt;/span&gt;
docker pull adhocore/phpfpm:8.0-alp3.13

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or for php 7.4&lt;/span&gt;
docker pull adhocore/phpfpm:7.4

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or for php 7.4 on alpine 3.13&lt;/span&gt;
docker pull adhocore/phpfpm:7.4-alp3.13
&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;To use in docker-compose&lt;/p&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; ./docker-compose.yml&lt;/span&gt;
&lt;span class="pl-ent"&gt;version&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;3&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="pl-ent"&gt;services&lt;/span&gt;:
  &lt;span class="pl-ent"&gt;phpfpm&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;image&lt;/span&gt;: &lt;span class="pl-s"&gt;adhocore/phpfpm:8.0&lt;/span&gt;
    &lt;span class="pl-ent"&gt;container_name&lt;/span&gt;: &lt;span class="pl-s"&gt;phpfpm&lt;/span&gt;
    &lt;span class="pl-ent"&gt;volumes&lt;/span&gt;:
      - &lt;span class="pl-s"&gt;./path/to/your/app:/var/www/html&lt;/span&gt;
      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Here you can also volume php ini settings&lt;/span&gt;
      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; - /path/to/zz-overrides:/usr/local/etc/php/conf.d/zz-overrides.ini&lt;/span&gt;
    &lt;span class="pl-ent"&gt;ports&lt;/span&gt;:
      - &lt;span class="pl-c1"&gt;9000:9000&lt;/span&gt;
    &lt;span class="pl-ent"&gt;environment&lt;/span&gt;:
      &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; ...&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
Composer&lt;/h3&gt;
&lt;p&gt;Latest…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/docker-phpfpm"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you want a full docker based LEMP stack with PHP7.4, then I have got you covered as well.&lt;/p&gt;

&lt;p&gt;TLDR: Run &lt;code&gt;docker run -p 8080:80 -v $(pwd):/var/www/html --name lemp -d adhocore/lemp:7.4&lt;/code&gt; then visit &lt;a href="http://localhost:8080"&gt;localhost:8080&lt;/a&gt;. There you have dockerized LEMP stack with PHP7.4.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/docker-lemp"&gt;
        docker-lemp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A single container LEMP complete fullstack with latest release of PHP7.4.30, 8.0.24 &amp;amp; 8.1.11 and MySQL, nginx, PostgreSQL, phalcon, swoole, mailcatcher, beanstalkd, elasticsearch, memcached, redis, adminer and all you ever need; on top alpine3.15
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h2&gt;
docker-lemp&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/docker-lemp/actions/workflows/build.yml"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--panFEGZZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/adhocore/docker-lemp/actions/workflows/build.yml/badge.svg" alt="Docker build"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/15usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/35e7ae613e708d98559979e99b6f8b031d9b04dfb5f49f740adc646d15d18f97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3135" alt="Donate 15"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/25usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/44ad64f20d492591124cc6b7118dfc12fdce3d8e501ca556cfb1e79da8766162/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3235" alt="Donate 25"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/50usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a21459579bc232f91e58322c1d21df4ea1439288c197f86fb8f098d5e653a770/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3530" alt="Donate 50"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Complete+LEMP+fullstack+for+local+development+using+docker&amp;amp;url=https://github.com/adhocore/docker-lemp&amp;amp;hashtags=docker,lemp,fullstack,localdev" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/90bc908826728c0e4261acfff5619fd732c7be2b2a00624fce6363c9a3623c90/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do not use this LEMP in Production
For production, use &lt;a href="https://github.com/adhocore/docker-phpfpm"&gt;adhocore/phpfpm&lt;/a&gt;
then &lt;a href="https://docs.docker.com/compose/install/" rel="nofollow"&gt;compose&lt;/a&gt; a stack using individual &lt;code&gt;nginx&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt; etc images.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://hub.docker.com/r/adhocore/lemp" rel="nofollow"&gt;&lt;code&gt;adhocore/lemp&lt;/code&gt;&lt;/a&gt; is a minimal single container LEMP full stack for local development.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you want to use PHP7.4 on LEMP stack then head over to &lt;a href="https://github.com/adhocore/docker-lemp7.4.Dockerfile"&gt;&lt;code&gt;adhocore/lemp:7.4&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It is quick jumpstart for onboarding you into docker based development
The download size is just about ~360MB which is tiny considering how much tools and stuffs it contains.&lt;/p&gt;
&lt;p&gt;The docker container &lt;code&gt;adhocore/lemp&lt;/code&gt; is composed of:&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Port&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;adminer&lt;/td&gt;
&lt;td&gt;4.8.1&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;alpine&lt;/td&gt;
&lt;td&gt;3.15&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;beanstalkd&lt;/td&gt;
&lt;td&gt;1.11&lt;/td&gt;
&lt;td&gt;11300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;elasticsearch&lt;code&gt;*&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;6.4.3&lt;/td&gt;
&lt;td&gt;9200,9300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mailcatcher&lt;/td&gt;
&lt;td&gt;0.7.1&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;memcached&lt;/td&gt;
&lt;td&gt;1.6.6&lt;/td&gt;
&lt;td&gt;11211&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MySQL&lt;code&gt;**&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;5.7&lt;/td&gt;
&lt;td&gt;3306&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nginx&lt;/td&gt;
&lt;td&gt;1.18.0&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;phalcon&lt;/td&gt;
&lt;td&gt;4.0.0&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP8.1&lt;/td&gt;
&lt;td&gt;8.1.11&lt;/td&gt;
&lt;td&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP8.0&lt;/td&gt;
&lt;td&gt;8.0.24&lt;/td&gt;
&lt;td&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP7.4&lt;/td&gt;
&lt;td&gt;7.4.30&lt;/td&gt;
&lt;td&gt;9000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;td&gt;12.6&lt;/td&gt;
&lt;td&gt;5432&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;del&gt;rabbitmq&lt;/del&gt;&lt;/td&gt;
&lt;td&gt;3.8.*&lt;/td&gt;
&lt;td&gt;5672&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;redis&lt;/td&gt;
&lt;td&gt;5.0.11&lt;/td&gt;
&lt;td&gt;6379&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;swoole&lt;/td&gt;
&lt;td&gt;4.5.9&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;*&lt;/code&gt;: Latest versions of alpine (3.13+) seems to…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/docker-lemp"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Oh and both the images are built on top alpine base so should be slimmer.&lt;/p&gt;

&lt;h4&gt;
  
  
  Further reading
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.php.net/ChangeLog-7.php"&gt;PHP7.4 Changelog&lt;/a&gt;&lt;br&gt;
&lt;a href="https://community.centminmod.com/threads/php-benchmarks-7-4-vs-7-3-vs-7-2-vs-7-1-vs-7-0-php-fpm.18741/"&gt;PHP7.4 Benchmark&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>docker</category>
      <category>fpm</category>
      <category>lemp</category>
    </item>
    <item>
      <title>Resumable file upload (TUS protocol implementation) using pure bash</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Tue, 20 Aug 2019 13:31:36 +0000</pubDate>
      <link>https://dev.to/adhocore/tus-client-protocol-implementation-for-bash-13e6</link>
      <guid>https://dev.to/adhocore/tus-client-protocol-implementation-for-bash-13e6</guid>
      <description>&lt;p&gt;Introducing &lt;code&gt;tusc.sh&lt;/code&gt; - bash script for resumable file upload using tus protocol.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qF2jUiUG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-6a5bca60a4ebf959a6df7f08217acd07ac2bc285164fae041eacb8a148b1bab9.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/tusc.sh"&gt;
        tusc.sh
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      TUS client protocol implementation for bash.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="instapaper_body md"&gt;
&lt;h1&gt;
adhocore/tusc.sh&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/tusc.sh/releases"&gt;&lt;img src="https://camo.githubusercontent.com/ba9f08b6a7934e5f1d2826580f43109b3986f9aa/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f747573632e73682e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.com/adhocore/tusc.sh?branch=master" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a2f5c4f925f5739e87b7c31a63a1cac10a742ad3/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f636f6d2f6164686f636f72652f747573632e73682f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Travis Build"&gt;&lt;/a&gt;
&lt;a href="https://raw.githubusercontent.com/adhocore/tusc.sh/master/LICENSE"&gt;&lt;img src="https://camo.githubusercontent.com/f8dc8b0dba0c01c69878a1b06bf2167d2bf9a5dd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tusc&lt;/code&gt; is &lt;a href="https://tus.io" rel="nofollow"&gt;TUS&lt;/a&gt; client protocol implementation for bash.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tusc&lt;/code&gt; lets you upload big files to servers supporting tus protocol right from your terminal.&lt;/p&gt;
&lt;p&gt;If anything goes wrong, you can rerun the command to resume upload from where it was left off.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Requirements:&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; jq&lt;/span&gt;
sudo apt install jq -y
curl -sSLo &lt;span class="pl-k"&gt;~&lt;/span&gt;/tusc https://raw.githubusercontent.com/adhocore/tusc.sh/master/tusc.sh
chmod +x &lt;span class="pl-k"&gt;~&lt;/span&gt;/tusc &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo ln -s &lt;span class="pl-k"&gt;~&lt;/span&gt;/tusc /usr/local/bin/tusc&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
Usage and Examples&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;  tusc v0.0.1 | (c) Jitendra Adhikari
  tusc is bash implementation of tus-client (https://tus.io)
  Usage
    tusc &amp;lt;--options&amp;gt;
    tusc &amp;lt;host&amp;gt; &amp;lt;file&amp;gt; [algo]
  Options:
    -a --algo      The algorigthm for key &amp;amp;/or checksum.
                   (Eg: sha1, sha256)
    -f --file      The file to upload.
    -h --help      Show help information and usage.
    -H --host      The tus-server host where file is uploaded.
  Examples:
    tusc version                 # prints current version of itself
    tusc --help                  # shows this help
    tusc 0:1080 ww.mp4           # uploads ww.mp4 to http://0.0.0.0:1080
    tusc -f&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/tusc.sh"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;jq &lt;span class="nt"&gt;-y&lt;/span&gt;

curl &lt;span class="nt"&gt;-sSLo&lt;/span&gt; ~/tusc https://raw.githubusercontent.com/adhocore/tusc.sh/master/tusc.sh
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ~/tusc &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/tusc /usr/local/bin/tusc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;To get hands on locally, you can install &lt;a href="https://github.com/tus/tusd#download-pre-builts-binaries-recommended"&gt;tusd&lt;/a&gt; server.&lt;/p&gt;

&lt;p&gt;Then,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# run tusd server (http://0.0.0.0:1080)&lt;/span&gt;
tusd &lt;span class="nt"&gt;-dir&lt;/span&gt; ~/.tusd-data &amp;amp;

&lt;span class="c"&gt;# start uploading large files&lt;/span&gt;
&lt;span class="nv"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 tusc &lt;span class="nt"&gt;--host&lt;/span&gt; 0:1080 &lt;span class="nt"&gt;--file&lt;/span&gt; /full/path/to/large/file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;While upload is in progress, you can force abort it using &lt;code&gt;Ctrl+C&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then resume upload again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 tusc &lt;span class="nt"&gt;--host&lt;/span&gt; 0:1080 &lt;span class="nt"&gt;--file&lt;/span&gt; /full/path/to/large/file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;It should start from where it last stopped.&lt;/p&gt;

&lt;p&gt;You can check the uploaded files like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-al&lt;/span&gt; ~/.tusd-data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Feedback and suggestions are welcome and highly appreciated.&lt;/p&gt;

&lt;p&gt;Thanks :)&lt;/p&gt;

</description>
      <category>tus</category>
      <category>resumableupload</category>
      <category>bash</category>
      <category>showdev</category>
    </item>
    <item>
      <title>4 years ago I challenged myself to write smallest and fastest markdown parser</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Sat, 01 Sep 2018 11:56:48 +0000</pubDate>
      <link>https://dev.to/adhocore/4-years-ago-i-challenged-myself-to-write-smallest-and-fastest-markdown-parser-4i0</link>
      <guid>https://dev.to/adhocore/4-years-ago-i-challenged-myself-to-write-smallest-and-fastest-markdown-parser-4i0</guid>
      <description>&lt;p&gt;Four years ago I challenged myself to write the smallest and fastest markdown to html parser and in a matter of days that got real. Although it was not complete implementation of all markdown specs it still was usable for many cases.&lt;/p&gt;

&lt;p&gt;And I named it &lt;strong&gt;htmlup&lt;/strong&gt;! Packed in one single file, one single class and one single method it was less than 220 sloc.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore" rel="noopener noreferrer"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/htmlup" rel="noopener noreferrer"&gt;
        htmlup
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Light and fast markdown parser, that parses markdown in a way human does
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;adhocore/htmlup&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/htmlup/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/92ec700c48eb345c56624eeaa50aad4d2cc6d2eae637fb9c209742abd20e1133/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f68746d6c75702e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://travis-ci.org/adhocore/htmlup?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9b26cedc342d4ab2b6ea905868513b477d779d2fa903e5efe1f87a9a27f1dd49/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f6164686f636f72652f68746d6c75702f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Travis Build"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/adhocore/htmlup/?branch=master" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13d3c15e142c38b9a81dfbbc019d174d8b9b543ae6b8601591ff1186cee6ebfb/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6164686f636f72652f68746d6c75702e7376673f7374796c653d666c61742d737175617265" alt="Scrutinizer CI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/htmlup" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ee13682183aa3502db306aa3b752fa77b216f67415d2d91c093e49f07dc404e2/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f68746d6c75702f6d61737465722e7376673f7374796c653d666c61742d737175617265" alt="Codecov branch"&gt;&lt;/a&gt;
&lt;a href="https://styleci.io/repos/20793745" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a5737c0de2a99966d32e2a05950f155d9d72392f31011b0aa3b22492ae08f9d6/68747470733a2f2f7374796c6563692e696f2f7265706f732f32303739333734352f736869656c64" alt="StyleCI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/htmlupLICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5ddd6787b46ff6b3a6e8bfa779dc451433a990e470ffe28b66c8fb4a3e5035ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/15usd" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3121b362403df10eb5e6c6043803c7c2eddbd6a24031198080456df06394ed3f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3135" alt="Donate 15"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/25usd" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0b98d6af7abbde12b0bd7e2f39f23105f0538151c782e00db1d0efdd385a0036/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3235" alt="Donate 25"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/50usd" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2da8bdedd067accb354ef1c48d386a58d42f59c24a00b931b828a00b265846ae/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3530" alt="Donate 50"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Lightweight+and+fast+markdown+to+HTML+parser+for+PHP&amp;amp;url=https://github.com/adhocore/htmlup&amp;amp;hashtags=php,markdown,markdownparser,phpmarkdown" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4f677ce944dfdeb7a8cd741560d35d006363ef6160adeb63ee3d8c73373b1f51/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;htmlup&lt;/code&gt; is ultra lightweight and uber speedy markdown to html parser written in PHP
&lt;strong&gt;Concept&lt;/strong&gt; - it splits the markdown into lines and parses to markup one by one, finally applies markdown syntaxes on the markup
It supports most of the markdown as in &lt;a href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet" title="cheatsheet" rel="noopener noreferrer"&gt;specs&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;installation&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Run &lt;code&gt;composer require adhocore/htmlup&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;usage&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-text-html-php notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="pl-k"&gt;use&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;HtmlUp&lt;/span&gt;;

&lt;span class="pl-c"&gt;// require '/path/to/vendor/autoload.php';&lt;/span&gt;

&lt;span class="pl-c"&gt;// Defaults to 4 space indentation.&lt;/span&gt;
&lt;span class="pl-k"&gt;echo&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;HtmlUp&lt;/span&gt;(&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;markdownText&lt;/span&gt;);

&lt;span class="pl-c"&gt;// Force 2 space indentation.&lt;/span&gt;
&lt;span class="pl-k"&gt;echo&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;HtmlUp&lt;/span&gt;(&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;markdownText&lt;/span&gt;, &lt;span class="pl-c1"&gt;2&lt;/span&gt;);

&lt;span class="pl-c"&gt;// Also possible:&lt;/span&gt;
&lt;span class="pl-k"&gt;echo&lt;/span&gt; (&lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Htmlup&lt;/span&gt;)-&amp;gt;&lt;span class="pl-en"&gt;parse&lt;/span&gt;(&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;markdownText&lt;/span&gt;);&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;features&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;nesting&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;It provides limited support to deep nested elements, supported items are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lists inside lists&lt;/li&gt;
&lt;li&gt;blockquotes inside blockcodes&lt;/li&gt;
&lt;li&gt;lists inside blockquotes&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;raw html&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;you can throw in your raw html but with a blank line at start and end to delimit the block at like…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/htmlup" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;You can check the initial working version &lt;a href="https://github.com/adhocore/htmlup/blob/f964b2f2d8c18fb9fa7561a4772acd1b685176a7/HtmlUp.php" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although the &lt;a href="https://github.com/adhocore/htmlup/releases/tag/0.2.1" rel="noopener noreferrer"&gt;current&lt;/a&gt; version is a bit verbose, it still carries the same core concept of parsing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;split the markdown into lines and parse one by one as a human would do&lt;/li&gt;
&lt;li&gt;apply block element rules where applicable to get html&lt;/li&gt;
&lt;li&gt;apply any span element rules finally&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bonus:&lt;/em&gt;&lt;/strong&gt; It supports table syntax too :)&lt;/p&gt;

&lt;p&gt;PS: Before you ask, I know the shortcomings of it and I wouldnt recommend using it in anything serious.&lt;/p&gt;

&lt;p&gt;If it inspires you to think bigger problems in small and most basic perspective, or if it encourages you to implement a port in different platform, that would be &lt;em&gt;great&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Thanks for reading! :)&lt;/p&gt;

</description>
      <category>php</category>
      <category>markdown</category>
      <category>parser</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Have you tried out PHP programming with all symbols defined as unicode</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Thu, 30 Aug 2018 08:22:25 +0000</pubDate>
      <link>https://dev.to/adhocore/have-you-tried-out-php-programming-with-all-symbols-defined-as-unicode-35nd</link>
      <guid>https://dev.to/adhocore/have-you-tried-out-php-programming-with-all-symbols-defined-as-unicode-35nd</guid>
      <description>&lt;p&gt;Here is one &lt;a href="https://3v4l.org/UVtt1"&gt;example&lt;/a&gt; using &lt;a href="https://en.wikipedia.org/wiki/Devanagari"&gt;Devanagari&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;लगर&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;इन&lt;/span&gt;&lt;span class="err"&gt;्&lt;/span&gt;&lt;span class="n"&gt;फ&lt;/span&gt;&lt;span class="err"&gt;ो&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'इन्फो'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;लग&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$म&lt;/span&gt;&lt;span class="err"&gt;े&lt;/span&gt;&lt;span class="n"&gt;स&lt;/span&gt;&lt;span class="err"&gt;े&lt;/span&gt;&lt;span class="n"&gt;ज&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$ल&lt;/span&gt;&lt;span class="err"&gt;े&lt;/span&gt;&lt;span class="n"&gt;वल&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[&lt;/span&gt;&lt;span class="nv"&gt;$ल&lt;/span&gt;&lt;span class="s2"&gt;ेवल] &lt;/span&gt;&lt;span class="nv"&gt;$म&lt;/span&gt;&lt;span class="s2"&gt;ेसेज"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;लगर&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;लग&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'hello'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;लगर&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;इन&lt;/span&gt;&lt;span class="err"&gt;्&lt;/span&gt;&lt;span class="n"&gt;फ&lt;/span&gt;&lt;span class="err"&gt;ो&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>unicode</category>
      <category>tryout</category>
      <category>experiment</category>
    </item>
    <item>
      <title>PHP Console Application made easy</title>
      <dc:creator>Jitendra</dc:creator>
      <pubDate>Tue, 28 Aug 2018 14:50:58 +0000</pubDate>
      <link>https://dev.to/adhocore/php-console-application-made-easy-18ao</link>
      <guid>https://dev.to/adhocore/php-console-application-made-easy-18ao</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adhocore"&gt;
        adhocore
      &lt;/a&gt; / &lt;a href="https://github.com/adhocore/php-cli"&gt;
        php-cli
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      PHP Console Application made easy- build great console apps with ease. Comes with Zero Dependency and Autocompletion support.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h2&gt;
adhocore/cli&lt;/h2&gt;
&lt;p&gt;Framework agnostic Command Line Interface utilities and helpers for PHP. Build Console App with ease, fun and love.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/php-cli/releases"&gt;&lt;img src="https://camo.githubusercontent.com/6bec1419a44382ce02ca0c33ce13996f2de6354525fbaed805b89076d5bd08a1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f72656c656173652f6164686f636f72652f7068702d636c692e7376673f7374796c653d666c61742d737175617265" alt="Latest Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/php-cli/actions/workflows/build.yml"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--usqP-MPv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/adhocore/php-cli/actions/workflows/build.yml/badge.svg" alt="Build"&gt;&lt;/a&gt;
&lt;a href="https://scrutinizer-ci.com/g/adhocore/php-cli/?branch=main" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7965eb6147d497630996d2abd19a50d5caa3e7d67cc988ec05fccf92c6902b46/68747470733a2f2f696d672e736869656c64732e696f2f7363727574696e697a65722f672f6164686f636f72652f7068702d636c692e7376673f7374796c653d666c61742d737175617265" alt="Scrutinizer CI"&gt;&lt;/a&gt;
&lt;a href="https://codecov.io/gh/adhocore/php-cli" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/6303135bc101d0547bd0d9b078c815b27f2950c74e3c1958314cf25f37015440/68747470733a2f2f696d672e736869656c64732e696f2f636f6465636f762f632f6769746875622f6164686f636f72652f7068702d636c692f6d61696e2e7376673f7374796c653d666c61742d737175617265" alt="Codecov branch"&gt;&lt;/a&gt;
&lt;a href="https://styleci.io/repos/139012552" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/0648a2bb5c0c7289d0151188d549cfaa0607ec927d661cff070ea63b1e8a6bbc/68747470733a2f2f7374796c6563692e696f2f7265706f732f3133393031323535322f736869656c64" alt="StyleCI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/adhocore/php-cliLICENSE"&gt;&lt;img src="https://camo.githubusercontent.com/ad8758fbaebbced78645b98e446c0bb5ec223676ed61700184320887cadbfb8e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Software License"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/15usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/35e7ae613e708d98559979e99b6f8b031d9b04dfb5f49f740adc646d15d18f97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3135" alt="Donate 15"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/25usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/44ad64f20d492591124cc6b7118dfc12fdce3d8e501ca556cfb1e79da8766162/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3235" alt="Donate 25"&gt;&lt;/a&gt;
&lt;a href="https://www.paypal.me/ji10/50usd" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/a21459579bc232f91e58322c1d21df4ea1439288c197f86fb8f098d5e653a770/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652d70617970616c2d626c75652e7376673f7374796c653d666c61742d737175617265266c6162656c3d646f6e6174652b3530" alt="Donate 50"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/intent/tweet?text=Framework+agnostic+Command+Line+Interface+utilities+and+helpers+for+PHP&amp;amp;url=https://github.com/adhocore/php-cli&amp;amp;hashtags=php,cli,cliapp,console" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/90bc908826728c0e4261acfff5619fd732c7be2b2a00624fce6363c9a3623c90/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c2f687474702f736869656c64732e696f2e7376673f7374796c653d736f6369616c" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command line application made easy&lt;/li&gt;
&lt;li&gt;Inspired by nodejs &lt;a href="https://github.com/tj/commander.js"&gt;commander&lt;/a&gt; (thanks tj)&lt;/li&gt;
&lt;li&gt;Zero dependency.&lt;/li&gt;
&lt;li&gt;For PHP7, PHP8 and for good&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://github.com/adhocore/phalcon-ext/tree/master/example/cli"&gt;&lt;img src="https://camo.githubusercontent.com/e08e8387a9de8bfd9b241b329d707046d51d3ee1ec5c9151decbd067c4e734c5/68747470733a2f2f692e696d6775722e636f6d2f71495967395a6e2e676966" alt="Screen Preview" title="Preview from adhocore/phalcon-ext which uses this cli package"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
What's included&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Core:&lt;/strong&gt; &lt;a href="https://github.com/adhocore/php-cli#argv-parser"&gt;Argv parser&lt;/a&gt; · &lt;a href="https://github.com/adhocore/php-cli#console-app"&gt;Cli application&lt;/a&gt; · &lt;a href="https://github.com/adhocore/php-cli#shell"&gt;Shell&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IO:&lt;/strong&gt; &lt;a href="https://github.com/adhocore/php-cli#color"&gt;Colorizer&lt;/a&gt; · &lt;a href="https://github.com/adhocore/php-cli#cursor"&gt;Cursor manipulator&lt;/a&gt; · &lt;a href="https://github.com/adhocore/php-cli#writer"&gt;Stream writer&lt;/a&gt; · &lt;a href="https://github.com/adhocore/php-cli#reader"&gt;Stream reader&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Other:&lt;/strong&gt; &lt;a href="https://github.com/adhocore/php-cli#autocompletion"&gt;Autocompletion&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; PHP8.0 and above v1.0.0&lt;/span&gt;
composer require adhocore/cli:^v1.0.0
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; PHP 7.x&lt;/span&gt;
composer require adhocore/cli:^v0.9.0&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;h3&gt;
Argv parser&lt;/h3&gt;
&lt;div class="highlight highlight-text-html-php notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;command&lt;/span&gt; = &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-v"&gt;Ahc&lt;/span&gt;\&lt;span class="pl-v"&gt;Cli&lt;/span&gt;\&lt;span class="pl-v"&gt;Input&lt;/span&gt;\&lt;span class="pl-v"&gt;Command&lt;/span&gt;(&lt;span class="pl-s"&gt;'rmdir'&lt;/span&gt;, &lt;span class="pl-s"&gt;'Remove dirs'&lt;/span&gt;)
&lt;span class="pl-s1"&gt;&lt;span class="pl-c1"&gt;$&lt;/span&gt;command&lt;/span&gt;
    -&amp;gt;&lt;span class="pl-en"&gt;version&lt;/span&gt;(&lt;span class="pl-s"&gt;'0.0.1-dev'&lt;/span&gt;)
    &lt;span class="pl-c"&gt;// Arguments are separated by space&lt;/span&gt;
    &lt;span class="pl-c"&gt;// Format: `&amp;lt;name&amp;gt;` for required, `[name]` for optional&lt;/span&gt;
    &lt;span class="pl-c"&gt;//  `[name:default]` for default value, `[name...]` for variadic (last argument)&lt;/span&gt;
    -&amp;gt;&lt;span class="pl-en"&gt;arguments&lt;/span&gt;(&lt;span class="pl-s"&gt;'&amp;lt;dir&amp;gt; [dirs...]'&lt;/span&gt;)
    &lt;span class="pl-c"&gt;// `-h --help`, `-V --version`, `-v --verbosity` options are already added by default.&lt;/span&gt;
    &lt;span class="pl-c"&gt;// Format: `&amp;lt;name&amp;gt;` for&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adhocore/php-cli"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Helps you build bespoke, interactive console app easy and quick - includes commands, actions, argument parsing, colors, cursors, interaction and all that is required.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;inspired by nodejs commander&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;composer install adhocore/cli&lt;/code&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>cli</category>
      <category>console</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
