<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0">
  <channel>
    <title>Applied Pokology - A blog about GNU poke</title>
    <link>http://jemarch.net/pokology.html</link>
    <description>
      Pokology is a blog about <a
      href="http://www.jemarch.net/poke.html">GNU poke</a>, the
      interactive, extensible editor for binary data.
    </description>


    <item>
      <title>Applied Pokology - Interesting poke idiom: sparse tables</title>
      <link>http://jemarch.net/pokology-20230128.html</link>
      <description>
        <p>
          During tonight poke online office hours our friend hdzki
          came with an interesting use case.  He is poking at some
          binary structures that are like sparse tables whose entries
          are distributed in the file in an arbitrary way.

          Each sparse table is characterized by an array of
          consecutive non-NULL pointers.  Each pointer points to an
          entry in the table.  The table entries can be anywhere in
          the IO space, and are not necessarily consecutive, nor be in
          order.
        </p>
        <p>
          <a href="pokology-20230128.html">Full text...</a>
        </p>
      </description>
      <pubDate>Fri, 28 Jan 2023 00:00:00 CET</pubDate>
    </item>

    <item>
      <title>Padding and aligning data in GNU poke</title>
      <link>http://jemarch.net/pokology-20210302.html</link>
      <description>
        <p>
          It is often the case in binary formats that certain elements
          are separated by some data that is not really used for any
          meaningful purpose other than occupy that space.  The reason
          for keeping that space varies from case to case; sometimes
          to reserve it for future use, sometimes to make sure that
          the following data is aligned to some particular alignment.
          This is known as "padding".  There are several ways to
          implement padding in GNU poke.  This article shows these
          techniques and discusses their advantages and disadvantages.
        </p>
      </description>
      <pubDate>Tue, 02 Mar 2021 00:00:00 CET</pubDate>
    </item>

    <item>
      <title>Learning the Poke language in Y minutes</title>
      <link>http://jemarch.net/pokology-20210301.html</link>
      <description>
        <p>
          Mohammad-Reza Nabipoor has written a <a
          href="http://jemarch.net/learn-poke-language-in-y-minutes.pk.html">nice
          short tutorial</a> called "Learn the Poke Language in Y
          minutes".  The tutorial has the form of a Poke program
          itself, and I think it really highlights the most uncommon
          (and useful!) features of our domain-specific language.
        </p>
      </description>
      <pubDate>Mon, 01 Mar 2021 00:00:00 CET</pubDate>
    </item>

    <item>
      <title>Using maps in GNU poke</title>
      <link>http://jemarch.net/pokology-20210224.html</link>
      <description>
        <p>
          Editing data with GNU poke mainly involves creating mapped
          values and storing them in Poke variables.  However, this
          may not be that convenient when poking several files
          simultaneously, and when the complexity of the data
          increases.  poke provides a convenient mechanism for this:
          maps and map files.
        </p>
      </description>
      <pubDate>Wed, 24 Feb 2021 00:00:00 CET</pubDate>
    </item>
    
    <item>
      <title>GNU poke development news</title>
      <link>http://jemarch.net/pokology-20201115.html</link>
      <description>
        <p>
          The development of GNU poke is progressing well, and we keep
          hopes for a first release before the end of the year: we are
          determined for something good to happen in 2020! ;)
        </p>
        <p>
          This article briefly reviews the latest news in the
          development of the program, like changes in certain syntax
          to make the language more compact, support for lambda
          expressions, support for stream-like IO spaces and how they
          can be used to write filters, support for using assignments
          to poke complex data structures, improvements in data
          integrity, annoying bugs fixed, and more.
        </p>
      </description>
      <pubDate>Mon, 15 Nov 2020 00:00:00 CET</pubDate>
    </item>
    
    <item>
      <title>Integral structs in GNU poke</title>
      <link>http://jemarch.net/pokology-20200720.html</link>
      <description>
        <p>
          This weekend I finally implemented support for the so-called
          "integral structs" in poke.  This expands the expressivity
          power of Poke structs to cover cases where data is stored in
          composited integral containers, i.e. when data is structured
          within stored integers.
        </p>
      </description>
      <pubDate>Mon, 20 Jul 2020 00:00:00 CET</pubDate>
    </item>
    
    <item>
      <title>Writing binary utilities with GNU poke</title>
      <link>http://jemarch.net/pokology-20200716.html</link>
      <description>
        <p>
          <a href="http://www.jemarch.net/poke">GNU poke</a> is, first
          and foremost, intended to be used as an interactive editor,
          either directly on the command line or using a graphical
          user interface built on it.  However, since its conception
          poke was intended to also provide a suitable and useful
          foundation on which other programs, the so-called binary
          utilities, could be written.  At last, the development of
          poke has progressed to a point where we can start writing
          such utilities, and the purpose of this article is to show a
          small, albeit working and useful example of what can be
          achieved by writing a few lines of Poke: an extractor for
          ELF sections.
        </p>
      </description>
      <pubDate>Thu, 16 Jul 2020 00:00:00 CET</pubDate>
    </item>
    
    <item>
      <title>Understanding Poke methods</title>
      <link>http://jemarch.net/pokology-20200504.html</link>
      <description>
    <p>
      Poke struct types can be a bit daunting at first sight.  You can
      find all sort of things inside them: from fields, variables and
      functions to constraint expressions, initialization expressions,
      labels, other type definitions, and methods.
    </p>
    <p>
      Struct methods can be particularly confusing for the novice
      poker.  In particular, it is important to understand the
      difference between methods and regular functions defined inside
      struct types.  This article will hopefully clear the confusion,
      and also will provide the reader with a better understanding on
      how poke works internally.
    </p>
      </description>
      <pubDate>Mon, 4 May 2020 00:00:00 CET</pubDate>
    </item>

    <item>
      <title>Multi-line output in poke pretty-printers</title>
      <link>http://jemarch.net/pokology-20200503.html</link>
      <description>
        <p>
          The ID3V1 tag format describes the format for the tags that
          are embeded in MP3 files, giving information about the song
          stored in the file, such as genre, the name of the artist,
          and so on.  While hacking the id3v1 pickle today, I found a
          little dilemma on how to best present a pretty-printed
          version of a tag to the user.
        </p>
      </description>
      <pubDate>Sun, 3 May 2020 00:00:00 CET</pubDate>
    </item>

    <item>
      <title>Interruptible poke</title>
      <link>http://jemarch.net/pokology-20200302.html</link>
      <description>
        <p>
          Poke has loops.  It also does IO (yeah, right :D). On one
          hand, this means that Poke programs that never finish are
          definitely possible (here is one: <tt>while (1) {}</tt>)
          and, on the other, a Poke program acting on an enormous
          amount of data may take a long time to finish, depending on
          what it does.  Maybe hours, maybe even days?
        </p>
      </description>
      <pubDate>Mon, 2 March 2020 12:00:00 CET</pubDate>
    </item>

    <item>
      <title>Hyperlink Support in GNU Poke</title>
      <link>http://jemarch.net/pokology-20200202.html</link>
      <description>
        <p>
          FOSDEM 2020 is over, and hyperlink support has just landed for GNU Poke!
        </p>
        <div style="font-size: 3em; text-align: center;">
          Wait, Hyperlinks!?
        </div>
        <p>
          What do hyperlinks, a web concept, mean for GNU Poke, a
          terminal application?
        </p>
        <p>
          For many years now, terminal emulators have been detecting
          <code>http://</code> URLs in the output of any program and giving the user
          a chance to click on them and immediately navigate to the corresponding
          web page. In 2017, Egmont Kob made a
          <a href="https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda">proposal</a>
          for supporting general hyperlinks in terminal emulators. Gnome Terminal,
          iTerm and a few other terminal emulators have already implemented this
          proposal in their latest releases. With Egmont's proposal, an application
          can emit any valid URI and have the terminal emulator take the user to
          that resource.
        </p>
      </description>
      <pubDate>Mon, 2 February 2020 21:00:00 CET</pubDate>
    </item>
    
    <item>
      <title>First Poke-Conf at Mont-Soleil - A report</title>
      <link>http://jemarch.net/pokology-20200113.html</link>
      <description>
        <p>
          <div style="text-align: center;">
            <figure>
              <a href="http://jemarch.net/images/pokeconf-mont-soleil.jpg">
                <img src="http://jemarch.net/images/pokeconf-mont-soleil.jpg" alt="pokists in Mont-Soleil"
                     width="480"/>
              </a>
              <figcaption>Poking at Mont-Soleil</figcaption>
            </figure>
          </div>
        </p>
        <p>
          This last weekend we had the first gathering of poke
          developers, as part of the GNU Hackers Meeting at
          Mont-Soleil, in Switzerland.  I can say we had a lot of
          fun, and it was a quite productive meeting too: many
          patches were written, and many technical aspects
          designed and clarified.
        </p>
      </description>
      <pubDate>Mon, 13 January 2020 00:00:00 CET</pubDate>
    </item>
    <item>
      <title>Endianness in Poke - And a little nice hack</title>
      <link>http://jemarch.net/pokology-20191025.html</link>
      <description>
        Byte endianness is an important aspect of encoding data.  As a
        good binary editor poke provides support for both little and
        big endian, and will soon acquire the ability to encode exotic
        endianness like PDP endian.  Endianness control is integrated
        in the Poke language, and is designed to be easily used in
        type descriptions.  Let's see how.
      </description>
      <pubDate>Fri, 25 October 2019 00:00:00 CET</pubDate>
    </item>
    <item>
      <title>Styled output in Poke programs</title>
      <link>http://jemarch.net/pokology-20191021.html</link>
      <description>
        I just committed support for styling in printf.  Basically, it
        uses the libtextstyle approach of having styling classes that
        the user can customize in a .css file.
      </description>
      <pubDate>Mon, 21 October 2019 00:20:00 CET</pubDate>
    </item>
    <item>
      <title>Dealing with alternatives - Unions in Poke</title>
      <link>http://jemarch.net/pokology-18102019.html</link>
      <description>
        The Poke type definitions can be seen as a sort of declarative
        specifications for decoding and encoding procedures.  You
        specify the structure of the data you want to operate on, and
        poke uses that information to automatically decode and encode
        the data for you.  Under this perspective, struct types
        correspond to sequences of instructions, array types to
        repetitions (or loops), and union types to conditionals.
      </description>
      <pubDate>Fri, 18 October 2019 12:00:00 CET</pubDate>
    </item>
    <item>
      <title>Values of the world, unite! - Offsets in Poke</title>
      <link>http://jemarch.net/pokology-06102019.html</link>
      <description>
        Early in the design of what is becoming GNU poke I was struck
        by a problem that, to my surprise, would prove not easy to
        overcome in a satisfactory way: would I make a byte-oriented
        program, or a bit-oriented program?  Considering that the
        program in question was nothing less than an editor for binary
        data, this was no petty dilemma.
      </description>
      <pubDate>Sun, 06 October 2019 15:00:00 CET</pubDate>
    </item>
    <item>
      <title>Array boundaries and closures in Poke</title>
      <link>http://jemarch.net/pokology-03102019.html</link>
      <description>
        Poke arrays are rather peculiar.  One of their seemingly
        bizarre characteristics is the fact that the expressions
        calculating their boundaries (when they are bounded) evaluate
        in their own lexical environment, which is captured.  In other
        words: the expressions denoting the boundaries of Poke arrays
        conform closures.  Also, the way they evaluate may be
        surprising.  This is no capricious.
      </description>
    </item>
    <item>
      <title>Nomenclature: poke, Poke and pickles</title>
      <link>http://jemarch.net/pokology-01102019.html</link>
      <description>
        GNU poke is a pretty new program and it introduces many a new
        concept.  As people are starting to join the development, I
        think it is a good idea to clarify how I call things.  The
        idea is for everyone to use the same nomenclature when
        referring to pokeish thingies.  Otherwise its gonna get very
        confusing very soon!
      </description>
      <pubDate>Mon, 01 October 2019 15:00:00 CET</pubDate>
    </item>
  </channel>
</rss>
