<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub Perl Weekly Trending Repositories</title>
    <description>Weekly Trending Repositories of Perl on GitHub</description>
    
    <pubDate>Mon, 10 Aug 2026 04:32:08 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>szTheory/exifcleaner</title>
      <link>https://github.com/szTheory/exifcleaner</link>
      <description>&lt;p&gt;Cross-platform desktop GUI app to clean image metadata&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;&lt;img src=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/static/icon.svg?sanitize=true&quot; height=&quot;26&quot; /&gt; ExifCleaner&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/szTheory/exifcleaner&quot; alt=&quot;Version&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/szTheory/exifcleaner/total&quot; alt=&quot;Total Downloads&quot; /&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Desktop app to clean metadata from images, videos, PDFs, and other files.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;picture&gt; 
 &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;static/screenshot-dark.png&quot; /&gt; 
 &lt;img alt=&quot;ExifCleaner cleaning a batch of images, videos, and PDFs&quot; src=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/static/screenshot.png&quot; width=&quot;900&quot; /&gt; 
&lt;/picture&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Fast batch processing via ExifTool&#39;s stay-open protocol&lt;/li&gt; 
 &lt;li&gt;Drag and drop files or folders&lt;/li&gt; 
 &lt;li&gt;Free and open source (MIT)&lt;/li&gt; 
 &lt;li&gt;Cross-platform: macOS, Windows, and Linux&lt;/li&gt; 
 &lt;li&gt;Supports 90+ image, video, and document formats (&lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/#supported-file-types&quot;&gt;full list below&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Privacy controls: preserve orientation, save as copy, remove macOS extended attributes, preserve timestamps&lt;/li&gt; 
 &lt;li&gt;Folder recursion — drop a folder to process all files inside&lt;/li&gt; 
 &lt;li&gt;Metadata inspection — expand any file to see before/after diff&lt;/li&gt; 
 &lt;li&gt;Dark mode (follows OS preference)&lt;/li&gt; 
 &lt;li&gt;25 languages with in-app language switching&lt;/li&gt; 
 &lt;li&gt;No automatic updates or network traffic — zero telemetry, zero phone-home&lt;/li&gt; 
 &lt;li&gt;Every release verified by CI against the actual installed app on macOS, Windows, and Linux&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;What&#39;s New in v4.0&lt;/h2&gt; 
&lt;p&gt;ExifCleaner v4.0 is a complete modernization — the first release since v3.6.0 (May 2021). Highlights:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;5 new privacy features&lt;/strong&gt;: preserve orientation, save as copy, xattr removal, preserve timestamps, folder recursion&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Metadata inspection&lt;/strong&gt;: expand any processed file to see exactly what was removed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Language switching&lt;/strong&gt;: change language from settings without restarting (25 locales)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Security hardened&lt;/strong&gt;: CSP, Electron Fuses, IPC validation, navigation hardening, permission gates&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Native Apple Silicon and Intel builds&lt;/strong&gt;: separate downloads, no Rosetta needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;265 unit tests + 42 E2E tests&lt;/strong&gt;: comprehensive quality gates&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; for the full list of changes.&lt;/p&gt; 
&lt;h2&gt;Download and Install&lt;/h2&gt; 
&lt;p&gt;macOS 12+, Windows 10+, and Linux are supported (64-bit).&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: &lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases/latest&quot;&gt;Download the .dmg file&lt;/a&gt; — pick the &lt;code&gt;arm64&lt;/code&gt; build for Apple Silicon, the other for Intel&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: &lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases/latest&quot;&gt;Download the portable &lt;code&gt;.exe&lt;/code&gt; (recommended) or installer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;: &lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases/latest&quot;&gt;Download the .AppImage, .deb, or .rpm file&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For Linux, the AppImage needs to be &lt;a href=&quot;https://discourse.appimage.org/t/how-to-make-an-appimage-executable/80&quot;&gt;made executable&lt;/a&gt; after download.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Your OS will warn you the first time you open it.&lt;/strong&gt; ExifCleaner is not code-signed — see &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/#opening-unsigned-builds&quot;&gt;Opening unsigned builds&lt;/a&gt; for the one-time steps, and why.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Arch Linux users can install from the AUR:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S exifcleaner-bin
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Opening unsigned builds&lt;/h3&gt; 
&lt;p&gt;ExifCleaner is &lt;strong&gt;not code-signed&lt;/strong&gt;. On first launch your OS will warn you. This is expected, it is a one-time step, and it does not mean the download is unsafe — verify the checksum below if you want certainty.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;macOS 14 (Sonoma) and earlier&lt;/strong&gt;: right-click (or Control-click) the app → &lt;strong&gt;Open&lt;/strong&gt; → click &lt;strong&gt;Open&lt;/strong&gt; in the dialog.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;macOS 15 (Sequoia) and later&lt;/strong&gt;: right-click → Open no longer works. Double-click the app once and let it be blocked, then go to &lt;strong&gt;System Settings → Privacy &amp;amp; Security&lt;/strong&gt;, scroll down, and click &lt;strong&gt;Open Anyway&lt;/strong&gt; next to the ExifCleaner message.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Windows Defender SmartScreen shows &lt;em&gt;&quot;Windows protected your PC&quot;&lt;/em&gt;. Click &lt;strong&gt;More info&lt;/strong&gt; → &lt;strong&gt;Run anyway&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;No gatekeeping. The AppImage just needs &lt;code&gt;chmod +x&lt;/code&gt; (above). &lt;code&gt;.deb&lt;/code&gt; and &lt;code&gt;.rpm&lt;/code&gt; install normally.&lt;/p&gt; 
&lt;h3&gt;Why isn&#39;t it signed?&lt;/h3&gt; 
&lt;p&gt;Signing macOS builds requires an Apple Developer certificate at $99/year, and the certificate embeds the holder&#39;s &lt;strong&gt;legal name&lt;/strong&gt;, which macOS then displays in the Gatekeeper dialog. Windows requires a separate EV certificate at $200–600/year tied to a verified legal identity. For a privacy tool maintained anonymously, that tradeoff isn&#39;t one this project is willing to make.&lt;/p&gt; 
&lt;p&gt;What you get instead:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Published SHA-256 checksums&lt;/strong&gt; for every artifact (below) — verifies the download is byte-for-byte what CI built.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Every release is built in public&lt;/strong&gt; by &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/.github/workflows/release.yml&quot;&gt;GitHub Actions&lt;/a&gt; from tagged source you can read, not on anyone&#39;s laptop.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CI installs and runs the actual artifact&lt;/strong&gt; before it can be released — it mounts the DMG, installs it, launches it, and strips metadata from a test image. A build that doesn&#39;t work never reaches the release page.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Only download from the &lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases&quot;&gt;GitHub releases page&lt;/a&gt;.&lt;/strong&gt; Builds shared through other channels are not ours and are not verified.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Verifying checksums&lt;/h3&gt; 
&lt;p&gt;Each release includes a &lt;code&gt;SHASUMS256.txt&lt;/code&gt; file. Download it from the &lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases/latest&quot;&gt;release page&lt;/a&gt; and verify your download:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sha256sum -c SHASUMS256.txt 2&amp;gt;&amp;amp;1 | grep OK
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Links&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://exifcleaner.com&quot;&gt;Official Website&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/szTheory/exifcleaner/releases&quot;&gt;Download&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/szTheory/exifcleaner&quot;&gt;Source Code&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/szTheory/exifcleaner/issues&quot;&gt;Issue Tracker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/docs/README.md&quot;&gt;Engineering guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/CONTRIBUTING.md&quot;&gt;Contributing and translations&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported File Types&lt;/h2&gt; 
&lt;p&gt;Below is the intake list derived from formats for which &lt;a href=&quot;https://exiftool.org/&quot;&gt;ExifTool&lt;/a&gt; exposes write operations. Acceptance does not guarantee complete, irreversible removal for every container; the important exceptions are documented immediately after the list.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;3G2, 3GP2&lt;/strong&gt; – 3rd Gen. Partnership Project 2 a/v (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;3GP, 3GPP&lt;/strong&gt; – 3rd Gen. Partnership Project a/v (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AAX&lt;/strong&gt; – Audible Enhanced Audiobook (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AI, AIT&lt;/strong&gt; – Adobe Illustrator [Template] (PS or PDF)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ARQ&lt;/strong&gt; – Sony Alpha Pixel-Shift RAW (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ARW&lt;/strong&gt; – Sony Alpha RAW (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AVIF&lt;/strong&gt; – AV1 Image File Format (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CR2&lt;/strong&gt; – Canon RAW 2 (TIFF-based) (CR2 spec)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CR3&lt;/strong&gt; – Canon RAW 3 (QuickTime-based) (CR3 spec)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CRM&lt;/strong&gt; – Canon RAW Movie (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CRW, CIFF&lt;/strong&gt; – Canon RAW Camera Image File Format (CRW spec)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CS1&lt;/strong&gt; – Sinar CaptureShop 1-shot RAW (PSD-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DCP DNG&lt;/strong&gt; – Camera Profile (DNG-like)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DNG&lt;/strong&gt; – Digital Negative (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DR4&lt;/strong&gt; – Canon DPP version 4 Recipe&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DVB&lt;/strong&gt; – Digital Video Broadcasting (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;EPS, EPSF, PS&lt;/strong&gt; – [Encapsulated] PostScript Format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ERF&lt;/strong&gt; – Epson RAW Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;EXIF&lt;/strong&gt; – Exchangeable Image File Format metadata (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;EXV&lt;/strong&gt; – Exiv2 metadata file (JPEG-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;F4A, F4B, F4P, F4V&lt;/strong&gt; – Adobe Flash Player 9+ Audio/Video (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;FFF&lt;/strong&gt; – Hasselblad Flexible File Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;FLIF&lt;/strong&gt; – Free Lossless Image Format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GIF&lt;/strong&gt; – Compuserve Graphics Interchange Format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GPR&lt;/strong&gt; – GoPro RAW (DNG-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;HDP, WDP, JXR&lt;/strong&gt; – Windows HD Photo / Media Photo / JPEG XR (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;HEIC, HEIF&lt;/strong&gt; – High Efficiency Image Format (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ICC, ICM&lt;/strong&gt; – International Color Consortium color profile&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;IIQ&lt;/strong&gt; – Phase One Intelligent Image Quality RAW (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;IND, INDD, INDT&lt;/strong&gt; – Adobe InDesign Document/Template&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;INSP&lt;/strong&gt; – Insta360 Picture (JPEG-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JP2, JPF, JPM, JPX&lt;/strong&gt; – JPEG 2000 image [Compound/Extended]&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JPEG, JPG, JPE&lt;/strong&gt; – Joint Photographic Experts Group image&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;LRV&lt;/strong&gt; – Low-Resolution Video (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;M4A, M4B, M4P, M4V&lt;/strong&gt; – MPEG-4 Audio/Video (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MEF&lt;/strong&gt; – Mamiya (RAW) Electronic Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MIE&lt;/strong&gt; – Meta Information Encapsulation (MIE specification)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MOS&lt;/strong&gt; – Creo Leaf Mosaic (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MOV, QT&lt;/strong&gt; – Apple QuickTime Movie&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MP4&lt;/strong&gt; – Motion Picture Experts Group version 4 (QuickTime-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MPO&lt;/strong&gt; – Extended Multi-Picture format (JPEG with MPF extensions)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MQV&lt;/strong&gt; – Sony Mobile QuickTime Video&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;NEF&lt;/strong&gt; – Nikon (RAW) Electronic Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;NRW&lt;/strong&gt; – Nikon RAW (2) (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;ORF&lt;/strong&gt; – Olympus RAW Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PDF&lt;/strong&gt; – Adobe Portable Document Format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PEF&lt;/strong&gt; – Pentax (RAW) Electronic Format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PNG, JNG, MNG&lt;/strong&gt; – Portable/JPEG/Multiple-image Network Graphics&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PPM, PBM, PGM&lt;/strong&gt; – Portable Pixel/Bit/Gray Map&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;PSD, PSB, PSDT&lt;/strong&gt; – PhotoShop Document / Large Document / Template&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;QTIF, QTI, QIF&lt;/strong&gt; – QuickTime Image File&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RAF&lt;/strong&gt; – FujiFilm RAW Format (currently refused without writing; see limitations)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RAW&lt;/strong&gt; – Panasonic RAW (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RW2&lt;/strong&gt; – Panasonic RAW 2 (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;RWL&lt;/strong&gt; – Leica RAW (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;SR2&lt;/strong&gt; – Sony RAW 2 (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;SRW&lt;/strong&gt; – Samsung RAW format (TIFF-based)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;THM&lt;/strong&gt; – Thumbnail image (JPEG)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;TIFF, TIF&lt;/strong&gt; – Tagged Image File Format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VRD&lt;/strong&gt; – Canon DPP Recipe Data&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;WEBP&lt;/strong&gt; – WebP image format&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;X3F&lt;/strong&gt; – Sigma/Foveon RAW&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;XMP&lt;/strong&gt; – Extensible Metadata Platform sidecar file&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Known limitations by format&lt;/h2&gt; 
&lt;p&gt;ExifCleaner relies on ExifTool&#39;s writer support. Some formats impose structural limits that prevent ExifCleaner from making an irreversible-removal guarantee:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Format&lt;/th&gt; 
   &lt;th&gt;What ExifCleaner can guarantee&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RAF&lt;/td&gt; 
   &lt;td&gt;The operation is refused before writing because ExifCleaner cannot currently guarantee a safe cleaned RAF artifact.&lt;/td&gt; 
   &lt;td&gt;Source is left unchanged&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;PDF&lt;/td&gt; 
   &lt;td&gt;ExifTool writes a reversible PDF update; the original metadata remains recoverable, so ExifCleaner cannot securely erase PDF metadata.&lt;/td&gt; 
   &lt;td&gt;Documented limitation — &lt;a href=&quot;https://github.com/szTheory/exifcleaner/issues/216&quot;&gt;#216&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;MKV / Matroska&lt;/td&gt; 
   &lt;td&gt;ExifTool exposes Matroska metadata for reading but does not provide writable tags, so ExifCleaner cannot reliably remove it without a separate remuxing engine.&lt;/td&gt; 
   &lt;td&gt;Documented limitation — &lt;a href=&quot;https://github.com/szTheory/exifcleaner/issues/182&quot;&gt;#182&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;TIFF&lt;/td&gt; 
   &lt;td&gt;Removal may be partial because some metadata can remain in IFD0.&lt;/td&gt; 
   &lt;td&gt;Open investigation — &lt;a href=&quot;https://github.com/szTheory/exifcleaner/issues/199&quot;&gt;#199&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;AVIF&lt;/td&gt; 
   &lt;td&gt;A user-reported partial-removal case remains under investigation.&lt;/td&gt; 
   &lt;td&gt;Open investigation — &lt;a href=&quot;https://github.com/szTheory/exifcleaner/issues/215&quot;&gt;#215&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The PDF behavior is documented in the &lt;a href=&quot;https://exiftool.org/exiftool_pod2.html&quot;&gt;ExifTool application documentation&lt;/a&gt;, and ExifTool&#39;s &lt;a href=&quot;https://exiftool.org/TagNames/Matroska.html&quot;&gt;Matroska tag table&lt;/a&gt; marks the container&#39;s extracted tags as non-writable. TIFF and AVIF remain open because their reported behavior may still be addressable without introducing a separate file-format engine.&lt;/p&gt; 
&lt;h2&gt;File writer limitations&lt;/h2&gt; 
&lt;p&gt;ExifCleaner has the same writer limitations as the underlying &lt;code&gt;exiftool&lt;/code&gt; it depends on. Taken from the &lt;a href=&quot;https://exiftool.org/#limitations&quot;&gt;official website&lt;/a&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;ExifTool will not rewrite a file if it detects a significant problem with the file format.&lt;/li&gt; 
 &lt;li&gt;ExifTool has been tested with a wide range of different images, but since it is not possible to test it with every known image type, there is the possibility that it will corrupt some files. Be sure to keep backups of your files.&lt;/li&gt; 
 &lt;li&gt;Even though ExifTool does some validation of the information written, it is still possible to write illegal values which may cause problems when reading the images with other software. So take care to validate the information you are writing.&lt;/li&gt; 
 &lt;li&gt;ExifTool is not guaranteed to remove metadata completely from a file when attempting to delete all metadata. For JPEG images, all APP segments (except Adobe APP14, which is not removed by default) and trailers are removed which effectively removes all metadata, but for other formats the results are less complete: 
  &lt;ul&gt; 
   &lt;li&gt;JPEG - APP segments (except Adobe APP14) and trailers are removed.&lt;/li&gt; 
   &lt;li&gt;TIFF - XMP, IPTC, ICC_Profile and the ExifIFD are removed, but some EXIF may remain in IFD0. (The CommonIFD0 Shortcut tag is provided to simplify removal of common metadata tags from IFD0.)&lt;/li&gt; 
   &lt;li&gt;PNG - Only XMP, EXIF, ICC_Profile and native PNG textual data chunks are removed.&lt;/li&gt; 
   &lt;li&gt;PDF - The original metadata is never actually removed.&lt;/li&gt; 
   &lt;li&gt;PS - Only XMP and some native PostScript tags may be deleted.&lt;/li&gt; 
   &lt;li&gt;MOV/MP4 - Most top-level metadata is removed.&lt;/li&gt; 
   &lt;li&gt;RAW formats - It is not recommended to remove all metadata from RAW images because this will likely remove some proprietary information that is necessary for proper rendering of the image.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Translations&lt;/h2&gt; 
&lt;p&gt;New translations and corrections are welcome. See &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/CONTRIBUTING.md#translation-corrections&quot;&gt;Contributing&lt;/a&gt; for the small-string workflow. Current translation status:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Arabic by &lt;a href=&quot;https://github.com/ZER0-X&quot;&gt;@ZER0-X&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Catalan by &lt;a href=&quot;https://github.com/marcarmengou&quot;&gt;@marcarmengou&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Chinese (Mandarin) by &lt;a href=&quot;https://github.com/MarcusPierce&quot;&gt;MarcusPierce&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Croatian by &lt;a href=&quot;https://github.com/milotype&quot;&gt;@milotype&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Czech by &lt;a href=&quot;https://github.com/t0mzSK&quot;&gt;@t0mzSK&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Danish by &lt;a href=&quot;https://github.com/zlatco&quot;&gt;@zlatco&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Dutch by &lt;a href=&quot;https://github.com/rvl-code&quot;&gt;@rvl-code&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;French by &lt;a href=&quot;https://github.com/NathanBnm&quot;&gt;@NathanBnm&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;German by &lt;a href=&quot;https://github.com/tayfuuun&quot;&gt;@tayfuuun&lt;/a&gt;, &lt;a href=&quot;https://github.com/philippsandhaus&quot;&gt;@philippsandhaus&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Hungarian by &lt;a href=&quot;https://github.com/icetee&quot;&gt;@icetee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Italian by &lt;a href=&quot;https://github.com/PolpOnline&quot;&gt;@PolpOnline&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Japanese by @AKKED&lt;/li&gt; 
 &lt;li&gt;Malayalam by &lt;a href=&quot;https://github.com/theunknownKiran&quot;&gt;@theunknownKiran&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Persian by &lt;a href=&quot;https://github.com/RamtinA&quot;&gt;@RamtinA&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Polish by &lt;a href=&quot;https://github.com/m1chu&quot;&gt;@m1chu&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Portuguese (Brazil) by &lt;a href=&quot;https://github.com/iraamaro&quot;&gt;@iraamaro&lt;/a&gt;, @dadodollabela&lt;/li&gt; 
 &lt;li&gt;Russian by &lt;a href=&quot;https://github.com/likhner&quot;&gt;@likhner&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Slovak by &lt;a href=&quot;https://github.com/LiJu09&quot;&gt;@LiJu09&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Spanish by &lt;a href=&quot;https://github.com/ff-ss&quot;&gt;@ff-ss&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Swedish by &lt;a href=&quot;https://github.com/sastofficial&quot;&gt;@sastofficial&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Turkish by &lt;a href=&quot;https://github.com/bsonmez&quot;&gt;@bsonmez&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Ukrainian by &lt;a href=&quot;https://github.com/hugonote&quot;&gt;@hugonote&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Vietnamese by &lt;a href=&quot;https://github.com/tensingnightco&quot;&gt;@tensingnightco&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;Built with &lt;a href=&quot;https://electronjs.org&quot;&gt;Electron&lt;/a&gt;, &lt;a href=&quot;https://react.dev&quot;&gt;React 19&lt;/a&gt;, and &lt;a href=&quot;https://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt; in strict mode. A hand-rolled &lt;a href=&quot;https://exiftool.org/&quot;&gt;ExifTool&lt;/a&gt; adapter uses the &lt;code&gt;-stay_open&lt;/code&gt; protocol for fast batch processing. The &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/docs/README.md&quot;&gt;engineering guide&lt;/a&gt; explains the architecture and traces a file end to end.&lt;/p&gt; 
&lt;h3&gt;Run the app in dev mode&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/szTheory/exifcleaner.git
cd exifcleaner
yarn install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Pull down the latest ExifTool binaries (requires Perl, macOS/Linux only):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yarn run update-exiftool
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Launch the app with Hot Module Reload:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yarn dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Running tests&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yarn test          # Unit tests (Vitest, ~1.4s)
yarn test:e2e      # E2E tests (Playwright, ~30s) — requires yarn compile first
yarn lint          # Prettier formatting check
yarn typecheck     # TypeScript strict mode check
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Adding or correcting a translation&lt;/h3&gt; 
&lt;p&gt;Edit &lt;code&gt;.resources/locales/&amp;lt;locale&amp;gt;.json&lt;/code&gt;, then run &lt;code&gt;yarn i18n:write&lt;/code&gt; and &lt;code&gt;yarn i18n:check&lt;/code&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/exifcleaner/master/CONTRIBUTING.md#translation-corrections&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for placeholder, review, and testing guidance.&lt;/p&gt; 
&lt;h3&gt;Publishing a new release&lt;/h3&gt; 
&lt;p&gt;Releases are built by GitHub Actions. To publish:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Run &lt;code&gt;yarn verify:release&lt;/code&gt;. If it reports known-gap release blockers, fix or remove the blocking marker before publishing; if it reports release-note drift, run &lt;code&gt;yarn known-gaps:write&lt;/code&gt; and review the managed block.&lt;/li&gt; 
 &lt;li&gt;Make sure &lt;code&gt;RELEASE_NOTES.md&lt;/code&gt; is current — it becomes the release body verbatim&lt;/li&gt; 
 &lt;li&gt;Trigger the &lt;a href=&quot;https://raw.githubusercontent.com/szTheory/actions/workflows/release.yml&quot;&gt;Release workflow&lt;/a&gt; via &lt;code&gt;workflow_dispatch&lt;/code&gt; in the GitHub Actions UI&lt;/li&gt; 
 &lt;li&gt;CI builds all platforms unsigned, then &lt;strong&gt;installs and smoke-tests one representative artifact per platform&lt;/strong&gt; — mounts the Apple Silicon DMG / runs the NSIS installer / extracts the AppImage, launches the installed binary, and strips metadata from a test image. macOS additionally runs the Gatekeeper regression gate. The remaining four binaries receive exact-inventory, non-empty, and format-structure checks. A build that fails any of these cannot reach the release page.&lt;/li&gt; 
 &lt;li&gt;A draft GitHub release is created with all artifacts and SHASUMS256.txt&lt;/li&gt; 
 &lt;li&gt;Download the DMG &lt;strong&gt;through a browser&lt;/strong&gt; and confirm it opens (this is the one check CI cannot do — neither &lt;code&gt;codesign&lt;/code&gt; nor &lt;code&gt;spctl&lt;/code&gt; can tell &quot;shows a dialog you click through&quot; from &quot;launches cleanly&quot;)&lt;/li&gt; 
 &lt;li&gt;Review the draft and publish when ready&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Contributors&lt;/h3&gt; 
&lt;p&gt;Thanks to all the people who submitted bug reports, fixes, and translations. If I&#39;ve missed you, let me know and I&#39;ll add you.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/m1chu&quot;&gt;@m1chu&lt;/a&gt; - Polish translation, Mac dock bug fix, Unicode filename debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LukasThyWalls&quot;&gt;@LukasThyWalls&lt;/a&gt; - Unicode filename debugging, feature suggestions&lt;/li&gt; 
 &lt;li&gt;@AKKED - Japanese translation, Unicode filename debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TomasGutierrez0&quot;&gt;@TomasGutierrez0&lt;/a&gt; - ExifTool dependency audit&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/5a384507-18ce-417c-bb55-d4dfcc8883fe&quot;&gt;@5a384507-18ce-417c-bb55-d4dfcc8883fe&lt;/a&gt; - Linux version debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/totoroot&quot;&gt;@totoroot&lt;/a&gt; - Linux AppImage debugging, usability feedback, feature suggestions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Scopuli&quot;&gt;@Scopuli&lt;/a&gt; - Linux AppImage debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Tox86&quot;&gt;@Tox86&lt;/a&gt; - Settings menu bug report&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ff-ss&quot;&gt;@ff-ss&lt;/a&gt; - Spanish translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tayfuuun&quot;&gt;@tayfuuun&lt;/a&gt; - German translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/philippsandhaus&quot;&gt;@philippsandhaus&lt;/a&gt; - German translation fixes&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/airvue&quot;&gt;@airvue&lt;/a&gt; - Ubuntu .deb debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Goblin80&quot;&gt;@Goblin80&lt;/a&gt; - Ubuntu .deb debugging&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zahroc&quot;&gt;@zahroc&lt;/a&gt; - Bulk directory error diagnosis&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/iraamaro&quot;&gt;@iraamaro&lt;/a&gt; - Portuguese (Brazil) translation, Debian/Slackware build fix&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/LiJu09&quot;&gt;@LiJu09&lt;/a&gt; - Slovak translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/likhner&quot;&gt;@likhner&lt;/a&gt; - Russian translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hugonote&quot;&gt;@hugonote&lt;/a&gt; - Ukrainian translation&lt;/li&gt; 
 &lt;li&gt;@dadodollabela - Portuguese (Brazil) translation fixes&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zlatco&quot;&gt;@zlatco&lt;/a&gt; - Danish translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ZER0-X&quot;&gt;@ZER0-X&lt;/a&gt; - Arabic translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rvl-code&quot;&gt;@rvl-code&lt;/a&gt; - Dutch translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/PolpOnline&quot;&gt;@PolpOnline&lt;/a&gt; - Italian translation, Arch Linux distribution&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/NathanBnm&quot;&gt;@NathanBnm&lt;/a&gt; - French translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Dyrimon&quot;&gt;@Dyrimon&lt;/a&gt; - Linux AppImage exit fix&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/MarcusPierce&quot;&gt;@MarcusPierce&lt;/a&gt; - Chinese (Mandarin) translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/brandonlou&quot;&gt;@brandonlou&lt;/a&gt; - CVE-2021-22204 notification&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/v4k0nd&quot;&gt;@v4k0nd&lt;/a&gt; - Checksum verification instructions&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/papb&quot;&gt;@papb&lt;/a&gt; - Windows portable build&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Bellisario&quot;&gt;@Bellisario&lt;/a&gt; - Windows portable build&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/overjt&quot;&gt;@overjt&lt;/a&gt; - XSS and Electron reverse shell vulnerability PoC&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bsonmez&quot;&gt;@bsonmez&lt;/a&gt; - Turkish translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/milotype&quot;&gt;@milotype&lt;/a&gt; - Croatian translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/icetee&quot;&gt;@icetee&lt;/a&gt; - Hungarian translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sastofficial&quot;&gt;@sastofficial&lt;/a&gt; - Swedish translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/theunknownKiran&quot;&gt;@theunknownKiran&lt;/a&gt; - Malayalam translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/t0mzSK&quot;&gt;@t0mzSK&lt;/a&gt; - Czech translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tensingnightco&quot;&gt;@tensingnightco&lt;/a&gt; - Vietnamese translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/marcarmengou&quot;&gt;@marcarmengou&lt;/a&gt; - Catalan translation&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/RamtinA&quot;&gt;@RamtinA&lt;/a&gt; - Persian translation&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/cfd4fcfb6551290cd56ea49afcd52be7cbb7543765bc4ff0e2410774cb35634e/szTheory/exifcleaner" medium="image" />
      
    </item>
    
    <item>
      <title>asbru-cm/asbru-cm</title>
      <link>https://github.com/asbru-cm/asbru-cm</link>
      <description>&lt;p&gt;Ásbrú Connection Manager is a user interface that helps organizing remote terminal sessions and automating repetitive tasks.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Ásbrú Connection Manager&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/actions/workflows/docs.yml&quot;&gt;&lt;img src=&quot;https://github.com/asbru-cm/asbru-cm/actions/workflows/docs.yml/badge.svg?sanitize=true&quot; alt=&quot;Build &amp;amp; Deploy Docs&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/actions/workflows/build-snapshots.yml&quot;&gt;&lt;img src=&quot;https://github.com/asbru-cm/asbru-cm/actions/workflows/build-snapshots.yml/badge.svg?sanitize=true&quot; alt=&quot;Build Snapshot/Master Packages&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/asbru-cm/asbru-cm/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPL--3-blue.svg?style=flat&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://packagecloud.io/asbru-cm/asbru-cm?filter=rpms&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Packages-RPM-blue.svg?style=flat&quot; alt=&quot;RPM Packages&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://packagecloud.io/asbru-cm/asbru-cm?filter=debs&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Packages-Debian-blue.svg?style=flat&quot; alt=&quot;Debian Packages&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://liberapay.com/asbru-cm/donate&quot;&gt;&lt;img src=&quot;http://img.shields.io/liberapay/patrons/asbru-cm.svg?logo=liberapay&quot; alt=&quot;Liberapay&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://blockchain.info/address/19ZsvCafwRCwQSPcvfzgyiHD3Viptb4F45&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/bitcoin-19ZsvCafwRCwQSPcvfzgyiHD3Viptb4F45-D28138.svg?style=flat-square&quot; alt=&quot;Donate Bitcoins&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://asbru-cm.net&quot;&gt;&lt;img src=&quot;https://www.asbru-cm.net/assets/img/asbru-logo-200.png&quot; align=&quot;right&quot; width=&quot;200px&quot; height=&quot;200px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;A free and open-source connection manager&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Ásbrú Connection Manager&lt;/strong&gt; is a user interface that helps organizing remote terminal sessions and automating repetitive tasks.&lt;/p&gt; 
&lt;h3&gt;Features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Simple GUI to manage/launch connections to remote machines&lt;/li&gt; 
 &lt;li&gt;Scripting possibilities, &#39;ala&#39; SecureCRT&lt;/li&gt; 
 &lt;li&gt;Configurable pre or post connection local commands execution&lt;/li&gt; 
 &lt;li&gt;Configurable list of macros (commands) to execute locally when connected or to send to connected client&lt;/li&gt; 
 &lt;li&gt;Configurable list of conditional executions on connected machine via &#39;Expect&#39;: 
  &lt;ul&gt; 
   &lt;li&gt;forget about SSH certificates&lt;/li&gt; 
   &lt;li&gt;chain multiple SSH connections&lt;/li&gt; 
   &lt;li&gt;automate tunnels creation&lt;/li&gt; 
   &lt;li&gt;with line-send delay capabilities&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://keepassxc.org/&quot;&gt;KeePassXC&lt;/a&gt; integration&lt;/li&gt; 
 &lt;li&gt;Ability to connect to machines through a Proxy server&lt;/li&gt; 
 &lt;li&gt;Cluster connections&lt;/li&gt; 
 &lt;li&gt;Tabbed/Windowed terminals&lt;/li&gt; 
 &lt;li&gt;Wake On LAN capabilities&lt;/li&gt; 
 &lt;li&gt;Local and global variables, eg.: write down a password once, use it ANY where, centralizing its modification for faster changes! use them for: 
  &lt;ul&gt; 
   &lt;li&gt;password vault&lt;/li&gt; 
   &lt;li&gt;reusing connection strings&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Seamless Gnome/Gtk integration&lt;/li&gt; 
 &lt;li&gt;Tray icon for &#39;right button&#39; quick launching of managed connections. Screenshots and statistics.&lt;/li&gt; 
 &lt;li&gt;DEB, RPM and .TAR.GZ packages available&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;p&gt;We recommend installing Ásbrú Connection Manager using our latest pre-built packages hosted on &lt;a href=&quot;https://cloudsmith.io/&quot;&gt;cloudsmith.io&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;To do so, execute the following commands:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Debian / Ubuntu&lt;/p&gt; &lt;pre&gt;&lt;code&gt;curl -1sLf &#39;https://dl.cloudsmith.io/public/asbru-cm/release/cfg/setup/bash.deb.sh&#39; | sudo -E bash
sudo apt-get install asbru-cm
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Fedora&lt;/p&gt; &lt;pre&gt;&lt;code&gt;curl -1sLf &#39;https://dl.cloudsmith.io/public/asbru-cm/release/cfg/setup/bash.rpm.sh&#39; | sudo -E bash
sudo dnf install asbru-cm
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Pacman-based (e.g. Arch Linux, Manjaro)&lt;/p&gt; &lt;pre&gt;&lt;code&gt;git clone https://aur.archlinux.org/asbru-cm-git.git &amp;amp;&amp;amp; cd asbru-cm-git
makepkg -si
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;MX Linux&lt;/p&gt; &lt;p&gt;Ásbrú Connection Manager can be installed through the MX Package Installer under the Test Repo tab or by enabling the Test Repo and running&lt;/p&gt; &lt;pre&gt;&lt;code&gt;sudo apt-get install asbru-cm
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Windows&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;Windows 10 Build 19044 and later, or Windows 11&lt;/p&gt; &lt;p&gt;See &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps&quot;&gt;https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps&lt;/a&gt;&lt;/p&gt; &lt;p&gt;tl;dr:&lt;/p&gt; 
    &lt;ol&gt; 
     &lt;li&gt;Install or update WSL.&lt;/li&gt; 
     &lt;li&gt;Follow the installation instructions for Ubuntu above.&lt;/li&gt; 
     &lt;li&gt;Ásbrú Connection Manager will then be available in the start menu.&lt;/li&gt; 
    &lt;/ol&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;Windows 10 before Build 19044, or running older WSL&lt;/p&gt; &lt;p&gt;It is possible to run Asbru-CM on Windows 10 by enabling WSL and using the application &lt;a href=&quot;https://github.com/SegiH/Asbru-CM-Runner&quot;&gt;Asbru-CM Runner&lt;/a&gt;. If you do not have &lt;a href=&quot;https://github.com/microsoft/wslg&quot;&gt;WSLG&lt;/a&gt; support, you will need to install &lt;a href=&quot;http://www.straightrunning.com/XmingNotes/&quot;&gt;Xming&lt;/a&gt;. The GitHub page for &lt;a href=&quot;https://github.com/SegiH/Asbru-CM-Runner&quot;&gt;Asbru-CM Runner&lt;/a&gt; has detailed instructions on how to do this and allows you to run Asbru-CM on Windows 10 without a console window open in the background.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Once installed on your system, type &lt;code&gt;asbru-cm&lt;/code&gt; in your terminal.&lt;/p&gt; 
&lt;h3&gt;Testing new features&lt;/h3&gt; 
&lt;p&gt;Our master and the snapshots are being kept as stable as possible. New features for new major releases are being developed inside the &quot;loki&quot; branch.&lt;/p&gt; 
&lt;p&gt;Beware that &lt;a href=&quot;https://en.wikipedia.org/wiki/Loki&quot;&gt;Loki&lt;/a&gt; can sometimes behave in an unexpected manner to you. This is somehow the same concept as the &quot;&lt;a href=&quot;https://www.debian.org/releases/sid/&quot;&gt;Debian sid&lt;/a&gt;&quot; release.&lt;/p&gt; 
&lt;p&gt;You are welcome to contribute and test by checking out &quot;loki&quot; or by installing our builds.&lt;/p&gt; 
&lt;p&gt;If you do not wish to run third party scripts on your systems, you can always access manual install instructions at &lt;a href=&quot;https://cloudsmith.io/~asbru-cm/repos/loki/setup/&quot;&gt;https://cloudsmith.io/~asbru-cm/repos/loki/setup/&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Debian / Ubuntu&lt;/p&gt; &lt;pre&gt;&lt;code&gt; curl -1sLf &#39;https://dl.cloudsmith.io/public/asbru-cm/loki/cfg/setup/bash.deb.sh&#39; | sudo -E bash
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Fedora&lt;/p&gt; &lt;pre&gt;&lt;code&gt; curl -1sLf &#39;https://dl.cloudsmith.io/public/asbru-cm/loki/cfg/setup/bash.rpm.sh&#39; | sudo -E bash
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installation of legacy 5.x&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Debian / Ubuntu&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ curl -s https://packagecloud.io/install/repositories/asbru-cm/v5/script.deb.sh | sudo bash
$ sudo apt-get install asbru-cm
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Fedora&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ curl -s https://packagecloud.io/install/repositories/asbru-cm/v5/script.rpm.sh | sudo bash
$ sudo dnf install asbru-cm
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Frequenty Asked Questions&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Why did you call that project &quot;Ásbrú&quot; ?&lt;/p&gt; &lt;p&gt;In Norse mythology, &lt;a href=&quot;https://en.wikipedia.org/wiki/Bifr%C3%B6st&quot;&gt;Ásbrú&lt;/a&gt; refers to a burning rainbow bridge that connects Midgard (Earth) and Asgard, the realm of the gods.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Is this a fork of PAC (Perl Auto Connector) Manager ?&lt;/p&gt; &lt;p&gt;Yes.&lt;/p&gt; &lt;p&gt;As &lt;a href=&quot;https://github.com/perseo22&quot;&gt;David Torrejon Vaquerizas&lt;/a&gt;, the author of PAC Manager, could not find time, for some reasons that we respect, to continue the work on his project and was not open for external contributions (&lt;a href=&quot;https://github.com/perseo22/pacmanager/issues/57&quot;&gt;see this&lt;/a&gt;), a fork was needed to ensure the future and give the opportunity to the community to take over.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;More questions can be found on the &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/wiki/Frequently-Asked-Questions&quot;&gt;dedicated project wiki page&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Contributing&lt;/h3&gt; 
&lt;p&gt;If you want to contribute to Ásbrú Connection Manager, first check out the &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/issues&quot;&gt;issues&lt;/a&gt; and see if your request is not listed yet. Issues and pull requests will be triaged and responded to as quickly as possible.&lt;/p&gt; 
&lt;p&gt;Before contributing, please review our &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/raw/master/CONTRIBUTING.md&quot;&gt;contributing doc&lt;/a&gt; for info on how to make feature requests and bear in mind that we adhere to the &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/raw/master/CODE_OF_CONDUCT.md&quot;&gt;Contributor Covenant code of conduct&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Financial support&lt;/h3&gt; 
&lt;p&gt;If you like Ásbrú Connection Manager, you may also consider supporting the project financially by donating on &lt;a title=&quot;Donate Liberapay&quot; href=&quot;https://liberapay.com/asbru-cm/donate&quot;&gt;Liberapay&lt;/a&gt; or by donating to one of &lt;a href=&quot;https://docs.asbru-cm.net/Contributing/Financial_Contribution/&quot;&gt;our cryptocurrency addresses&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;License&lt;/h3&gt; 
&lt;p&gt;Ásbrú Connection Manager is licensed under the GNU General Public License version 3 &lt;a href=&quot;http://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;http://www.gnu.org/licenses/gpl-3.0.html&lt;/a&gt;. A full copy of the license can be found in the &lt;a href=&quot;https://github.com/asbru-cm/asbru-cm/raw/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file.&lt;/p&gt; 
&lt;h3&gt;Sponsors&lt;/h3&gt; 
&lt;p&gt;&lt;a title=&quot;Cloudflare&quot; href=&quot;https://cloudflare.com/&quot;&gt;&lt;img height=&quot;105&quot; width=&quot;230&quot; alt=&quot;Cloudflare&quot; src=&quot;https://www.cloudflare.com/img/logo-web-badges/cf-logo-on-white-bg.svg?sanitize=true&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Packages&lt;/h3&gt; 
&lt;p&gt;The repositories for our RPM and DEB builds are thankfully sponsored by &lt;a href=&quot;https://packagecloud.io/&quot;&gt;packagecloud&lt;/a&gt; and &lt;a href=&quot;https://cloudsmith.io&quot;&gt;Cloudsmith&lt;/a&gt;. A great thanks to them.&lt;/p&gt; 
&lt;p&gt;&lt;a title=&quot;Private Maven, RPM, DEB, PyPi and RubyGem Repository&quot; href=&quot;https://packagecloud.io/&quot;&gt;&lt;img height=&quot;46&quot; width=&quot;158&quot; alt=&quot;Private Maven, RPM, DEB, PyPi and RubyGem Repository&quot; src=&quot;https://packagecloud.io/images/packagecloud-badge.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://cloudsmith.com/&quot;&gt;&lt;img height=&quot;46&quot; widht=&quot;158&quot; alt=&quot;Fast, secure development and distribution. Universal, web-scale package management&quot; src=&quot;https://www.asbru-cm.net/assets/img/misc/cloudsmith-logo-color.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/eb40fdcb8b21bdb35460ca6f3928ad2b660757503b9ab8334f8b13bcd8b113aa/asbru-cm/asbru-cm" medium="image" />
      
    </item>
    
    <item>
      <title>brendangregg/FlameGraph</title>
      <link>https://github.com/brendangregg/FlameGraph</link>
      <description>&lt;p&gt;Stack trace visualizer&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Flame Graphs visualize profiled code&lt;/h1&gt; 
&lt;p&gt;Main Website: &lt;a href=&quot;http://www.brendangregg.com/flamegraphs.html&quot;&gt;http://www.brendangregg.com/flamegraphs.html&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Example (click to zoom):&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg&quot;&gt;&lt;img src=&quot;http://www.brendangregg.com/FlameGraphs/cpu-bash-flamegraph.svg?sanitize=true&quot; alt=&quot;Example&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Click a box to zoom the Flame Graph to this stack frame only. To search and highlight all stack frames matching a regular expression, click the &lt;em&gt;search&lt;/em&gt; button in the upper right corner or press Ctrl-F. By default, search is case sensitive, but this can be toggled by pressing Ctrl-I or by clicking the &lt;em&gt;ic&lt;/em&gt; button in the upper right corner.&lt;/p&gt; 
&lt;p&gt;Other sites:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The Flame Graph article in ACMQ and CACM: &lt;a href=&quot;http://queue.acm.org/detail.cfm?id=2927301&quot;&gt;http://queue.acm.org/detail.cfm?id=2927301&lt;/a&gt; &lt;a href=&quot;http://cacm.acm.org/magazines/2016/6/202665-the-flame-graph/abstract&quot;&gt;http://cacm.acm.org/magazines/2016/6/202665-the-flame-graph/abstract&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;CPU profiling using Linux perf_events, DTrace, SystemTap, or ktap: &lt;a href=&quot;http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html&quot;&gt;http://www.brendangregg.com/FlameGraphs/cpuflamegraphs.html&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;CPU profiling using XCode Instruments: &lt;a href=&quot;http://schani.wordpress.com/2012/11/16/flame-graphs-for-instruments/&quot;&gt;http://schani.wordpress.com/2012/11/16/flame-graphs-for-instruments/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;CPU profiling using Xperf.exe: &lt;a href=&quot;http://randomascii.wordpress.com/2013/03/26/summarizing-xperf-cpu-usage-with-flame-graphs/&quot;&gt;http://randomascii.wordpress.com/2013/03/26/summarizing-xperf-cpu-usage-with-flame-graphs/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Memory profiling: &lt;a href=&quot;http://www.brendangregg.com/FlameGraphs/memoryflamegraphs.html&quot;&gt;http://www.brendangregg.com/FlameGraphs/memoryflamegraphs.html&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Other examples, updates, and news: &lt;a href=&quot;http://www.brendangregg.com/flamegraphs.html#Updates&quot;&gt;http://www.brendangregg.com/flamegraphs.html#Updates&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Flame graphs can be created in three steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Capture stacks&lt;/li&gt; 
 &lt;li&gt;Fold stacks&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;1. Capture stacks&lt;/h1&gt; 
&lt;p&gt;Stack samples can be captured using Linux perf_events, FreeBSD pmcstat (hwpmc), DTrace, SystemTap, and many other profilers. See the stackcollapse-* converters.&lt;/p&gt; 
&lt;h3&gt;Linux perf_events&lt;/h3&gt; 
&lt;p&gt;Using Linux perf_events (aka &quot;perf&quot;) to capture 60 seconds of 99 Hertz stack samples, both user- and kernel-level stacks, all processes:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# perf record -F 99 -a -g -- sleep 60
# perf script &amp;gt; out.perf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Now only capturing PID 181:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# perf record -F 99 -p 181 -g -- sleep 60
# perf script &amp;gt; out.perf
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;DTrace&lt;/h3&gt; 
&lt;p&gt;Using DTrace to capture 60 seconds of kernel stacks at 997 Hertz:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# dtrace -x stackframes=100 -n &#39;profile-997 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }&#39; -o out.kern_stacks
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Using DTrace to capture 60 seconds of user-level stacks for PID 12345 at 97 Hertz:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# dtrace -x ustackframes=100 -n &#39;profile-97 /pid == 12345 &amp;amp;&amp;amp; arg1/ { @[ustack()] = count(); } tick-60s { exit(0); }&#39; -o out.user_stacks
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;60 seconds of user-level stacks, including time spent in-kernel, for PID 12345 at 97 Hertz:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# dtrace -x ustackframes=100 -n &#39;profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }&#39; -o out.user_stacks
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Switch &lt;code&gt;ustack()&lt;/code&gt; for &lt;code&gt;jstack()&lt;/code&gt; if the application has a ustack helper to include translated frames (eg, node.js frames; see: &lt;a href=&quot;http://dtrace.org/blogs/dap/2012/01/05/where-does-your-node-program-spend-its-time/&quot;&gt;http://dtrace.org/blogs/dap/2012/01/05/where-does-your-node-program-spend-its-time/&lt;/a&gt;). The rate for user-level stack collection is deliberately slower than kernel, which is especially important when using &lt;code&gt;jstack()&lt;/code&gt; as it performs additional work to translate frames.&lt;/p&gt; 
&lt;h1&gt;2. Fold stacks&lt;/h1&gt; 
&lt;p&gt;Use the stackcollapse programs to fold stack samples into single lines. The programs provided are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse.pl&lt;/code&gt;: for DTrace stacks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-perf.pl&lt;/code&gt;: for Linux perf_events &quot;perf script&quot; output&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-pmc.pl&lt;/code&gt;: for FreeBSD pmcstat -G stacks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-stap.pl&lt;/code&gt;: for SystemTap stacks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-instruments.pl&lt;/code&gt;: for XCode Instruments&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-vtune.pl&lt;/code&gt;: for Intel VTune profiles&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-ljp.awk&lt;/code&gt;: for Lightweight Java Profiler&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-jstack.pl&lt;/code&gt;: for Java jstack(1) output&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-gdb.pl&lt;/code&gt;: for gdb(1) stacks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-go.pl&lt;/code&gt;: for Golang pprof stacks&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-vsprof.pl&lt;/code&gt;: for Microsoft Visual Studio profiles&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;stackcollapse-wcp.pl&lt;/code&gt;: for wallClockProfiler output&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Usage example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;For perf_events:
$ ./stackcollapse-perf.pl out.perf &amp;gt; out.folded

For DTrace:
$ ./stackcollapse.pl out.kern_stacks &amp;gt; out.kern_folded
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The output looks like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;unix`_sys_sysenter_post_swapgs 1401
unix`_sys_sysenter_post_swapgs;genunix`close 5
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf 85
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_closef 26
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_setf 5
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_getstate 6
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_unfalloc 2
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`closef 48
[...]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;3. &lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt;&lt;/h1&gt; 
&lt;p&gt;Use &lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt; to render a SVG.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ ./flamegraph.pl out.kern_folded &amp;gt; kernel.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;An advantage of having the folded input file (and why this is separate to &lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt;) is that you can use grep for functions of interest. Eg:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ grep cpuid out.kern_folded | ./flamegraph.pl &amp;gt; cpuid.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Provided Examples&lt;/h1&gt; 
&lt;h3&gt;Linux perf_events&lt;/h3&gt; 
&lt;p&gt;An example output from Linux &quot;perf script&quot; is included, gzip&#39;d, as example-perf-stacks.txt.gz. The resulting flame graph is example-perf.svg:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.brendangregg.com/FlameGraphs/example-perf.svg&quot;&gt;&lt;img src=&quot;http://www.brendangregg.com/FlameGraphs/example-perf.svg?sanitize=true&quot; alt=&quot;Example&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can create this using:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ gunzip -c example-perf-stacks.txt.gz | ./stackcollapse-perf.pl --all | ./flamegraph.pl --color=java --hash &amp;gt; example-perf.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This shows my typical workflow: I&#39;ll gzip profiles on the target, then copy them to my laptop for analysis. Since I have hundreds of profiles, I leave them gzip&#39;d!&lt;/p&gt; 
&lt;p&gt;Since this profile included Java, I used the &lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt; --color=java palette. I&#39;ve also used &lt;a href=&quot;http://stackcollapse-perf.pl&quot;&gt;stackcollapse-perf.pl&lt;/a&gt; --all, which includes all annotations that help &lt;a href=&quot;http://flamegraph.pl&quot;&gt;flamegraph.pl&lt;/a&gt; use separate colors for kernel and user level code. The resulting flame graph uses: green == Java, yellow == C++, red == user-mode native, orange == kernel.&lt;/p&gt; 
&lt;p&gt;This profile was from an analysis of vert.x performance. The benchmark client, wrk, is also visible in the flame graph.&lt;/p&gt; 
&lt;h3&gt;DTrace&lt;/h3&gt; 
&lt;p&gt;An example output from DTrace is also included, example-dtrace-stacks.txt, and the resulting flame graph, example-dtrace.svg:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.brendangregg.com/FlameGraphs/example-dtrace.svg&quot;&gt;&lt;img src=&quot;http://www.brendangregg.com/FlameGraphs/example-dtrace.svg?sanitize=true&quot; alt=&quot;Example&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can generate this using:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ ./stackcollapse.pl example-stacks.txt | ./flamegraph.pl &amp;gt; example.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This was from a particular performance investigation: the Flame Graph identified that CPU time was spent in the lofs module, and quantified that time.&lt;/p&gt; 
&lt;h1&gt;Options&lt;/h1&gt; 
&lt;p&gt;See the USAGE message (--help) for options:&lt;/p&gt; 
&lt;p&gt;USAGE: ./flamegraph.pl [options] infile &amp;gt; outfile.svg&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--title TEXT     # change title text
--subtitle TEXT  # second level title (optional)
--width NUM      # width of image (default 1200)
--height NUM     # height of each frame (default 16)
--minwidth NUM   # omit smaller functions. In pixels or use &quot;%&quot; for 
                 # percentage of time (default 0.1 pixels)
--fonttype FONT  # font type (default &quot;Verdana&quot;)
--fontsize NUM   # font size (default 12)
--countname TEXT # count type label (default &quot;samples&quot;)
--nametype TEXT  # name type label (default &quot;Function:&quot;)
--colors PALETTE # set color palette. choices are: hot (default), mem,
                 # io, wakeup, chain, java, js, perl, red, green, blue,
                 # aqua, yellow, purple, orange
--bgcolors COLOR # set background colors. gradient choices are yellow
                 # (default), blue, green, grey; flat colors use &quot;#rrggbb&quot;
--hash           # colors are keyed by function name hash
--cp             # use consistent palette (palette.map)
--reverse        # generate stack-reversed flame graph
--inverted       # icicle graph
--flamechart     # produce a flame chart (sort by time, do not merge stacks)
--negate         # switch differential hues (blue&amp;lt;-&amp;gt;red)
--notes TEXT     # add notes comment in SVG (for debugging)
--help           # this message

eg,
./flamegraph.pl --title=&quot;Flame Graph: malloc()&quot; trace.txt &amp;gt; graph.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;As suggested in the example, flame graphs can process traces of any event, such as malloc()s, provided stack traces are gathered.&lt;/p&gt; 
&lt;h1&gt;Consistent Palette&lt;/h1&gt; 
&lt;p&gt;If you use the &lt;code&gt;--cp&lt;/code&gt; option, it will use the $colors selection and randomly generate the palette like normal. Any future flamegraphs created using the &lt;code&gt;--cp&lt;/code&gt; option will use the same palette map. Any new symbols from future flamegraphs will have their colors randomly generated using the $colors selection.&lt;/p&gt; 
&lt;p&gt;If you don&#39;t like the palette, just delete the palette.map file.&lt;/p&gt; 
&lt;p&gt;This allows your to change your colorscheme between flamegraphs to make the differences REALLY stand out.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;p&gt;Say we have 2 captures, one with a problem, and one when it was working (whatever &quot;it&quot; is):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cat working.folded | ./flamegraph.pl --cp &amp;gt; working.svg
# this generates a palette.map, as per the normal random generated look.

cat broken.folded | ./flamegraph.pl --cp --colors mem &amp;gt; broken.svg
# this svg will use the same palette.map for the same events, but a very
# different colorscheme for any new events.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Take a look at the demo directory for an example:&lt;/p&gt; 
&lt;p&gt;palette-example-working.svg&lt;br /&gt; palette-example-broken.svg&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/fc8bc50124bac1c1412c924609aa5b87884e263ca63f29ce66c1a04d661d7234/brendangregg/FlameGraph" medium="image" />
      
    </item>
    
    <item>
      <title>manwar/perlweeklychallenge-club</title>
      <link>https://github.com/manwar/perlweeklychallenge-club</link>
      <description>&lt;p&gt;Knowledge base for The Weekly Challenge club members using Perl, Raku, Ada, APL, Awk, Bash, BASIC, Bc, Befunge-93, Bourne Shell, BQN, Brainfuck, C3, C, CESIL, C++, C#, Clojure, COBOL, Coconut, Crystal, D, Dart, Dc, Elm, Emacs Lisp, Erlang, Excel VBA, Fennel, Fish, Forth, Fortran, Gembase, GNAT, Go, Haskell, Haxe, HTML, Idris, IO, J, Janet, Java,…&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;The Weekly Challenge Club&lt;/h1&gt; 
&lt;p&gt;This is the central repository for the members of &lt;a href=&quot;https://theweeklychallenge.org&quot;&gt;&lt;strong&gt;The Weekly Challenge&lt;/strong&gt;&lt;/a&gt;. The members can submit the solution to the challenge each week in their favorite programming languages, although the preferred languages are &lt;strong&gt;Perl&lt;/strong&gt; and &lt;strong&gt;Raku&lt;/strong&gt;.&lt;/p&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;a href=&quot;https://www.star-history.com/?repos=manwar%2Fperlweeklychallenge-club&amp;amp;type=date&amp;amp;legend=top-left&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/chart?repos=manwar/perlweeklychallenge-club&amp;amp;type=date&amp;amp;theme=dark&amp;amp;legend=top-left&quot; /&gt; 
  &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/chart?repos=manwar/perlweeklychallenge-club&amp;amp;type=date&amp;amp;legend=top-left&quot; /&gt; 
  &lt;img alt=&quot;Star History Chart&quot; src=&quot;https://api.star-history.com/chart?repos=manwar/perlweeklychallenge-club&amp;amp;type=date&amp;amp;legend=top-left&quot; /&gt; 
 &lt;/picture&gt; &lt;/a&gt; 
&lt;h2&gt;EZPWC - Easy Perl Weekly Challenges Script&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Saif Ahmed&lt;/strong&gt;, respected member of &lt;strong&gt;Team PWC&lt;/strong&gt;, created the tool &lt;strong&gt;&lt;a href=&quot;https://github.com/saiftynet/EZPWC&quot;&gt;EZPWC&lt;/a&gt;&lt;/strong&gt; to help you with contributing to the weekly challenge. We highly recommend you give it a try. If you have any questions/suggestions, then please raise an issue against the tool.&lt;/p&gt; 
&lt;h2&gt;How to contribute?&lt;/h2&gt; 
&lt;p&gt;Just submit a Pull Request with your solutions.&lt;/p&gt; 
&lt;p&gt;First, find the latest challenge folder. The highest numbered folder is the latest challenge folder, e.g. challenge-002. You will probably find a folder by your name if you are an existing member. For example, if your name is &lt;strong&gt;&quot;Joe Blog&quot;&lt;/strong&gt;, there would be a folder called &lt;strong&gt;&quot;joe-blog&quot;&lt;/strong&gt;. Under your named folder, you will find a file &lt;strong&gt;README&lt;/strong&gt;. Depending on your choice of language, you should create a folder here e.g. &lt;strong&gt;perl&lt;/strong&gt; for &lt;strong&gt;Perl&lt;/strong&gt; and &lt;strong&gt;raku&lt;/strong&gt; for &lt;strong&gt;Raku&lt;/strong&gt;. Inside each of these folders, you can save your solutions. If it is a Perl script for &lt;strong&gt;Task #1&lt;/strong&gt;, call it &lt;strong&gt;&lt;a href=&quot;http://ch-1.pl&quot;&gt;ch-1.pl&lt;/a&gt;&lt;/strong&gt;. Similarly, if it is a Perl script for &lt;strong&gt;Task #2&lt;/strong&gt;, call it &lt;strong&gt;&lt;a href=&quot;http://ch-2.pl&quot;&gt;ch-2.pl&lt;/a&gt;&lt;/strong&gt;. For &lt;strong&gt;Raku&lt;/strong&gt; solutions, call it &lt;strong&gt;ch-1.raku&lt;/strong&gt; and &lt;strong&gt;ch-2.raku&lt;/strong&gt; respectively. And if you are writing a one-liner, call it &lt;strong&gt;&lt;a href=&quot;http://ch-1.sh&quot;&gt;ch-1.sh&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;a href=&quot;http://ch-2.sh&quot;&gt;ch-2.sh&lt;/a&gt;&lt;/strong&gt;. If you are contributing for the first time, please create your named folder as described above. Also, let us know what name you would like us to use.&lt;/p&gt; 
&lt;p&gt;If you have created a blog about your solutions, then create a file called &lt;strong&gt;blog.txt&lt;/strong&gt; and add the link. If you have more than one blog, create another file called &lt;strong&gt;blog1.txt&lt;/strong&gt; and add your link there.&lt;/p&gt; 
&lt;h2&gt;Step-by-step instructions&lt;/h2&gt; 
&lt;p&gt;Let us assume you want to submit solutions for &lt;strong&gt;Challenge 002&lt;/strong&gt;, and your GitHub user name is &lt;strong&gt;joe-blog&lt;/strong&gt;.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;If you are submitting the solution for the first time, then you have to &lt;strong&gt;Fork&lt;/strong&gt; the repository &lt;strong&gt;&lt;a href=&quot;https://github.com/manwar/perlweeklychallenge-club&quot;&gt;https://github.com/manwar/perlweeklychallenge-club&lt;/a&gt;&lt;/strong&gt; by clicking the &lt;strong&gt;&quot;Fork&quot;&lt;/strong&gt; button in the top right corner and should have the repository, e.g. &lt;strong&gt;&lt;a href=&quot;https://github.com/joe-blog/perlweeklychallenge-club&quot;&gt;https://github.com/joe-blog/perlweeklychallenge-club&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Go to your favorite terminal and &lt;strong&gt;clone&lt;/strong&gt; your repository.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git clone https://github.com/joe-blog/perlweeklychallenge-club
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Create a new branch for the solution&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ cd perlweeklychallenge-club
$ git checkout -b new-branch
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Go to the &lt;strong&gt;Challenge 002&lt;/strong&gt; folder.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ cd challenge-002
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;If you find a folder with your name in the current folder, you can just go ahead and skip to the next step; otherwise, create a new folder.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ mkdir joe-blog
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Change into your named folder.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ cd joe-blog
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;If you just created the folder, you should add a file &lt;strong&gt;README&lt;/strong&gt; and add a line &lt;strong&gt;Solution by Joe Blog&lt;/strong&gt; otherwise, skip to the next step.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;If you want to submit &lt;strong&gt;Perl 5&lt;/strong&gt; solutions, you should create a folder &lt;strong&gt;perl&lt;/strong&gt; (if you still need to). Similarly, if you want to submit &lt;strong&gt;Raku&lt;/strong&gt; solutions, then you should create a folder &lt;strong&gt;raku&lt;/strong&gt; (if not already).&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Change into your relevant folder depending on your choice &lt;strong&gt;cd perl&lt;/strong&gt; or &lt;strong&gt;cd raku&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now you are ready to add your solutions. If it is for the first challenge, create a file named &lt;strong&gt;&lt;a href=&quot;http://ch-1.pl&quot;&gt;ch-1.pl&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;ch-1.raku&lt;/strong&gt; or &lt;strong&gt;&lt;a href=&quot;http://ch-1.sh&quot;&gt;ch-1.sh&lt;/a&gt;&lt;/strong&gt;. Similarly, if it is for the second challenge, create a file named &lt;strong&gt;&lt;a href=&quot;http://ch-2.pl&quot;&gt;ch-2.pl&lt;/a&gt;&lt;/strong&gt; or &lt;strong&gt;ch-2.raku&lt;/strong&gt; or &lt;strong&gt;&lt;a href=&quot;http://ch-2.sh&quot;&gt;ch-2.sh&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Once you are happy with your solutions, add them to the repository. First, go back to &lt;strong&gt;root&lt;/strong&gt; of the repository and then fire the command&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git add challenge-002/joe-blog
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Commit your changes.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git commit
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Push your changes.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git push -u origin new-branch
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now go to your fork repository in the GitHub web portal &lt;strong&gt;&lt;a href=&quot;https://github.com/joe-blog/perlweeklychallenge-club&quot;&gt;https://github.com/joe-blog/perlweeklychallenge-club&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;You should see a button to submit &lt;strong&gt;Pull Request&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;How to add a new solution when you already have the forked repository?&lt;/h2&gt; 
&lt;p&gt;Let us assume you already have the repository forked. If this is the first time you use the same forked repository for submitting subsequent challenges solution. I also assume your GitHub user name is &lt;strong&gt;joe-blog&lt;/strong&gt;.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Checkout out the &lt;strong&gt;master&lt;/strong&gt; branch first.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git checkout master
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Check if you have set up &lt;strong&gt;upstream&lt;/strong&gt;.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git remote -v
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;You should see something similar:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;origin  https://github.com/joe-blog/perlweeklychallenge-club (fetch)
origin  https://github.com/joe-blog/perlweeklychallenge-club (push)
upstream        https://github.com/manwar/perlweeklychallenge-club (fetch)
upstream        https://github.com/manwar/perlweeklychallenge-club (push)
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;If you don&#39;t see &lt;strong&gt;upstream&lt;/strong&gt; as above, then you need to set up your &lt;strong&gt;upstream&lt;/strong&gt; like below:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git remote add upstream https://github.com/manwar/perlweeklychallenge-club
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Check if you have everything set up correctly.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git remote -v
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;If you see a similar output as above, you have set up &lt;strong&gt;upstream&lt;/strong&gt; correctly. Just so you know, you only need to do it &lt;strong&gt;once&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now we need to &lt;strong&gt;fetch&lt;/strong&gt; latest changes from the &lt;strong&gt;upstream&lt;/strong&gt;.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git fetch upstream
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;We will merge the changes into your local &lt;strong&gt;master&lt;/strong&gt; branch.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git merge upstream/master --ff-only
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Push your &lt;strong&gt;master&lt;/strong&gt; changes back to the repository.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git push -u origin master
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now it is time to create a new branch for a new challenge&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git checkout -b branch-for-challenge-005
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Once you have a new &lt;strong&gt;branch&lt;/strong&gt; ready, you can add your solutions or blog information.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ cd challenge-005/joe-blog

$ echo &quot;URL to the blog&quot; &amp;gt; blog.txt

$ mkdir perl

$ cd perl

Add script like ch-1.pl or ch-2.pl or ch-1.sh or ch-2.sh

$ mkdir raku

$ cd raku

Add script like ch-1.raku or ch-2.raku or ch-1.sh or ch-2.sh
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Test your script now.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Commit your changes.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git add challenge-005/joe-blog

$ git commit
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now push the newly created branch &lt;strong&gt;branch-for-challenge-005&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$ git push -u origin branch-for-challenge-005
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Time to submit your changes as &lt;strong&gt;Pull Request&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Go to the GitHub web profile&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/joe-blog/perlweeklychallenge-club&quot;&gt;https://github.com/joe-blog/perlweeklychallenge-club&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You should see a button to create &lt;strong&gt;Pull Request&lt;/strong&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;code&gt;Dave Cross&lt;/code&gt; wrote a very detailed &lt;a href=&quot;https://dev.to/davorg/learn-enough-git-and-github-to-take-part-in-the-perl-weekly-challenge-gpm&quot;&gt;&lt;strong&gt;blog post&lt;/strong&gt;&lt;/a&gt; covering the minimum knowledge of &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;GitHub&lt;/code&gt; needed to start contributing. Highly Recommended.&lt;/p&gt; 
&lt;p&gt;If you have any trouble with the above instructions then please get in touch with me anytime &lt;a href=&quot;mailto:mohammad.anwar@yahoo.com&quot;&gt;mohammad.anwar@yahoo.com&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bc4fa76f8afd192845153fb1614024cf9e5929e87df328ae1a4166876f8598a9/manwar/perlweeklychallenge-club" medium="image" />
      
    </item>
    
    <item>
      <title>glpi-project/glpi-agent</title>
      <link>https://github.com/glpi-project/glpi-agent</link>
      <description>&lt;p&gt;GLPI Agent&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;&lt;img src=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/share/html/logo.png&quot; alt=&quot;GLPI Agent&quot; width=&quot;32&quot; height=&quot;32&quot; /&gt; GLPI Agent&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/glpi-project/glpi-agent/actions/workflows/glpi-agent-ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/glpi-project/glpi-agent/actions/workflows/glpi-agent-ci.yml/badge.svg?sanitize=true&quot; alt=&quot;GLPI Agent CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/glpi-project/glpi-agent/actions/workflows/glpi-agent-packaging.yml&quot;&gt;&lt;img src=&quot;https://github.com/glpi-project/glpi-agent/actions/workflows/glpi-agent-packaging.yml/badge.svg?sanitize=true&quot; alt=&quot;GLPI Agent Packaging&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/#download&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/glpi-project/glpi-agent/total.svg?sanitize=true&quot; alt=&quot;Github All Releases&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://twitter.com/GLPI_PROJECT&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/GLPI_PROJECT.svg?style=social&amp;amp;label=Follow&quot; alt=&quot;Twitter Follow&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Summary&lt;/h2&gt; 
&lt;p&gt;The GLPI Agent is a generic management agent. It can perform a certain number of tasks, according to its own execution plan, or on behalf of a GLPI server acting as a control point.&lt;/p&gt; 
&lt;h2&gt;Description&lt;/h2&gt; 
&lt;p&gt;This agent is based on a fork of &lt;a href=&quot;https://github.com/fusioninventory/fusioninventory-agent&quot;&gt;FusionInventory agent&lt;/a&gt; and so works mainly like FusionInventory agent. It introduces new features and a new protocol to communicate directly with a GLPI server and its native inventory feature. Anyway it also keeps the compatibility with &lt;a href=&quot;https://github.com/fusioninventory/fusioninventory-for-glpi&quot;&gt;FusionInventory for GLPI plugin&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Download&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Release: See &lt;a href=&quot;https://github.com/glpi-project/glpi-agent/releases&quot;&gt;our github releases&lt;/a&gt; for official win32, MacOSX &amp;amp; linux packages.&lt;/li&gt; 
 &lt;li&gt;Development builds: 
  &lt;ul&gt; 
   &lt;li&gt;nightly builds for last &#39;develop&#39; branch commits: &lt;a href=&quot;http://nightly.glpi-project.org/glpi-agent&quot;&gt;GLPI-Agent nightly builds&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;with a github account, you can also access artifacts for any other branches supporting &lt;a href=&quot;https://github.com/glpi-project/glpi-agent/actions/workflows/glpi-agent-packaging.yml?query=is%3Asuccess+event%3Apush+-branch%3Adevelop&quot;&gt;&quot;GLPI Agent Packaging&quot; workflow&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;p&gt;The GLPI Agent has its &lt;a href=&quot;https://github.com/glpi-project/doc-agent&quot;&gt;dedicated documentation project&lt;/a&gt; where any contribution will also be appreciated.&lt;/p&gt; 
&lt;p&gt;The documentation itself is &lt;a href=&quot;https://glpi-agent.readthedocs.io/&quot;&gt;readable online&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://glpi-agent.readthedocs.io/en/latest/?badge=latest&quot;&gt;&lt;img src=&quot;https://readthedocs.org/projects/glpi-agent/badge/?version=latest&quot; alt=&quot;Documentation Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Dependencies&lt;/h2&gt; 
&lt;h3&gt;Core&lt;/h3&gt; 
&lt;p&gt;Minimum perl version: 5.8&lt;/p&gt; 
&lt;p&gt;Mandatory Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;File::Which&lt;/li&gt; 
 &lt;li&gt;LWP::UserAgent&lt;/li&gt; 
 &lt;li&gt;Net::IP&lt;/li&gt; 
 &lt;li&gt;Text::Template&lt;/li&gt; 
 &lt;li&gt;UNIVERSAL::require&lt;/li&gt; 
 &lt;li&gt;XML::LibXML&lt;/li&gt; 
 &lt;li&gt;Cpanel::JSON::XS&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Compress::Zlib, for message compression&lt;/li&gt; 
 &lt;li&gt;HTTP::Daemon, for web interface&lt;/li&gt; 
 &lt;li&gt;IO::Socket::SSL, for HTTPS support&lt;/li&gt; 
 &lt;li&gt;LWP::Protocol::https, for HTTPS support&lt;/li&gt; 
 &lt;li&gt;Proc::Daemon, for daemon mode (Unix only)&lt;/li&gt; 
 &lt;li&gt;Proc::PID::File, for daemon mode (Unix only)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Inventory task&lt;/h3&gt; 
&lt;p&gt;Optional Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Net::CUPS, for printers detection&lt;/li&gt; 
 &lt;li&gt;Parse::EDID, for EDID data parsing&lt;/li&gt; 
 &lt;li&gt;DateTime, for reliable timezone name extraction&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional programs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;dmidecode, for DMI data retrieval&lt;/li&gt; 
 &lt;li&gt;lspci, for PCI bus scanning&lt;/li&gt; 
 &lt;li&gt;hdparm, for additional disk drive info retrieval&lt;/li&gt; 
 &lt;li&gt;monitor-get-edid-using-vbe, monitor-get-edid or get-edid, for EDID data access&lt;/li&gt; 
 &lt;li&gt;ssh-keyscan, for host SSH public key retrieval&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Network discovery tasks&lt;/h3&gt; 
&lt;p&gt;Mandatory Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Thread::Queue&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Net::NBName, for NetBios method support&lt;/li&gt; 
 &lt;li&gt;Net::SNMP, for SNMP method support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional programs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;arp, for arp table lookup method support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Network inventory tasks&lt;/h3&gt; 
&lt;p&gt;Mandatory Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Net::SNMP&lt;/li&gt; 
 &lt;li&gt;Thread::Queue&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Optional Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Crypt::DES, for SNMPv3 support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Wake on LAN task&lt;/h3&gt; 
&lt;p&gt;Optional Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Net::Write::Layer2, for ethernet method support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Deploy task&lt;/h3&gt; 
&lt;p&gt;Mandatory Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Digest::SHA&lt;/li&gt; 
 &lt;li&gt;File::Copy::Recursive&lt;/li&gt; 
 &lt;li&gt;Cpanel::JSON::XS&lt;/li&gt; 
 &lt;li&gt;URI::Escape&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Mandatory Perl modules for P2P Support:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Net::Ping&lt;/li&gt; 
 &lt;li&gt;Parallel::ForkManager&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;MSI Packaging&lt;/h3&gt; 
&lt;p&gt;Tools:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glpi-project/dmidecode&quot;&gt;dmidecode&lt;/a&gt; modified to be built with mingw32&lt;/li&gt; 
 &lt;li&gt;hdparm&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.7-zip.org/&quot;&gt;7zip&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Mandatory Perl modules:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Perl::Dist::Strawberry&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;MacOSX Packaging&lt;/h3&gt; 
&lt;p&gt;Tools:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/glpi-project/dmidecode/tree/macosx&quot;&gt;dmidecode&lt;/a&gt; modified to be built on macosx&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/munki/munki-pkg&quot;&gt;munkipkg&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Xcode&lt;/li&gt; 
 &lt;li&gt;productbuild&lt;/li&gt; 
 &lt;li&gt;hdiutil&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Public databases&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Pci.ids&lt;/li&gt; 
 &lt;li&gt;Usb.ids&lt;/li&gt; 
 &lt;li&gt;SysObject.ids: &lt;a href=&quot;https://github.com/glpi-project/sysobject.ids&quot;&gt;sysobject.ids&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Forking/Contributors&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/CONTRIB.md&quot;&gt;CONTRIB&lt;/a&gt; to find references to GLPI Agent related scritps/files&lt;/p&gt; 
&lt;p&gt;We would like to ask you few things in the context of a fork:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Do not change/remove the LICENSE file&lt;/li&gt; 
 &lt;li&gt;Do not change/remove any lines in the &lt;a href=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/Changes&quot;&gt;Changes&lt;/a&gt; file that do not relate to your own code. This is really important to keep the changelog coherent between forks and will facilitate your life if you need to follow our own changes.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Don&#39;t hesitate to add any entry in &lt;a href=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/Changes&quot;&gt;Changes&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/glpi-project/glpi-agent/develop/CONTRIB.md&quot;&gt;CONTRIB&lt;/a&gt; to describe the purpose of your changes.&lt;/p&gt; 
&lt;h2&gt;Contacts&lt;/h2&gt; 
&lt;p&gt;Project websites:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;main site: &lt;a href=&quot;https://glpi-project.org/&quot;&gt;https://glpi-project.org/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;forum: &lt;a href=&quot;https://forum.glpi-project.org/&quot;&gt;https://forum.glpi-project.org/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;github: &lt;a href=&quot;http://github.com/glpi-project/glpi-agent&quot;&gt;http://github.com/glpi-project/glpi-agent&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Project Telegram channel:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://t.me/glpien&quot;&gt;https://t.me/glpien&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please report any issues on project &lt;a href=&quot;https://github.com/glpi-project/glpi-agent/issues&quot;&gt;github issue tracker&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Active authors&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Guillaume Bougard &lt;a href=&quot;mailto:gbougard@teclib.com&quot;&gt;gbougard@teclib.com&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Copyright 2006-2010 &lt;a href=&quot;https://www.ocsinventory-ng.org/&quot;&gt;OCS Inventory contributors&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Copyright 2010-2019 &lt;a href=&quot;https://fusioninventory.org&quot;&gt;FusionInventory Team&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Copyright 2011-2021 &lt;a href=&quot;https://www.teclib-edition.com/&quot;&gt;Teclib Editions&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPL%20v2-blue.svg?sanitize=true&quot; alt=&quot;License: GPL v2&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This software is licensed under the terms of GPLv2+, see LICENSE file for details.&lt;/p&gt; 
&lt;p&gt;When forking, please, don&#39;t delete this file.&lt;/p&gt; 
&lt;h2&gt;Additional pieces of software&lt;/h2&gt; 
&lt;p&gt;The glpi-injector script is based on fusioninventory-injector script:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;author: Pascal Danek&lt;/li&gt; 
 &lt;li&gt;copyright: 2005 Pascal Danek&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;GLPI::Agent::Task::Inventory::Vmsystem contains code from imvirt:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;url: &lt;a href=&quot;http://micky.ibh.net/~liske/imvirt.html&quot;&gt;http://micky.ibh.net/~liske/imvirt.html&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;author: Thomas Liske &lt;a href=&quot;mailto:liske@ibh.de&quot;&gt;liske@ibh.de&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;copyright: 2008 IBH IT-Service GmbH &lt;a href=&quot;http://www.ibh.de/&quot;&gt;http://www.ibh.de/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;License: GPLv2+&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/4105c2aae1cd2a06ec1b96167c8cd4dc02876ff64a4705066d6ad5c5f1b53c59/glpi-project/glpi-agent" medium="image" />
      
    </item>
    
    <item>
      <title>lm-sensors/lm-sensors</title>
      <link>https://github.com/lm-sensors/lm-sensors</link>
      <description>&lt;p&gt;lm-sensors repository&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;lm-sensors&lt;/h1&gt; 
&lt;p&gt;The lm-sensors package, version 3, provides user-space support for the hardware monitoring drivers in Linux 2.6.5 and later. For older kernel versions, you have to use lm-sensors version 2.&lt;/p&gt; 
&lt;h2&gt;Directory Structure&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Directory&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;doc&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Documentation.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;etc&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A sample configuration file for libsensors, and a script to convert lm-sensors version 2 configuration files to work with version 3.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lib&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;The user-space sensors support library code (libsensors).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;prog&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Several supporting programs (see below).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;configs&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sample configurations of various boards, contributed by users of lm-sensors.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Programs (&lt;code&gt;prog&lt;/code&gt;)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;sensors-detect&lt;/strong&gt; — A stand-alone program for detecting installed hardware and recommending specific modules to load.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;sensors&lt;/strong&gt; — A console tool to report sensor readings and set new sensor limits.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;sensord&lt;/strong&gt; — A daemon to watch sensor values and log problems. It includes RRD support.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Configurations (&lt;code&gt;configs&lt;/code&gt;)&lt;/h3&gt; 
&lt;p&gt;All configuration files should now be imported from the old &lt;a href=&quot;http://www.lm-sensors.org&quot;&gt;www.lm-sensors.org&lt;/a&gt; website, however additional information about the origin of the configuration files can be found on the &lt;a href=&quot;http://web.archive.org/web/20150901092438/http://www.lm-sensors.org:80/wiki/Configurations&quot;&gt;old site (archived)&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please contribute back a configuration of your board so other users with the same hardware won&#39;t need to recreate it again and again.&lt;/p&gt; 
&lt;h2&gt;Installing&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/lm-sensors/lm-sensors/master/INSTALL&quot;&gt;INSTALL&lt;/a&gt; file.&lt;/p&gt; 
&lt;h2&gt;Hardware Support&lt;/h2&gt; 
&lt;p&gt;To find out what hardware you have, just run &lt;code&gt;sensors-detect&lt;/code&gt; as root.&lt;/p&gt; 
&lt;p&gt;Most modern mainboards incorporate some form of hardware monitoring chips. These chips read things like chip temperatures, fan rotation speeds and voltage levels. There are quite a few different chips which can be used by mainboard builders for approximately the same results.&lt;/p&gt; 
&lt;p&gt;Laptops, on the other hand, rarely expose any hardware monitoring chip. They often have some BIOS and/or ACPI magic to get the CPU temperature value, but that&#39;s about it. For such laptops, the lm-sensors package is of no use (&lt;code&gt;sensors-detect&lt;/code&gt; will not find anything), and you have to use acpi instead.&lt;/p&gt; 
&lt;p&gt;This package doesn&#39;t contain chip-specific knowledge. It will support all the hardware monitoring chips your kernel has drivers for. In other words, if you find out that you have unsupported hardware (e.g. &lt;code&gt;sensors-detect&lt;/code&gt; told you so) then it means that you need a more recent kernel, or you even need to wait for a new kernel driver to be written. Updating the lm-sensors package itself will not help.&lt;/p&gt; 
&lt;h2&gt;libsensors&lt;/h2&gt; 
&lt;p&gt;The kernel drivers communicate their information through the &lt;code&gt;/sys&lt;/code&gt; interface. Because every motherboard is different, the drivers always advert the measurements at their pins. This means that the values they report are not always immediately relevant to you. They have to be labelled properly, and sometimes they must be scaled to correspond to real-world values.&lt;/p&gt; 
&lt;p&gt;libsensors is a (shared or static) library of access functions. It offers a simple-to-use interface for applications to access the sensor chip readings and configure them as you like. It has a configuration file where you can put all the motherboard-specific labels and conversion rules. That way, all applications do not need to duplicate the effort and can simply link with libsensors and work out of the box.&lt;/p&gt; 
&lt;h2&gt;Applications&lt;/h2&gt; 
&lt;p&gt;This package contains an example console program that reports all current sensor values. This program is called &lt;code&gt;sensors&lt;/code&gt;. You can use it as a reference implementation for more intricate programs. It also contains a daemon watching for sensor values, logging alarms and feeding an RRD database with the sensor measurements.&lt;/p&gt; 
&lt;p&gt;This package does not contain a nice graphical monitor. See the following projects:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://sensors-applet.sourceforge.net/&quot;&gt;GNOME Sensors Applet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://01.org/powertop/&quot;&gt;PowerTOP&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://wpitchoune.net/psensor/&quot;&gt;Psensor&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://amanusk.github.io/s-tui/&quot;&gt;s-tui&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;p&gt;lm-sensors is blamed for all kinds of problems on a regular basis. While it is always possible that lm-sensors does in fact have a problem, almost every time the problem will be elsewhere. The most likely culprit for a problem is one of the kernel drivers providing data to lm-sensors or, rather, the &lt;code&gt;sensors&lt;/code&gt; command (and libsensors). If you encounter problems, the following tests are recommended.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Check enabled sensors with the &lt;code&gt;sensors&lt;/code&gt; command. Observe and, if there are errors, write down your test steps and report.&lt;/li&gt; 
 &lt;li&gt;If any problems are observed while running the &lt;code&gt;sensors&lt;/code&gt; command, disable (unload) kernel drivers one after another. After unloading a driver, run the &lt;code&gt;sensors&lt;/code&gt; command again and observe if the error is gone. If it is, you found the problematic driver. Record your tests and report to the driver maintainer.&lt;/li&gt; 
 &lt;li&gt;If problems are observed while using libsensors from another application, the same procedure applies (though it is recommended to perform the test with the &lt;code&gt;sensors&lt;/code&gt; command first). Again, after identifying the offending driver, record and report your results to the driver maintainer.&lt;/li&gt; 
 &lt;li&gt;If this does not help, try to run &lt;code&gt;strace&lt;/code&gt; on the &lt;code&gt;sensors&lt;/code&gt; command and/or the application using libsensors. If you find any anomalies, record your results and report.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Gathering test data&lt;/h3&gt; 
&lt;p&gt;The sensor readings depend on content of sysfs files and config file. In case of hard to reproduce problem (eg. unexpected scaling for a particular sensor) it may be useful to collect the sensor data that is showing the problem, and attaching it to a bug report.&lt;/p&gt; 
&lt;p&gt;With a bash shell and the typical Linux filesystem layout this command should create an archive &lt;code&gt;hwmon-data.tgz&lt;/code&gt; with the relevant data:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tar --warning=no-file-shrank -czvf hwmon-data.tgz $(find /sys -name hwmon[0-9]\*) /etc/sensors3.conf /etc/sensors.conf /etc/sensors.conf.d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To test that the issue can be reproduced with the gathered data:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir /tmp/hwmon-data
tar -C /tmp/hwmon-data -xzvf hwmon-data.tgz
SENSORS_SYSFS_ROOT=/tmp/hwmon-data/sys sensors -c /tmp/hwmon-data/etc/sensors3.conf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;At the start of the sensors output you should see the warning&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/tmp/hwmon-data/sys: Not a sysfs mount.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;followed by the usual sensor readings. If the output shows the warning as well as the problem you now have the data required to reproduce the problem in &lt;code&gt;hwmon-data.tgz&lt;/code&gt; and can attach it to an issue to make it easier for developers to diagnose.&lt;/p&gt; 
&lt;p&gt;Note that the connfig files (&lt;code&gt;/etc/sensors3.conf&lt;/code&gt; &lt;code&gt;/etc/sensors.conf&lt;/code&gt; &lt;code&gt;/etc/sensors.conf.d&lt;/code&gt;) may be in a different location when your sensors build uses a custom &lt;code&gt;ETCDIR&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Other Information&lt;/h2&gt; 
&lt;p&gt;The lm_sensors website can be found at &lt;a href=&quot;https://hwmon.wiki.kernel.org/lm_sensors&quot;&gt;https://hwmon.wiki.kernel.org/lm_sensors&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The developers of this package can be reached through:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Mailing list:&lt;/strong&gt; &lt;a href=&quot;mailto:lm-sensors@vger.kernel.org&quot;&gt;lm-sensors@vger.kernel.org&lt;/a&gt; (&lt;a href=&quot;http://vger.kernel.org/vger-lists.html#lm-sensors&quot;&gt;subscription info and archives&lt;/a&gt;; you do not need to be subscribed to post)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href=&quot;https://github.com/lm-sensors/lm-sensors&quot;&gt;https://github.com/lm-sensors/lm-sensors&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Do not hesitate to contact us if you have questions, suggestions, problems, want to contribute, or just want to report it works for you. But please try to read the documentation before you ask any questions! It&#39;s all under &lt;code&gt;doc/&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The latest version of this package can always be found at: &lt;a href=&quot;https://github.com/lm-sensors/lm-sensors&quot;&gt;https://github.com/lm-sensors/lm-sensors&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The library (libsensors) is released under the GNU Lesser General Public License (LGPL), as included in the file &lt;a href=&quot;https://raw.githubusercontent.com/lm-sensors/lm-sensors/master/COPYING.LGPL&quot;&gt;COPYING.LGPL&lt;/a&gt;. The rest of this package may be distributed according to the GNU General Public License (GPL), as included in the file &lt;a href=&quot;https://raw.githubusercontent.com/lm-sensors/lm-sensors/master/COPYING&quot;&gt;COPYING&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/1f8158a1ae71cbe75cb3c454ef04bd9cc1ef81c854a9c603183f55643aa957b0/lm-sensors/lm-sensors" medium="image" />
      
    </item>
    
    <item>
      <title>Perl/perl5</title>
      <link>https://github.com/Perl/perl5</link>
      <description>&lt;p&gt;🐪 The Perl programming language&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Perl is Copyright (C) 1993 - 2026 by Larry Wall and others.&lt;/p&gt; 
&lt;p&gt;All rights reserved.&lt;/p&gt; 
&lt;h1&gt;ABOUT PERL&lt;/h1&gt; 
&lt;p&gt;Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development, network programming, GUI development, and more.&lt;/p&gt; 
&lt;p&gt;The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). Its major features are that it&#39;s easy to use, supports both procedural and object-oriented (OO) programming, has powerful built-in support for text processing, and has one of the world&#39;s most impressive collections of third-party modules.&lt;/p&gt; 
&lt;p&gt;For an introduction to the language&#39;s features, see pod/perlintro.pod.&lt;/p&gt; 
&lt;p&gt;For a discussion of the important changes in this release, see pod/perldelta.pod.&lt;/p&gt; 
&lt;p&gt;There are also many Perl books available, covering a wide variety of topics, from various publishers. See pod/perlbook.pod for more information.&lt;/p&gt; 
&lt;h1&gt;INSTALLATION&lt;/h1&gt; 
&lt;p&gt;If you&#39;re using a relatively modern operating system and want to install this version of Perl locally, run the following commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./Configure -des -Dprefix=$HOME/localperl
make test
make install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will configure and compile perl for your platform, run the regression tests, and install perl in a subdirectory &quot;localperl&quot; of your home directory.&lt;/p&gt; 
&lt;p&gt;If you run into any trouble whatsoever or you need to install a customized version of Perl, you should read the detailed instructions in the &quot;INSTALL&quot; file that came with this distribution. Additionally, there are a number of &quot;README&quot; files with hints and tips about building and using Perl on a wide variety of platforms, some more common than others.&lt;/p&gt; 
&lt;p&gt;Once you have Perl installed, a wealth of documentation is available to you through the &#39;perldoc&#39; tool. To get started, run this command:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;perldoc perl
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;IF YOU RUN INTO TROUBLE&lt;/h1&gt; 
&lt;p&gt;Perl is a large and complex system that&#39;s used for everything from knitting to rocket science. If you run into trouble, it&#39;s quite likely that someone else has already solved the problem you&#39;re facing. Once you&#39;ve exhausted the documentation, please report bugs to us at the GitHub issue tracker at &lt;a href=&quot;https://github.com/Perl/perl5/issues&quot;&gt;https://github.com/Perl/perl5/issues&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;While it was current when we made it available, Perl is constantly evolving and there may be a more recent version that fixes bugs you&#39;ve run into or adds new features that you might find useful.&lt;/p&gt; 
&lt;p&gt;You can always find the latest version of perl on a CPAN (Comprehensive Perl Archive Network) site near you at &lt;a href=&quot;https://www.cpan.org/src/&quot;&gt;https://www.cpan.org/src/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;If you want to submit a simple patch to the perl source, see the &quot;SUPER QUICK PATCH GUIDE&quot; in pod/perlhack.pod.&lt;/p&gt; 
&lt;p&gt;Just a personal note: I want you to know that I create nice things like this because it pleases the Author of my story. If this bothers you, then your notion of Authorship needs some revision. But you can use perl anyway. 😃&lt;/p&gt; 
&lt;p&gt;The author.&lt;/p&gt; 
&lt;h1&gt;LICENSING&lt;/h1&gt; 
&lt;p&gt;This program is free software; you can redistribute it and/or modify it under the terms of either:&lt;/p&gt; 
&lt;p&gt;a. the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or&lt;/p&gt; 
&lt;p&gt;b. the &quot;Artistic License&quot; which comes with this Kit.&lt;/p&gt; 
&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either the GNU General Public License or the Artistic License for more details.&lt;/p&gt; 
&lt;p&gt;You should have received a copy of the Artistic License with this Kit, in the file named &quot;Artistic&quot;. If not, I&#39;ll be glad to provide one.&lt;/p&gt; 
&lt;p&gt;You should also have received a copy of the GNU General Public License along with this program in the file named &quot;Copying&quot;. If not, see &lt;a href=&quot;https://www.gnu.org/licenses/&quot;&gt;https://www.gnu.org/licenses/&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For those of you that choose to use the GNU General Public License, my interpretation of the GNU General Public License is that no Perl script falls under the terms of the GPL unless you explicitly put said script under the terms of the GPL yourself. Furthermore, any object code linked with perl does not automatically fall under the terms of the GPL, provided such object code only adds definitions of subroutines and variables, and does not otherwise impair the resulting interpreter from executing any standard Perl script. I consider linking in C subroutines in this manner to be the moral equivalent of defining subroutines in the Perl language itself. You may sell such an object file as proprietary provided that you provide or offer to provide the Perl source, as specified by the GNU General Public License. (This is merely an alternate way of specifying input to the program.) You may also sell a binary produced by the dumping of a running Perl script that belongs to you, provided that you provide or offer to provide the Perl source as specified by the GPL. (The fact that a Perl interpreter and your code are in the same binary file is, in this case, a form of mere aggregation.) This is my interpretation of the GPL. If you still have concerns or difficulties understanding my intent, feel free to contact me. Of course, the Artistic License spells all this out for your protection, so you may prefer to use that.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/09ad5374b49b99ab8840fd5f372c84cabe5c48cd288c0be28984802593e674a9/Perl/perl5" medium="image" />
      
    </item>
    
    <item>
      <title>awsdocs/aws-cdk-guide</title>
      <link>https://github.com/awsdocs/aws-cdk-guide</link>
      <description>&lt;p&gt;User guide for the AWS Cloud Development Kit (CDK).&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Welcome to the AWS CDK Developer Guide&lt;/h1&gt; 
&lt;p&gt;This is the GitHub repository for the &lt;a href=&quot;https://docs.aws.amazon.com/cdk/latest/guide/home.html&quot;&gt;AWS CDK Developer Guide&lt;/a&gt;. You&#39;re welcome to &lt;a href=&quot;https://github.com/awsdocs/aws-cdk-guide/issues/new&quot;&gt;report issues&lt;/a&gt; with the documentation here or, if you have a moment, to submit a Pull Request with your suggested changes. PRs should target the main branch, not master, which has been deprecated.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;v2&lt;/code&gt; - contains the Markdown files for the CDK v2 Developer Guide&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Feel free to make a Pull Request against only one of these content sets (we&#39;ll make sure it gets into both).&lt;/p&gt; 
&lt;p&gt;Issues reported through the Feedback link at the bottom of the individual pages of the AWS CDK Developer Guide go to an internal Amazon issue tracker and may not appear here. However, we try to track most substantive AWS CDK Developer Guide work on GitHub so the community can see, comment, and contribute.&lt;/p&gt; 
&lt;h2&gt;Other Documentation Issues&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Issues with the &lt;a href=&quot;https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html&quot;&gt;API Reference&lt;/a&gt; should be &lt;a href=&quot;https://github.com/aws/aws-cdk/issues/new/choose&quot;&gt;filed&lt;/a&gt; against the &lt;a href=&quot;https://github.com/aws/aws-cdk/&quot;&gt;AWS CDK repo&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Issues with the &lt;a href=&quot;https://cdkworkshop.com/&quot;&gt;CDK Workshop&lt;/a&gt; should be &lt;a href=&quot;https://github.com/aws-samples/aws-cdk-intro-workshop/issues/new/choose&quot;&gt;filed&lt;/a&gt; against the &lt;a href=&quot;https://github.com/aws-samples/aws-cdk-intro-workshop&quot;&gt;CDK Workshop repo&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributor Grant of License&lt;/h2&gt; 
&lt;p&gt;By submitting a Pull Request against this repo, you grant Amazon the right to use use, modify, copy, and redistribute your contribution under any license we choose.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/b35b8cc41448fdeae8c868410e5867157eb9aa612f211142cb59739884156043/awsdocs/aws-cdk-guide" medium="image" />
      
    </item>
    
    <item>
      <title>AlDanial/cloc</title>
      <link>https://github.com/AlDanial/cloc</link>
      <description>&lt;p&gt;cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;cloc&lt;/h1&gt; 
&lt;p&gt;&lt;em&gt;Count Lines of Code&lt;/em&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.&lt;/p&gt; 
&lt;p&gt;Latest release: v2.10 (July 4, 2026)&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/AlDanial/cloc&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/version-2.10-blue.svg?sanitize=true&quot; alt=&quot;Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/AlDanial/cloc/graphs/contributors&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/AlDanial/cloc.svg?sanitize=true&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://doi.org/10.5281/zenodo.5760076&quot;&gt;&lt;img src=&quot;https://zenodo.org/badge/doi/10.5281/zenodo.5760076.svg?sanitize=true&quot; alt=&quot;DOI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/AlDanial/cloc/network/members&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/AlDanial/cloc.svg?sanitize=true&quot; alt=&quot;Forks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/AlDanial/cloc/total.svg?sanitize=true&quot; alt=&quot;Downloads&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc moved to GitHub in September 2015 after being hosted at &lt;a href=&quot;http://cloc.sourceforge.net/&quot;&gt;http://cloc.sourceforge.net/&lt;/a&gt; since August 2006.&lt;/p&gt; 
&lt;h1&gt;Quick Start&lt;/h1&gt; 
&lt;p&gt;Step 1: Install cloc (see &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#install-from-github-releases&quot;&gt;Install from Github Releases&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#install-via-package-manager&quot;&gt;Install via package manager&lt;/a&gt;) or run cloc&#39;s &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#run-via-docker&quot;&gt;docker image&lt;/a&gt;. The Windows executable has no requirements. The source version of cloc requires a Perl interpreter, and the Docker version of cloc requires a Docker installation.&lt;/p&gt; 
&lt;p&gt;Step 2: Open a terminal (&lt;code&gt;cmd.exe&lt;/code&gt; on Windows).&lt;/p&gt; 
&lt;p&gt;Step 3: Invoke cloc to count your source files, directories, archives, or git commits. The executable name differs depending on whether you use the development source version (&lt;code&gt;cloc&lt;/code&gt;), source for a released version (&lt;code&gt;cloc-2.10.pl&lt;/code&gt;) or a Windows executable (&lt;code&gt;cloc-2.10.exe&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;On this page, &lt;code&gt;cloc&lt;/code&gt; is the generic term used to refer to any of these.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/user/IncludeSecurity&quot;&gt;Include Security&lt;/a&gt; has a &lt;a href=&quot;https://www.youtube.com/watch?v=eRLTkDMsCqs&quot;&gt;YouTube video&lt;/a&gt; showing the steps in action.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;a file&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc hello.c
       1 text file.
       1 unique file.
       0 files ignored.

https://github.com/AlDanial/cloc v 1.65  T=0.04 s (28.3 files/s, 340.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                1              0              7              5
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;a directory&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc gcc-5.2.0/gcc/c
      16 text files.
      15 unique files.
       3 files ignored.

https://github.com/AlDanial/cloc v 1.65  T=0.23 s (57.1 files/s, 188914.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               10           4680           6621          30812
C/C++ Header                     3             99            286            496
-------------------------------------------------------------------------------
SUM:                            13           4779           6907          31308
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;an archive&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;We&#39;ll pull cloc&#39;s source zip file from GitHub, then count the contents:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; wget https://github.com/AlDanial/cloc/archive/master.zip

prompt&amp;gt; cloc master.zip
https://github.com/AlDanial/cloc v 1.65  T=0.07 s (26.8 files/s, 141370.3 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                             2            725           1103           8713
-------------------------------------------------------------------------------
SUM:                             2            725           1103           8713
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;a git repository, using a specific commit&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;This example uses code from &lt;a href=&quot;https://pypi.python.org/pypi/pudb&quot;&gt;PuDB&lt;/a&gt;, a fantastic Python debugger.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; git clone https://github.com/inducer/pudb.git

prompt&amp;gt; cd pudb

prompt&amp;gt; cloc 6be804e07a5db
      48 text files.
      41 unique files.                              
       8 files ignored.

github.com/AlDanial/cloc v 1.99  T=0.04 s (1054.9 files/s, 189646.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          28           1519            728           4659
reStructuredText                 6            102             20            203
YAML                             2              9              2             75
Bourne Shell                     3              6              0             17
Text                             1              0              0             11
make                             1              4              6             10
-------------------------------------------------------------------------------
SUM:                            41           1640            756           4975
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;each subdirectory of a particular directory&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Say you have a directory with three different git-managed projects, Project0, Project1, and Project2. You can use your shell&#39;s looping capability to count the code in each. This example uses bash (scroll down for cmd.exe example):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; for d in ./*/ ; do (cd &quot;$d&quot; &amp;amp;&amp;amp; echo &quot;$d&quot; &amp;amp;&amp;amp; cloc --vcs git); done
./Project0/
7 text files.
       7 unique files.
       1 file ignored.

github.com/AlDanial/cloc v 1.71  T=0.02 s (390.2 files/s, 25687.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
D                                4             61             32            251
Markdown                         1              9              0             38
make                             1              0              0              4
-------------------------------------------------------------------------------
SUM:                             6             70             32            293
-------------------------------------------------------------------------------
./Project1/
       7 text files.
       7 unique files.
       0 files ignored.

github.com/AlDanial/cloc v 1.71  T=0.02 s (293.0 files/s, 52107.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                               7            165            282            798
-------------------------------------------------------------------------------
SUM:                             7            165            282            798
-------------------------------------------------------------------------------
./Project2/
      49 text files.
      47 unique files.
      13 files ignored.

github.com/AlDanial/cloc v 1.71  T=0.10 s (399.5 files/s, 70409.4 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          33           1226           1026           3017
C                                4            327            337            888
Markdown                         1             11              0             28
YAML                             1              0              2             12
-------------------------------------------------------------------------------
SUM:                            39           1564           1365           3945
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;each subdirectory of a particular directory (Windows/cmd.exe)&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for /D %I in (.\*) do cd %I &amp;amp;&amp;amp; cloc --vcs git &amp;amp;&amp;amp; cd ..
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Sponsors&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/img/atlas_cloud_logo_black.svg?sanitize=true&quot; alt=&quot;Atlas Cloud&quot; width=&quot;30%&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.atlascloud.ai/?utm_source=github&amp;amp;utm_medium=link&amp;amp;utm_campaign=cloc&quot;&gt;Atlas Cloud&lt;/a&gt; is a full-modal AI inference platform that gives developers a single AI API to access video generation, image generation, and LLM APIs. Instead of managing multiple vendor integrations, you connect once and get unified access to 300+ curated models across all modalities.&lt;/p&gt; 
&lt;h1&gt;Overview&lt;/h1&gt; 
&lt;p&gt;cloc counts blank lines, comment lines, and physical lines of source code in &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#recognized-languages&quot;&gt;many programming languages&lt;/a&gt;. Given two versions of a code base, cloc can compute differences in blank, comment, and source lines. It is written entirely in Perl with no dependencies outside the standard distribution of Perl v5.6 and higher (code from some external modules is &lt;a href=&quot;https://github.com/AlDanial/cloc#regexp_common&quot;&gt;embedded within cloc&lt;/a&gt;) and so is quite portable. cloc is known to run on many flavors of Linux, FreeBSD, NetBSD, OpenBSD, macOS, AIX, HP-UX, Solaris, IRIX, z/OS, and Windows. (To run the Perl source version of cloc on Windows one needs &lt;a href=&quot;http://www.activestate.com/activeperl&quot;&gt;ActiveState Perl&lt;/a&gt; 5.6.1 or higher, &lt;a href=&quot;http://strawberryperl.com/&quot;&gt;Strawberry Perl&lt;/a&gt;, Windows Subsystem for Linux, &lt;a href=&quot;http://www.cygwin.com/&quot;&gt;Cygwin&lt;/a&gt;, &lt;a href=&quot;http://mobaxterm.mobatek.net/&quot;&gt;MobaXTerm&lt;/a&gt; with the Perl plug-in installed, or a mingw environment and terminal such as provided by &lt;a href=&quot;https://gitforwindows.org/&quot;&gt;Git for Windows&lt;/a&gt;. Alternatively one can use the Windows binary of cloc generated with &lt;a href=&quot;http://search.cpan.org/~rschupp/PAR-Packer-1.019/lib/pp.pm&quot;&gt;PAR::Packer&lt;/a&gt; to run on Windows computers that have neither Perl nor Cygwin.)&lt;/p&gt; 
&lt;p&gt;In addition to counting code in individual text files, directories, and git repositories, cloc can also count code in archive files such as &lt;code&gt;.tar&lt;/code&gt; (including compressed versions), &lt;code&gt;.zip&lt;/code&gt;, Python wheel &lt;code&gt;.whl&lt;/code&gt;, Jupyter notebook &lt;code&gt;.ipynb&lt;/code&gt;, source RPMs &lt;code&gt;.rpm&lt;/code&gt; or &lt;code&gt;.src&lt;/code&gt; (requires &lt;code&gt;rpm2cpio&lt;/code&gt;), and Debian &lt;code&gt;.deb&lt;/code&gt; files (requires &lt;code&gt;dpkg-deb&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;cloc contains code from David Wheeler&#39;s &lt;a href=&quot;http://www.dwheeler.com/sloccount/&quot;&gt;SLOCCount&lt;/a&gt;, Damian Conway and Abigail&#39;s Perl module &lt;a href=&quot;http://search.cpan.org/%7Eabigail/Regexp-Common-2.120/lib/Regexp/Common.pm&quot;&gt;Regexp::Common&lt;/a&gt;, Sean M. Burke&#39;s Perl module &lt;a href=&quot;http://search.cpan.org/%7Esburke/Win32-Autoglob-1.01/Autoglob.pm&quot;&gt;Win32::Autoglob&lt;/a&gt;, and Tye McQueen&#39;s Perl module &lt;a href=&quot;http://search.cpan.org/%7Etyemq/Algorithm-Diff-1.1902/lib/Algorithm/Diff.pm&quot;&gt;Algorithm::Diff&lt;/a&gt;. Language scale factors were derived from Mayes Consulting, LLC web site &lt;a href=&quot;http://softwareestimator.com/IndustryData2.htm&quot;&gt;http://softwareestimator.com/IndustryData2.htm&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;New releases nominally appear every six months.&lt;/p&gt; 
&lt;h2&gt;Install from Github Releases&lt;/h2&gt; 
&lt;p&gt;Grab the latest release of cloc from the &lt;a href=&quot;https://github.com/AlDanial/cloc/releases&quot;&gt;Releases section of this repository&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Source version on Linux/macOS&lt;/h3&gt; 
&lt;p&gt;Save the latest source file, for example &lt;code&gt;cloc-2.10.pl&lt;/code&gt;, as &lt;code&gt;cloc&lt;/code&gt; (if you prefer the shorter command name) somewhere on your &lt;code&gt;PATH&lt;/code&gt;. After downloading, make the file executable:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cd ~/Downloads
mv cloc-2.10.pl cloc
chmod a+rx cloc
./cloc --version     # make sure it runs
mv cloc ~/bin        # for example, if ~/bin is in $PATH
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Source version on Windows&lt;/h3&gt; 
&lt;p&gt;You&#39;ll need a Perl interpreter such as &lt;a href=&quot;http://strawberryperl.com/&quot;&gt;Strawberry Perl&lt;/a&gt; installed to run the source version of cloc. After downloading the cloc source file, open a command prompt or PowerShell window, navigate to the download directory (&lt;code&gt;C:\TEMP&lt;/code&gt; in the example below), then test cloc with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-dos&quot;&gt;cd C:\TEMP&amp;gt;
C:TEMP\&amp;gt; perl cloc-2.10.pl --version
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Binary version on Windows&lt;/h3&gt; 
&lt;p&gt;Download the latest released Windows executable, for example &lt;code&gt;cloc-2.10.exe&lt;/code&gt; and save it as &lt;code&gt;cloc.exe&lt;/code&gt; (if desired) in a directory on your &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;There is no binary version for Linux or macOS.&lt;/p&gt; 
&lt;h2&gt;Install via package manager&lt;/h2&gt; 
&lt;p&gt;Depending your operating system, one of these installation methods may work for you (all but the last two entries for Windows require a Perl interpreter):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install -g cloc              # https://www.npmjs.com/package/cloc
sudo apt install cloc            # Debian, Ubuntu
sudo yum install cloc            # Red Hat, Fedora
sudo dnf install cloc            # Fedora 22 or later
sudo pacman -S cloc              # Arch
yay -S cloc-git                  # Arch AUR (latest git version)
sudo emerge -av dev-util/cloc    # Gentoo https://packages.gentoo.org/packages/dev-util/cloc
sudo apk add cloc                # Alpine Linux
doas pkg_add cloc                # OpenBSD
sudo pkg install cloc            # FreeBSD
sudo port install cloc           # macOS with MacPorts
brew install cloc                # macOS with Homebrew
winget install AlDanial.Cloc     # Windows with winget (might not work, ref https://github.com/AlDanial/cloc/issues/849)
choco install cloc               # Windows with Chocolatey
scoop install cloc               # Windows with Scoop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I don&#39;t control any of these packages. If you encounter a bug in cloc using one of the above packages, try with cloc pulled from the latest stable release here on GitHub (link follows below) before submitting a problem report.&lt;/p&gt; 
&lt;h2&gt;Run via docker&lt;/h2&gt; 
&lt;p&gt;These docker commands count lines of code in and below the current directory:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;docker run --rm -v $PWD:/tmp aldanial/cloc .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Run via docker on git-bash&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;docker run --rm -v &quot;/$(pwd -W)&quot;:/tmp aldanial/cloc .
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Development version&lt;/h2&gt; 
&lt;p&gt;Download the cloc source code at &lt;a href=&quot;https://github.com/AlDanial/cloc/raw/master/cloc&quot;&gt;https://github.com/AlDanial/cloc/raw/master/cloc&lt;/a&gt; and save it as the file &lt;code&gt;cloc&lt;/code&gt; (or &lt;code&gt;cloc.pl&lt;/code&gt;, or whatever executable name you wish). The next step depends on the operating system you&#39;re using.&lt;/p&gt; 
&lt;h1&gt;License&lt;/h1&gt; 
&lt;p&gt;cloc is licensed under the &lt;a href=&quot;http://www.gnu.org/licenses/gpl-2.0.html&quot;&gt;GNU General Public License, v 2&lt;/a&gt;, excluding portions which are copied from other sources. Code copied from the Regexp::Common, Win32::Autoglob, and Algorithm::Diff Perl modules is subject to the &lt;a href=&quot;https://opensource.org/license/artistic-2-0&quot;&gt;Artistic License&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Why Use cloc?&lt;/h1&gt; 
&lt;p&gt;cloc has many features that make it easy to use, thorough, extensible, and portable:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Exists as a single, self-contained file that requires minimal installation effort---just download the file and run it.&lt;/li&gt; 
 &lt;li&gt;Can read language comment definitions from a file and thus potentially work with computer languages that do not yet exist.&lt;/li&gt; 
 &lt;li&gt;Allows results from multiple runs to be summed together by language and by project.&lt;/li&gt; 
 &lt;li&gt;Can produce results in a variety of formats: plain text, Markdown, SQL, JSON, XML, YAML, comma separated values.&lt;/li&gt; 
 &lt;li&gt;Can count code within compressed archives (tar balls, Zip files, Java .ear files).&lt;/li&gt; 
 &lt;li&gt;Has numerous troubleshooting options.&lt;/li&gt; 
 &lt;li&gt;Handles file and directory names with spaces and other unusual characters.&lt;/li&gt; 
 &lt;li&gt;Has no dependencies outside the standard Perl distribution.&lt;/li&gt; 
 &lt;li&gt;Runs on Linux, FreeBSD, NetBSD, OpenBSD, macOS, AIX, HP-UX, Solaris, IRIX, and z/OS systems that have Perl 5.6 or higher. The source version runs on Windows with either ActiveState Perl, Strawberry Perl, Cygwin, or MobaXTerm+Perl plugin. Alternatively on Windows one can run the Windows binary which has no dependencies.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;Other Counters&lt;/h1&gt; 
&lt;p&gt;If cloc does not suit your needs here are other freely available counters to consider:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/cgag/loc/&quot;&gt;loc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JoaoDanielRufino/gcloc&quot;&gt;gcloc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hhatto/gocloc/&quot;&gt;gocloc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/blackducksoftware/ohcount/&quot;&gt;Ohcount&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/boyter/scc/&quot;&gt;scc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://code.google.com/archive/p/sclc/&quot;&gt;sclc&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.dwheeler.com/sloccount/&quot;&gt;SLOCCount&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.sonarsource.org/&quot;&gt;Sonar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Aaronepower/tokei/&quot;&gt;tokei&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://csse.usc.edu/ucc_new/wordpress/&quot;&gt;Unified Code Count&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Other references:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;QSM&#39;s &lt;a href=&quot;http://www.qsm.com/CodeCounters.html&quot;&gt;directory&lt;/a&gt; of code counting tools.&lt;/li&gt; 
 &lt;li&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Source_lines_of_code&quot;&gt;Wikipedia entry&lt;/a&gt; for source code line counts.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Regexp::Common, Digest::MD5, Win32::Autoglob, Algorithm::Diff&lt;/h1&gt; 
&lt;p&gt;Although cloc does not need Perl modules outside those found in the standard distribution, cloc does rely on a few external modules. Code from three of these external modules--Regexp::Common, Win32::Autoglob, and Algorithm::Diff--is embedded within cloc. A fourth module, Digest::MD5, is used only if it is available. If cloc finds Regexp::Common or Algorithm::Diff installed locally it will use those installation. If it doesn&#39;t, cloc will install the parts of Regexp::Common and/or Algorithm:Diff it needs to temporary directories that are created at the start of a cloc run then removed when the run is complete. The necessary code from Regexp::Common v2.120 and Algorithm::Diff v1.1902 are embedded within the cloc source code (see subroutines &lt;code&gt;Install_Regexp_Common()&lt;/code&gt; and &lt;code&gt;Install_Algorithm_Diff()&lt;/code&gt; ). Only three lines are needed from Win32::Autoglob and these are included directly in cloc.&lt;/p&gt; 
&lt;p&gt;Additionally, cloc will use Digest::MD5 to validate uniqueness among equally-sized input files if Digest::MD5 is installed locally.&lt;/p&gt; 
&lt;p&gt;A parallel processing option, &lt;code&gt;--processes=*N*&lt;/code&gt;, was introduced with cloc version 1.76 to enable faster runs on multi-core machines. However, to use it, one must have the module Parallel::ForkManager installed. This module does not work reliably on Windows so parallel processing will only work on Unix-like operating systems.&lt;/p&gt; 
&lt;p&gt;The Windows binary is built on a computer that has both Regexp::Common and Digest::MD5 installed locally.&lt;/p&gt; 
&lt;h1&gt;Building a Windows Executable&lt;/h1&gt; 
&lt;h4&gt;Create your own executable&lt;/h4&gt; 
&lt;p&gt;The most robust option for creating a Windows executable of cloc is to use &lt;a href=&quot;http://www.activestate.com/perl-dev-kit&quot;&gt;ActiveState&#39;s Perl Development Kit&lt;/a&gt;. It includes a utility, &lt;code&gt;perlapp&lt;/code&gt;, which can build stand-alone Windows, Mac, and Linux binaries of Perl source code.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.indigostar.com/perl2exe/&quot;&gt;perl2exe&lt;/a&gt; will also do the trick. If you do have &lt;code&gt;perl2exe&lt;/code&gt;, modify lines 84-87 in the cloc source code for a minor code modification that is necessary to make a cloc Windows executable.&lt;/p&gt; 
&lt;p&gt;Otherwise, to build a Windows executable with &lt;code&gt;pp&lt;/code&gt; from &lt;code&gt;PAR::Packer&lt;/code&gt;, first install a Windows-based Perl distribution (for example Strawberry Perl or ActivePerl) following their instructions. Next, open a command prompt, aka a DOS window and install the PAR::Packer module. Finally, invoke the newly installed &lt;code&gt;pp&lt;/code&gt; command with the cloc source code to create an &lt;code&gt;.exe&lt;/code&gt; file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:&amp;gt; cpan -i Digest::MD5
C:&amp;gt; cpan -i Regexp::Common
C:&amp;gt; cpan -i Algorithm::Diff
C:&amp;gt; cpan -i PAR::Packer
C:&amp;gt; cpan -i Win32::LongPath
C:&amp;gt; pp -M Win32::LongPath -M Encode::Unicode -M Digest::MD5 -c -x -o cloc-2.10.exe cloc-2.10.pl
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A variation on the instructions above is if you installed the portable version of Strawberry Perl, you will need to run &lt;code&gt;portableshell.bat&lt;/code&gt; first to properly set up your environment.&lt;/p&gt; 
&lt;p&gt;The Windows executable in the Releases section, &lt;code&gt;cloc-2.10.exe&lt;/code&gt;, was built on a 64 bit Windows 11 computer using &lt;a href=&quot;http://strawberryperl.com/&quot;&gt;Strawberry Perl&lt;/a&gt; 5.32.1 and &lt;a href=&quot;http://search.cpan.org/~rschupp/PAR-Packer-1.064/lib/pp.pm&quot;&gt;PAR::Packer&lt;/a&gt; to build the &lt;code&gt;.exe&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Is the Windows executable safe to run? Does it have malware?&lt;/h4&gt; 
&lt;p&gt;Ideally, no one would need the Windows executable because they have a Perl interpreter installed on their machines and can run the cloc source file. On centrally-managed corporate Windows machines, however, this this may be difficult or impossible.&lt;/p&gt; 
&lt;p&gt;The Windows executable distributed with cloc is provided as a best-effort of a virus and malware-free &lt;code&gt;.exe&lt;/code&gt;. You are encouraged to run your own virus scanners against the executable and also check sites such &lt;a href=&quot;https://www.virustotal.com/&quot;&gt;https://www.virustotal.com/&lt;/a&gt; . The entries for recent versions are:&lt;/p&gt; 
&lt;p&gt;cloc-2.10.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/97786c4b5bb71d2be67e42061a2f5d03db73bbf88228f8710001d770e867bbef/detection&quot;&gt;https://www.virustotal.com/gui/file/97786c4b5bb71d2be67e42061a2f5d03db73bbf88228f8710001d770e867bbef/detection&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.08.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/4529557d957ade0dd45746eae10e9c51ee01061bb617eeeab256672faf6e42c6?nocache=1&quot;&gt;https://www.virustotal.com/gui/file/4529557d957ade0dd45746eae10e9c51ee01061bb617eeeab256672faf6e42c6?nocache=1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.06.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/bbe48de9102d0f2520d292d65897001c1d068340eb7cd74dd1ee30c1a9091c4a?nocache=1&quot;&gt;https://www.virustotal.com/gui/file/bbe48de9102d0f2520d292d65897001c1d068340eb7cd74dd1ee30c1a9091c4a?nocache=1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.04.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/89cda0038bf4e13c6c13ebc1e60bec4dfad362e69ac8a5b8e2d5ebe3020359e1&quot;&gt;https://www.virustotal.com/gui/file/89cda0038bf4e13c6c13ebc1e60bec4dfad362e69ac8a5b8e2d5ebe3020359e1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.02-winget.exe: (includes &lt;a href=&quot;https://github.com/AlDanial/cloc/pull/850&quot;&gt;PR 850&lt;/a&gt; to allow &lt;a href=&quot;https://github.com/AlDanial/cloc/issues/849&quot;&gt;running from a symlink on Windows&lt;/a&gt;) &lt;a href=&quot;https://www.virustotal.com/gui/file/be033061e091fea48a5bc9e8964cee0416ddd5b34bd5226a1c9aa4b30bdba66a?nocache=1&quot;&gt;https://www.virustotal.com/gui/file/be033061e091fea48a5bc9e8964cee0416ddd5b34bd5226a1c9aa4b30bdba66a?nocache=1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.02.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/369ed76125f7399cd582d169adf39a2e08ae5066031fea0cc8b2836ea50e7ce2?nocache=1&quot;&gt;https://www.virustotal.com/gui/file/369ed76125f7399cd582d169adf39a2e08ae5066031fea0cc8b2836ea50e7ce2?nocache=1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;cloc-2.00.exe: &lt;a href=&quot;https://www.virustotal.com/gui/file/7a234ef0cb495de1b5776acf88c5554e2bab1fb02725a5fb85756a6db3121c1f&quot;&gt;https://www.virustotal.com/gui/file/7a234ef0cb495de1b5776acf88c5554e2bab1fb02725a5fb85756a6db3121c1f&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Why is the Windows executable so large?&lt;/h4&gt; 
&lt;p&gt;Windows executables of cloc versions 1.60 and earlier, created with perl2exe as noted above, are about 1.6 MB, while versions 1.62 and 1.54, created with &lt;code&gt;PAR::Packer&lt;/code&gt;, are 11 MB. Version 1.66, built with a newer version of &lt;code&gt;PAR::Packer&lt;/code&gt;, is about 5.5 MB. Why are the &lt;code&gt;PAR::Packer&lt;/code&gt;, executables so much larger than those built with perl2exe? My theory is that perl2exe uses smarter tree pruning logic than &lt;code&gt;PAR::Packer&lt;/code&gt;, but that&#39;s pure speculation.&lt;/p&gt; 
&lt;h1&gt;Basic Use&lt;/h1&gt; 
&lt;p&gt;cloc is a command line program that takes file, directory, and/or archive names as inputs. Here&#39;s an example of running cloc against the Perl v5.22.0 source distribution:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc perl-5.22.0.tar.gz
    5605 text files.
    5386 unique files.
    2176 files ignored.

https://github.com/AlDanial/cloc v 1.65  T=25.49 s (134.7 files/s, 51980.3 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
Perl                              2892         136396         184362         536445
C                                  130          24676          33684         155648
C/C++ Header                       148           9766          16569         147858
Bourne Shell                       112           4044           6796          42668
Pascal                               8            458           1603           8592
XML                                 33            142              0           2410
YAML                                49             20             15           2078
C++                                 10            313            277           2033
make                                 4            426            488           1986
Prolog                              12            438              2           1146
JSON                                14              1              0           1037
yacc                                 1             85             76            998
Windows Message File                 1            102             11            489
DOS Batch                           14             92             41            389
Windows Resource File                3             10              0             85
D                                    1              5              7              8
Lisp                                 2              0              3              4
-----------------------------------------------------------------------------------
SUM:                              3434         176974         243934         903874
-----------------------------------------------------------------------------------

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To run cloc on Windows computers, open up a command (aka DOS) window and invoke cloc.exe from the command line there. Alternatively, try ClocViewer, the GUI wrapper around cloc found at &lt;a href=&quot;https://github.com/Roemer/ClocViewer&quot;&gt;https://github.com/Roemer/ClocViewer&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;See also &lt;a href=&quot;https://github.com/jmensch1/codeflower&quot;&gt;https://github.com/jmensch1/codeflower&lt;/a&gt; for a graphical rendering of cloc results.&lt;/p&gt; 
&lt;h1&gt;GUI Frontends&lt;/h1&gt; 
&lt;p&gt;Several GUI frontends to cloc are available:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/edward-jazzhands/cloctui&quot;&gt;cloctui&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Roemer/ClocViewer&quot;&gt;ClocViewer&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jmensch1/codeflower&quot;&gt;codeflower&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mlgzackfly/cloc-studio&quot;&gt;cloc-studio&lt;/a&gt; (for macOS)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Options&lt;/h1&gt; 
&lt;details&gt; 
 &lt;summary&gt;Full options list (&lt;code&gt;cloc --help&lt;/code&gt;) (click the triangle to see all option)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc --help

Usage: cloc [options] &amp;lt;file(s)/dir(s)/git hash(es)&amp;gt; | &amp;lt;set 1&amp;gt; &amp;lt;set 2&amp;gt; | &amp;lt;report files&amp;gt;

 Count, or compute differences of, physical lines of source code in the
 given files (may be archives such as compressed tarballs or zip files,
 or git commit hashes or branch names) and/or recursively below the
 given directories.

 Input Options
   --extract-with=&amp;lt;cmd&amp;gt;      This option is only needed if cloc is unable
                             to figure out how to extract the contents of
                             the input file(s) by itself.
                             Use &amp;lt;cmd&amp;gt; to extract binary archive files (e.g.:
                             .tar.gz, .zip, .Z).  Use the literal &#39;&amp;gt;FILE&amp;lt;&#39; as
                             a stand-in for the actual file(s) to be
                             extracted.  For example, to count lines of code
                             in the input files
                                gcc-4.2.tar.gz  perl-5.8.8.tar.gz
                             on Unix use
                               --extract-with=&#39;gzip -dc &amp;gt;FILE&amp;lt; | tar xf -&#39;
                             or, if you have GNU tar,
                               --extract-with=&#39;tar zxf &amp;gt;FILE&amp;lt;&#39;
                             and on Windows use, for example:
                               --extract-with=&quot;\&quot;c:\Program Files\WinZip\WinZip32.exe\&quot; -e -o &amp;gt;FILE&amp;lt; .&quot;
                             (if WinZip is installed there).
   --list-file=&amp;lt;file&amp;gt;        Take the list of file and/or directory names to
                             process from &amp;lt;file&amp;gt;, which has one file/directory
                             name per line.  Only exact matches are counted;
                             relative path names will be resolved starting from
                             the directory where cloc is invoked.  Set &amp;lt;file&amp;gt;
                             to - to read file names from a STDIN pipe.
                             See also --exclude-list-file.
   --diff-list-file=&amp;lt;file&amp;gt;   Take the pairs of file names to be diff&#39;ed from
                             &amp;lt;file&amp;gt;, whose format matches the output of
                             --diff-alignment.  (Run with that option to
                             see a sample.)  The language identifier at the
                             end of each line is ignored.  This enables --diff
                             mode and bypasses file pair alignment logic.
   --vcs=&amp;lt;VCS&amp;gt;               Invoke a system call to &amp;lt;VCS&amp;gt; to obtain a list of
                             files to work on.  If &amp;lt;VCS&amp;gt; is &#39;git&#39;, then will
                             invoke &#39;git ls-files&#39; to get a file list and
                             &#39;git submodule status&#39; to get a list of submodules
                             whose contents will be ignored.  See also --git
                             which accepts git commit hashes and branch names.
                             If &amp;lt;VCS&amp;gt; is &#39;svn&#39; then will invoke &#39;svn list -R&#39;.
                             The primary benefit is that cloc will then skip
                             files explicitly excluded by the versioning tool
                             in question, ie, those in .gitignore or have the
                             svn:ignore property.
                             Alternatively &amp;lt;VCS&amp;gt; may be any system command
                             that generates a list of files.
                             Note:  cloc must be in a directory which can read
                             the files as they are returned by &amp;lt;VCS&amp;gt;.  cloc will
                             not download files from remote repositories.
                             &#39;svn list -R&#39; may refer to a remote repository
                             to obtain file names (and therefore may require
                             authentication to the remote repository), but
                             the files themselves must be local.
                             Setting &amp;lt;VCS&amp;gt; to &#39;auto&#39; selects between &#39;git&#39;
                             and &#39;svn&#39; (or neither) depending on the presence
                             of a .git or .svn subdirectory below the directory
                             where cloc is invoked.  --files-from is a synonym
                             for --vcs.
   --unicode                 Check binary files to see if they contain Unicode
                             expanded ASCII text.  This causes performance to
                             drop noticeably.

 Processing Options
   --autoconf                Count .in files (as processed by GNU autoconf) of
                             recognized languages.  See also --no-autogen.
   --by-file                 Report results for every source file encountered.
   --by-file-by-lang         Report results for every source file encountered
                             in addition to reporting by language.
   --config &amp;lt;file&amp;gt;           Read command line switches from &amp;lt;file&amp;gt; instead of
                             the default location of /home/al/.config/cloc/options.txt.
                             The file should contain one switch, along with
                             arguments (if any), per line.  Blank lines and lines
                             beginning with &#39;#&#39; are skipped.  Options given on
                             the command line take priority over entries read from
                             the file.
   --count-and-diff &amp;lt;set1&amp;gt; &amp;lt;set2&amp;gt;
                             First perform direct code counts of source file(s)
                             of &amp;lt;set1&amp;gt; and &amp;lt;set2&amp;gt; separately, then perform a diff
                             of these.  Inputs may be pairs of files, directories,
                             or archives.  If --out or --report-file is given,
                             three output files will be created, one for each
                             of the two counts and one for the diff.  See also
                             --diff, --diff-alignment, --diff-timeout,
                             --ignore-case, --ignore-whitespace.
   --diff &amp;lt;set1&amp;gt; &amp;lt;set2&amp;gt;      Compute differences in code and comments between
                             source file(s) of &amp;lt;set1&amp;gt; and &amp;lt;set2&amp;gt;.  The inputs
                             may be any mix of files, directories, archives,
                             or git commit hashes.  Use --diff-alignment to
                             generate a list showing which file pairs where
                             compared.  When comparing git branches, only files
                             which have changed in either commit are compared.
                             See also --git, --count-and-diff, --diff-alignment,
                             --diff-list-file, --diff-timeout, --ignore-case,
                             --ignore-whitespace.
   --diff-timeout &amp;lt;N&amp;gt;        Ignore files which take more than &amp;lt;N&amp;gt; seconds
                             to process.  Default is 10 seconds.  Setting &amp;lt;N&amp;gt;
                             to 0 allows unlimited time.  (Large files with many
                             repeated lines can cause Algorithm::Diff::sdiff()
                             to take hours.) See also --timeout.
   --docstring-as-code       cloc considers docstrings to be comments, but this is
                             not always correct as docstrings represent regular
                             strings when they appear on the right hand side of an
                             assignment or as function arguments.  This switch
                             forces docstrings to be counted as code.
   --follow-links            [Unix only] Follow symbolic links to directories
                             (sym links to files are always followed).
                             See also --stat.
   --force-lang=&amp;lt;lang&amp;gt;[,&amp;lt;ext&amp;gt;]
                             Process all files that have a &amp;lt;ext&amp;gt; extension
                             with the counter for language &amp;lt;lang&amp;gt;.  For
                             example, to count all .f files with the
                             Fortran 90 counter (which expects files to
                             end with .f90) instead of the default Fortran 77
                             counter, use
                               --force-lang=&quot;Fortran 90,f&quot;
                             If &amp;lt;ext&amp;gt; is omitted, every file will be counted
                             with the &amp;lt;lang&amp;gt; counter.  This option can be
                             specified multiple times (but that is only
                             useful when &amp;lt;ext&amp;gt; is given each time).
                             See also --script-lang, --lang-no-ext.
   --force-lang-def=&amp;lt;file&amp;gt;   Load language processing filters from &amp;lt;file&amp;gt;,
                             then use these filters instead of the built-in
                             filters.  Note:  languages which map to the same
                             file extension (for example:
                             MATLAB/Mathematica/Objective-C/MUMPS/Mercury;
                             Pascal/PHP; Lisp/OpenCL; Lisp/Julia; Perl/Prolog)
                             will be ignored as these require additional
                             processing that is not expressed in language
                             definition files.  Use --read-lang-def to define
                             new language filters without replacing built-in
                             filters (see also --write-lang-def,
                             --write-lang-def-incl-dup).
   --git                     Forces the inputs to be interpreted as git targets
                             (commit hashes, branch names, et cetera) if these
                             are not first identified as file or directory
                             names.  This option overrides the --vcs=git logic
                             if this is given; in other words, --git gets its
                             list of files to work on directly from git using
                             the hash or branch name rather than from
                             &#39;git ls-files&#39;.  This option can be used with
                             --diff to perform line count diffs between git
                             commits, or between a git commit and a file,
                             directory, or archive.  Use -v/--verbose to see
                             the git system commands cloc issues.
   --git-diff-rel            Same as --git --diff, or just --diff if the inputs
                             are recognized as git targets.  Only files which
                             have changed in either commit are compared.
   --git-diff-all            Git diff strategy #2:  compare all files in the
                             repository between the two commits.
   --ignore-whitespace       Ignore horizontal white space when comparing files
                             with --diff.  See also --ignore-case.
   --ignore-case             Ignore changes in case within file contents;
                             consider upper- and lowercase letters equivalent
                             when comparing files with --diff.  See also
                             --ignore-whitespace.
   --ignore-case-ext         Ignore case of file name extensions.  This will
                             cause problems counting some languages
                             (specifically, .c and .C are associated with C and
                             C++; this switch would count .C files as C rather
                             than C++ on *nix operating systems).  File name
                             case insensitivity is always true on Windows.
   --lang-no-ext=&amp;lt;lang&amp;gt;      Count files without extensions using the &amp;lt;lang&amp;gt;
                             counter.  This option overrides internal logic
                             for files without extensions (where such files
                             are checked against known scripting languages
                             by examining the first line for #!).  See also
                             --force-lang, --script-lang.
   --max-file-size=&amp;lt;MB&amp;gt;      Skip files larger than &amp;lt;MB&amp;gt; megabytes when
                             traversing directories.  By default, &amp;lt;MB&amp;gt;=100.
                             cloc&#39;s memory requirement is roughly twenty times
                             larger than the largest file so running with
                             files larger than 100 MB on a computer with less
                             than 2 GB of memory will cause problems.
                             Note:  this check does not apply to files
                             explicitly passed as command line arguments.
   --no-autogen[=list]       Ignore files generated by code-production systems
                             such as GNU autoconf.  To see a list of these files
                             (then exit), run with --no-autogen list
                             See also --autoconf.
   --original-dir            [Only effective in combination with
                             --strip-comments]  Write the stripped files
                             to the same directory as the original files.
   --read-binary-files       Process binary files in addition to text files.
                             This is usually a bad idea and should only be
                             attempted with text files that have embedded
                             binary data.
   --read-lang-def=&amp;lt;file&amp;gt;    Load new language processing filters from &amp;lt;file&amp;gt;
                             and merge them with those already known to cloc.
                             If &amp;lt;file&amp;gt; defines a language cloc already knows
                             about, cloc&#39;s definition will take precedence.
                             Use --force-lang-def to over-ride cloc&#39;s
                             definitions (see also --write-lang-def,
                             --write-lang-def-incl-dup).
   --script-lang=&amp;lt;lang&amp;gt;,&amp;lt;s&amp;gt;  Process all files that invoke &amp;lt;s&amp;gt; as a #!
                             scripting language with the counter for language
                             &amp;lt;lang&amp;gt;.  For example, files that begin with
                                #!/usr/local/bin/perl5.8.8
                             will be counted with the Perl counter by using
                                --script-lang=Perl,perl5.8.8
                             The language name is case insensitive but the
                             name of the script language executable, &amp;lt;s&amp;gt;,
                             must have the right case.  This option can be
                             specified multiple times.  See also --force-lang,
                             --lang-no-ext.
   --sdir=&amp;lt;dir&amp;gt;              Use &amp;lt;dir&amp;gt; as the scratch directory instead of
                             letting File::Temp chose the location.  Files
                             written to this location are not removed at
                             the end of the run (as they are with File::Temp).
   --skip-uniqueness         Skip the file uniqueness check.  This will give
                             a performance boost at the expense of counting
                             files with identical contents multiple times
                             (if such duplicates exist).
   --stat                    Some file systems (AFS, CD-ROM, FAT, HPFS, SMB)
                             do not have directory &#39;nlink&#39; counts that match
                             the number of its subdirectories.  Consequently
                             cloc may undercount or completely skip the
                             contents of such file systems.  This switch forces
                             File::Find to stat directories to obtain the
                             correct count.  File search speed will decrease.
                             See also --follow-links.
   --stdin-name=&amp;lt;file&amp;gt;       Give a file name to use to determine the language
                             for standard input.  (Use - as the input name to
                             receive source code via STDIN.)
   --strip-comments=&amp;lt;ext&amp;gt;    For each file processed, write to the current
                             directory a version of the file which has blank
                             and commented lines removed (in-line comments
                             persist).  The name of each stripped file is the
                             original file name with .&amp;lt;ext&amp;gt; appended to it.
                             It is written to the current directory unless
                             --original-dir is on.
   --strip-str-comments      Replace comment markers embedded in strings with
                             &#39;xx&#39;.  This attempts to work around a limitation
                             in Regexp::Common::Comment where comment markers
                             embedded in strings are seen as actual comment
                             markers and not strings, often resulting in a
                             &#39;Complex regular subexpression recursion limit&#39;
                             warning and incorrect counts.  There are two
                             disadvantages to using this switch:  1/code count
                             performance drops, and 2/code generated with
                             --strip-comments will contain different strings
                             where ever embedded comments are found.
   --sum-reports             Input arguments are report files previously
                             created with the --report-file option in plain
                             format (eg. not JSON, YAML, XML, or SQL).
                             Makes a cumulative set of results containing the
                             sum of data from the individual report files.
   --timeout &amp;lt;N&amp;gt;             Ignore files which take more than &amp;lt;N&amp;gt; seconds
                             to process at any of the language&#39;s filter stages.
                             The default maximum number of seconds spent on a
                             filter stage is the number of lines in the file
                             divided by one thousand.  Setting &amp;lt;N&amp;gt; to 0 allows
                             unlimited time.  See also --diff-timeout.
   --processes=NUM           [Available only on systems with a recent version
                             of the Parallel::ForkManager module.  Not
                             available on Windows.] Sets the maximum number of
                             cores that cloc uses.  The default value of 0
                             disables multiprocessing.
   --unix                    Override the operating system autodetection
                             logic and run in UNIX mode.  See also
                             --windows, --show-os.
   --use-sloccount           If SLOCCount is installed, use its compiled
                             executables c_count, java_count, pascal_count,
                             php_count, and xml_count instead of cloc&#39;s
                             counters.  SLOCCount&#39;s compiled counters are
                             substantially faster than cloc&#39;s and may give
                             a performance improvement when counting projects
                             with large files.  However, these cloc-specific
                             features will not be available: --diff,
                             --count-and-diff, --strip-comments, --unicode.
   --windows                 Override the operating system autodetection
                             logic and run in Microsoft Windows mode.
                             See also --unix, --show-os.

 Filter Options
   --include-content=&amp;lt;regex&amp;gt; Only count files containing text that matches the
                             given regular expression.
   --exclude-content=&amp;lt;regex&amp;gt; Exclude files containing text that matches the given
                             regular expression.
   --exclude-dir=&amp;lt;D1&amp;gt;[,D2,]  Exclude the given comma separated directories
                             D1, D2, D3, et cetera, from being scanned.  For
                             example --exclude-dir=.cache,test will skip
                             all files and subdirectories that have /.cache/
                             or /test/ as their parent directory.
                             Directories named .bzr, .cvs, .hg, .git, .svn,
                             and .snapshot are always excluded.
                             This option only works with individual directory
                             names so including file path separators is not
                             allowed.  Use --fullpath and --not-match-d=&amp;lt;regex&amp;gt;
                             to supply a regex matching multiple subdirectories.
   --exclude-ext=&amp;lt;ext1&amp;gt;[,&amp;lt;ext2&amp;gt;[...]]
                             Do not count files having the given file name
                             extensions.
   --exclude-lang=&amp;lt;L1&amp;gt;[,L2[...]]
                             Exclude the given comma separated languages
                             L1, L2, L3, et cetera, from being counted.
   --exclude-list-file=&amp;lt;file&amp;gt;  Ignore files and/or directories whose names
                             appear in &amp;lt;file&amp;gt;.  &amp;lt;file&amp;gt; should have one file
                             name per line.  Only exact matches are ignored;
                             relative path names will be resolved starting from
                             the directory where cloc is invoked.
                             See also --list-file.
   --fullpath                Modifies the behavior of --match-f, --not-match-f,
                             and --not-match-d to include the file&#39;s path
                             in the regex, not just the file&#39;s basename.
                             (This does not expand each file to include its
                             absolute path, instead it uses as much of
                             the path as is passed in to cloc.)
                             Note:  --match-d always looks at the full
                             path and therefore is unaffected by --fullpath.
   --include-ext=&amp;lt;ext1&amp;gt;[,ext2[...]]
                             Count only languages having the given comma
                             separated file extensions.  Use --show-ext to
                             see the recognized extensions.
   --include-lang=&amp;lt;L1&amp;gt;[,L2[...]]
                             Count only the given comma separated languages
                             L1, L2, L3, et cetera.  Use --show-lang to see
                             the list of recognized languages.
   --match-d=&amp;lt;regex&amp;gt;         Only count files in directories matching the Perl
                             regex.  For example
                               --match-d=&#39;/(src|include)/&#39;
                             only counts files in directories containing
                             /src/ or /include/.  Unlike --not-match-d,
                             --match-f, and --not-match-f, --match-d always
                             compares the fully qualified path against the
                             regex.
   --not-match-d=&amp;lt;regex&amp;gt;     Count all files except those in directories
                             matching the Perl regex.  Only the trailing
                             directory name is compared, for example, when
                             counting in /usr/local/lib, only &#39;lib&#39; is
                             compared to the regex.
                             Add --fullpath to compare parent directories to
                             the regex.
                             Do not include file path separators at the
                             beginning or end of the regex.
   --match-f=&amp;lt;regex&amp;gt;         Only count files whose basenames match the Perl
                             regex.  For example
                               --match-f=&#39;^[Ww]idget&#39;
                             only counts files that start with Widget or widget.
                             Add --fullpath to include parent directories
                             in the regex instead of just the basename.
   --not-match-f=&amp;lt;regex&amp;gt;     Count all files except those whose basenames
                             match the Perl regex.  Add --fullpath to include
                             parent directories in the regex instead of just
                             the basename.
   --skip-archive=&amp;lt;regex&amp;gt;    Ignore files that end with the given Perl regular
                             expression.  For example, if given
                               --skip-archive=&#39;(zip|tar(.(gz|Z|bz2|xz|7z))?)&#39;
                             the code will skip files that end with .zip,
                             .tar, .tar.gz, .tar.Z, .tar.bz2, .tar.xz, and
                             .tar.7z.
   --skip-win-hidden         On Windows, ignore hidden files.

 Debug Options
   --categorized=&amp;lt;file&amp;gt;      Save file sizes in bytes, identified languages
                             and names of categorized files to &amp;lt;file&amp;gt;.
   --counted=&amp;lt;file&amp;gt;          Save names of processed source files to &amp;lt;file&amp;gt;.
   --diff-alignment=&amp;lt;file&amp;gt;   Write to &amp;lt;file&amp;gt; a list of files and file pairs
                             showing which files were added, removed, and/or
                             compared during a run with --diff.  This switch
                             forces the --diff mode on.
   --explain=&amp;lt;lang&amp;gt;          Print the filters used to remove comments for
                             language &amp;lt;lang&amp;gt; and exit.  In some cases the
                             filters refer to Perl subroutines rather than
                             regular expressions.  An examination of the
                             source code may be needed for further explanation.
   --help                    Print this usage information and exit.
   --found=&amp;lt;file&amp;gt;            Save names of every file found to &amp;lt;file&amp;gt;.
   --ignored=&amp;lt;file&amp;gt;          Save names of ignored files and the reason they
                             were ignored to &amp;lt;file&amp;gt;.
   --print-filter-stages     Print processed source code before and after
                             each filter is applied.
   --show-ext[=&amp;lt;ext&amp;gt;]        Print information about all known (or just the
                             given) file extensions and exit.
   --show-lang[=&amp;lt;lang&amp;gt;]      Print information about all known (or just the
                             given) languages and exit.
   --show-os                 Print the value of the operating system mode
                             and exit.  See also --unix, --windows.
   -v[=&amp;lt;n&amp;gt;]                  Verbose switch (optional numeric value).
   -verbose[=&amp;lt;n&amp;gt;]            Long form of -v.
   --version                 Print the version of this program and exit.
   --write-lang-def=&amp;lt;file&amp;gt;   Writes to &amp;lt;file&amp;gt; the language processing filters
                             then exits.  Useful as a first step to creating
                             custom language definitions. Note: languages which
                             map to the same file extension will be excluded.
                             (See also --force-lang-def, --read-lang-def).
   --write-lang-def-incl-dup=&amp;lt;file&amp;gt;
                             Same as --write-lang-def, but includes duplicated
                             extensions.  This generates a problematic language
                             definition file because cloc will refuse to use
                             it until duplicates are removed.

 Output Options
   --3                       Print third-generation language output.
                             (This option can cause report summation to fail
                             if some reports were produced with this option
                             while others were produced without it.)
   --by-percent  X           Instead of comment and blank line counts, show
                             these values as percentages based on the value
                             of X in the denominator:
                                X = &#39;c&#39;   -&amp;gt; # lines of code
                                X = &#39;cm&#39;  -&amp;gt; # lines of code + comments
                                X = &#39;cb&#39;  -&amp;gt; # lines of code + blanks
                                X = &#39;cmb&#39; -&amp;gt; # lines of code + comments + blanks
                             For example, if using method &#39;c&#39; and your code
                             has twice as many lines of comments as lines
                             of code, the value in the comment column will
                             be 200%.  The code column remains a line count.
   --csv                     Write the results as comma separated values.
   --csv-delimiter=&amp;lt;C&amp;gt;       Use the character &amp;lt;C&amp;gt; as the delimiter for comma
                             separated files instead of ,.  This switch forces --csv to be on.
   --file-encoding=&amp;lt;E&amp;gt;       Write output files using the &amp;lt;E&amp;gt; encoding instead of
                             the default ASCII (&amp;lt;E&amp;gt; = &#39;UTF-7&#39;).  Examples: &#39;UTF-16&#39;,
                             &#39;euc-kr&#39;, &#39;iso-8859-16&#39;.  Known encodings can be
                             printed with
                               perl -MEncode -e &#39;print join(&quot;\n&quot;, Encode-&amp;gt;encodings(&quot;:all&quot;)), &quot;\n&quot;&#39;
   --hide-rate               Do not show line and file processing rates in the
                             output header. This makes output deterministic.
   --json                    Write the results as JavaScript Object Notation
                             (JSON) formatted output.
   --md                      Write the results as Markdown-formatted text.
   --out=&amp;lt;file&amp;gt;              Synonym for --report-file=&amp;lt;file&amp;gt;.
   --percent                 Show counts as percentages of sums for each column.
                             Same as &#39;--by-percent t&#39;.
   --progress-rate=&amp;lt;n&amp;gt;       Show progress update after every &amp;lt;n&amp;gt; files are
                             processed (default &amp;lt;n&amp;gt;=100).  Set &amp;lt;n&amp;gt; to 0 to
                             suppress progress output (useful when redirecting
                             output to STDOUT).
   --quiet                   Suppress all information messages except for
                             the final report.
   --report-file=&amp;lt;file&amp;gt;      Write the results to &amp;lt;file&amp;gt; instead of STDOUT.
   --sql=&amp;lt;file&amp;gt;              Write results as SQL create and insert statements
                             which can be read by a database program such as
                             SQLite.  If &amp;lt;file&amp;gt; is -, output is sent to STDOUT.
   --sql-append              Append SQL insert statements to the file specified
                             by --sql and do not generate table creation
                             statements.  Only valid with the --sql option.
   --sql-project=&amp;lt;name&amp;gt;      Use &amp;lt;name&amp;gt; as the project identifier for the
                             current run.  Only valid with the --sql option.
   --sql-style=&amp;lt;style&amp;gt;       Write SQL statements in the given style instead
                             of the default SQLite format.  Styles include
                             &#39;Oracle&#39; and &#39;Named_Columns&#39;.
   --sum-one                 For plain text reports, show the SUM: output line
                             even if only one input file is processed.
   --thousands-delimiter=&amp;lt;C&amp;gt; Divides numbers with many digits (i.e. numbers
                             over 999) into groups using the character &amp;lt;C&amp;gt; as
                             delimiter (e.g. for &amp;lt;C&amp;gt; = &#39;.&#39;: 12345 -&amp;gt; 12.345).
                             Only works with the &#39;--fmt&#39; option.
                             Sample values: &#39;.&#39;, &#39;,&#39;, &#39;_&#39;, &#39; &#39;
                             Synonym:  --ksep
   --xml                     Write the results in XML.
   --xsl=&amp;lt;file&amp;gt;              Reference &amp;lt;file&amp;gt; as an XSL stylesheet within
                             the XML output.  If &amp;lt;file&amp;gt; is 1 (numeric one),
                             writes a default stylesheet, cloc.xsl (or
                             cloc-diff.xsl if --diff is also given).
                             This switch forces --xml on.
   --yaml                    Write the results in YAML.
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h1&gt;Recognized Languages&lt;/h1&gt; 
&lt;details&gt; 
 &lt;summary&gt;Full language list (&lt;code&gt;cloc --show-lang&lt;/code&gt;) (click the triangle to see all languages)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc --show-lang

Language                   Extension(s)
--------------------       ----------------------------------------
ABAP                       (abap)
ActionScript               (as)
Activiti Business Process  (bpmn)
Ada                        (ada, adb, ads, pad)
ADSO/IDSM                  (adso)
Agda                       (agda, lagda)
AL                         (al)
AMPLE                      (ample, dofile, startup)
AnsProlog                  (lp)
Ant                        (build.xml, build.xml)
ANTLR Grammar              (g, g4)
Apex Class                 (cls)
Apex Trigger               (trigger)
APL                        (apl, apla, aplc, aplf, apli, apln, aplo, dyalog, dyapp, mipage)
AppleScript                (applescript)
Arduino Sketch             (ino)
Aria                       (aria)
ArkTs                      (ets)
Arturo                     (art)
AsciiDoc                   (adoc, asciidoc)
ASP                        (asa, ashx, asp, axd)
ASP.NET                    (asax, ascx, asmx, aspx, master, sitemap, webinfo)
AspectJ                    (aj)
Assembly                   (a51, asm, nasm, S, s)
Astro                      (astro)
Asymptote                  (asy)
AutoHotkey                 (ahk, ahkl)
awk                        (auk, awk, gawk, mawk, nawk)
AXAML                      (axaml)
Bazel                      (BUILD)
Beluga                     (bel)
Bicep                      (bicep, bicepparam)
BitBake                    (bb, bbappend, bbclass)
BizTalk Orchestration      (odx)
BizTalk Pipeline           (btp)
Blade                      (blade, blade.php)
Blueprint                  (blp)
Bourne Again Shell         (bash)
Bourne Shell               (sh)
BrightScript               (brs)
builder                    (xml.builder)
C                          (c, cats, ec, idc, pgc)
C Shell                    (csh, tcsh)
C#                         (cs)
C# Designer                (designer.cs)
C++                        (C, c++, c++m, cc, ccm, CPP, cpp, cppm, cxx, cxxm, h++, inl, ipp, ixx, pcc, tcc, tpp)
C/C++ Header               (H, h, hh, hpp, hxx)
C3                         (c3, c3i, c3t)
Cadence                    (cdc)
Cairo                      (cairo)
Cake Build Script          (cake)
Cangjie                    (cj)
Carbon                     (carbon)
CCS                        (ccs)
Chapel                     (chpl)
Circom                     (circom)
Civet                      (civet, cvt, cvtx)
Clarity                    (clar)
Clean                      (dcl, icl)
Clojure                    (boot, cl2, clj, cljs.hl, cljscm, cljx, hic, riemann.config, cj)
ClojureC                   (cljc)
ClojureScript              (cljs)
CMake                      (cmake, cmake.in, CMakeLists.txt)
COBOL                      (CBL, cbl, ccp, COB, cob, cobol, cpy)
CoCoA 5                    (c5, cocoa5, cocoa5server, cpkg5)
CodeQL                     (ql, qll)
CoffeeScript               (_coffee, cakefile, cjsx, coffee, iced)
ColdFusion                 (cfm, cfml)
ColdFusion CFScript        (cfc)
Constraint Grammar         (cg3, rlx)
Containerfile              (Containerfile)
Coq                        (v)
Crystal                    (cr)
CSON                       (cson)
CSS                        (css)
CSV                        (csv)
Cucumber                   (feature)
CUDA                       (cu, cuh)
Cython                     (pxd, pxi, pyx)
D                          (d)
Dafny                      (dfy)
DAL                        (da)
DAML                       (daml)
Dart                       (dart)
Delphi Form                (dfm)
DenizenScript              (dsc)
Derw                       (derw)
dhall                      (dhall)
DIET                       (dt)
diff                       (diff, patch)
DITA                       (dita)
Dockerfile                 (Dockerfile, dockerfile)
DOORS Extension Language   (dxl)
DOS Batch                  (BAT, bat, BTM, btm, CMD, cmd)
Drools                     (drl)
DTD                        (dtd)
dtrace                     (d)
ECPP                       (ecpp)
EEx                        (eex)
EJS                        (ejs)
Elixir                     (ex)
Elixir Script              (exs)
Elm                        (elm)
Embedded Crystal           (ecr)
ERB                        (ERB, erb)
Erlang                     (app.src, emakefile, erl, hrl, rebar.config, rebar.config.lock, rebar.lock, xrl, yrl)
Expect                     (exp)
F#                         (fsi, fs, fs)
F# Script                  (fsx)
Fennel                     (fnl)
Finite State Language      (fsl, jssm)
Fish Shell                 (fish)
Flatbuffers                (fbs)
Focus                      (focexec)
Forth                      (4th, e4, f83, fb, forth, fpm, fr, frt, ft, fth, rx, fs, f, for)
Fortran 2003               (F03, f03)
Fortran 77                 (F, F77, f77, FOR, FTN, ftn, pfo, f, for)
Fortran 90                 (F90, f90)
Fortran 95                 (F95, f95)
Freemarker Template        (ftl)
Futhark                    (fut)
FXML                       (fxml)
GDScript                   (gd)
Gencat NLS                 (msg)
Glade                      (glade, ui)
Gleam                      (gleam)
Glimmer JavaScript         (gjs)
Glimmer TypeScript         (gts)
GLSL                       (comp, fp, frag, frg, fsh, fshader, geo, geom, glsl, glslv, gshader, tesc, tese,
                            vert, vrx, vsh, vshader)
Go                         (go, ʕ◔ϖ◔ʔ)
Godot Resource             (tres)
Godot Scene                (tscn)
Godot Shaders              (gdshader)
Gradle                     (gradle, gradle.kts)
Grails                     (gsp)
GraphQL                    (gql, graphql, graphqls)
Groovy                     (gant, groovy, grt, gtpl, gvy, jenkinsfile)
Haml                       (haml, haml.deface)
Handlebars                 (handlebars, hbs)
Harbour                    (hb)
Hare                       (ha)
Haskell                    (hs, hsc, lhs)
Haskell Boot               (hs-boot, lhs-boot)
Haxe                       (hx, hxsl)
HCL                        (hcl, nomad, tf, tfvars)
Hibernate                  (hbm.xml)
HLSL                       (cg, cginc, fxh, hlsl, hlsli, shader)
HolyC                      (HC)
Hoon                       (hoon)
HTML                       (htm, html, html.hl, xht)
HTML EEx                   (heex)
IDL                        (dlm, idl, pro)
Idris                      (idr)
Igor Pro                   (ipf)
Imba                       (imba)
INI                        (buildozer.spec, editorconfig, ini, lektorproject, prefs)
InstallShield              (ism)
IPL                        (ipl)
Jai                        (jai)
Janet                      (janet)
Jasper Report XML/Template (jrxml)
Java                       (java)
JavaScript                 (_js, bones, cjs, es6, jake, jakefile, js, jsb, jscad, jsfl, jsm, jss, mjs,
                            njs, pac, sjs, ssjs, xsjs, xsjslib)
JavaServer Faces           (jsf)
JCL                        (jcl)
Jinja Template             (j2, jinja, jinja2)
JSON                       (arcconfig, avsc, composer.lock, geojson, gltf, har, htmlhintrc, json,
                            json-tmlanguage, jsonl, mcmeta, mcmod.info, tern-config, tern-project, tfstate,
                            tfstate.backup, topojson, watchmanconfig, webapp, webmanifest, yyp)
JSON5                      (json5)
Jsonnet                    (jsonnet)
JSP                        (jsp, jspf)
JSP Tag Library Definition (tld)
JSX                        (jsx)
Julia                      (jl)
Juniper Junos              (junos)
Jupyter Notebook           (ipynb)
Justfile                   (just)
Kermit                     (ksc)
Korn Shell                 (ksh)
Kotlin                     (kt, ktm, kts)
kvlang                     (kv)
Lean                       (hlean, lean)
Lem                        (lem)
LESS                       (less)
lex                        (l, lex)
LFE                        (lfe)
Linker Script              (ld)
Liquibase                  (lb.xml)
liquid                     (liquid)
Lisp                       (asd, el, lisp, lsp, cl, jl)
Literate Idris             (lidr)
LiveLink OScript           (oscript)
LLVM IR                    (ll)
Logos                      (x, xm)
Logtalk                    (lgt, logtalk)
Lua                        (lua, nse, p8, pd_lua, rbxs, wlua)
Luau                       (luau)
m4                         (ac, m4)
Magik                      (magik)
make                       (am, Gnumakefile, gnumakefile, Makefile, makefile, mk)
Mako                       (mako, mao)
Markdown                   (contents.lr, markdown, md, mdown, mdwn, mdx, mkd, mkdn, mkdown, ronn, workbook)
Mathematica                (cdf, ma, mathematica, mt, nbp, wl, wlt, m)
MATLAB                     (m)
Maven                      (pom, pom.xml)
Meson                      (meson.build)
Metal                      (metal)
Modelica                   (mo)
Modula3                    (i3, ig, m3, mg)
Mojo                       (mojo, 🔥)
Mojom                      (mojom)
MoonBit                    (mbt, mbti, mbtx, mbty)
MSBuild script             (btproj, csproj, msbuild, vcproj, wdproj, wixproj)
MUMPS                      (mps, m)
Mustache                   (mustache)
MXML                       (mxml)
NAnt script                (build)
NASTRAN DMAP               (dmap)
Nemerle                    (n)
NetLogo                    (nlogo, nls)
Nextflow                   (nf)
Nickel                     (ncl)
Nim                        (nim, nim.cfg, nimble, nimrod, nims)
Nix                        (nix)
Nunjucks                   (njk)
Nushell                    (nu)
Nushell Object Notation    (nuon)
Objective-C                (m)
Objective-C++              (mm)
OCaml                      (eliom, eliomi, ml, ml4, mli, mll, mly)
Odin                       (odin)
OpenCL                     (cl)
OpenSCAD                   (scad)
Oracle Forms               (fmt)
Oracle PL/SQL              (bdy, bod, fnc, prc, spc, trg)
Oracle Reports             (rex)
Org Mode                   (org)
P4                         (p4)
Pascal                     (dpr, lpr, pas, pascal)
Pascal/Pawn                (p)
Pascal/Puppet              (pp)
Patran Command Language    (pcl, ses)
Pawn                       (pawn, pwn)
PEG                        (peg)
peg.js                     (pegjs)
peggy                      (peggy)
Pek                        (pek)
Perl                       (ack, cpanfile, makefile.pl, perl, ph, plh, plx, pm, psgi, rexfile, al, pl, p6)
Pest                       (pest)
PHP                        (aw, ctp, phakefile, php, php3, php4, php5, php_cs, php_cs.dist, phps, phpt, phtml)
PHP/Pascal/Fortran/Pawn/BitBake/Assembly (inc)
Pig Latin                  (pig)
Pkl                        (pkl)
PL/I                       (pl1)
PL/M                       (lit, plm)
PlantUML                   (iuml, plantuml, pu, puml, wsd)
PO File                    (po)
Pony                       (pony)
PowerBuilder               (pbt, sra, srf, srm, srs, sru, srw)
PowerShell                 (ps1, psd1, psm1)
Prisma Schema              (prisma)
Processing                 (pde)
ProGuard                   (pro)
Prolog                     (P, prolog, yap, pl, p6, pro)
Properties                 (properties)
Protocol Buffers           (proto)
PRQL                       (prql)
Pug                        (jade, pug)
PureScript                 (purs)
Python                     (buck, build.bazel, gclient, gyp, gypi, lmi, py, py3, pyde, pyi, pyp, pyt, pyw,
                            sconscript, sconstruct, snakefile, tac, workspace, wsgi, xpy)
QML                        (qbs, qml)
Qt Linguist                (ts)
Qt Project                 (pro)
Quxlang                    (qxs)
R                          (expr-dist, R, r, rd, rprofile, rsx)
Racket                     (rkt, rktd, rktl, scrbl)
Raku                       (pm6, raku, rakumod)
Raku/Prolog                (P6, p6)
RAML                       (raml)
RapydScript                (pyj)
Razor                      (cshtml, razor)
ReasonML                   (re, rei)
Rego                       (rego)
ReScript                   (res, resi)
reStructuredText           (rest, rest.txt, rst, rst.txt)
Rexx                       (pprx, rexx)
Rhai                       (rhai)
Ring                       (rform, rh, ring)
Rmd                        (Rmd)
RobotFramework             (robot)
Ruby                       (appraisals, berksfile, brewfile, builder, buildfile, capfile, dangerfile,
                            deliverfile, eye, fastfile, gemfile, gemfile.lock, gemspec, god, guardfile,
                            irbrc, jarfile, jbuilder, mavenfile, mspec, podfile, podspec, pryrc,
                            puppetfile, rabl, rake, rb, rbuild, rbw, rbx, ru, snapfile, thor, thorfile,
                            vagrantfile, watchr)
Ruby HTML                  (rhtml)
Rust                       (rs, rs.in)
SaltStack                  (sls)
SAS                        (sas)
Sass                       (sass)
Scala                      (kojo, sbt, scala)
Scheme                     (sc, sch, scm, sld, sps, ss, sls)
SCSS                       (scss)
sed                        (sed)
Sema                       (sema)
SKILL++                    (ils)
SKILL/.NET IL              (il)
Slang                      (slang)
Slice                      (ice)
Slim                       (slim)
Slint                      (slint)
Smalltalk                  (st, cs)
Smarty                     (smarty, tpl)
Snakemake                  (rules, smk)
Softbridge Basic           (SBL, sbl)
Solidity                   (sol)
SparForte                  (sp)
Specman e                  (e)
SQL                        (cql, mysql, psql, SQL, sql, tab, udf, viw)
SQL Data                   (data.sql)
SQL Stored Procedure       (spc.sql, spoc.sql, sproc.sql, udf.sql)
Squirrel                   (nut)
Standard ML                (fun, sig, sml)
Starlark                   (bazel, bzl)
Stata                      (ado, DO, do, doh, ihlp, mata, matah, sthlp)
Stylus                     (styl)
SugarSS                    (sss)
SurrealQL                  (surql)
Svelte                     (svelte)
SVG                        (SVG, svg)
Swift                      (swift)
SWIG                       (i)
TableGen                   (td)
Tcl/Tk                     (itk, tcl, tk)
TEAL                       (teal)
Teamcenter met             (met)
Teamcenter mth             (mth)
Templ                      (templ)
TeX                        (aux, bbx, bib, bst, cbx, dtx, ins, lbx, ltx, mkii, mkiv, mkvi, sty, tex, cls)
Text                       (text, txt)
Thrift                     (thrift)
TITAN Project File Information (tpd)
Titanium Style Sheet       (tss)
TLA+                       (tla)
TNSDL                      (cii, cin, in1, in2, in3, in4, inf, interface, rou, sdl, sdt, spd, ssc, sst)
TOML                       (toml)
tspeg                      (jspeg, tspeg)
TTCN                       (ttcn, ttcn2, ttcn3, ttcnpp)
Twig                       (twig)
TypeScript                 (cts, mts, tsx, ts)
Typst                      (typ)
Umka                       (um)
Unity-Prefab               (mat, prefab)
Unknown/BitBake            (conf)
USS                        (uss)
UXML                       (uxml)
Vala                       (vala)
Vala Header                (vapi)
VBA                        (VBA, vba)
VBScript                   (VBS, vbs)
Velocity Template Language (vm)
Verilog-SystemVerilog      (sv, svh, v)
VHDL                       (VHD, vhd, VHDL, vhdl, vhf, vhi, vho, vhs, vht, vhw)
vim script                 (vim)
Visual Basic               (BAS, bas, ctl, Dsr, dsr, frm, FRX, frx, vbp, vbw, cls)
Visual Basic .NET          (VB, vb, VBHTML, vbhtml, vbproj)
Visual Fox Pro             (SCA, sca)
Visual Studio Solution     (sln)
Visualforce Component      (component)
Visualforce Page           (page)
VSCode Workspace           (code-workspace)
Vuejs Component            (vue)
Vyper                      (vy)
Web Services Description   (wsdl)
WebAssembly                (wast, wat)
WGSL                       (wgsl)
Windows Message File       (mc)
Windows Module Definition  (def)
Windows Resource File      (rc, rc2)
WiX include                (wxi)
WiX source                 (wxs)
WiX string localization    (wxl)
WXML                       (wxml)
WXSS                       (wxss)
X++                        (xpo)
XAML                       (xaml)
xBase                      (prg, prw)
xBase Header               (ch)
XHTML                      (xhtml)
XMI                        (XMI, xmi)
XML                        (adml, admx, ant, app.config, axml, builds, ccproj, ccxml, classpath,
                            clixml, cproject, cscfg, csdef, csl, ct, depproj, ditamap, ditaval,
                            dll.config, dotsettings, filters, fsproj, gmx, grxml, iml, ivy, jelly,
                            jsproj, kml, launch, mdpolicy, mjml, natvis, ndproj, nproj, nuget.config,
                            nuspec, odd, osm, packages.config, pkgproj, plist, proj, project, props,
                            ps1xml, psc1, pt, rdf, resx, rss, scxml, settings.stylecop, sfproj,
                            shproj, srdf, storyboard, sttheme, sublime-snippet, targets, tmcommand,
                            tml, tmlanguage, tmpreferences, tmsnippet, tmtheme, urdf, ux, vcxproj,
                            vsixmanifest, vssettings, vstemplate, vxml, web.config, web.debug.config,
                            web.release.config, wsf, x3d, xacro, xib, xlf, xliff, XML, xml, xml.dist,
                            xproj, xspec, xul, zcml)
XML-Qt-GTK                 (ui)
XQuery                     (xq, xql, xqm, xquery, xqy)
XSD                        (XSD, xsd)
XSLT                       (XSL, xsl, XSLT, xslt)
Xtend                      (xtend)
yacc                       (y, yacc)
YAML                       (clang-format, clang-tidy, gemrc, glide.lock, mir, reek, rviz, sublime-syntax,
                            syntax, yaml, yaml-tmlanguage, yml, yml.mysql)
Yang                       (yang)
Yarn                       (yarn)
Zig                        (zig)
zsh                        (zsh)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;The above list can be customized by reading language definitions from a file with the &lt;code&gt;--read-lang-def&lt;/code&gt; or &lt;code&gt;--force-lang-def&lt;/code&gt; options.&lt;/p&gt; 
&lt;p&gt;These file extensions map to multiple languages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;cj&lt;/code&gt; files could be Clojure or Cangjie&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cl&lt;/code&gt; files could be Lisp or OpenCL&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cls&lt;/code&gt; files could be Visual Basic, TeX or Apex Class&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;conf&lt;/code&gt; files could be BitBake or plain text&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cs&lt;/code&gt; files could be C# or Smalltalk&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;d&lt;/code&gt; files could be D or dtrace&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;f&lt;/code&gt; files could be Fortran 77 or Forth&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fnc&lt;/code&gt; files could be Oracle PL or SQL&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;for&lt;/code&gt; files could be Fortran 77 or Forth&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fs&lt;/code&gt; files could be F# or Forth&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;inc&lt;/code&gt; files could be PHP, Pascal, Fortran, Pawn, BitBake or Assembly&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;itk&lt;/code&gt; files could be Tcl or Tk&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;jl&lt;/code&gt; files could be Lisp or Julia&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lit&lt;/code&gt; files could be PL or M&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;m&lt;/code&gt; files could be MATLAB, Mathematica, Objective-C, MUMPS or Mercury&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;p6&lt;/code&gt; files could be Perl or Prolog&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pl&lt;/code&gt; files could be Perl or Prolog&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;PL&lt;/code&gt; files could be Perl or Prolog&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pp&lt;/code&gt; files could be Pascal or Puppet&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pro&lt;/code&gt; files could be IDL, Qt Project, Prolog or ProGuard&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ts&lt;/code&gt; files could be TypeScript or Qt Linguist&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ui&lt;/code&gt; files could be Qt or Glade&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;v&lt;/code&gt; files could be Verilog-SystemVerilog or Coq&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;cloc has subroutines that attempt to identify the correct language based on the file&#39;s contents for these special cases. Language identification accuracy is a function of how much code the file contains; .m files with just one or two lines for example, seldom have enough information to correctly distinguish between MATLAB, Mercury, MUMPS, or Objective-C.&lt;/p&gt; 
&lt;p&gt;Languages with file extension collisions are difficult to customize with &lt;code&gt;--read-lang-def&lt;/code&gt; or &lt;code&gt;--force-lang-def&lt;/code&gt; as they have no mechanism to identify languages with common extensions. In this situation one must modify the cloc source code.&lt;/p&gt; 
&lt;h1&gt;How It Works&lt;/h1&gt; 
&lt;p&gt;cloc&#39;s method of operation resembles SLOCCount&#39;s: First, create a list of files to consider. Next, attempt to determine whether or not found files contain recognized computer language source code. Finally, for files identified as source files, invoke language-specific routines to count the number of source lines.&lt;/p&gt; 
&lt;p&gt;A more detailed description:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;If the input file is an archive (such as a .tar.gz or .zip file), create a temporary directory and expand the archive there using a system call to an appropriate underlying utility (tar, bzip2, unzip, etc) then add this temporary directory as one of the inputs. (This works more reliably on Unix than on Windows.)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Use File::Find to recursively descend the input directories and make a list of candidate file names. Ignore binary and zero-sized files.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Make sure the files in the candidate list have unique contents (first by comparing file sizes, then, for similarly sized files, compare MD5 hashes of the file contents with Digest::MD5). For each set of identical files, remove all but the first copy, as determined by a lexical sort, of identical files from the set. The removed files are not included in the report. (The &lt;code&gt;--skip-uniqueness&lt;/code&gt; switch disables the uniqueness tests and forces all copies of files to be included in the report.) See also the &lt;code&gt;--ignored=&lt;/code&gt; switch to see which files were ignored and why.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Scan the candidate file list for file extensions which cloc associates with programming languages (see the &lt;code&gt;--show-lang&lt;/code&gt; and &lt;code&gt;--show-ext&lt;/code&gt; options). Files which match are classified as containing source code for that language. Each file without an extension is opened and its first line read to see if it is a Unix shell script (anything that begins with #!). If it is shell script, the file is classified by that scripting language (if the language is recognized). If the file does not have a recognized extension or is not a recognized scripting language, the file is ignored.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;All remaining files in the candidate list should now be source files for known programming languages. For each of these files:&lt;/p&gt; 
  &lt;ol&gt; 
   &lt;li&gt;Read the entire file into memory.&lt;/li&gt; 
   &lt;li&gt;Count the number of lines (= L&lt;sub&gt;original&lt;/sub&gt;).&lt;/li&gt; 
   &lt;li&gt;Remove blank lines, then count again (= L&lt;sub&gt;non_blank&lt;/sub&gt;).&lt;/li&gt; 
   &lt;li&gt;Loop over the comment filters defined for this language. (For example, C++ has two filters: (1) remove lines that start with optional whitespace followed by // and (2) remove text between /* and */) Apply each filter to the code to remove comments. Count the left over lines (= L&lt;sub&gt;code&lt;/sub&gt;).&lt;/li&gt; 
   &lt;li&gt;Save the counts for this language: 
    &lt;ul&gt; 
     &lt;li&gt;blank lines = L&lt;sub&gt;original&lt;/sub&gt; - L&lt;sub&gt;non_blank&lt;/sub&gt;&lt;/li&gt; 
     &lt;li&gt;comment lines = L&lt;sub&gt;non_blank&lt;/sub&gt; - L&lt;sub&gt;code&lt;/sub&gt;&lt;/li&gt; 
     &lt;li&gt;code lines = L&lt;sub&gt;code&lt;/sub&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ol&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The options modify the algorithm slightly. The &lt;code&gt;--read-lang-def&lt;/code&gt; option for example allows the user to read definitions of comment filters, known file extensions, and known scripting languages from a file. The code for this option is processed between Steps 2 and 3.&lt;/p&gt; 
&lt;h1&gt;Advanced Use&lt;/h1&gt; 
&lt;h2&gt;Remove Comments from Source Code&lt;/h2&gt; 
&lt;p&gt;How can you tell if cloc correctly identifies comments? One way to convince yourself cloc is doing the right thing is to use its &lt;code&gt;--strip-comments&lt;/code&gt; option to remove comments and blank lines from files, then compare the stripped-down files to originals.&lt;/p&gt; 
&lt;p&gt;Let&#39;s try this out with the SQLite amalgamation, a C file containing all code needed to build the SQLite library along with a header file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; tar zxf sqlite-amalgamation-3.5.6.tar.gz
prompt&amp;gt; cd sqlite-3.5.6/
prompt&amp;gt; cloc --strip-comments=nc sqlite.c
       1 text file.
       1 unique file.
Wrote sqlite3.c.nc
       0 files ignored.

http://cloc.sourceforge.net v 1.03  T=1.0 s (1.0 files/s, 82895.0 lines/s)
-------------------------------------------------------------------------------
Language          files     blank   comment      code    scale   3rd gen. equiv
-------------------------------------------------------------------------------
C                     1      5167     26827     50901 x   0.77 =       39193.77
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The extension argument given to --strip-comments is arbitrary; here nc was used as an abbreviation for &quot;no comments&quot;.&lt;/p&gt; 
&lt;p&gt;cloc removed over 31,000 lines from the file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; wc -l sqlite3.c sqlite3.c.nc
  82895 sqlite3.c
  50901 sqlite3.c.nc
 133796 total
prompt&amp;gt; echo &quot;82895 - 50901&quot; | bc
31994
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;We can now compare the original file, sqlite3.c and the one stripped of comments, &lt;a href=&quot;http://sqlite3.c.nc&quot;&gt;sqlite3.c.nc&lt;/a&gt; with tools like diff or vimdiff and see what exactly cloc considered comments and blank lines. A rigorous proof that the stripped-down file contains the same C code as the original is to compile these files and compare checksums of the resulting object files.&lt;/p&gt; 
&lt;p&gt;First, the original source file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; gcc -c sqlite3.c
prompt&amp;gt; md5sum sqlite3.o
cce5f1a2ea27c7e44b2e1047e2588b49  sqlite3.o
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Next, the version without comments:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; mv sqlite3.c.nc sqlite3.c
prompt&amp;gt; gcc -c sqlite3.c
prompt&amp;gt; md5sum sqlite3.o
cce5f1a2ea27c7e44b2e1047e2588b49  sqlite3.o
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;cloc removed over 31,000 lines of comments and blanks but did not modify the source code in any significant way since the resulting object file matches the original.&lt;/p&gt; 
&lt;h2&gt;Work with Compressed Archives&lt;/h2&gt; 
&lt;p&gt;Versions of cloc before v1.07 required an &lt;code&gt;--extract-with=CMD&lt;/code&gt; option to tell cloc how to expand an archive file. Beginning with v1.07 this is extraction is attempted automatically. At the moment the automatic extraction method works reasonably well on Unix-type OS&#39;s for the following file types: &lt;code&gt;.deb&lt;/code&gt;. &lt;code&gt;.ear&lt;/code&gt;, &lt;code&gt;.gem&lt;/code&gt;, &lt;code&gt;.tar.bz2&lt;/code&gt;, &lt;code&gt;.tar.gz&lt;/code&gt;, &lt;code&gt;.tar.xz&lt;/code&gt;, &lt;code&gt;.tgz&lt;/code&gt;, &lt;code&gt;.zip&lt;/code&gt;, Some of these extensions work on Windows if one has WinZip installed in the default location (&lt;code&gt;C:\Program Files\WinZip\WinZip32.exe&lt;/code&gt;). Additionally, with newer versions of WinZip, the [&lt;a href=&quot;http://www.winzip.com/downcl.htm&quot;&gt;http://www.winzip.com/downcl.htm&lt;/a&gt;](command line add-on) is needed for correct operation; in this case one would invoke cloc with something like&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; --extract-with=&quot;\&quot;c:\Program Files\WinZip\wzunzip\&quot; -e -o &amp;gt;FILE&amp;lt; .&quot;
 &amp;lt;/code&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Ref. &lt;a href=&quot;http://sourceforge.net/projects/cloc/forums/forum/600963/topic/4021070?message=8938196&quot;&gt;http://sourceforge.net/projects/cloc/forums/forum/600963/topic/4021070?message=8938196&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;In situations where the automatic extraction fails, one can try the &lt;code&gt;--extract-with=CMD&lt;/code&gt; option to count lines of code within tar files, Zip files, or other compressed archives for which one has an extraction tool. cloc takes the user-provided extraction command and expands the archive to a temporary directory (created with File::Temp), counts the lines of code in the temporary directory, then removes that directory. While not especially helpful when dealing with a single compressed archive (after all, if you&#39;re going to type the extraction command anyway why not just manually expand the archive?) this option is handy for working with several archives at once.&lt;/p&gt; 
&lt;p&gt;For example, say you have the following source tarballs on a Unix machine&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;perl-5.8.5.tar.gz
Python-2.4.2.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and you want to count all the code within them. The command would be&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --extract-with=&#39;gzip -dc &amp;gt;FILE&amp;lt; | tar xf -&#39; perl-5.8.5.tar.gz Python-2.4.2.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If that Unix machine has GNU tar (which can uncompress and extract in one step) the command can be shortened to&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --extract-with=&#39;tar zxf &amp;gt;FILE&amp;lt;&#39; perl-5.8.5.tar.gz Python-2.4.2.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;On a Windows computer with WinZip installed in &lt;code&gt;c:\Program Files\WinZip&lt;/code&gt; the command would look like&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc.exe --extract-with=&quot;\&quot;c:\Program Files\WinZip\WinZip32.exe\&quot; -e -o &amp;gt;FILE&amp;lt; .&quot; perl-5.8.5.tar.gz Python-2.4.2.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Java &lt;code&gt;.ear&lt;/code&gt; files are Zip files that contain additional Zip files. cloc can handle nested compressed archives without difficulty--provided all such files are compressed and archived in the same way. Examples of counting a Java &lt;code&gt;.ear&lt;/code&gt; file in Unix and Windows:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --extract-with=&quot;unzip -d . &amp;gt;FILE&amp;lt; &quot; Project.ear
DOS&amp;gt; cloc.exe --extract-with=&quot;\&quot;c:\Program Files\WinZip\WinZip32.exe\&quot; -e -o &amp;gt;FILE&amp;lt; .&quot; Project.ear
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Differences&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;--diff&lt;/code&gt; switch allows one to measure the relative change in source code and comments between two versions of a file, directory, or archive. Differences reveal much more than absolute code counts of two file versions. For example, say a source file has 100 lines and its developer delivers a newer version with 102 lines. Did the developer add two comment lines, or delete seventeen source lines and add fourteen source lines and five comment lines, or did the developer do a complete rewrite, discarding all 100 original lines and adding 102 lines of all new source? The diff option tells how many lines of source were added, removed, modified or stayed the same, and how many lines of comments were added, removed, modified or stayed the same.&lt;/p&gt; 
&lt;p&gt;Differences in blank lines are handled much more coarsely because these are stripped by cloc early on. Unless a file pair is identical, cloc will report only differences in absolute counts of blank lines. In other words, one can expect to see only entries for &#39;added&#39; if the second file has more blanks than the first, and &#39;removed&#39; if the situation is reversed. The entry for &#39;same&#39; will be non-zero only when the two files are identical.&lt;/p&gt; 
&lt;p&gt;In addition to file pairs, one can give cloc pairs of directories, or pairs of file archives, or a file archive and a directory. cloc will try to align file pairs within the directories or archives and compare diffs for each pair. For example, to see what changed between GCC 4.4.0 and 4.5.0 one could do&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --diff gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Be prepared to wait a while for the results though; the &lt;code&gt;--diff&lt;/code&gt; option runs much more slowly than an absolute code count.&lt;/p&gt; 
&lt;p&gt;To see how cloc aligns files between the two archives, use the &lt;code&gt;--diff-alignment&lt;/code&gt; option&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --diff-alignment=align.txt gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;to produce the file &lt;code&gt;align.txt&lt;/code&gt; which shows the file pairs as well as files added and deleted. The symbols &lt;code&gt;==&lt;/code&gt; and &lt;code&gt;!=&lt;/code&gt; before each file pair indicate if the files are identical (&lt;code&gt;==&lt;/code&gt;) or if they have different content (&lt;code&gt;!=&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;Here&#39;s sample output showing the difference between the Python 2.6.6 and 2.7 releases:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; cloc --diff Python-2.7.9.tgz Python-2.7.10.tar.xz
    4315 text files.
    4313 text files.s
    2173 files ignored.

4 errors:
Diff error, exceeded timeout:  /tmp/8ToGAnB9Y1/Python-2.7.9/Mac/Modules/qt/_Qtmodule.c
Diff error, exceeded timeout:  /tmp/M6ldvsGaoq/Python-2.7.10/Mac/Modules/qt/_Qtmodule.c
Diff error (quoted comments?):  /tmp/8ToGAnB9Y1/Python-2.7.9/Mac/Modules/qd/qdsupport.py
Diff error (quoted comments?):  /tmp/M6ldvsGaoq/Python-2.7.10/Mac/Modules/qd/qdsupport.py

https://github.com/AlDanial/cloc v 1.65  T=298.59 s (0.0 files/s, 0.0 lines/s)
-----------------------------------------------------------------------------
Language                   files          blank        comment           code
-----------------------------------------------------------------------------
Visual Basic
 same                          2              0              1             12
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
make
 same                         11              0            340           2952
 modified                      1              0              0              1
 added                         0              0              0              0
 removed                       0              0              0              0
diff
 same                          1              0             87            105
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
CSS
 same                          0              0             19            327
 modified                      1              0              0              1
 added                         0              0              0              0
 removed                       0              0              0              0
Objective-C
 same                          7              0             61            635
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
NAnt script
 same                          2              0              0             30
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
XML
 same                          3              0              2             72
 modified                      1              0              0              1
 added                         0              0              0              1
 removed                       0              1              0              0
Windows Resource File
 same                          3              0             56            206
 modified                      1              0              0              1
 added                         0              0              0              0
 removed                       0              0              0              0
Expect
 same                          6              0            161            565
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
HTML
 same                         14              0             11           2344
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
vim script
 same                          1              0              7            106
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
C++
 same                          2              0             18            128
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
Windows Module Definition
 same                          7              0            187           2080
 modified                      2              0              0              0
 added                         0              0              0              1
 removed                       0              1              0              2
Prolog
 same                          1              0              0             24
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
Javascript
 same                          3              0             49            229
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
Assembly
 same                         51              0           6794          12298
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
Bourne Shell
 same                         41              0           7698          45024
 modified                      1              0              0              3
 added                         0             13              2             64
 removed                       0              0              0              0
DOS Batch
 same                         29              0            107            494
 modified                      1              0              0              9
 added                         0              1              0              3
 removed                       0              0              0              0
MSBuild script
 same                         77              0              3          38910
 modified                      0              0              0              0
 added                         0              0              0              0
 removed                       0              0              0              0
Python
 same                       1947              0         109012         430335
 modified                    192              0             94            950
 added                         2            323            283           2532
 removed                       2             55             58            646
m4
 same                         18              0            191          15352
 modified                      1              0              0              2
 added                         1             31              0            205
 removed                       0              0              0              0
C
 same                        505              0          37439         347837
 modified                     45              0             13            218
 added                         0             90             33            795
 removed                       0              9              2            148
C/C++ Header
 same                        255              0          10361          66635
 modified                      5              0              5              7
 added                         0              1              3            300
 removed                       0              0              0              0
---------------------------------------------------------------------
SUM:
 same                       2986              0         172604         966700
 modified                    251              0            112           1193
 added                         3            459            321           3901
 removed                       2             66             60            796
---------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A pair of errors occurred. The first pair was caused by timing out when computing diffs of the file &lt;code&gt;Python-X/Mac/Modules/qt/_Qtmodule.c&lt;/code&gt; in each Python version. This file has &amp;gt; 26,000 lines of C code and takes more than 10 seconds--the default maximum duration for diff&#39;ing a single file--on my slow computer. (Note: this refers to performing differences with the &lt;code&gt;sdiff()&lt;/code&gt; function in the Perl &lt;code&gt;Algorithm::Diff&lt;/code&gt; module, not the command line &lt;code&gt;diff&lt;/code&gt; utility.) This error can be overcome by raising the time to, say, 20 seconds with &lt;code&gt;--diff-timeout 20&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The second error is more problematic. The files &lt;code&gt;Python-X/Mac/Modules/qd/qdsupport.py&lt;/code&gt; include Python docstring (text between pairs of triple quotes) containing C comments. cloc treats docstrings as comments and handles them by first converting them to C comments, then using the C comment removing regular expression. Nested C comments yield erroneous results however.&lt;/p&gt; 
&lt;h2&gt;Create Custom Language Definitions&lt;/h2&gt; 
&lt;p&gt;cloc can write its language comment definitions to a file or can read comment definitions from a file, overriding the built-in definitions. This can be useful when you want to use cloc to count lines of a language not yet included, to change association of file extensions to languages, or to modify the way existing languages are counted.&lt;/p&gt; 
&lt;p&gt;The easiest way to create a custom language definition file is to make cloc write its definitions to a file, then modify that file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --write-lang-def=my_definitions.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;creates the file &lt;code&gt;my_definitions.txt&lt;/code&gt; which can be modified then read back in with either the &lt;code&gt;--read-lang-def&lt;/code&gt; or &lt;code&gt;--force-lang-def&lt;/code&gt; option. The difference between the options is former merges language definitions from the given file in with cloc&#39;s internal definitions with cloc&#39;s taking precedence if there are overlaps. The &lt;code&gt;--force-lang-def&lt;/code&gt; option, on the other hand, replaces cloc&#39;s definitions completely. This option has a disadvantage in preventing cloc from counting &lt;a class=&quot;u&quot; href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#extcollision&quot; name=&quot;extcollision&quot;&gt; languages whose extensions map to multiple languages &lt;/a&gt; as these languages require additional logic that is not easily expressed in a definitions file.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --read-lang-def=my_definitions.txt  file1 file2 dir1 ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Each language entry has four parts:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The language name starting in column 1.&lt;/li&gt; 
 &lt;li&gt;One or more comment &lt;em&gt;filters&lt;/em&gt; starting in column 5.&lt;/li&gt; 
 &lt;li&gt;One or more filename extensions starting in column 5.&lt;/li&gt; 
 &lt;li&gt;A 3rd generation scale factor starting in column 5. This entry must be provided but its value is not important unless you want to compare your language to a hypothetical third generation programming language.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;A filter defines a method to remove comment text from the source file. For example the entry for C++ looks like this&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C++
    filter call_regexp_common C++
    filter remove_inline //.*$
    extension C
    extension c++
    extension cc
    extension cpp
    extension cxx
    extension pcc
    3rd_gen_scale 1.51
    end_of_line_continuation \\$
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;C++ has two filters: first, remove lines matching Regexp::Common&#39;s C++ comment regex. The second filter using remove_inline is currently unused. Its intent is to identify lines with both code and comments and it may be implemented in the future.&lt;/p&gt; 
&lt;p&gt;A more complete discussion of the different filter options may appear here in the future. The output of cloc&#39;s &lt;code&gt;--write-lang-def&lt;/code&gt; option should provide enough examples for motivated individuals to modify or extend cloc&#39;s language definitions.&lt;/p&gt; 
&lt;h2&gt;Combine Reports&lt;/h2&gt; 
&lt;p&gt;If you manage multiple software projects you might be interested in seeing line counts by project, not just by language. Say you manage three software projects called MariaDB, PostgreSQL, and SQLite. The teams responsible for each of these projects run cloc on their source code and provide you with the output. For example, the MariaDB team does&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --out mariadb-10.1.txt mariadb-server-10.1.zip
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and provides you with the file &lt;code&gt;mariadb-10.1.txt&lt;/code&gt;. The contents of the three files you get are&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cat mariadb-10.1.txt
https://github.com/AlDanial/cloc v 1.65  T=45.36 s (110.5 files/s, 66411.4 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
C++                               1613         225338         290077         983026
C                                  853          62442          73017         715018
C/C++ Header                      1327          48300         114577         209394
Bourne Shell                       256          10224          10810          61943
Perl                               147          10342           8305          35562
Pascal                             107           4907           5237          32541
HTML                                56            195              6          16489
Javascript                           5           3309           3019          15540
m4                                  30           1599            359          14215
CMake                              190           1919           4097          12206
XML                                 35            648             56           5210
Ruby                                59            619            184           4998
Puppet                              10              0              1           3848
make                               134            724            360           3631
SQL                                 23            306            377           3405
Python                              34            371            122           2545
Bourne Again Shell                  27            299            380           1604
Windows Module Definition           37             27             13           1211
lex                                  4            394            166            991
yacc                                 2            152             64            810
DOS Batch                           19             89             82            700
Prolog                               1              9             40            448
RobotFramework                       1              0              0            441
CSS                                  2             33            155            393
JSON                                 5              0              0            359
dtrace                               9             59            179            306
Windows Resource File               10             61             89            250
Assembly                             2             70            284            237
WiX source                           1             18             10            155
Visual Basic                         6              0              0             88
YAML                                 2              4              4             65
PHP                                  1             11              2             24
SKILL                                1              8             15             16
sed                                  2              0              0             16
Windows Message File                 1              2              8              6
diff                                 1              1              4              4
D                                    1              4             11              4
-----------------------------------------------------------------------------------
SUM:                              5014         372484         512110        2127699
-----------------------------------------------------------------------------------

Unix&amp;gt; cat sqlite-3081101.txt
https://github.com/AlDanial/cloc v 1.65  T=1.22 s (3.3 files/s, 143783.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                                2          11059          53924         101454
C/C++ Header                     2            211           6630           1546
-------------------------------------------------------------------------------
SUM:                             4          11270          60554         103000
-------------------------------------------------------------------------------

Unix&amp;gt; cat postgresql-9.4.4.txt
https://github.com/AlDanial/cloc v 1.65  T=22.46 s (172.0 files/s, 96721.6 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
HTML                              1254           3725              0         785991
C                                 1139         139289         244045         736519
C/C++ Header                       667          12277          32488          57014
SQL                                410          13400           8745          51926
yacc                                 8           3163           2669          28491
Bourne Shell                        41           2647           2440          17170
Perl                                81           1702           1308           9456
lex                                  9            792           1631           4285
make                               205           1525           1554           4114
m4                                  12            218             25           1642
Windows Module Definition           13              4             17           1152
XSLT                                 5             76             55            294
DOS Batch                            7             29             30             92
CSS                                  1             20              7             69
Assembly                             3             17             38             69
D                                    1             14             14             66
Windows Resource File                3              4              0             62
Lisp                                 1              1              1             16
sed                                  1              1              7             15
Python                               1              5              0             13
Bourne Again Shell                   1              8              6             10
Windows Message File                 1              0              0              5
-----------------------------------------------------------------------------------
SUM:                              3864         178917         295080        1698471
-----------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;While these three files are interesting, you also want to see the combined counts from all projects. That can be done with cloc&#39;s &lt;code&gt;--sum_reports&lt;/code&gt; option:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --sum-reports --out=databases mariadb-10.1.txt  sqlite-3081101.txt  postgresql-9.4.4.txt
Wrote databases.lang
Wrote databases.file
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The report combination produces two output files, one for sums by programming language (&lt;code&gt;databases.lang&lt;/code&gt;) and one by project (&lt;code&gt;databases.file&lt;/code&gt;). Their contents are&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cat databases.lang
https://github.com/AlDanial/cloc v 1.65
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                              1994         212790         370986        1552991
C++                            1613         225338         290077         983026
HTML                           1310           3920              6         802480
C/C++ Header                   1996          60788         153695         267954
Bourne Shell                    297          12871          13250          79113
SQL                             433          13706           9122          55331
Perl                            228          12044           9613          45018
Pascal                          107           4907           5237          32541
yacc                             10           3315           2733          29301
m4                               42           1817            384          15857
Javascript                        5           3309           3019          15540
CMake                           190           1919           4097          12206
make                            339           2249           1914           7745
lex                              13           1186           1797           5276
XML                              35            648             56           5210
Ruby                             59            619            184           4998
Puppet                           10              0              1           3848
Python                           35            376            122           2558
Windows Module Definition        50             31             30           2363
Bourne Again Shell               28            307            386           1614
DOS Batch                        26            118            112            792
CSS                               3             53            162            462
Prolog                            1              9             40            448
RobotFramework                    1              0              0            441
JSON                              5              0              0            359
Windows Resource File            13             65             89            312
Assembly                          5             87            322            306
dtrace                            9             59            179            306
XSLT                              5             76             55            294
WiX source                        1             18             10            155
Visual Basic                      6              0              0             88
D                                 2             18             25             70
YAML                              2              4              4             65
sed                               3              1              7             31
PHP                               1             11              2             24
SKILL                             1              8             15             16
Lisp                              1              1              1             16
Windows Message File              2              2              8             11
diff                              1              1              4              4
--------------------------------------------------------------------------------
SUM:                           8882         562671         867744        3929170
--------------------------------------------------------------------------------

Unix&amp;gt; cat databases.file
----------------------------------------------------------------------------------
File                            files          blank        comment           code
----------------------------------------------------------------------------------
mariadb-10.1.txt                 5014         372484         512110        2127699
postgresql-9.4.4.txt             3864         178917         295080        1698471
sqlite-3081101.txt                  4          11270          60554         103000
----------------------------------------------------------------------------------
SUM:                             8882         562671         867744        3929170
----------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Report files themselves can be summed together. Say you also manage development of Perl and Python and you want to keep track of those line counts separately from your database projects. First create reports for Perl and Python separately:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --out perl-5.22.0.txt   perl-5.22.0.tar.gz
cloc --out python-2.7.10.txt Python-2.7.10.tar.xz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;then sum these together with&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --sum-reports --out script_lang perl-5.22.0.txt python-2.7.10.txt
Wrote script_lang.lang
Wrote script_lang.file

Unix&amp;gt; cat script_lang.lang
https://github.com/AlDanial/cloc v 1.65
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                          2892         136396         184362         536445
C                              680          75566          71211         531203
Python                        2141          89642         109524         434015
C/C++ Header                   408          16433          26938         214800
Bourne Shell                   154          11088          14496          87759
MSBuild script                  77              0              3          38910
m4                              20           1604            191          15559
Assembly                        51           3775           6794          12298
Pascal                           8            458           1603           8592
make                            16            897            828           4939
XML                             37            198              2           2484
HTML                            14            393             11           2344
C++                             12            338            295           2161
Windows Module Definition        9            171            187           2081
YAML                            49             20             15           2078
Prolog                          12            438              2           1146
JSON                            14              1              0           1037
yacc                             1             85             76            998
DOS Batch                       44            199            148            895
Objective-C                      7             98             61            635
Expect                           6            104            161            565
Windows Message File             1            102             11            489
CSS                              1             98             19            328
Windows Resource File            7             55             56            292
Javascript                       3             31             49            229
vim script                       1             36              7            106
diff                             1             17             87            105
NAnt script                      2              1              0             30
IDL                              1              0              0             24
Visual Basic                     2              1              1             12
D                                1              5              7              8
Lisp                             2              0              3              4
-------------------------------------------------------------------------------
SUM:                          6674         338250         417148        1902571
-------------------------------------------------------------------------------

Unix&amp;gt; cat script_lang.file
-------------------------------------------------------------------------------
File                         files          blank        comment           code
-------------------------------------------------------------------------------
python-2.7.10.txt             3240         161276         173214         998697
perl-5.22.0.txt               3434         176974         243934         903874
-------------------------------------------------------------------------------
SUM:                          6674         338250         417148        1902571
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Finally, combine the combination files:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unix&amp;gt; cloc --sum-reports --report_file=everything databases.lang script_lang.lang
Wrote everything.lang
Wrote everything.file

Unix&amp;gt; cat everything.lang
https://github.com/AlDanial/cloc v 1.65
---------------------------------------------------------------------------------
Language                       files          blank        comment           code
---------------------------------------------------------------------------------
C                               2674         288356         442197        2084194
C++                             1625         225676         290372         985187
HTML                            1324           4313             17         804824
Perl                            3120         148440         193975         581463
C/C++ Header                    2404          77221         180633         482754
Python                          2176          90018         109646         436573
Bourne Shell                     451          23959          27746         166872
SQL                              433          13706           9122          55331
Pascal                           115           5365           6840          41133
MSBuild script                    77              0              3          38910
m4                                62           3421            575          31416
yacc                              11           3400           2809          30299
Javascript                         8           3340           3068          15769
make                             355           3146           2742          12684
Assembly                          56           3862           7116          12604
CMake                            190           1919           4097          12206
XML                               72            846             58           7694
lex                               13           1186           1797           5276
Ruby                              59            619            184           4998
Windows Module Definition         59            202            217           4444
Puppet                            10              0              1           3848
YAML                              51             24             19           2143
DOS Batch                         70            317            260           1687
Bourne Again Shell                28            307            386           1614
Prolog                            13            447             42           1594
JSON                              19              1              0           1396
CSS                                4            151            181            790
Objective-C                        7             98             61            635
Windows Resource File             20            120            145            604
Expect                             6            104            161            565
Windows Message File               3            104             19            500
RobotFramework                     1              0              0            441
dtrace                             9             59            179            306
XSLT                               5             76             55            294
WiX source                         1             18             10            155
diff                               2             18             91            109
vim script                         1             36              7            106
Visual Basic                       8              1              1            100
D                                  3             23             32             78
sed                                3              1              7             31
NAnt script                        2              1              0             30
IDL                                1              0              0             24
PHP                                1             11              2             24
Lisp                               3              1              4             20
SKILL                              1              8             15             16
---------------------------------------------------------------------------------
SUM:                           15556         900921        1284892        5831741
---------------------------------------------------------------------------------

Unix&amp;gt; cat everything.file
-------------------------------------------------------------------------------
File                         files          blank        comment           code
-------------------------------------------------------------------------------
databases.lang                8882         562671         867744        3929170
script_lang.lang              6674         338250         417148        1902571
-------------------------------------------------------------------------------
SUM:                         15556         900921        1284892        5831741
-------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;One limitation of the &lt;code&gt;--sum-reports&lt;/code&gt; feature is that the individual counts must be saved in the plain text format. Counts saved as XML, JSON, YAML, or SQL will produce errors if used in a summation.&lt;/p&gt; 
&lt;h2&gt;SQL&lt;/h2&gt; 
&lt;p&gt;Cloc can write results in the form of SQL table create and insert statements for use with relational database programs such as SQLite, MySQL, PostgreSQL, Oracle, or Microsoft SQL. Once the code count information is in a database, the information can be interrogated and displayed in interesting ways.&lt;/p&gt; 
&lt;p&gt;A database created from cloc SQL output has two tables, &lt;strong&gt;metadata&lt;/strong&gt; and &lt;strong&gt;t&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;Table &lt;strong&gt;metadata&lt;/strong&gt;:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Field&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;id&lt;/td&gt; 
   &lt;td&gt;integer primary key&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;timestamp&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;project&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;elapsed_s&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Table &lt;strong&gt;t&lt;/strong&gt;:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Field&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;project&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;language&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;file&lt;/td&gt; 
   &lt;td&gt;text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;nBlank&lt;/td&gt; 
   &lt;td&gt;integer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;nComment&lt;/td&gt; 
   &lt;td&gt;integer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;nCode&lt;/td&gt; 
   &lt;td&gt;integer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;nScaled&lt;/td&gt; 
   &lt;td&gt;real&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;foreign key (id)&lt;/td&gt; 
   &lt;td&gt;references metadata (id)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The &lt;strong&gt;metadata&lt;/strong&gt; table contains information about when the cloc run was made. Run time is stored two ways: as Unix epoch seconds in &lt;code&gt;id&lt;/code&gt; and as an ISO 8601 formatted text string in the local time zone (for example &lt;code&gt;2024-03-01 14:19:41&lt;/code&gt;) in &lt;code&gt;timestamp&lt;/code&gt;. The &lt;code&gt;--sql-append&lt;/code&gt; switch allows one to combine many runs in a single database; each run adds a row to the metadata table. The code count information resides in table &lt;strong&gt;t&lt;/strong&gt;. The &lt;code&gt;id&lt;/code&gt; key makes it easy to associate a run&#39;s code count with its metadata.&lt;/p&gt; 
&lt;p&gt;Let&#39;s repeat the code count examples of Perl, Python, SQLite, MySQL and PostgreSQL tarballs shown in the &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#combine_reports&quot;&gt;Combine Reports&lt;/a&gt; example above, this time using the SQL output options and the &lt;a href=&quot;http://www.sqlite.org/&quot;&gt;SQLite&lt;/a&gt; database engine.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;--sql&lt;/code&gt; switch tells cloc to generate output in the form of SQL table &lt;code&gt;create&lt;/code&gt; and &lt;code&gt;insert&lt;/code&gt; commands. The switch takes an argument of a file name to write these SQL statements into, or, if the argument is 1 (numeric one), streams output to STDOUT. Since the SQLite command line program, &lt;code&gt;sqlite3&lt;/code&gt;, can read commands from STDIN, we can dispense with storing SQL statements to a file and use &lt;code&gt;--sql 1&lt;/code&gt; to pipe data directly into the SQLite executable:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --sql 1 --sql-project mariadb mariadb-server-10.1.zip | sqlite3 code.db
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;--sql-project mariadb&lt;/code&gt; part is optional; there&#39;s no need to specify a project name when working with just one code base. However, since we&#39;ll be adding code counts from four other tarballs, we&#39;ll only be able to identify data by input source if we supply a project name for each run.&lt;/p&gt; 
&lt;p&gt;Now that we have a database we will need to pass in the &lt;code&gt;--sql-append&lt;/code&gt; switch to tell cloc not to wipe out this database but instead add more data:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --sql 1 --sql-project postgresql --sql-append postgresql-9.4.4.tar.bz2        | sqlite3 code.db
cloc --sql 1 --sql-project sqlite     --sql-append sqlite-amalgamation-3081101.zip | sqlite3 code.db
cloc --sql 1 --sql-project python     --sql-append Python-2.7.10.tar.xz            | sqlite3 code.db
cloc --sql 1 --sql-project perl       --sql-append perl-5.22.0.tar.gz              | sqlite3 code.db
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Now the fun begins--we have a database, &lt;code&gt;code.db&lt;/code&gt;, with lots of information about the five projects and can query it for all manner of interesting facts.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Which is the longest file over all projects?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project,file,nBlank+nComment+nCode as nL from t
                                 where nL = (select max(nBlank+nComment+nCode) from t)&#39;

sqlite|sqlite-amalgamation-3081101/sqlite3.c|161623
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;sqlite3&lt;/code&gt;&#39;s default output format leaves a bit to be desired. We can add an option to the program&#39;s rc file, &lt;code&gt;~/.sqliterc&lt;/code&gt;, to show column headers:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  .header on
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;One might be tempted to also include&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  .mode column
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;in &lt;code&gt;~/.sqliterc&lt;/code&gt; but this causes problems when the output has more than one row since the widths of entries in the first row govern the maximum width for all subsequent rows. Often this leads to truncated output--not at all desirable. One option is to write a custom SQLite output formatter such as &lt;code&gt;sqlite_formatter&lt;/code&gt;, included with cloc.&lt;/p&gt; 
&lt;p&gt;To use it, simply pass &lt;code&gt;sqlite3&lt;/code&gt;&#39;s STDOUT into &lt;code&gt;sqlite_formatter&lt;/code&gt; via a pipe:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project,file,nBlank+nComment+nCode as nL from t
                         where nL = (select max(nBlank+nComment+nCode) from t)&#39; | ./sqlite_formatter
  &amp;lt;font color=&quot;darkgreen&quot;&amp;gt;
  -- Loading resources from ~/.sqliterc
  Project File                                  nL
  _______ _____________________________________ ______
  sqlite  sqlite-amalgamation-3081101/sqlite3.c 161623
  &amp;lt;/font&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If the &quot;Project File&quot; line doesn&#39;t appear, add &lt;code&gt;.header on&lt;/code&gt; to your &lt;code&gt;~/.sqliterc&lt;/code&gt; file as explained above.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;What is the longest file over all projects?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project,file,nBlank+nComment+nCode as nL from t
                         where nL = (select max(nBlank+nComment+nCode) from t)&#39; | sqlite_formatter

Project File                                  nL
_______ _____________________________________ ______
sqlite  sqlite-amalgamation-3081101/sqlite3.c 161623
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;What is the longest file in each project?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project,file,max(nBlank+nComment+nCode) as nL from t
                          group by project order by nL;&#39; | sqlite_formatter

Project    File                                                             nL
__________ ________________________________________________________________ ______
python     Python-2.7.10/Mac/Modules/qt/_Qtmodule.c                          28091
postgresql postgresql-9.4.4/src/interfaces/ecpg/preproc/preproc.c            54623
mariadb    server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c             80246
perl       perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100747
sqlite     sqlite-amalgamation-3081101/sqlite3.c                            161623
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Which files in each project have the most code lines?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project,file,max(nCode) as nL from t
                         group by project order by nL desc;&#39; | sqlite_formatter

Project    File                                                             nL
__________ ________________________________________________________________ ______
perl       perl-5.22.0/cpan/Locale-Codes/lib/Locale/Codes/Language_Codes.pm 100735
sqlite     sqlite-amalgamation-3081101/sqlite3.c                             97469
mariadb    server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c             80221
postgresql postgresql-9.4.4/src/interfaces/ecpg/preproc/preproc.c            45297
python     Python-2.7.10/Mac/Modules/qt/_Qtmodule.c                          26705
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Which C source files with more than 300 lines have a comment ratio below 1%?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project, file, nCode, nComment,
                         (100.0*nComment)/(nComment+nCode) as comment_ratio from t
                         where language=&quot;C&quot; and nCode &amp;gt; 300 and
                         comment_ratio &amp;lt; 1 order by comment_ratio;&#39; | sqlite_formatter

Project    File                                                                                            nCode nComment comment_ratio
__________ _______________________________________________________________________________________________ _____ ________ __________________
mariadb    server-10.1/storage/mroonga/vendor/groonga/lib/nfkc.c                                           80221       14 0.0174487443135789
python     Python-2.7.10/Python/graminit.c                                                                  2175        1 0.0459558823529412
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_turkish.c                            2095        1 0.0477099236641221
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_french.c                             1211        1 0.0825082508250825
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_french.c                        1201        1 0.0831946755407654
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_hungarian.c                          1182        1 0.084530853761623
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_hungarian.c                     1178        1 0.0848176420695505
mariadb    server-10.1/strings/ctype-eucjpms.c                                                             67466       60 0.0888546633889169
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_english.c                            1072        1 0.0931966449207828
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_english.c                       1064        1 0.0938967136150235
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_spanish.c                            1053        1 0.094876660341556
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_spanish.c                       1049        1 0.0952380952380952
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_italian.c                            1031        1 0.0968992248062016
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_italian.c                       1023        1 0.09765625
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_portuguese.c                          981        1 0.10183299389002
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_portuguese.c                     975        1 0.102459016393443
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_romanian.c                            967        1 0.103305785123967
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_2_romanian.c                       961        1 0.103950103950104
mariadb    server-10.1/strings/ctype-ujis.c                                                                67177       79 0.117461639110265
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_finnish.c                             720        1 0.13869625520111
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_porter.c                              717        1 0.139275766016713
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_finnish.c                        714        1 0.13986013986014
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_porter.c                         711        1 0.140449438202247
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_KOI8_R_russian.c                            660        1 0.151285930408472
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_russian.c                             654        1 0.152671755725191
python     Python-2.7.10/Mac/Modules/qt/_Qtmodule.c                                                        26705       42 0.157026956294164
python     Python-2.7.10/Mac/Modules/icn/_Icnmodule.c                                                       1521        3 0.196850393700787
mariadb    server-10.1/strings/ctype-extra.c                                                                8282       18 0.216867469879518
postgresql postgresql-9.4.4/src/bin/psql/sql_help.c                                                         3576        8 0.223214285714286
mariadb    server-10.1/strings/ctype-sjis.c                                                                34006       86 0.252258594391646
python     Python-2.7.10/Python/Python-ast.c                                                                6554       17 0.258712524729874
mariadb    server-10.1/strings/ctype-cp932.c                                                               34609       92 0.265122042592432
perl       perl-5.22.0/keywords.c                                                                           2815        8 0.283386468296139
python     Python-2.7.10/Mac/Modules/menu/_Menumodule.c                                                     3263       10 0.305530094714329
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_dutch.c                               596        2 0.334448160535117
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_dutch.c                          586        2 0.340136054421769
mariadb    server-10.1/strings/ctype-gbk.c                                                                 10684       38 0.354411490393583
python     Python-2.7.10/Mac/Modules/qd/_Qdmodule.c                                                         6694       24 0.357249181303959
python     Python-2.7.10/Mac/Modules/win/_Winmodule.c                                                       3056       11 0.358656667753505
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_german.c                              476        2 0.418410041841004
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_german.c                         470        2 0.423728813559322
mariadb    server-10.1/strings/ctype-euc_kr.c                                                               9956       44 0.44
postgresql postgresql-9.4.4/src/backend/utils/fmgrtab.c                                                     4815       23 0.475403059115337
python     Python-2.7.10/Mac/Modules/ctl/_Ctlmodule.c                                                       5442       28 0.511882998171846
python     Python-2.7.10/Mac/Modules/ae/_AEmodule.c                                                         1347        7 0.51698670605613
python     Python-2.7.10/Mac/Modules/app/_Appmodule.c                                                       1712        9 0.52295177222545
mariadb    server-10.1/strings/ctype-gb2312.c                                                               6377       35 0.54585152838428
mariadb    server-10.1/storage/tokudb/ft-index/third_party/xz-4.999.9beta/src/liblzma/lzma/fastpos_table.c   516        3 0.578034682080925
python     Python-2.7.10/Mac/Modules/evt/_Evtmodule.c                                                        504        3 0.591715976331361
python     Python-2.7.10/Modules/expat/xmlrole.c                                                            1256        8 0.632911392405063
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_UTF_8_danish.c                              312        2 0.636942675159236
postgresql postgresql-9.4.4/src/backend/snowball/libstemmer/stem_ISO_8859_1_danish.c                         310        2 0.641025641025641
python     Python-2.7.10/Mac/Modules/res/_Resmodule.c                                                       1621       12 0.734843845682792
python     Python-2.7.10/Mac/Modules/drag/_Dragmodule.c                                                     1046        8 0.759013282732448
python     Python-2.7.10/Mac/Modules/list/_Listmodule.c                                                     1021        8 0.777453838678329
python     Python-2.7.10/Mac/Modules/te/_TEmodule.c                                                         1198       10 0.827814569536424
python     Python-2.7.10/Mac/Modules/cg/_CGmodule.c                                                         1190       10 0.833333333333333
python     Python-2.7.10/Modules/clmodule.c                                                                 2379       23 0.957535387177352
python     Python-2.7.10/Mac/Modules/folder/_Foldermodule.c                                                  306        3 0.970873786407767
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;What are the ten longest files (based on code lines) that have no comments at all? Exclude header, .html, and YAML files.&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project, file, nCode from t
                         where nComment = 0 and
                         language not in (&quot;C/C++ Header&quot;, &quot;YAML&quot;, &quot;HTML&quot;)
                         order by nCode desc limit 10;&#39; | sqlite_formatter

Project File                                                                 nCode
_______ ____________________________________________________________________ _____
perl    perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/ja.pl                 1938
python  Python-2.7.10/PCbuild/pythoncore.vcproj                               1889
python  Python-2.7.10/PC/VS8.0/pythoncore.vcproj                              1889
mariadb server-10.1/mysql-test/extra/binlog_tests/mysqlbinlog_row_engine.inc  1862
perl    perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl            1589
perl    perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl             1563
mariadb server-10.1/storage/mroonga/vendor/groonga/configure.ac               1526
perl    perl-5.22.0/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl             1505
mariadb server-10.1/mysql-test/suite/funcs_1/storedproc/storedproc_02.inc     1465
python  Python-2.7.10/PC/VS8.0/_bsddb.vcproj                                  1463
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;What are the most popular languages (in terms of lines of code) in each project?&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;prompt&amp;gt; sqlite3 code.db &#39;select project, language, sum(nCode) as SumCode from t
                         group by project,language
                         order by project,SumCode desc;&#39; | sqlite_formatter
Project    Language                  SumCode
__________ _________________________ _______
mariadb    C++                        983026
mariadb    C                          715018
mariadb    C/C++ Header               209394
mariadb    Bourne Shell                61943
mariadb    Perl                        35562
mariadb    Pascal                      32541
mariadb    HTML                        16489
mariadb    Javascript                  15540
mariadb    m4                          14215
mariadb    CMake                       12206
mariadb    XML                          5210
mariadb    Ruby                         4998
mariadb    Puppet                       3848
mariadb    make                         3631
mariadb    SQL                          3405
mariadb    Python                       2545
mariadb    Bourne Again Shell           1604
mariadb    Windows Module Definition    1211
mariadb    lex                           991
mariadb    yacc                          810
mariadb    DOS Batch                     700
mariadb    Prolog                        448
mariadb    RobotFramework                441
mariadb    CSS                           393
mariadb    JSON                          359
mariadb    dtrace                        306
mariadb    Windows Resource File         250
mariadb    Assembly                      237
mariadb    WiX source                    155
mariadb    Visual Basic                   88
mariadb    YAML                           65
mariadb    PHP                            24
mariadb    SKILL                          16
mariadb    sed                            16
mariadb    Windows Message File            6
mariadb    D                               4
mariadb    diff                            4
perl       Perl                       536445
perl       C                          155648
perl       C/C++ Header               147858
perl       Bourne Shell                42668
perl       Pascal                       8592
perl       XML                          2410
perl       YAML                         2078
perl       C++                          2033
perl       make                         1986
perl       Prolog                       1146
perl       JSON                         1037
perl       yacc                          998
perl       Windows Message File          489
perl       DOS Batch                     389
perl       Windows Resource File          85
perl       D                               8
perl       Lisp                            4
postgresql HTML                       785991
postgresql C                          736519
postgresql C/C++ Header                57014
postgresql SQL                         51926
postgresql yacc                        28491
postgresql Bourne Shell                17170
postgresql Perl                         9456
postgresql lex                          4285
postgresql make                         4114
postgresql m4                           1642
postgresql Windows Module Definition    1152
postgresql XSLT                          294
postgresql DOS Batch                      92
postgresql Assembly                       69
postgresql CSS                            69
postgresql D                              66
postgresql Windows Resource File          62
postgresql Lisp                           16
postgresql sed                            15
postgresql Python                         13
postgresql Bourne Again Shell             10
postgresql Windows Message File            5
python     Python                     434015
python     C                          375555
python     C/C++ Header                66942
python     Bourne Shell                45091
python     MSBuild script              38910
python     m4                          15559
python     Assembly                    12298
python     make                         2953
python     HTML                         2344
python     Windows Module Definition    2081
python     Objective-C                   635
python     Expect                        565
python     DOS Batch                     506
python     CSS                           328
python     Javascript                    229
python     Windows Resource File         207
python     C++                           128
python     vim script                    106
python     diff                          105
python     XML                            74
python     NAnt script                    30
python     Prolog                         24
python     Visual Basic                   12
sqlite     C                          101454
sqlite     C/C++ Header                 1546
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Custom Column Output&lt;/h2&gt; 
&lt;p&gt;Cloc&#39;s default output is a text table with five columns: language, file count, number of blank lines, number of comment lines and number of code lines. The switches &lt;code&gt;--by-file&lt;/code&gt;, &lt;code&gt;--3&lt;/code&gt;, and &lt;code&gt;--by-percent&lt;/code&gt; generate additional information but sometimes even those are insufficient.&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;--sql&lt;/code&gt; option described in the previous section offers the ability to create custom output. This section has a pair of examples that show how to create custom columns. The first example includes an extra column, &lt;strong&gt;Total&lt;/strong&gt;, which is the sum of the numbers of blank, comment, and code lines. The second shows how to include the language name when running with &lt;code&gt;--by-file&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example 1: Add a &quot;Totals&quot; column.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The first step is to run cloc and save the output to a relational database, SQLite in this case:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cloc --sql 1 --sql-project x yaml-cpp-yaml-cpp-0.5.3.tar.gz | sqlite3 counts.db
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(the tar file comes from the &lt;a href=&quot;https://github.com/jbeder/yaml-cpp&quot;&gt;YAML-C++&lt;/a&gt; project).&lt;/p&gt; 
&lt;p&gt;Second, we craft an SQL query that returns the regular cloc output plus an extra column for totals, then save the SQL statement to a file, &lt;code&gt;query_with_totals.sql&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-- file query_with_totals.sql
select Language, count(File)   as files                       ,
                 sum(nBlank)   as blank                       ,
                 sum(nComment) as comment                     ,
                 sum(nCode)    as code                        ,
                 sum(nBlank)+sum(nComment)+sum(nCode) as Total
    from t group by Language order by code desc;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Third, we run this query through SQLite using the &lt;code&gt;counts.db&lt;/code&gt; database. We&#39;ll include the &lt;code&gt;-header&lt;/code&gt; switch so that SQLite prints the column names:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cat query_with_totals.sql | sqlite3 -header counts.db
Language|files|blank|comment|code|Total
C++|141|12786|17359|60378|90523
C/C++ Header|110|8566|17420|51502|77488
Bourne Shell|10|6351|6779|38264|51394
m4|11|2037|260|17980|20277
Python|30|1613|2486|4602|8701
MSBuild script|11|0|0|1711|1711
CMake|7|155|285|606|1046
make|5|127|173|464|764
Markdown|2|30|0|39|69
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The extra column for &lt;strong&gt;Total&lt;/strong&gt; is there but the format is unappealing. Running the output through &lt;code&gt;sqlite_formatter&lt;/code&gt; yields the desired result:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cat query_with_totals.sql | sqlite3 -header counts.db | sqlite_formatter
Language       files blank comment code  Total
______________ _____ _____ _______ _____ _____
C++              141 12786   17359 60378 90523
C/C++ Header     110  8566   17420 51502 77488
Bourne Shell      10  6351    6779 38264 51394
m4                11  2037     260 17980 20277
Python            30  1613    2486  4602  8701
MSBuild script    11     0       0  1711  1711
CMake              7   155     285   606  1046
make               5   127     173   464   764
Markdown           2    30       0    39    69
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The next section, &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#wrapping-cloc-in-other-scripts-&quot;&gt;Wrapping cloc in other scripts&lt;/a&gt;, shows one way these commands can be combined into a new utility program.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example 2: Include a column for &quot;Language&quot; when running with &lt;code&gt;--by-file&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Output from &lt;code&gt;--by-file&lt;/code&gt; omits each file&#39;s language to save screen real estate; file paths for large projects can be long and including an extra 20 or so characters for a Language column can be excessive.&lt;/p&gt; 
&lt;p&gt;As an example, here are the first few lines of output using the same code base as in Example 1:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cloc --by-file yaml-cpp-yaml-cpp-0.5.3.tar.gz
github.com/AlDanial/cloc v 1.81  T=1.14 s (287.9 files/s, 221854.9 lines/s)
--------------------------------------------------------------------------------------------------------------------------------------------
File                                                                                                     blank        comment           code
--------------------------------------------------------------------------------------------------------------------------------------------
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/configure                                                        2580           2264          13691
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/configure                                                  2541           2235          13446
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h                                    1972           4681          13408
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h                                          1585           3397           9216
yaml-cpp-yaml-cpp-0.5.3/test/integration/gen_emitter_test.cpp                                              999              0           8760
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/aclocal.m4                                                        987            100           8712
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4                                               760             65           7176
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh                                         959           1533           7169
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc                                     1514           3539           6390
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc                               1312           2896           5384
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc                                     1226           1091           5098
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h         349            235           4559
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The absence of language identification for each file is a bit disappointing, but this can be remedied with a custom column solution.&lt;/p&gt; 
&lt;p&gt;The first step, creating a database, matches that from Example 1 so we&#39;ll go straight to the second step of creating the desired SQL query. We&#39;ll store this one in the file &lt;code&gt;by_file_with_language.sql&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-- file by_file_with_language.sql
select File, Language, nBlank   as blank  ,
                       nComment as comment,
                       nCode    as code
    from t order by code desc;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Our desired extra column appears when we pass this custom SQL query through our database:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cat by_file_with_language.sql | sqlite3 -header counts.db | sqlite_formatter
File                                                                                               Language       blank comment code
__________________________________________________________________________________________________ ______________ _____ _______ _____
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/configure                                                 Bourne Shell    2580    2264 13691
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/configure                                           Bourne Shell    2541    2235 13446
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest.h                             C/C++ Header    1972    4681 13408
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock/gmock.h                                   C/C++ Header    1585    3397  9216
yaml-cpp-yaml-cpp-0.5.3/test/integration/gen_emitter_test.cpp                                      C++              999       0  8760
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/aclocal.m4                                                m4               987     100  8712
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/m4/libtool.m4                                       m4               760      65  7176
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/build-aux/ltmain.sh                                 Bourne Shell     959    1533  7169
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/fused-src/gmock-gtest-all.cc                              C++             1514    3539  6390
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/fused-src/gtest/gtest-all.cc                        C++             1312    2896  5384
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/test/gtest_unittest.cc                              C++             1226    1091  5098
yaml-cpp-yaml-cpp-0.5.3/test/gmock-1.7.0/gtest/include/gtest/internal/gtest-param-util-generated.h C/C++ Header     349     235  4559
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Wrapping cloc in other scripts&lt;/h2&gt; 
&lt;p&gt;More complex code counting solutions are possible by wrapping cloc in scripts or programs. The &quot;total lines&quot; column from example 1 of &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#custom-column-output-&quot;&gt;Custom Column Output&lt;/a&gt; could be simplified to a single command with this shell script (on Linux):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#!/bin/sh
#
# These commands must be in the user&#39;s $PATH:
#   cloc
#   sqlite3
#   sqlite_formatter
#
if test $# -eq 0 ; then
    echo &quot;Usage: $0  [cloc arguments]&quot;
    echo &quot;       Run cloc to count lines of code with an additional&quot;
    echo &quot;       output column for total lines (code+comment+blank).&quot;
    exit
fi
DBFILE=`tempfile`
cloc --sql 1 --sql-project x $@ | sqlite3 ${DBFILE}
SQL=&quot;select Language, count(File)   as files                       ,
                      sum(nBlank)   as blank                       ,
                      sum(nComment) as comment                     ,
                      sum(nCode)    as code                        ,
                      sum(nBlank)+sum(nComment)+sum(nCode) as Total
         from t group by Language order by code desc;
&quot;
echo ${SQL} | sqlite3 -header ${DBFILE} | sqlite_formatter
rm ${DBFILE}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Saving the lines above to &lt;code&gt;total_columns.sh&lt;/code&gt; and making it executable (&lt;code&gt;chmod +x total_columns.sh&lt;/code&gt;) would let us do&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./total_columns.sh yaml-cpp-yaml-cpp-0.5.3.tar.gz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;to directly get&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Language       files blank comment code  Total
______________ _____ _____ _______ _____ _____
C++              141 12786   17359 60378 90523
C/C++ Header     110  8566   17420 51502 77488
Bourne Shell      10  6351    6779 38264 51394
m4                11  2037     260 17980 20277
Python            30  1613    2486  4602  8701
MSBuild script    11     0       0  1711  1711
CMake              7   155     285   606  1046
make               5   127     173   464   764
Markdown           2    30       0    39    69
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Other examples:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Count code from a specific branch of a web-hosted git repository and send the results as a .csv email attachment: &lt;a href=&quot;https://github.com/dannyloweatx/checkmarx&quot;&gt;https://github.com/dannyloweatx/checkmarx&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;git and UTF8 pathnames&lt;/h2&gt; 
&lt;p&gt;cloc&#39;s &lt;code&gt;--git&lt;/code&gt; option may fail if you work with directory or file names with UTF-8 characters (for example, see &lt;a href=&quot;https://github.com/AlDanial/cloc/issues/457&quot;&gt;issue 457&lt;/a&gt;). The solution, &lt;a href=&quot;https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window&quot;&gt;https://stackoverflow.com/questions/22827239/how-to-make-git-properly-display-utf-8-encoded-pathnames-in-the-console-window&lt;/a&gt;, is to apply this git configuration command:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git config --global core.quotepath off
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Your console&#39;s font will need to be capable of displaying Unicode characters.&lt;/p&gt; 
&lt;h2&gt;Third Generation Language Scale Factors&lt;/h2&gt; 
&lt;p&gt;cloc versions before 1.50 by default computed, for the provided inputs, a rough estimate of how many lines of code would be needed to write the same code in a hypothetical third-generation computer language. To produce this output one must now use the &lt;code&gt;--3&lt;/code&gt; switch.&lt;/p&gt; 
&lt;p&gt;Scale factors were derived from the 2006 version of language gearing ratios listed at Mayes Consulting web site, &lt;a href=&quot;http://softwareestimator.com/IndustryData2.htm&quot;&gt;http://softwareestimator.com/IndustryData2.htm&lt;/a&gt;, using this equation:&lt;/p&gt; 
&lt;p&gt;cloc scale factor for language X = 3rd generation default gearing ratio / language X gearing ratio&lt;/p&gt; 
&lt;p&gt;For example, cloc 3rd generation scale factor for DOS Batch = 80 / 128 = 0.625.&lt;/p&gt; 
&lt;p&gt;The biggest flaw with this approach is that gearing ratios are defined for logical lines of source code not physical lines (which cloc counts). The values in cloc&#39;s &#39;scale&#39; and &#39;3rd gen. equiv.&#39; columns should be taken with a large grain of salt.&lt;/p&gt; 
&lt;h2&gt;options.txt configuration file&lt;/h2&gt; 
&lt;p&gt;If you find yourself using the same command line switches every time you invoke cloc, you can save some typing by adding those switches to the &lt;code&gt;options.txt&lt;/code&gt; runtime configuration file. cloc will look for this file in the following default locations:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Linux, NetBSD, FreeBSD, macOS:
/home/USERNAME/.config/cloc/options.txt

# Windows
C:\Users\USERNAME\AppData\Roaming\cloc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you run cloc with &lt;code&gt;--help&lt;/code&gt;, cloc will tell you where it expects to find this config file file. The information appears by the explanation of the &lt;code&gt;--config&lt;/code&gt; switch after the text &lt;code&gt;the default location of&lt;/code&gt;. On Unix-like operating systems, this can be simplified to&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cloc --help | grep &quot;default location&quot;
             the default location of /home/al/.config/cloc/options.txt.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and in a Windows &lt;code&gt;cmd&lt;/code&gt; terminal with&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; cloc --help | findstr default | findstr location
             the default location of C:\Users\al\AppData\Roaming\cloc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Place each switch and arguments, if any, on a line by itself. Lines prefixed with &lt;code&gt;#&lt;/code&gt; symbol are ignored as comments and blank lines are skipped. Leading hyphens on the switches are optional. Here&#39;s a sample file:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# options.txt
--vcs git
v      # verbose level 1
exclude-ext svg,html
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The path to the &lt;code&gt;options.txt&lt;/code&gt; file can also be specified with the &lt;code&gt;--config FILE&lt;/code&gt; switch.&lt;/p&gt; 
&lt;p&gt;Finally, if cloc finds an &lt;code&gt;options.txt&lt;/code&gt; file in the same directory as files given by any of these switches (in the listed priority), it will use that configuration file from that location:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;--list-file&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--exclude-list-file&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--read-lang-def&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--force-lang-def&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--diff-list-file&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Run with &lt;code&gt;--verbose&lt;/code&gt; to have cloc tell you which, if any, &lt;code&gt;options.txt&lt;/code&gt; file it uses.&lt;/p&gt; 
&lt;h2&gt;Python Programmatic Interface&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/StefanoStone&quot;&gt;Stefano Campanella&lt;/a&gt; created a Python programmatic interface to cloc. It is available at &lt;a href=&quot;https://github.com/pycloc/pycloc&quot;&gt;https://github.com/pycloc/pycloc&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Java Programmatic Interface&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/seart-group/jcloc/commits?author=dabico&quot;&gt;Ozren Dabić&lt;/a&gt; created a Java programmatic interface to cloc. It is available at &lt;a href=&quot;https://github.com/seart-group/jcloc&quot;&gt;https://github.com/seart-group/jcloc&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Complex regular subexpression recursion limit&lt;/h1&gt; 
&lt;p&gt;cloc relies on the Regexp::Common module&#39;s regular expressions to remove comments from source code. If comments are malformed, for example the &lt;code&gt;/*&lt;/code&gt; start comment marker appears in a C program without a corresponding &lt;code&gt;*/&lt;/code&gt; marker, the regular expression engine could enter a recursive loop, eventually triggering the warning &lt;code&gt;Complex regular subexpression recursion limit&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The most common cause for this warning is the existence of comment markers in string literals. While language compilers and interpreters are smart enough to recognize that &lt;code&gt;&quot;/*&quot;&lt;/code&gt; (for example) is a string and not a comment, cloc is fooled. File path globs, as in this line of JavaScript&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var paths = globArray(&quot;**/*.js&quot;, {cwd: srcPath});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;are frequent culprits.&lt;/p&gt; 
&lt;p&gt;In an attempt to overcome this problem, a different algorithm which removes comment markers in strings can be enabled with the &lt;code&gt;--strip-str-comments&lt;/code&gt; switch. Doing so, however, has drawbacks: cloc will run more slowly and the output of &lt;code&gt;--strip-comments&lt;/code&gt; will contain strings that no longer match the input source.&lt;/p&gt; 
&lt;h1&gt;Limitations&lt;/h1&gt; 
&lt;p&gt;Identifying comments within source code is trickier than one might expect. Many languages would need a complete parser to be counted correctly. cloc does not attempt to parse any of the languages it aims to count and therefore is an imperfect tool. The following are known problems:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; Lines containing both source code and comments are counted as lines of code. &lt;/li&gt; 
 &lt;li&gt; Comment markers within strings or &lt;a href=&quot;http://www.faqs.org/docs/abs/HTML/here-docs.html&quot;&gt;here-documents&lt;/a&gt; are treated as actual comment markers and not string literals. For example the following lines of C code ``` printf(&quot; /* &quot;); for (i = 0; i &amp;lt; 100; i++) { a += i; } printf(&quot; */ &quot;); ``` look to cloc like this: ``` printf(&quot; xxxxxxx xxxxxxx xxxxxxx xxxxxxx xxxxxxx &quot;); ``` where `xxxxxxx` represents cloc&#39;s view of commented text. Therefore cloc counts the five lines as two lines of C code and three lines of comments (lines with both code and comment are counted as code). &lt;p&gt;If you suspect your code has such strings, use the switch &lt;code&gt;--strip-str-comments&lt;/code&gt; to switch to the algorithm which removes embedded comment markers. Its use will render the five lines above as&lt;/p&gt; &lt;pre&gt;&lt;code&gt;printf(&quot;  &quot;);
for (i = 0; i &amp;lt; 100; i++) {
    a += i;
}
printf(&quot;  &quot;);
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;and therefore return a count of five lines of code. See the &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#complex-regular-subexpression-recursion-limit-&quot;&gt;previous section&lt;/a&gt; on drawbacks to using &lt;code&gt;--strip-str-comments&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; Embedded languages are not recognized. For example, an HTML file containing JavaScript will be counted entirely as HTML. &lt;/li&gt; 
 &lt;li&gt; Python docstrings can serve several purposes. They may contain documentation, comment out blocks of code, or they can be regular strings (when they appear on the right hand side of an assignment or as a function argument). cloc is unable to infer the meaning of docstrings by context; by default cloc treats all docstrings as comments. The switch `--docstring-as-code` treats all docstrings as code. &lt;/li&gt; 
 &lt;li&gt; Language definition files read with `--read-lang-def` or `--force-lang-def` must be plain ASCII text files. &lt;/li&gt; 
 &lt;li&gt; cloc treats compiler pragma&#39;s, for example `#if` / `#endif`, as code even if these are used to block lines of source from being compiled; the blocked lines still contribute to the code count. &lt;/li&gt; 
 &lt;li&gt; On Windows, cloc will fail with &lt;tt&gt;Can&#39;t cd to ... No such file or directory at 
   &lt;embedded&gt;
    /File/Find.pm
   &lt;/embedded&gt;&lt;/tt&gt; if the code being scanned has file paths longer than 255 characters. A work-around is to run cloc from the Windows Subsystem for Linux (WSL). &lt;/li&gt; 
 &lt;li&gt; cloc&#39;s comment match code uses regular expressions which cannot properly account for nested comments using the same comment markers (such as `/* /* */ */`). &lt;/li&gt; 
 &lt;li&gt; XML comments embedded within `CDATA` blocks are counted as comments rather than code. &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;Support for Additional Languages&lt;/h1&gt; 
&lt;p&gt;If cloc does not recognize a language you are interested in counting, you can either&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#implement-it-yourself&quot;&gt;implement it yourself&lt;/a&gt;,&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#request-to-implement&quot;&gt;request it to be implemented&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Implement an Additional Language&lt;/h2&gt; 
&lt;p&gt;In short, you will need to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;edit the &lt;code&gt;cloc&lt;/code&gt; file:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;look for &lt;code&gt;%{$rh_Language_by_Extension} = ( # {{{1&lt;/code&gt; and add, respecting the alphabetical order,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&#39;&amp;lt;ext&amp;gt;&#39; =&amp;gt; &#39;&amp;lt;Language Name&amp;gt;&#39;           ,
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;where &lt;code&gt;&amp;lt;ext&amp;gt;&lt;/code&gt; is the extension used by your language, and &lt;code&gt;&amp;lt;Language Name&amp;gt;&lt;/code&gt; is its name. Repeat for each extension used by your language.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;look for &lt;code&gt;%{$rhaa_Filters_by_Language} = ( # {{{1&lt;/code&gt;, and add, respecting the alphabetical order,&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;pre&gt;&lt;code&gt; &#39;&amp;lt;Language Name&amp;gt;&#39;     =&amp;gt; [
                              &amp;lt;list&amp;gt;
                          ],
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;where &lt;code&gt;&amp;lt;Language Name&amp;gt;&lt;/code&gt; is the name of the language you are implementing, and &lt;code&gt;&amp;lt;list&amp;gt;&lt;/code&gt; is a list of filter options (whose documentation remains to be written -- take inspiration from existing languages).&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;look for &lt;code&gt;%{$rh_Scale_Factor} = ( # {{{1&lt;/code&gt;, and add, respecting the alphabetical order,&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&#39;&amp;lt;Language Name&amp;gt;&#39;             =&amp;gt;   &amp;lt;factor&amp;gt;,
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;where &lt;code&gt;&amp;lt;Language Name&amp;gt;&lt;/code&gt; is the name of the language you are implementing, and &lt;code&gt;&amp;lt;factor&amp;gt;&lt;/code&gt; is a &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#third-generation-language-scale-factors-&quot;&gt;third generation language scale factor&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;edit the &lt;code&gt;Readme.md&lt;/code&gt; file, adding under &lt;a href=&quot;https://raw.githubusercontent.com/AlDanial/cloc/master/#recognized-languages-&quot;&gt;&quot;Recognized Languages&quot;&lt;/a&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;Language Name&amp;gt;                    (&amp;lt;list of extensions&amp;gt;)
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;for &lt;code&gt;&amp;lt;Language Name&amp;gt;&lt;/code&gt; the name of the language you are implementing, and &lt;code&gt;&amp;lt;list of extensions&amp;gt;&lt;/code&gt; the list of extensions you declared in &lt;code&gt;rh_Language_by_Extension&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;(optional, but recommended) Add a test case:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;Create a &lt;code&gt;tests/inputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;&lt;/code&gt; file, containing some code written in &lt;code&gt;&amp;lt;Language name&amp;gt;&lt;/code&gt;,&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;Generate a &lt;code&gt;‎tests/outputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;.yaml&lt;/code&gt; file, using&lt;/p&gt; &lt;pre&gt;&lt;code&gt;cloc --yaml tests/inputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt; --out ‎tests/outputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;.yaml
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;Add your case in &lt;code&gt;Unix/t/00_C.t&lt;/code&gt;: under &lt;code&gt;my @Tests = (&lt;/code&gt;, add&lt;/p&gt; &lt;pre&gt;&lt;code&gt;{
  &#39;name&#39; =&amp;gt; &#39;&amp;lt;Language name&amp;gt;&#39;,
  &#39;ref&#39;  =&amp;gt; &#39;../tests/outputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;.yaml&#39;,
  &#39;args&#39; =&amp;gt; &#39;../tests/inputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;&#39;,
},
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;Make sure you examine the output of &lt;code&gt;‎tests/outputs/&amp;lt;Language name&amp;gt;.&amp;lt;extension&amp;gt;.yaml&lt;/code&gt; and that it is correct, then run &lt;code&gt;make test&lt;/code&gt; from the &lt;code&gt;Unix&lt;/code&gt; folder to make sure your test was successful.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can use &lt;a href=&quot;https://github.com/AlDanial/cloc/pull/962&quot;&gt;this pull request&lt;/a&gt; or &lt;a href=&quot;https://github.com/AlDanial/cloc/pull/947&quot;&gt;this one&lt;/a&gt; as guidelines.&lt;/p&gt; 
&lt;h2&gt;Request an Additional Language&lt;/h2&gt; 
&lt;p&gt;Create a &lt;a href=&quot;https://github.com/AlDanial/cloc/issues&quot;&gt;GitHub issue&lt;/a&gt; requesting support for your language. Include this information:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; File extensions associated with the language. If the language does not rely on file extensions and instead works with fixed file names or with `#!` style program invocations, explain what those are.&lt;/li&gt; 
 &lt;li&gt; A description of how comments are defined.&lt;/li&gt; 
 &lt;li&gt; Links to sample code.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;Reporting Problems&lt;/h1&gt; 
&lt;p&gt;If you encounter a problem with cloc, first check to see if you&#39;re running with the latest version of the tool:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  cloc --version
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If the version is older than the most recent release at &lt;a href=&quot;https://github.com/AlDanial/cloc/releases&quot;&gt;https://github.com/AlDanial/cloc/releases&lt;/a&gt;, download the latest version and see if it solves your problem.&lt;/p&gt; 
&lt;p&gt;If the problem happens with the latest release, submit a new issue at &lt;a href=&quot;https://github.com/AlDanial/cloc/issues&quot;&gt;https://github.com/AlDanial/cloc/issues&lt;/a&gt; &lt;em&gt;only&lt;/em&gt; if you can supply enough information for anyone reading the issue report to reproduce the problem. That means providing&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; the operating system you&#39;re running on&lt;/li&gt; 
 &lt;li&gt; the cloc command with all options&lt;/li&gt; 
 &lt;li&gt; the code you are counting (URL to a public git repo or zip file or tar file, et cetera)&lt;/li&gt; 
&lt;/ol&gt; The last item is generally problematic. If the code base is proprietary or amounts to more than a few dozen kilobytes, you&#39;ll need to try to reconstruct similar inputs or demonstrate the problem with an existing public code base. 
&lt;p&gt;Problem reports that cannot be reproduced will be ignored and eventually closed.&lt;/p&gt; 
&lt;h1&gt;Citation&lt;/h1&gt; 
&lt;p&gt;Please use the following bibtex entry to cite cloc in a publication:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@software{adanial_cloc,
  author       = {Albert Danial},
  title        = {cloc: v2.10},
  month        = jan,
  year         = 2026,
  publisher    = {Zenodo},
  version      = {v2.10},
  doi          = {10.5281/zenodo.18364352},
  url          = {https://doi.org/10.5281/zenodo.18364352}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(Update the version number and corresponding year if this entry is outdated.)&lt;/p&gt; 
&lt;h1&gt;Acknowledgments&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/wolframroesler&quot;&gt;Wolfram Rösler&lt;/a&gt; provided most of the code examples in the test suite. These examples come from his &lt;a href=&quot;http://helloworldcollection.de/&quot;&gt;Hello World collection&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Ismet Kursunoglu found errors with the MUMPS counter and provided access to a computer with a large body of MUMPS code to test cloc.&lt;/p&gt; 
&lt;p&gt;Tod Huggins gave helpful suggestions for the Visual Basic filters.&lt;/p&gt; 
&lt;p&gt;Anton Demichev found a flaw with the JSP counter in cloc v0.76 and wrote the XML output generator for the &lt;code&gt;--xml&lt;/code&gt; option.&lt;/p&gt; 
&lt;p&gt;Reuben Thomas pointed out that ISO C99 allows &lt;code&gt;//&lt;/code&gt; as a comment marker, provided code for the &lt;code&gt;--no3&lt;/code&gt; and &lt;code&gt;--stdin-name&lt;/code&gt; options, counting the m4 language, and suggested several user-interface enhancements.&lt;/p&gt; 
&lt;p&gt;Michael Bello provided code for the &lt;code&gt;--opt-match-f&lt;/code&gt;, &lt;code&gt;--opt-not-match-f&lt;/code&gt;, &lt;code&gt;--opt-match-d&lt;/code&gt;, and &lt;code&gt;--opt-not-match-d&lt;/code&gt; options.&lt;/p&gt; 
&lt;p&gt;Mahboob Hussain inspired the &lt;code&gt;--original-dir&lt;/code&gt; and &lt;code&gt;--skip-uniqueness&lt;/code&gt; options, found a bug in the duplicate file detection logic and improved the JSP filter.&lt;/p&gt; 
&lt;p&gt;Randy Sharo found and fixed an uninitialized variable bug for shell scripts having only one line.&lt;/p&gt; 
&lt;p&gt;Steven Baker found and fixed a problem with the YAML output generator.&lt;/p&gt; 
&lt;p&gt;Greg Toth provided code to improve blank line detection in COBOL.&lt;/p&gt; 
&lt;p&gt;Joel Oliveira provided code to let &lt;code&gt;--exclude-list-file&lt;/code&gt; handle directory name exclusion.&lt;/p&gt; 
&lt;p&gt;Blazej Kroll provided code to produce an XSLT file, &lt;code&gt;cloc-diff.xsl&lt;/code&gt;, when producing XML output for the &lt;code&gt;--diff&lt;/code&gt; option.&lt;/p&gt; 
&lt;p&gt;Denis Silakov enhanced the code which generates &lt;code&gt;cloc.xsl&lt;/code&gt; when using &lt;code&gt;--by-file&lt;/code&gt; and &lt;code&gt;--by-file-by-lang&lt;/code&gt; options, and provided an XSL file that works with &lt;code&gt;--diff&lt;/code&gt; output.&lt;/p&gt; 
&lt;p&gt;Andy (&lt;a href=&quot;mailto:awalshe@sf.net&quot;&gt;awalshe@sf.net&lt;/a&gt;) provided code to fix several bugs: correct output of &lt;code&gt;--counted&lt;/code&gt; so that only files that are used in the code count appear and that results are shown by language rather than file name; allow &lt;code&gt;--diff&lt;/code&gt; output from multiple runs to be summed together with &lt;code&gt;--sum-reports&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Jari Aalto created the initial version of &lt;code&gt;cloc.1.pod&lt;/code&gt; and maintains the Debian package for cloc.&lt;/p&gt; 
&lt;p&gt;Mikkel Christiansen (&lt;a href=&quot;mailto:mikkels@gmail.com&quot;&gt;mikkels@gmail.com&lt;/a&gt;) provided counter definitions for Clojure and ClojureScript.&lt;/p&gt; 
&lt;p&gt;Vera Djuraskovic from &lt;a href=&quot;http://webhostinggeeks.com/&quot;&gt;Webhostinggeeks.com&lt;/a&gt; provided the &lt;a href=&quot;http://science.webhostinggeeks.com/cloc&quot;&gt;Serbo-Croatian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;Gill Ajoft of &lt;a href=&quot;http://www.ajoft.com&quot;&gt;Ajoft Software&lt;/a&gt; provided the &lt;a href=&quot;http://www.ajoft.com/wpaper/aj-cloc.html&quot;&gt;Bulgarian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;The &lt;a href=&quot;http://newknowledgez.com/&quot;&gt;Knowledge Team&lt;/a&gt; provided the &lt;a href=&quot;http://newknowledgez.com/cloc.html&quot;&gt;Slovakian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;Erik Gooven Arellano Casillas provided an update to the MXML counter to recognize ActionScript comments.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://g14n.info&quot;&gt;Gianluca Casati&lt;/a&gt; created the &lt;a href=&quot;https://metacpan.org/pod/App::cloc&quot;&gt;cloc CPAN package&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- broken link
Mary Stefanova provided the
[Polish](http://www.trevister.com/blog/cloc.html)
translation. ---&gt; 
&lt;p&gt;Ryan Lindeman implemented the &lt;code&gt;--by-percent&lt;/code&gt; feature.&lt;/p&gt; 
&lt;p&gt;Kent C. Dodds, &lt;a href=&quot;https://twitter.com/kentcdodd&quot;&gt;@kentcdodds&lt;/a&gt;, created and maintains the npm package of cloc.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://kudoybook.com&quot;&gt;Viktoria Parnak&lt;/a&gt; provided the &lt;a href=&quot;http://blog.kudoybook.com/cloc/&quot;&gt;Ukrainian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;Natalie Harmann provided the &lt;a href=&quot;http://www.besteonderdelen.nl/blog/?p=5426&quot;&gt;Belarussian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;Nithyal at &lt;a href=&quot;http://healthcareadministrationdegree.co/&quot;&gt;Healthcare Administration Portal&lt;/a&gt; provided the &lt;a href=&quot;http://healthcareadministrationdegree.co/socialwork/aldanial-cloc/&quot;&gt;Tamil&lt;/a&gt; translation.&lt;/p&gt; 
&lt;p&gt;Patricia Motosan provided the &lt;a href=&quot;http://www.bildelestore.dk/blog/cloc-contele-de-linii-de-cod/&quot;&gt;Romanian&lt;/a&gt; translation.&lt;/p&gt; 
&lt;!-- broken link
The [Garcinia Cambogia Review Team](http://www.garciniacambogiareviews.ca/)
provided the
[Arabic translation](http://www.garciniacambogiareviews.ca/translations/aldanial-cloc/). ---&gt; 
&lt;p&gt;Gajk Melikyan provided the provided the &lt;a href=&quot;http://students.studybay.com/?p=34&quot;&gt;Armenian translation&lt;/a&gt; for &lt;a href=&quot;http://studybay.com&quot;&gt;http://studybay.com&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.forallworld.com/cloc-grof-sornyi-kodot/&quot;&gt;Hungarian translation&lt;/a&gt; courtesy of &lt;a href=&quot;http://www.forallworld.com/&quot;&gt;Zsolt Boros&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/stsnel&quot;&gt;Sietse Snel&lt;/a&gt; implemented the parallel processing capability available with the &lt;code&gt;--processes=*N*&lt;/code&gt; switch.&lt;/p&gt; 
&lt;p&gt;The development of cloc was partially funded by the Northrop Grumman Corporation.&lt;/p&gt; 
&lt;h1&gt;Copyright&lt;/h1&gt; 
&lt;p&gt;Copyright (c) 2006-2026, &lt;a href=&quot;https://github.com/AlDanial&quot;&gt;Al Danial&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/9c148d3d9acea7dc8047ca5b34fbf40d172de600e5e395b4bb7202b2aa5a7f2f/AlDanial/cloc" medium="image" />
      
    </item>
    
    <item>
      <title>inverse-inc/packetfence</title>
      <link>https://github.com/inverse-inc/packetfence</link>
      <description>&lt;p&gt;PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) solution. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, powerful BYOD management options, 802.1X support, layer-2 isolation of problematic devices; PacketFence c…&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;PacketFence&lt;/h1&gt; 
&lt;h2&gt;What is PacketFence?&lt;/h2&gt; 
&lt;p&gt;PacketFence is a fully supported, trusted, Free and Open Source network access control (NAC) system. Boasting an impressive feature set including a captive-portal for registration and remediation, centralized wired and wireless management, 802.1X support, layer-2 isolation of problematic devices, integration with IDS solutions and vulnerability scanners; PacketFence can be used to effectively secure networks - from small to very large heterogeneous networks.&lt;/p&gt; 
&lt;p&gt;You want to know who is on your network? You want to give different access to your network based on who is connecting? PacketFence is for you!&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Follow the instructions provided in the &lt;a href=&quot;https://packetfence.org/support/index.html#/documentation&quot;&gt;Administration Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;More Information&lt;/h2&gt; 
&lt;p&gt;Noteworthy changes since the last release see the &lt;a href=&quot;https://github.com/inverse-inc/packetfence/raw/devel/NEWS.asciidoc&quot;&gt;NEWS file&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Upgrading? See the &lt;a href=&quot;https://github.com/inverse-inc/packetfence/raw/devel/docs/PacketFence_Upgrade_Guide.asciidoc&quot;&gt;Upgrade Guide&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For more details and developer visible changes see the &lt;a href=&quot;https://github.com/inverse-inc/packetfence&quot;&gt;project&#39;s page on Github&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Join the &lt;a href=&quot;https://packetfence.org/support/index.html#/community&quot;&gt;community&lt;/a&gt; or request &lt;a href=&quot;https://packetfence.org/support/index.html#/commercial&quot;&gt;commercial support&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;p&gt;PacketFence is a collaborative effort in order to create the best Open Source NAC solution. There are multiple ways you can contribute to the project.&lt;/p&gt; 
&lt;h3&gt;&lt;em&gt;You are a network vendor&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;Provide Inverse with switches, access points, wireless controllers, etc. so we can support even more equipment.&lt;/p&gt; 
&lt;h3&gt;&lt;em&gt;You are a security software vendor&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;Provide Inverse with licenses of your software so we can integrate your IDS, Netflow analyzer, IPS, Web filter, etc. directly into PacketFence and its captive portal technology.&lt;/p&gt; 
&lt;h3&gt;&lt;em&gt;You are a PacketFence user&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;You can provide:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Documentation reviews, enhancements and translations&lt;/li&gt; 
 &lt;li&gt;Share your ideas and participate to the discussion in &lt;a href=&quot;https://packetfence.org/support/index.html#/community&quot; title=&quot;Community Mailing Lists&quot;&gt;mailing lists&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Provide Inverse with switches, access points, wireless controllers, etc. so we can support even more equipment&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;em&gt;You are a developer&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;You can provide:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Documentation reviews, enhancements and translations&lt;/li&gt; 
 &lt;li&gt;Share your ideas and participate to the discussion in &lt;a href=&quot;https://packetfence.org/support/index.html#/community&quot; title=&quot;Community Mailing Lists&quot;&gt;mailing lists&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Patches for bugs or enhancements&lt;/li&gt; 
 &lt;li&gt;Write tests&lt;/li&gt; 
 &lt;li&gt;Handle tasks in our Roadmap&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;&lt;em&gt;You are a security researcher&lt;/em&gt;&lt;/h3&gt; 
&lt;p&gt;Push PacketFence into new areas by leveraging the extensibility built into PacketFence. A lot of the low-level plumbing is done for you so you can focus on demoing your ideas.&lt;/p&gt; 
&lt;p&gt;Get in touch with us on the developer &lt;a href=&quot;https://packetfence.org/support/index.html#/community&quot; title=&quot;Community Mailing Lists&quot;&gt;mailing list&lt;/a&gt; with your ideas!&lt;/p&gt; 
&lt;h2&gt;Source&lt;/h2&gt; 
&lt;p&gt;Feel free to fork our &lt;a href=&quot;https://github.com/inverse-inc/packetfence&quot;&gt;github repository&lt;/a&gt; if you are willing to contribute.&lt;/p&gt; 
&lt;p&gt;Most of the development happens in branches. Once ready for integration into &lt;a href=&quot;https://github.com/inverse-inc/packetfence/tree/devel&quot;&gt;devel&lt;/a&gt;, a pull request is opened and a code review takes place. See the list of &lt;a href=&quot;https://github.com/inverse-inc/packetfence/branches&quot;&gt;all branches in the works&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Translations&lt;/h2&gt; 
&lt;p&gt;PacketFence is available in various languages. The following list describes the official translations alongside their maintainers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;English - Inverse inc.&lt;/li&gt; 
 &lt;li&gt;Brazilian Portuguese - Diego de Souza Lopes&lt;/li&gt; 
 &lt;li&gt;French - Inverse inc.&lt;/li&gt; 
 &lt;li&gt;Norwegian&lt;/li&gt; 
 &lt;li&gt;Polish - Maciej Uhlig&lt;/li&gt; 
 &lt;li&gt;Spanish (Spain) - Dominique Couot&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you would like to translate the software in an other language, please consult the &lt;a href=&quot;https://packetfence.org/support/faq/article/how-to-translate-packetfence-in-another-language.html&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Licensed under the GNU General Public License v2.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;a href=&quot;https://inverse.ca/&quot;&gt;Inverse inc.&lt;/a&gt; leads the development of the solution. Over the years, numerous people and organizations have contributed to the project and we would like to thank them all !&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/cea9e07b355c38d6f87ff31ad0a2d8cee8b7263b17ddaaca53277d74be1a0c3d/inverse-inc/packetfence" medium="image" />
      
    </item>
    
    <item>
      <title>OpenKore/openkore</title>
      <link>https://github.com/OpenKore/openkore</link>
      <description>&lt;p&gt;A free/open source client and automation tool for Ragnarok Online&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/b/b5/Kore_2g_logo.png&quot; alt=&quot;logo&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://deepwiki.com/OpenKore/openkore&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/language-Perl-blue.svg?sanitize=true&quot; alt=&quot;Language&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/stars/OpenKore/openkore&quot; alt=&quot;Stars&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/forks/OpenKore/openkore?label=Fork&quot; alt=&quot;Fork&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/watchers/OpenKore/openkore?label=Watch&quot; alt=&quot;Watch&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/issues/OpenKore/openkore&quot; alt=&quot;Issues&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/issues-pr/OpenKore/openkore.svg?sanitize=true&quot; alt=&quot;Pull Requests&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/contributors/OpenKore/openkore.svg?sanitize=true&quot; alt=&quot;Contributors&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/OpenKore/openkore/build_XSTools.yml?branch=master&quot; alt=&quot;Github_Workflow_status&quot; /&gt; &lt;img src=&quot;https://github.com/OpenKore/openkore/actions/workflows/build_XSTools.yml/badge.svg?sanitize=true&quot; alt=&quot;Github_Workflow_CI&quot; /&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;OpenKore is a custom client and intelligent automated assistant for Ragnarok Online.&lt;/li&gt; 
 &lt;li&gt;It is a &lt;strong&gt;free&lt;/strong&gt;, open source and cross-platform program &lt;em&gt;(Linux, Windows and MacOS are supported)&lt;/em&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Prerequisites&lt;/h2&gt; 
&lt;p&gt;To run OpenKore you will need:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openkore.com/wiki/How_to_run_OpenKore#Requirements&quot;&gt;Read the Requirements page on our wiki&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OpenKore/openkore/archive/master.zip&quot;&gt;Download OpenKore&lt;/a&gt; and extract it. Alternatively, you could press the &lt;strong&gt;Windows Key + R&lt;/strong&gt;, type in &lt;code&gt;cmd&lt;/code&gt; &amp;amp; enter. Run the following command in the cmd to clone. &lt;em&gt;&lt;strong&gt;Note: &lt;a href=&quot;https://git-scm.com/&quot;&gt;Git&lt;/a&gt; required.&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;git clone https://github.com/OpenKore/openkore.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Configure OpenKore: &lt;a href=&quot;https://openkore.com/wiki/Category:control&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Run &lt;a href=&quot;http://openkore.pl&quot;&gt;openkore.pl&lt;/a&gt; &lt;em&gt;(You can run start.exe or wxstart.exe if you use Windows)&lt;/em&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;F.A.Q. (Frequently Asked Questions)&lt;/h2&gt; 
&lt;!-- Source: https://forums.openkore.com/viewtopic.php?f=0&amp;t=11287 --&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Have a problem?&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Update your openkore or download a new one.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Still having problems?&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Search in &lt;a href=&quot;https://openkore.com/wiki/&quot;&gt;Wiki&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;Search in &lt;a href=&quot;https://forums.openkore.com/&quot;&gt;Forum&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;Search in &lt;a href=&quot;https://github.com/openkore/openkore/issues?utf8=%E2%9C%93&amp;amp;q=&quot;&gt;Github issues&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cant find what you need? / Do not understand?&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Ask in &lt;a href=&quot;https://discord.com/invite/hdAhPM6&quot;&gt;Discord&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Is it a problem in Openkore?&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Read &lt;a href=&quot;https://github.com/OpenKore/openkore#things-to-know&quot;&gt;things to know&lt;/a&gt; before &lt;a href=&quot;https://github.com/OpenKore/openkore/issues/new&quot;&gt;reporting&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Things to know&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Make sure you&#39;ve read &lt;a href=&quot;https://github.com/OpenKore/openkore#faq-frequently-asked-questions&quot;&gt;FAQ&lt;/a&gt; especially to &lt;a href=&quot;https://github.com/OpenKore/openkore/commits/master&quot;&gt;run latest commit on master branch&lt;/a&gt; &amp;amp; checking &lt;a href=&quot;https://github.com/OpenKore/openkore/issues?utf8=%E2%9C%93&amp;amp;q=&quot;&gt;existed issue for your request.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Please post in English.&lt;/li&gt; 
 &lt;li&gt;Please use the issue template.&lt;/li&gt; 
 &lt;li&gt;Please include informations about your server &amp;amp; any changes you did in your configuration.&lt;/li&gt; 
 &lt;li&gt;Briefly explain what happened, take a screenhot &amp;amp; include the error message &lt;em&gt;(If available)&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;Please be advised any developers here are doing this on their free time. Please give some time for anyone to respond.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Status of botting on Official Servers&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Server&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Protection&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
   &lt;th&gt;Supporter&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.gnjoy.asia/&quot;&gt;aRO Baphomet&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Asia RO&lt;/td&gt; 
   &lt;td&gt;CheatDefender&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://playragnarokonlinebr.com/&quot;&gt;bRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Brazil RO&lt;/td&gt; 
   &lt;td&gt;EAC&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ro.zhaouc.com/&quot;&gt;cRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;China RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://eu.4game.com/roprime/&quot;&gt;euRO Prime&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Europe RO&lt;/td&gt; 
   &lt;td&gt;Frost Security&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;http://renewal.playragnarok.com/&quot;&gt;iRO Сhaos/Thor/Freya&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;International RO&lt;/td&gt; 
   &lt;td&gt;EAC&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://roclassic.gnjoy.id/&quot;&gt;idRO Classic&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Indonesia RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ro.gnjoy.id/&quot;&gt;idRO Yggdrasil&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Indonesia RO (Forever Love)&lt;/td&gt; 
   &lt;td&gt;EAC&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ragnarokonline.gungho.jp/&quot;&gt;jRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Japan RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;http://ro.gnjoy.com/&quot;&gt;kRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Korea RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;http://roz.gnjoy.com/&quot;&gt;kRO Zero&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Korea RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://rola.maxion.gg/&quot;&gt;laRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Latam (Landverse America)&lt;/td&gt; 
   &lt;td&gt;Custom&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.gnjoylatam.com/&quot;&gt;ROla&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Latam RO&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ru.4game.com/roprime/&quot;&gt;ruRO Prime&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Russia RO&lt;/td&gt; 
   &lt;td&gt;Frost Security&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;ya4ept&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ro.gnjoy.in.th/&quot;&gt;tRO Chaos/Thor&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thailand RO (Online)&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://roc.gnjoy.in.th/&quot;&gt;tRO Classic&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thailand RO (Classic)&lt;/td&gt; 
   &lt;td&gt;nProtect&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://rolth.maxion.gg/&quot;&gt;tRO Baphomet&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thailand (Landverse)&lt;/td&gt; 
   &lt;td&gt;Custom&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://rolg.maxion.gg/&quot;&gt;tRO Baphomet&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Thailand (Landverse Genesis)&lt;/td&gt; 
   &lt;td&gt;Custom&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://ro.gnjoy.com.tw/&quot;&gt;twRO&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Taiwan RO&lt;/td&gt; 
   &lt;td&gt;CheatDefender&lt;/td&gt; 
   &lt;td&gt;Not Working&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;OpenKore is developed by a &lt;a href=&quot;https://github.com/OpenKore/openkore/graphs/contributors&quot;&gt;team&lt;/a&gt; located around the world. Check out the &lt;a href=&quot;https://openkore.com/wiki/Manual&quot;&gt;documentation&lt;/a&gt; and if necessary, submit a pull request.&lt;/p&gt; 
&lt;h2&gt;Contacts&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openkore.com/wiki/&quot;&gt;OpenKore Wiki&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://forums.openkore.com/&quot;&gt;OpenKore forum&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.com/invite/hdAhPM6&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://RO-fan.ru/&quot;&gt;Russian Community&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;/h2&gt; 
&lt;p&gt;Other communities or websites are not affiliated to &lt;a href=&quot;http://openkore.com&quot;&gt;openkore.com&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Other Links&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openkore.com/wiki/OpenKore&quot;&gt;Openkore History&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OpenKore/openkore/raw/master/LegacyChangelog.md&quot;&gt;Legacy Changelog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openkore.com/wiki/roadmap&quot;&gt;Openkore RoadMap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openkore.com/wiki/Category:Feature_Request&quot;&gt;Feature Requests and TODO Wiki&lt;/a&gt; and &lt;a href=&quot;https://github.com/OpenKore/openkore/issues?q=is%3Aopen+is%3Aissue+label%3A%22feature+request%22&quot;&gt;Feature Requests GitHub&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This software is open source, licensed under the GNU General Public License, version 2. Basically, this means that you&#39;re free to use and allowed to modify and distribute this software. However, if you distribute modified versions, you &lt;strong&gt;MUST&lt;/strong&gt; also distribute the source code.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.html&quot;&gt;https://www.gnu.org/licenses/gpl-3.0.html&lt;/a&gt; for the full license.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a89d120672066f8267c104b7e96936021162d3dc221f962754e89dcd1dfb80a5/OpenKore/openkore" medium="image" />
      
    </item>
    
    <item>
      <title>exiftool/exiftool</title>
      <link>https://github.com/exiftool/exiftool</link>
      <description>&lt;p&gt;ExifTool meta information reader/writer&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;ExifTool by Phil Harvey (philharvey66 at &lt;a href=&quot;http://gmail.com&quot;&gt;gmail.com&lt;/a&gt;)&lt;/h2&gt; 
&lt;p&gt;ExifTool is a customizable set of Perl modules plus a full-featured command-line application for reading and writing meta information in a wide variety of files, including the maker note information of many digital cameras by various manufacturers such as Canon, Casio, DJI, FLIR, FujiFilm, GE, HP, JVC/Victor, Kodak, Leaf, Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson, Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo, Sigma/Foveon and Sony.&lt;/p&gt; 
&lt;p&gt;Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create):&lt;/p&gt; 
&lt;p&gt;File Types ------------+-------------+-------------+-------------+------------ 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RTF r 3FR r | DSF r | JP2 r/w | ODS r | RW2 r/w 3G2 r/w | DSS r | JPEG r/w | ODT r | RWL r/w 3GP r/w | DV r | JSON r | OFR r | RWZ r 7Z r | DVB r/w | JXL r/w | OGG r | RM r A r | DVR-MS r | K25 r | OGV r | SEQ r AA r | DYLIB r | KDC r | ONP r | SKETCH r AAC r | EIP r | KEY r | OPUS r | SO r AAE r | EPS r/w | KVAR r | ORF r/w | SR2 r/w AAX r/w | EPUB r | LA r | ORI r/w | SRF r ACR r | ERF r/w | LFP r | OTF r | SRW r/w AFM r | EXE r | LIF r | PAC r | SVG r AI r/w | EXIF r/w/c | LNK r | PAGES r | SWF r AIFF r | EXR r | LRV r/w | PBM r/w | THM r/w APE r | EXV r/w/c | M2TS r | PCAP r | TIFF r/w ARQ r/w | F4A/V r/w | M4A/V r/w | PCAPNG r | TNEF r ARW r/w | FFF r/w | MACOS r | PCD r | TORRENT r ASF r | FIT r | MAX r | PCX r | TTC r AVI r | FITS r | MEF r/w | PDB r | TTF r AVIF r/w | FLA r | MIE r/w/c | PDF r/w | TXT r AZW r | FLAC r | MIFF r | PEF r/w | URL r BMP r | FLIF r/w | MKA r | PFA r | VCF r BPG r | FLV r | MKS r | PFB r | VNT r BTF r | FPF r | MKV r | PFM r | VRD r/w/c C2PA r | FPX r | MNG r/w | PGF r | VSD r CHM r | GIF r/w | MOBI r | PGM r/w | VSDX r COS r | GLV r/w | MODD r | PLIST r | WAV r CR2 r/w | GPR r/w | MOI r | PICT r | WDP r/w CR3 r/w | GZ r | MOS r/w | PMP r | WEBP r/w CRM r/w | HDP r/w | MOV r/w | PNG r/w | WEBM r CRW r/w | HDR r | MP3 r | PPM r/w | WMA r CS1 r/w | HEIC r/w | MP4 r/w | PPT r | WMV r CSV r | HEIF r/w | MPC r | PPTX r | WOFF r CUR r | HTML r | MPG r | PS r/w | WOFF2 r CZI r | ICC r/w/c | MPO r/w | PSB r/w | WPG r DCM r | ICO r | MQV r/w | PSD r/w | WTV r DCP r/w | ICS r | MRC r | PSP r | WV r DCR r | IDML r | MRW r/w | QTIF r/w | X3F r/w DFONT r | IIQ r/w | MXF r | R3D r | XCF r DIVX r | IND r/w | NEF r/w | RA r | XISF r DJVU r | INSP r/w | NKA r | RAF r/w | XLS r DLL r | INSV r | NKSC r/w | RAM r | XLSX r DNG r/w | INX r | NRW r/w | RAR r | XMP r/w/c DOC r | ISO r | NUMBERS r | RAW r/w | ZIP r DOCX r | ITC r | NXD r | RIFF r | DPX r | J2C r | O r | RSRC r |&lt;/p&gt; 
&lt;p&gt;Meta Information ----------------------+----------------------+--------------------- EXIF r/w/c | CIFF r/w | Ricoh RMETA r GPS r/w/c | AFCP r/w | Picture Info r IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r XMP r/w/c | FotoStation r/w | MPF r MakerNotes r/w/c | PhotoMechanic r/w | Stim r Photoshop IRB r/w/c | JPEG 2000 r | DPX r ICC Profile r/w/c | DICOM r | APE r MIE r/w/c | Flash r | Vorbis r JFIF r/w/c | FlashPix r | SPIFF r Ducky APP12 r/w/c | QuickTime r | DjVu r PDF r/w/c | Matroska r | M2TS r PNG r/w/c | MXF r | PE/COFF r Canon VRD r/w/c | PrintIM r | AVCHD r Nikon Capture r/w/c | FLAC r | ZIP r GeoTIFF r/w/c | ID3 r | (and more)&lt;/p&gt; 
&lt;p&gt;See html/index.html for more details about ExifTool features.&lt;/p&gt; 
&lt;p&gt;ExifTool can be downloaded from&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://exiftool.org/&quot;&gt;https://exiftool.org/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;RUNNING&lt;/p&gt; 
&lt;p&gt;The exiftool script can be run right away without the need to install Image::ExifTool. For example, from within the exiftool directory you can extract the information from one of the included test files by typing:&lt;/p&gt; 
&lt;p&gt;./exiftool t/images/ExifTool.jpg&lt;/p&gt; 
&lt;p&gt;If you move the exiftool script to a different directory, you must also either move the contents of the lib directory or install the Image::ExifTool package so the script can find the necessary libraries.&lt;/p&gt; 
&lt;p&gt;Note: If you are using the Windows cmd shell, you may need to rename &#39;exiftool&#39; to &#39;&lt;a href=&quot;http://exiftool.pl&quot;&gt;exiftool.pl&lt;/a&gt;&#39; to run it directly from the command line. Alternatively, you can run exiftool with the command &#39;perl exiftool&#39;.&lt;/p&gt; 
&lt;p&gt;IF YOU ARE STILL CONFUSED&lt;/p&gt; 
&lt;p&gt;The exiftool script is a command line application. You run it by typing commands in a terminal window. The first step is to determine the name of the directory where you downloaded the ExifTool distribution package. Assuming, for example, you downloaded it to a folder called &quot;Desktop&quot; in your home directory, then you would type the following commands in a terminal window to extract and run ExifTool:&lt;/p&gt; 
&lt;p&gt;cd ~/Desktop gzip -dc Image-ExifTool-13.59.tar.gz | tar -xf - cd Image-ExifTool-13.59 ./exiftool t/images/ExifTool.jpg&lt;/p&gt; 
&lt;p&gt;Note: These commands extract meta information from one of the test images. To use one of your images instead, enter the full path name of your file in place of &quot;t/images/ExifTool.jpg&quot;.&lt;/p&gt; 
&lt;p&gt;INSTALLATION&lt;/p&gt; 
&lt;p&gt;You can install the Image::ExifTool package to make it available for use by other Perl scripts by typing the following:&lt;/p&gt; 
&lt;p&gt;perl &lt;a href=&quot;http://Makefile.PL&quot;&gt;Makefile.PL&lt;/a&gt; make make test make install&lt;/p&gt; 
&lt;p&gt;Notes: i) You need root access for the last step above.&lt;/p&gt; 
&lt;p&gt;ii) Some Perl installations (like the standard OSX installation) may not contain the necessary files to complete the first step above. But no worries: You can install ExifTool manually by moving &#39;exiftool&#39; and the &#39;lib&#39; directory to any directory in your current PATH (ie. /usr/bin).&lt;/p&gt; 
&lt;p&gt;iii) In Windows, &quot;dmake&quot; or &quot;nmake&quot; may be used if &quot;make&quot; is not available.&lt;/p&gt; 
&lt;p&gt;(Also see html/install.html for more help with installation.)&lt;/p&gt; 
&lt;p&gt;DEPENDENCIES&lt;/p&gt; 
&lt;p&gt;Requires Perl version 5.004 or later. No other special libraries are required, however the following modules are recommended for decoding compressed and/or encrypted information from the indicated file types, and for calculating digest values and providing other features listed below:&lt;/p&gt; 
&lt;p&gt;Archive::Zip (ZIP, DOCX, PPTX, XLSX, ODP, ODS, ODT, EIP, iWork) Compress::Zlib (DNG, PNG, PDF, DCM, MIE and SWF files) Digest::MD5 (PDF files, IPTC information, and JPG Extended XMP) Digest::SHA (PDF with AES-256 encryption) IO::Compress::Bzip2 (RWZ files) Time::HiRes (for generating ProcessingTime tag) POSIX::strptime (for inverse date/time conversion) Time::Piece (alternative to POSIX::strptime) Unicode::LineBreak (for column alignment of alternate-language output) Win32::API (for proper handling of Windows file names/times) Win32::FindFile (for Windows Unicode directory support, app only) Win32API::File (for Windows Unicode file names and file times) File::StatX (for reading FileCreateDate on Linux systems) Compress::Raw::Lzma (for reading encoded 7z files) IO::Compress::RawDeflate (for writing FLIF images) IO::Uncompress::RawInflate (for reading FLIF images) IO::Compress::Brotli (for writing compressed JXL metadata) IO::Uncompress::Brotli (for reading compressed JXL metadata)&lt;/p&gt; 
&lt;p&gt;COPYRIGHT AND LICENSE&lt;/p&gt; 
&lt;p&gt;Copyright 2003-2026, Phil Harvey&lt;/p&gt; 
&lt;p&gt;This is free software; you can redistribute it and/or modify it under the same terms as Perl itself (either the Perl Artistic License or GPL).&lt;/p&gt; 
&lt;p&gt;DISTRIBUTION FILES&lt;/p&gt; 
&lt;p&gt;Below is a list of the files/directories included in the full ExifTool distribution package:&lt;/p&gt; 
&lt;p&gt;Changes - Revision history MANIFEST - Full list of distribution files META.json - Standard CPAN dependency file (JSON format) META.yml - Standard CPAN dependency file (YAML format) &lt;a href=&quot;http://Makefile.PL&quot;&gt;Makefile.PL&lt;/a&gt; - Makefile for installation README - This file arg_files/ - Argument files to convert metadata formats: exif2iptc.args - Arguments for converting EXIF to IPTC exif2xmp.args - Arguments for converting EXIF to XMP gps2xmp.args - Arguments for converting GPS to XMP iptc2exif.args - Arguments for converting IPTC to EXIF iptc2xmp.args - Arguments for converting IPTC to XMP iptcCore.args - Complete list of IPTC Core XMP tags pdf2xmp.args - Arguments for converting PDF to XMP xmp2exif.args - Arguments for converting XMP to EXIF xmp2gps.args - Arguments for converting XMP to GPS xmp2iptc.args - Arguments for converting XMP to IPTC xmp2pdf.args - Arguments for converting XMP to PDF build_geolocation - Build custom Geolocation database config_files/ - Sample ExifTool configuration files: acdsee.config - Definitions for writing ACDSee XMP regions age.config - Calculate Age of person in photo bibble.config - Definitions for writing Bibble XMP tags convert_regions.config - Convert between MWG, MP and IPTC regions cuepointlist.config - Extract cue points and labels as a list depthmap.config - Extract Google DepthMap images example.config - General example showing config features fotoware.config - Definitions for writing Fotoware XMP tags frameCount.config - Extract FrameCount from MP4 videos gps2utm.config - Generate UTM coordinate tags from GPS info guano.config - Decode individual tags from Guano metadata local_time.config - Determine local time from GPS information nksc.config - Decode tags in Nikon ViewNX NKSC files novelty.config - Definitions for XMP Novelty Theory tags onone.config - Definitions for writing On1 XMP tags photoshop_paths.config - For extracting or copying Photoshop paths picasa_faces.config - Convert from Picasa to MWG/MP face regions pix4d.config - Definitions for writing Pix4D XMP tags rotate_regions.config - Rotate MWG and MP region tags tiff_version.config - Determine the version of a TIFF file time_zone.config - Calculate time zone from EXIF tags exiftool - The exiftool application (Perl script) fmt_files/ - Output formatting example files: gpx.fmt - Format file for creating GPX track gpx_wpt.fmt - Format file for creating GPX waypoints kml.fmt - Format file for creating KML placemarks kml_track.fmt - Format file for creating KML track html/ - HTML documentation html/TagNames/ - HTML tag name documentation lib/ - ExifTool Perl library modules perl-Image-ExifTool.spec - Red Hat Packaging Manager specification file t/ - Verification test code t/images/ - Verification test images&lt;/p&gt; 
&lt;p&gt;ADDITIONAL INFORMATION&lt;/p&gt; 
&lt;p&gt;Read the following files included in the full distribution for more information:&lt;/p&gt; 
&lt;p&gt;html/index.html - Main ExifTool documentation html/install.html - Installation instructions html/history.html - Revision history html/ExifTool.html - API documentation html/TagNames/index.html - Tag name documentation html/geotag.html - Geotag feature html/geolocation.html - Geolocation feature html/faq.html - Frequently asked questions html/filename.html - Renaming/moving files html/metafiles.html - Working with metadata sidecar files html/struct.html - Working with structured XMP information lib/Image/ExifTool/README - ExifTool library modules documentation&lt;/p&gt; 
&lt;p&gt;and if you have installed Image::ExifTool, you can also consult perldoc or the man pages:&lt;/p&gt; 
&lt;p&gt;perldoc exiftool perldoc Image::ExifTool perldoc Image::ExifTool::TagNames&lt;/p&gt; 
&lt;p&gt;man exiftool man Image::ExifTool man Image::ExifTool::TagNames&lt;/p&gt; 
&lt;p&gt;Note: If the man pages don&#39;t work, it is probably because your man path is not set to include the installed documentation. See &quot;man man&quot; for information about how to set the man path.&lt;/p&gt; 
&lt;hr /&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/132751855/4b8486bb-f2f4-417a-be6e-8c3b30b354fd" medium="image" />
      
    </item>
    
    <item>
      <title>os-autoinst/os-autoinst-distri-opensuse</title>
      <link>https://github.com/os-autoinst/os-autoinst-distri-opensuse</link>
      <description>&lt;p&gt;os-autoinst test cases for openSUSE&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;em&gt;osado&lt;/em&gt; - os-autoinst/openQA tests for openSUSE and SUSE Linux Enterprise&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/os-autoinst/os-autoinst-distri-opensuse/actions&quot;&gt;&lt;img src=&quot;https://github.com/os-autoinst/os-autoinst-distri-opensuse/workflows/ci/badge.svg?sanitize=true&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Status of &lt;a href=&quot;https://get.opensuse.org/tumbleweed/&quot;&gt;openSUSE Tumbleweed&lt;/a&gt; tests:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Test&lt;/th&gt; 
   &lt;th&gt;Badge&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;GNOME on Tumbleweed&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://openqa.opensuse.org/tests/latest?&amp;amp;arch=x86_64&amp;amp;distri=opensuse&amp;amp;flavor=DVD&amp;amp;machine=64bit&amp;amp;test=gnome&amp;amp;version=Tumbleweed&quot;&gt;&lt;img src=&quot;https://openqa.opensuse.org/tests/latest/badge?arch=x86_64&amp;amp;distri=opensuse&amp;amp;flavor=DVD&amp;amp;machine=64bit&amp;amp;test=gnome&amp;amp;version=Tumbleweed&amp;amp;show_build=1&quot; alt=&quot;Gnome on Tumbleweed&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;KDE on Tumbleweed&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://openqa.opensuse.org/tests/latest?arch=x86_64&amp;amp;distri=opensuse&amp;amp;flavor=DVD&amp;amp;machine=64bit&amp;amp;test=kde&amp;amp;version=Tumbleweed&quot;&gt;&lt;img src=&quot;https://openqa.opensuse.org/tests/latest/badge?arch=x86_64&amp;amp;distri=opensuse&amp;amp;flavor=DVD&amp;amp;machine=64bit&amp;amp;test=kde&amp;amp;version=Tumbleweed&amp;amp;show_build=1&quot; alt=&quot;KDE on Tumbleweed&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;em&gt;osado&lt;/em&gt; – or with long name &lt;em&gt;os-autoinst-distri-opensuse&lt;/em&gt; – is repo which contains the &lt;a href=&quot;https://en.wikipedia.org/wiki/Software_distribution&quot;&gt;test distribution&lt;/a&gt; of the suite and harness, executed by openQA for openSUSE and SLE distributions.&lt;/p&gt; 
&lt;p&gt;Why the name &lt;em&gt;osado&lt;/em&gt;? Two reasons:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;It means &quot;bold&quot; or &quot;daring&quot; in Spanish and this is what this project tries to be 😃&lt;/li&gt; 
 &lt;li&gt;&lt;em&gt;osado&lt;/em&gt; is an acronym of &lt;strong&gt;os&lt;/strong&gt;-&lt;strong&gt;a&lt;/strong&gt;utoinst-&lt;strong&gt;d&lt;/strong&gt;istri-&lt;strong&gt;o&lt;/strong&gt;pensuse&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Needles for openSUSE distributions are located in &lt;a href=&quot;https://github.com/os-autoinst/os-autoinst-needles-opensuse&quot;&gt;os-autoinst-needles-opensuse&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Some documentation from the test library is published at &lt;a href=&quot;https://os-autoinst.github.io/os-autoinst-distri-opensuse/&quot;&gt;https://os-autoinst.github.io/os-autoinst-distri-opensuse/&lt;/a&gt;, however this is still WIP&lt;/p&gt; 
&lt;p&gt;For more details see &lt;a href=&quot;http://open.qa/&quot;&gt;http://open.qa/&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Please, find test variables description &lt;a href=&quot;https://github.com/os-autoinst/os-autoinst-distri-opensuse/raw/master/variables.md&quot;&gt;here&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;For using new mechanism to schedule modules, check &lt;a href=&quot;https://raw.githubusercontent.com/os-autoinst/os-autoinst-distri-opensuse/master/declarative-schedule-doc.md&quot;&gt;declarative schedule docs&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;In case of adding new test for Installation, please use approach described in the &lt;a href=&quot;https://raw.githubusercontent.com/os-autoinst/os-autoinst-distri-opensuse/master/ui-framework-documentation.md&quot;&gt;documentation for UI Test Automation Framework&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;How to contribute&lt;/h2&gt; 
&lt;p&gt;Please, refer to &lt;a href=&quot;https://github.com/os-autoinst/os-autoinst-distri-opensuse/raw/master/CONTRIBUTING.md&quot;&gt;Contributing Guide&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; You can enable optional local git hooks for automatic commit message validation (requires git 2.54.0+). See the Contributing Guide for setup instructions.&lt;/p&gt; 
&lt;h2&gt;How to get in touch&lt;/h2&gt; 
&lt;p&gt;Reach us via &lt;a href=&quot;https://open.qa/contact&quot;&gt;https://open.qa/contact&lt;/a&gt;, we are also on twitter as &lt;a href=&quot;https://twitter.com/openQAhq&quot;&gt;https://twitter.com/openQAhq&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;You can also read about some of the teams at &lt;a href=&quot;https://progress.opensuse.org/projects/qa/wiki&quot;&gt;https://progress.opensuse.org/projects/qa/wiki&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Most files are licensed under a minimal copyleft conforming to the &lt;a href=&quot;https://spdx.org/licenses/FSFAP.html&quot;&gt;FSF All Permissive License&lt;/a&gt;, but some more complex tests are licensed under the GPL. So please check the license within the files.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/78f1a9c5cb5095712c9331bfc7d9bc2fe840849360abbd910161a7d4ca2132ca/os-autoinst/os-autoinst-distri-opensuse" medium="image" />
      
    </item>
    
    <item>
      <title>Zimbra/zm-build</title>
      <link>https://github.com/Zimbra/zm-build</link>
      <description>&lt;p&gt;zm-build for Zimbra Collaboration Suite, FOSS Edition&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;zm-build&lt;/h1&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;p&gt;This repository contains the build script and supporting files required to create a &lt;a href=&quot;https://en.wikipedia.org/wiki/Free_and_open-source_software&quot;&gt;FOSS&lt;/a&gt; build of the &lt;a href=&quot;https://www.zimbra.com/&quot;&gt;Zimbra Collaboration Suite&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;build.pl&lt;/code&gt; - Invoke this script to produce a build. See the &lt;em&gt;Building&lt;/em&gt; section below for an example.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;instructions/&lt;/code&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;FOSS_remote_list.pl&lt;/code&gt; - Maps between remote label and URL&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;FOSS_repo_list.pl&lt;/code&gt; - Specifies which branches (or tags) are checked out to build each component repository.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;FOSS_staging_list.pl&lt;/code&gt; - defines the staging order and details.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Setup with Zimbra Development Images (used for building)&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Set up docker on your box&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;You can then pull and run using development images (built from Zimbra/zm-base-os.git)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;In case you need to customize the images for your purposes, you could maintain your own Dockerfile such as this:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  $ cat Dockerfile
  FROM zimbra/zm-base-os:devcore-ubuntu-16.04
  RUN sudo apt-get install emacs my-special-tool etc..
  RUN ...

  $ docker build -t myuser/my-devcore-ubuntu-16 .
  $ docker run -it myuser/my-devcore-ubuntu-16 bash
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Ubuntu 16.04&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;docker run -it zimbra/zm-base-os:devcore-ubuntu-16.04 bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;CentOS 7&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;docker run -it zimbra/zm-base-os:devcore-centos-7 bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;CentOS 6&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;docker run -it zimbra/zm-base-os:devcore-centos-6 bash

# some tools are installed inside /home/build/.zm-dev-tools/, zm-build automatically sources this path.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Setup (traditional)&lt;/h2&gt; 
&lt;h3&gt;Ubuntu 16.04&lt;/h3&gt; 
&lt;p&gt;The following steps assume that your are starting with a clean VM and are logged in as a non-root user with &lt;code&gt;sudo&lt;/code&gt; privileges.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install software-properties-common openjdk-8-jdk ant ant-optional ant-contrib ruby git maven build-essential debhelper
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;CentOS 7&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;sudo yum groupinstall &#39;Development Tools&#39;
sudo yum install java-1.8.0-openjdk ant ant-junit ruby git maven cpan wget perl-IPC-Cmd
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;CentOS 6&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;sudo yum groupinstall &#39;Development Tools&#39;
sudo yum remove java-1.7.0-openjdk java-1.6.0-openjdk ant
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel ruby git cpan wget
# install specific perl modules
sudo cpan IPC::Cmd
cd /tmp
# install maven
wget http://mirror.metrocast.net/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
sudo tar -xf apache-maven-3.3.9-bin.tar.gz
sudo mv apache-maven-3.3.9 /opt
echo &#39;export PATH=&quot;/opt/apache-maven-3.3.9/bin:$PATH&quot;&#39; | sudo tee -a /etc/profile.d/maven.sh
# install current version of ant
wget https://www.apache.org/dist/ant/binaries/apache-ant-1.9.9-bin.zip
sudo unzip apache-ant-1.9.9-bin.zip
sudo mv apache-ant-1.9.9 /opt
echo &#39;export PATH=&quot;/opt/apache-ant-1.9.9/bin:$PATH&quot;&#39; | sudo tee -a /etc/profile.d/ant.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Building&lt;/h2&gt; 
&lt;p&gt;Create a directory for your build and check-out the &lt;code&gt;zm-build&lt;/code&gt; repository: Build from develop branch&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir installer-build
cd installer-build
git clone https://github.com/Zimbra/zm-build.git
cd zm-build
git checkout origin/develop
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --ant-options -DskipCoverage=true --ant-options -DskipSonarScan=true --git-default-branch=develop --build-release-no=10.1.0 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Build 10.1.0&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir installer-build
cd installer-build
git clone --depth 1 --branch 10.1.0 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=10.1.0 --build-release-no=10.1.0 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To build a specific patch example 10.0.8 run the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir installer-build
cd installer-build
git clone --depth 1 --branch 10.0.6 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=10.0.8,10.0.7,10.0.6,10.0.5,10.0.4,10.0.3,10.0.2,10.0.1,10.0.0-GA --build-release-no=10.0.8 --build-type=FOSS --build-release=LIBERTY --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or for example 9.0.0.p40 run the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mkdir installer-build
cd installer-build
git clone --depth 1 --branch 9.0.0.p38 git@github.com:Zimbra/zm-build.git
cd zm-build
ENV_CACHE_CLEAR_FLAG=true ./build.pl --ant-options -DskipTests=true --git-default-tag=9.0.0.p40,9.0.0.p39,9.0.0.p38,9.0.0.p37,9.0.0.p36,9.0.0.p35,9.0.0.p34,9.0.0.p33,9.0.0.p32.1,9.0.0.p32,9.0.0.p31,9.0.0.p30,9.0.0.p29,9.0.0.p28,9.0.0.p27,9.0.0.p26,9.0.0.p25,9.0.0.p24.1,9.0.0.p24,9.0.0.p23,9.0.0.p22,9.0.0.p21,9.0.0.p20,9.0.0.p19,9.0.0.p18,9.0.0.p17,9.0.0.p16,9.0.0.p15,9.0.0.p14,9.0.0.p13,9.0.0.p12,9.0.0.p11,9.0.0.p10,9.0.0.p9,9.0.0.p8,9.0.0.p7,9.0.0.p6.1,9.0.0.p6,9.0.0.p5,9.0.0.p4,9.0.0.p3,9.0.0.p2,9.0.0.p1,9.0.0 --build-release-no=9.0.0 --build-type=FOSS --build-release=KEPLER --build-release-candidate=GA --build-thirdparty-server=files.zimbra.com --no-interactive
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;build.pl&lt;/code&gt; command is used to build the product. Run it with the &lt;code&gt;-h&lt;/code&gt; option for help:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Usage: ./build.pl &amp;lt;options&amp;gt;
Supported options:
   --build-no=i
   --build-ts=i
   --build-artifacts-base-dir=s
   --build-sources-base-dir=s
   --build-release=s
   --build-release-no=s
   --build-release-candidate=s
   --build-type=s
   --build-thirdparty-server=s
   --build-prod-flag!
   --build-debug-flag!
   --build-dev-tool-base-dir=s
   --interactive!
   --git-overrides=s%
   --git-default-tag=s
   --git-default-remote=s
   --git-default-branch=s
   --stop-after-checkout!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; specify all the options on the command-line, as follows:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;./build.pl --build-no=1713 --build-ts=`date +&#39;%Y%m%d%H%M%S&#39;` \
  --build-release=JUDASPRIEST --build-release-no=8.7.6 \
  --build-release-candidate=GA --build-type=FOSS \
  --build-thirdparty-server=files.zimbra.com --no-interactive
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The completed build will be archived into a &lt;code&gt;*.tgz&lt;/code&gt; file that is stored in the appropriate platform and release-specific subdirectory of the &lt;code&gt;BUILDS&lt;/code&gt; directory. The above command, run on an Ubuntu 16.04 machine, created the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$HOME/installer_build/BUILDS/UBUNTU16_64/JUDASPRIEST-876/20170322153033_FOSS/zm-build/zcs-8.7.6_1713.UBUNTU16_64.20170322153033.tgz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also specify any or all of the required options by placing them in a file called &lt;code&gt;config.build&lt;/code&gt;. This file should be at the top level of the &lt;code&gt;zm-build&lt;/code&gt; directory. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;BUILD_NO                    = 1713
BUILD_RELEASE               = JUDASPRIEST
BUILD_RELEASE_NO            = 8.7.6
BUILD_RELEASE_CANDIDATE     = GA
BUILD_TYPE                  = FOSS
BUILD_THIRDPARTY_SERVER     = files.zimbra.com
INTERACTIVE                 = 0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then just run &lt;code&gt;./build.pl&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;The above command, run on a CentOS 7 machine with the options as shown in &lt;code&gt;config.build&lt;/code&gt;, created the following:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$HOME/installer-build/BUILDS/RHEL7_64/JUDASPRIEST-876/20170323061131_FOSS/zm-build/zcs-8.7.6_GA_1713.RHEL7_64.20170323061131.tgz
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Development&lt;/h1&gt; 
&lt;h2&gt;Setup&lt;/h2&gt; 
&lt;p&gt;The following is a walk-through of the basic steps required to do ZCS development. The first step is to simply install a current FOSS build on the machine that you wish to use. The instructions that follow assume that this has been done.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Create &lt;code&gt;/home/zimbra&lt;/code&gt; and make &lt;code&gt;zimbra&lt;/code&gt; the owner.&lt;/p&gt; &lt;pre&gt;&lt;code&gt; sudo mkdir /home/zimbra
 sudo chown zimbra:zimbra /home/zimbra
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Install &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;ant&lt;/code&gt;, and &lt;code&gt;ant-contrib&lt;/code&gt; by whichever method is appropriate for your distro:&lt;/p&gt; &lt;pre&gt;&lt;code&gt; sudo apt-get install git ant ant-contrib
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;or&lt;/p&gt; &lt;pre&gt;&lt;code&gt; sudo yum install git ant ant-contrib
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Configure &lt;code&gt;/opt/zimbra/.ssh/config&lt;/code&gt; to use your ssh key for the git remotes that you need to access.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Perform the following edits on &lt;code&gt;/opt/zimbra/.bash_profile&lt;/code&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Comment-out &lt;code&gt;export LANG=C&lt;/code&gt; and &lt;code&gt;export LC_ALL=C&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;Add export &lt;code&gt;LANG=en_US.UTF-8&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Add export &lt;code&gt;ANT_OPTS=-Ddev.home=/home/zimbra&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Change permissions on files and folders that you will be updating; e.g.,&lt;/p&gt; &lt;pre&gt;&lt;code&gt; sudo chmod -R o+w /opt/zimbra/lib/
 sudo chmod -R o+w /opt/zimbra/jetty/
 sudo chown zimbra:zimbra /opt/zimbra
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you run &lt;code&gt;zmfixperms&lt;/code&gt;, some of these permissions will be overwritten.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Add file &lt;code&gt;/opt/zimbra/.gitconfig&lt;/code&gt; and update as needed. At a minimum:&lt;/p&gt; &lt;pre&gt;&lt;code&gt; [user]
 	email = YOUR-EMAIL-ADDRESS
 	name = YOUR-FIRST-AND-LAST-NAME
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;As the &lt;code&gt;zimbra&lt;/code&gt; user, create a base directory under &lt;code&gt;/home/zimbra&lt;/code&gt; from which to work.&lt;/p&gt; &lt;pre&gt;&lt;code&gt; cd /home/zimbra
 mkdir zcs
 cd zcs
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Now you can clone any repositories that you require and get to work.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Email Delivery&lt;/h2&gt; 
&lt;p&gt;If you want email delivery to work, set up a DNS server on your host machine or another VM and configure &lt;code&gt;zimbraDNSMasterIP&lt;/code&gt; to point to it. To configure &lt;code&gt;zimbraDNSMasterIP&lt;/code&gt;, do the following as the &lt;code&gt;zimbra&lt;/code&gt; user:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zmprov ms `zmhostname` zimbraDNSMasterIP DNS-SERVER-IP-ADDRESS
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You may receive the following error when trying to send email:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;No SMTP hosts available for domain
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If this occurs, you need to manually configure &lt;code&gt;zimbraSmtpHostname&lt;/code&gt; for your domain(s). To configure &lt;code&gt;zimbraSmtpHostname&lt;/code&gt;, do the following as the &lt;code&gt;zimbra&lt;/code&gt; user:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;zmprov md DOMAIN-NAME zimbraSmtpHostname `zmhostname`
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;zm-mailbox example&lt;/h2&gt; 
&lt;p&gt;As the &lt;code&gt;zimbra&lt;/code&gt; user, &lt;code&gt;cd /home/zimbra/zcs&lt;/code&gt;. Then clone the &lt;code&gt;zm-mailbox&lt;/code&gt; repository from github&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git clone git@github.com:Zimbra/zm-mailbox.git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The following sub-directories &lt;code&gt;zm-mailbox&lt;/code&gt; build and deploy separately:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;client
common
milter-conf
native
soap
store
store-conf
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The top-level &lt;code&gt;build.xml&lt;/code&gt; is used by the &lt;code&gt;zm-build&lt;/code&gt; scripts to create an installer package. You will not use that for normal development. There are build-order dependencies between the above-listed deployment targets. These can be determined by inspection of the &lt;code&gt;ivy.xml&lt;/code&gt; files within each subdirectory.&lt;/p&gt; 
&lt;p&gt;For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;grep &#39;org=&quot;zimbra&quot;&#39; store/ivy.xml

&amp;lt;dependency org=&quot;zimbra&quot; name=&quot;zm-common&quot; rev=&quot;latest.integration&quot;/&amp;gt;
&amp;lt;dependency org=&quot;zimbra&quot; name=&quot;zm-soap&quot; rev=&quot;latest.integration&quot;/&amp;gt;
&amp;lt;dependency org=&quot;zimbra&quot; name=&quot;zm-client&quot; rev=&quot;latest.integration&quot;/&amp;gt;
&amp;lt;dependency org=&quot;zimbra&quot; name=&quot;zm-native&quot; rev=&quot;latest.integration&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here you can see that the deployment target, &lt;code&gt;zm-store&lt;/code&gt; (the &lt;code&gt;store&lt;/code&gt; subdirectory), depends upon &lt;code&gt;common&lt;/code&gt;, &lt;code&gt;soap&lt;/code&gt;, &lt;code&gt;client&lt;/code&gt;, and &lt;code&gt;native&lt;/code&gt;. Here is the current ordering dependencies among all of the &lt;code&gt;zm-mailbox&lt;/code&gt; deployment targets. The higher-numbered deployment targets depend upon the lower-numbered ones. Note that &lt;code&gt;milter-conf&lt;/code&gt; and &lt;code&gt;store-conf&lt;/code&gt; have no cross-dependencies.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;native&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;common&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;soap&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;client&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;store&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;So, from the &lt;code&gt;native&lt;/code&gt; sub-directory:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ant -Dzimbra.buildinfo.version=8.7.6_GA clean compile publish-local deploy
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Comments:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;The requirement to include &lt;code&gt;-Dzimbra.buildinfo.version=8.7.6_GA&lt;/code&gt; to ant is due to a change that was made when the FOSS code was moved to GitHub. You can also just add that option to your &lt;code&gt;ANT_OPTS&lt;/code&gt; enviroment variable that you defined in &lt;code&gt;$HOME/.bash_profile&lt;/code&gt; as follows:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;export ANT_OPTS=&quot;-Ddev.home=/home/zimbra -Dzimbra.buildinfo.version=8.7.6_GA&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;If you do that, then you can omit that &lt;code&gt;-D...&lt;/code&gt; argument to the &lt;code&gt;ant&lt;/code&gt; command and future examples will reflect that.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;The &lt;code&gt;publish-local&lt;/code&gt; target adds the artifact to &lt;code&gt;/home/zimbra/.zcs-deps&lt;/code&gt;, which is included in the Ivy resolution path.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;The &lt;code&gt;deploy&lt;/code&gt; target installs the artifact to its run-time location and restarts the appropriate service(s). This will allow you to test your changes.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Then, from the &lt;code&gt;common&lt;/code&gt;, &lt;code&gt;soap&lt;/code&gt;, &lt;code&gt;client&lt;/code&gt;, and &lt;code&gt;store&lt;/code&gt; sub-directories (in that order):&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ant clean compile publish-local deploy
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Adding a new LDAP Attribute&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;WARNING:It is absolutely imperative to avoid duplicate IDs for attributes. Unfortunately, that currently isn&#39;t a trivial thing to do. Need to check Zimbra 8 and Zimbra X along with all development branches. If customers get different setups using different IDs, this makes future upgrade scenarios a complete nightmare&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Start by cloning &lt;em&gt;both&lt;/em&gt; the &lt;code&gt;zm-ldap-utilites&lt;/code&gt; and the &lt;code&gt;zm-mailbox&lt;/code&gt; repositories from GitHub. Check out the appropriate branch of each. Then proceed as follows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Add your new attribute to &lt;code&gt;zm-mailbox/store/conf/attrs/zimbra-attrs.xml&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;From &lt;code&gt;zm-common/store&lt;/code&gt; invoke the following command:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  ant generate-getters
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Do the following as &lt;code&gt;root&lt;/code&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  chmod -R o+w /opt/zimbra/common/etc/openldap/schema
  chmod o+w /opt/zimbra/conf/zimbra.ldif
  chmod +w /opt/zimbra/conf/attrs/zimbra-attrs.xml
  chmod -R o+w /opt/zimbra/common/etc/openldap/zimbra
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Back as the &lt;code&gt;zimbra&lt;/code&gt; user, invoke the following command from &lt;code&gt;zm-mailbox/common&lt;/code&gt;:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  ant deploy publish-local
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Then from the &lt;code&gt;zm-mailbox/store&lt;/code&gt; directory:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;  ant deploy update-ldap-schema
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Your ZCS development server should now be running with the new attribute(s). You can test that by querying them and modifying them with &lt;code&gt;zmprov&lt;/code&gt;. You can &lt;code&gt;git add ...&lt;/code&gt; and &lt;code&gt;git commit&lt;/code&gt; your changes now.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/f62c207fce47a65cde7101b1cbabb276ce7308111ba677f6541238454d828e43/Zimbra/zm-build" medium="image" />
      
    </item>
    
    <item>
      <title>centreon/centreon-plugins</title>
      <link>https://github.com/centreon/centreon-plugins</link>
      <description>&lt;p&gt;Collection of standard plugins to discover and gather cloud-to-edge metrics and status across your whole IT infrastructure.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;centreon-plugins&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/centreon/centreon-plugins/raw/master/LICENSE.txt&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-APACHE2-brightgreen.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;!-- SHIELDS --&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/centreon/centreon-plugins/graphs/contributors&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/contributors/centreon/centreon-plugins?color=%2384BD00&amp;amp;label=CONTRIBUTORS&amp;amp;style=for-the-badge&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/centreon/centreon-plugins/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/centreon/centreon-plugins?color=%23433b02a&amp;amp;label=STARS&amp;amp;style=for-the-badge&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/centreon/centreon-plugins/network/members&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/centreon/centreon-plugins?color=%23009fdf&amp;amp;label=FORKS&amp;amp;style=for-the-badge&quot; alt=&quot;Forks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/centreon/centreon-plugins/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/centreon/centreon-plugins?color=%230072ce&amp;amp;label=ISSUES&amp;amp;style=for-the-badge&quot; alt=&quot;Issues&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;What are Centreon Plugins&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/centreon/centreon-plugins/&quot;&gt;Centreon plugins&lt;/a&gt; is a free and open source project to monitor systems. The project can be used with Centreon and all monitoring softwares compatible with Nagios plugins.&lt;/p&gt; 
&lt;h3&gt;Principles&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/centreon/centreon-plugins/&quot;&gt;Centreon plugins&lt;/a&gt; should comply with &lt;a href=&quot;https://www.monitoring-plugins.org/doc/guidelines.html&quot;&gt;Monitoring Plugins Development Guidelines&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In short, they return:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;An error code: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;0&lt;/code&gt; for &lt;code&gt;OK&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;1&lt;/code&gt; for &lt;code&gt;WARNING&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;2&lt;/code&gt; for &lt;code&gt;CRITICAL&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;3&lt;/code&gt; for &lt;code&gt;UNKNOWN&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;A human understandable output message (example: &lt;code&gt;OK: CPU(s) average usage is 2.66 % - CPU &#39;0&#39; usage : 2.66 %&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;A set of metrics provided as &lt;em&gt;perfdata&lt;/em&gt; after a &lt;code&gt;|&lt;/code&gt; character (example: &lt;code&gt;&#39;cpu.utilization.percentage&#39;=2.66%;;;0;100 &#39;0#core.cpu.utilization.percentage&#39;=2.66%;;;0;100&lt;/code&gt;).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;What can Centreon Plugins monitor?&lt;/h3&gt; 
&lt;p&gt;You can monitor many systems:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Application&lt;/strong&gt;: Apache, Asterisk, Elasticsearch, Github, Jenkins, Kafka, Nginx, Pfsense, Redis, Tomcat, Varnish, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cloud&lt;/strong&gt;: AWS, Azure, Docker, Office365, Nutanix, Prometheus, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Databases&lt;/strong&gt;: Firebird, Informix, MS SQL, MySQL, Oracle, Postgres, Cassandra.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Hardware&lt;/strong&gt;: printers (RFC3805), UPS (Powerware, Mge, Standard), Sun Hardware, Cisco UCS, SensorIP, HP Proliant, HP Bladechassis, Dell Openmanage, Dell CMC, Raritan, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Network&lt;/strong&gt;: Aruba, Brocade, Bluecoat, Brocade, Checkpoint, Cisco AP/IronPort/ASA/Standard, Extreme, Fortigate, H3C, Hirschmann, HP Procurve, F5 BIG-IP, Juniper, PaloAlto, Redback, Riverbed, Ruggedcom, Stonesoft, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Operating systems&lt;/strong&gt;: Linux (SNMP, NRPE), Freebsd (SNMP), AIX (SNMP), Solaris (SNMP), etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Storage&lt;/strong&gt;: EMC Clariion, Netapp, Nimble, HP MSA p2000, Dell EqualLogic, Qnap, Panzura, Synology, etc.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To get a complete list, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;perl src/centreon_plugins.pl --list-plugin
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Basic Usage&lt;/h3&gt; 
&lt;p&gt;We&#39;ll use a basic example to show you how to monitor a system. I have finished the install section and I want to monitor a Linux in SNMP. First, I need to find the plugin to use in the list:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;perl centreon_plugins.pl --list-plugin | grep -i linux | grep &#39;PLUGIN&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It will return:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PLUGIN: os::linux::local::plugin
PLUGIN: os::linux::snmp::plugin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It seems that &#39;os::linux::snmp::plugin&#39; is the good one. So I verify with the option &lt;code&gt;--help&lt;/code&gt; to be sure:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --help
...
Plugin Description:
  Check Linux operating systems in SNMP.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It&#39;s exactly what I need. Now I&#39;ll add the option &lt;code&gt;--list-mode&lt;/code&gt; to know what can I do with it:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --list-mode
...
Modes Available:
 processcount
 time
 list-storages
 disk-usage
 diskio
 uptime
 swap
 cpu-detailed
 load
 traffic
 cpu
 inodes
 list-diskspath
 list-interfaces
 packet-errors
 memory
 tcpcon
 storage
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;I would like to test the &#39;load&#39; mode:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load
UNKNOWN: Missing parameter --hostname.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It&#39;s not working because some options are missing. I can have a description of the mode and options with the option &lt;code&gt;--help&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --help
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Eventually, I have to configure some SNMP options:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public
OK: Load average: 0.00, 0.00, 0.00 | &#39;load1&#39;=0.00;;;0; &#39;load5&#39;=0.00;;;0; &#39;load15&#39;=0.00;;;0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;I can set threshold with options &lt;code&gt;--warning&lt;/code&gt; and &lt;code&gt;--critical&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ perl centreon_plugins.pl --plugin=os::linux::snmp::plugin --mode=load --hostname=127.0.0.1 --snmp-version=2c --snmp-community=public --warning=1,2,3 --critical=2,3,4
OK: Load average: 0.00, 0.00, 0.00 | &#39;load1&#39;=0.00;0:1;0:2;0; &#39;load5&#39;=0.00;0:2;0:3;0; &#39;load15&#39;=0.00;0:3;0:4;0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more information or help, please read &lt;a href=&quot;https://raw.githubusercontent.com/centreon/centreon-plugins/develop/doc/en/user/guide.rst&quot;&gt;&#39;doc/en/user/guide.rst&#39;&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;h3&gt;Code contributions/pull requests&lt;/h3&gt; 
&lt;p&gt;If you want to contribute by submitting new functionalities, enhancements or bug fixes, first thank you for participating 😃 Then have a look, if not already done, to our &lt;strong&gt;&lt;a href=&quot;https://github.com/centreon/centreon-plugins/raw/develop/doc/en/developer/guide.md&quot;&gt;development guide&lt;/a&gt;&lt;/strong&gt;. Then create a &lt;a href=&quot;https://github.com/centreon/centreon-plugins/fork&quot;&gt;fork&lt;/a&gt; and a development branch, and once it&#39;s done, you may submit a &lt;a href=&quot;https://github.com/centreon/centreon-plugins/pulls&quot;&gt;pull request&lt;/a&gt; that the corporate development team will examine.&lt;/p&gt; 
&lt;h3&gt;Issues/bug reports&lt;/h3&gt; 
&lt;p&gt;If you encounter a behaviour that is clearly a bug or a regression, you are welcome to submit an &lt;a href=&quot;https://github.com/centreon/centreon-plugins/issues&quot;&gt;issue&lt;/a&gt;. Please be aware that this is an open source project and that there is no guaranteed response time.&lt;/p&gt; 
&lt;h3&gt;Questions/search for help&lt;/h3&gt; 
&lt;p&gt;If you have trouble using our plugins, but are not sure whether it&#39;s due to a bug or a misuse, please take the time to ask for help on &lt;a href=&quot;https://thewatch.centreon.com/data-collection-6&quot;&gt;The Watch, Data Collection section&lt;/a&gt; and become certain that it is a bug before submitting it here.&lt;/p&gt; 
&lt;h3&gt;Feature/enhancement request&lt;/h3&gt; 
&lt;p&gt;There is high demand for new plugins and new functionalities on existing plugins, so we have to rely on our community to help us prioritize them. How? Post your suggestion on &lt;a href=&quot;https://thewatch.centreon.com/ideas&quot;&gt;The Watch Ideas&lt;/a&gt; with as much detail as possible and we will pick the most voted topics to add them to our product roadmap.&lt;/p&gt; 
&lt;p&gt;To develop a plugin/mode, we need the following information, depending on the protocol:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;SNMP&lt;/strong&gt;: MIB files and full snmpwalk of enterprise branch (&lt;code&gt;snmpwalk -ObentU -v 2c -c public address .1.3.6.1.4.1 &amp;gt; equipment.snmpwalk&lt;/code&gt;) or &lt;a href=&quot;https://thewatch.centreon.com/product-how-to-21/snmp-collection-tutorial-132&quot;&gt;SNMP collections&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;HTTP API (SOAP, Rest/Json, XML-RPC)&lt;/strong&gt;: the documentation and some curl examples or HTTP &lt;a href=&quot;https://thewatch.centreon.com/data-collection-6/centreon-plugins-discover-collection-modes-131&quot;&gt;collections&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;CLI&lt;/strong&gt;: command line examples (command + result).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;SQL&lt;/strong&gt;: queries + results + column types or &lt;a href=&quot;https://thewatch.centreon.com/product-how-to-21/sql-collection-tutorial-134&quot;&gt;SQL collections&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;JMX&lt;/strong&gt;: mbean names and attributes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If some information is confidential, such as logins or IP addresses, obfuscate them in what is sent publicly and we&#39;ll get in touch with you by private message if this information is needed.&lt;/p&gt; 
&lt;p&gt;Please note that all the developments are open source, we will not commit to a release date. If it is an emergency for you, please contact &lt;a href=&quot;https://www.centreon.com/contact/&quot;&gt;Centreon&#39;s sales team&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Continuous integration&lt;/h3&gt; 
&lt;p&gt;Please follow documentation &lt;a href=&quot;https://raw.githubusercontent.com/centreon/centreon-plugins/develop/doc/CI.md&quot;&gt;here&lt;/a&gt;&lt;/p&gt; 
&lt;!-- URL AND IMAGES FOR SHIELDS --&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/3a9b425a8e36c232b4d8a1816ddc495facd2408fe301b00062900726e0fa3a2a/centreon/centreon-plugins" medium="image" />
      
    </item>
    
  </channel>
</rss>
