New: MQ Message Compression v1.0.0

Capitalware Inc. would like to announce the official release of MQ Message Compression v1.0.0.

MQ Message Compression (MQMC) is a solution that provides compression for MQ message data while it resides in a queue or topic and in the MQ logs (i.e. all data at rest). Data compression is the process of modifying and/or converting the structure of bits of data so that it consumes less space in memory and/or on disk.

Question: Would you trade a little CPU time to drastically reduce the disk I/O time?

    MQMC has implemented 7 lossless compression algorithms:

  • LZ4 is a lossless data compression algorithm that is focused on compression and decompression speed. It belongs to the LZ77 family of byte-oriented compression schemes. LZ4 algorithm is incredibly fast. MQMC implemented the LZ4 project.
  • LZW (Lempel-Ziv-Welch) encodes sequences of 8-bit data as fixed-length 12-bit codes. MQMC implemented LZW from Michael Dipperstein’s lzw project.
  • LZMA uses a dictionary compression algorithm, whose output is then encoded with a range encoder, using a complex model to make a probability prediction of each bit (Lempel–Ziv–Markov). MQMC implemented LZMA SDK from 7-Zip.
    • LZMA_FAST uses LZMA SDK with a Level set to 4.
    • LZMA_BEST uses LZMA SDK with a Level set to 5.

  • RLE (Run Length Encoding) encodes sequences of the same data value occurring over many consecutive data elements are stored as a single data value and count.
  • zlib only supports one algorithm, called DEFLATE, which uses a combination of a variation of LZ77 (Lempel–Ziv 1977) and Huffman coding. MQMC implemented zlib from Rich Geldreich’s miniz project.
    • ZLIB_FAST uses zlib with a Level of Z_BEST_SPEED.
    • ZLIB_BEST uses zlib with a Level of Z_BEST_COMPRESSION.

MQMC is an MQ API Exit that operates with IBM MQ v7.1, v7.5, v8.0, v9.0, v9.1 and v9.2 in Windows, Unix, IBM i (OS/400) and Linux platforms.

On IBM i, Linux, Unix and Windows, MQMC can be configured and used with a non-default installation of MQ in a multi-install MQ environment.

For more information about MQMC, please go to:
https://www.capitalware.com/mqmc_overview.html

For a FREE 60-day trial including free support, send an email to: support@capitalware.com to request a trial of MQ Message Compression.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, Compression, IBM i (OS/400), IBM MQ, Linux, MQ Message Compression, Unix, Windows Comments Off on New: MQ Message Compression v1.0.0

Replay of Online Meetup: Enterprise messaging on the Raspberry Pi with IBM MQ

If you wanted to attend the online meetup of Enterprise messaging on the Raspberry Pi with IBM MQ but could not attend, you can now watch the replay of it at:
https://www.crowdcast.io/e/learn-about-ibm-mq-an/register

Regards,
Roger Lacroix
Capitalware Inc.

Education, IBM MQ, Raspberry Pi Comments Off on Replay of Online Meetup: Enterprise messaging on the Raspberry Pi with IBM MQ

IBM MQ Troubleshooting Common TLS SSL Errors

IBM has just published a helpful support document called: IBM MQ Troubleshooting Common TLS SSL Errors.
https://www.ibm.com/support/pages/node/6359069

If you are having MQ SSL/TLS issues then have a read of this document and follow the instructions.

Regards,
Roger Lacroix
Capitalware Inc.

HPE NonStop, IBM i (OS/400), IBM MQ, IBM MQ Appliance, Linux, macOS (Mac OS X), Security, Unix, Windows, z/OS Comments Off on IBM MQ Troubleshooting Common TLS SSL Errors

Withdrawn/Discontinued: IBM IoT MessageSight and IBM Watson IoT Platform – Message Gateway

I just came across the following announcement that says IBM has completely pulled the plug on IBM IoT MessageSight and IBM Watson IoT Platform – Message Gateway.
https://www.ibm.com/support/pages/node/6340723

So basically, that leaves IBM MQ as IBM’s primary messaging platform for MQTT? It is rather odd since IBM has refused to fully support MQTT in IBM MQ.

Regards,
Roger Lacroix
Capitalware Inc.

IBM MQ, IBM MQ Appliance, Linux, MQTT, Unix, Windows Comments Off on Withdrawn/Discontinued: IBM IoT MessageSight and IBM Watson IoT Platform – Message Gateway

Online Meetup: Enterprise messaging on the Raspberry Pi with IBM MQ

Richard Coppen and Max Kahan of IBM Hursley, UK are hosting an Online Meetup called Enterprise messaging on the Raspberry Pi with IBM MQ. It will be hosted on CrowdCast on November 2, 2020. To learn more about it and to sign up, go to:
https://www.crowdcast.io/e/learn-about-ibm-mq-an/register

Regards,
Roger Lacroix
Capitalware Inc.

Education, IBM MQ, Raspberry Pi Comments Off on Online Meetup: Enterprise messaging on the Raspberry Pi with IBM MQ

Ubuntu 20.10 Released

Canonical has just released Ubuntu v20.10.
http://releases.ubuntu.com/20.10/

Super-fast, easy to use and free, the Ubuntu operating system powers millions of desktops, netbooks and servers around the world. Ubuntu does everything you need it to. It’ll work with your existing PC files, printers, cameras and MP3 players. And it comes with thousands of free apps.

Regards,
Roger Lacroix
Capitalware Inc.

Linux, Open Source, Operating Systems Comments Off on Ubuntu 20.10 Released

OpenBSD v6.8 Released

Theo de Raadt has just released OpenBSD v6.8.
http://www.openbsd.org/67.html

The OpenBSD project produces a FREE, multi-platform 4.4BSD-based UNIX-like operating system. Our efforts emphasize portability, standardization, correctness, proactive security and integrated cryptography.

Regards,
Roger Lacroix
Capitalware Inc.

Open Source, Operating Systems Comments Off on OpenBSD v6.8 Released

IBM MQ on Raspberry Pi

Max Kahan has posted a blog posting detailing how to get up and running with IBM MQ on Raspberry Pi.

IBM MQ on Raspberry Pi – our tastiest developer edition yet!

Regards,
Roger Lacroix
Capitalware Inc.

IBM MQ, Raspberry Pi Comments Off on IBM MQ on Raspberry Pi

Microsoft Java Developer Conference – Seriously!!

Microsoft Java Developer Conference, those are words that I never thought I would say or hear!!!

Microsoft is hosting a 3-day virtual conference for Java developers on October 27, 28 & 29, 2020. You can find out more information and sign up at the following web page: aka.ms/jdconf

aka.ms/jdconf

Regards,
Roger Lacroix
Capitalware Inc.

Education, Java, Linux, macOS (Mac OS X), Unix, Windows Comments Off on Microsoft Java Developer Conference – Seriously!!

Java Method to Output a Byte Array in HEX Dump Format

On StackOverflow, I posted code to output a byte array in a HEX dump format. I thought I should post the code here as a complete working sample.

You can download the source code from here.

You can copy the 2 methods (dumpBuffer & formatHex) to your general purpose toolkit and use them in any Java project you have. The code is pretty straightforward. The method dumpBuffer expects 2 parameters: the byte array and the width of the HEX dump. Most people like a size of 16. You can use any value that is a multiple of 16 (i.e. 32, 48, 64, etc.).

There are all kinds of reasons why you would want to dump a byte array as a HEX dump but the primary reason is probably because the byte array has binary data that when outputted with System.out.println is displayed as garbage.

/**
 * Program Name
 *  Test_HEX_Dump
 *
 * Description
 *  A simple program to demonstrate how to output a byte array as a HEX dump.
 *
 * @author Roger Lacroix
 * @version 1.0.0
 * @license Apache 2 License
 */
public class Test_HEX_Dump
{
   /**
    * The constructor
    */
   public Test_HEX_Dump()
   {
      super();
      String song = "Mary had a little lamb, Its fleece was white as snow, And every where that Mary went The lamb was sure to go; He followed her to school one day, That was against the rule, It made the children laugh and play, To see a lamb at school.";

      dumpBuffer(song.getBytes(), 16);
   }

   /**
    * Dump a byte array as a standard HEX dump output
    * @param data the entire byte array
    * @param widthSize width of the HEX dump. Must be in multiples of 16
    */
   public void dumpBuffer(byte[] data, int widthSize)
   {
      int      endPt = widthSize;
      int      len = data.length;
      byte[]   tempBuffer = new byte[widthSize];

      if ((widthSize % 16) != 0)
      {
         System.err.println("Error: widthSize value ["+widthSize+"] is not a multiple of 16.");
      }
      else
      {
         if (widthSize == 16)
         {
            System.out.println("Address  0 1 2 3  4 5 6 7  8 9 A B  C D E F  0123456789ABCDEF");
            System.out.println("------- -------- -------- -------- --------  ----------------");
         }
         else if (widthSize == 32)
         {
            System.out.println("Address  0 1 2 3  4 5 6 7  8 9 A B  C D E F  0 1 2 3  4 5 6 7  8 9 A B  C D E F  0123456789ABCDEF0123456789ABCDEF");
            System.out.println("------- -------- -------- -------- -------- -------- -------- -------- --------  --------------------------------");
         }

         for (int i=0; i < len; i+=widthSize)
         {
            if (i+widthSize >= len)
               endPt = len - i;

            for (int j=0; j < endPt; j++)
               tempBuffer[j] = data[i+j];

            System.out.println(formatHex(tempBuffer, (i+widthSize < len?widthSize:len-i), i, widthSize ));
         }
      }
   }

   /**
    * Format an array of bytes into a hex display
    * @param src a portion of the byte array
    * @param len length of this part of the byte array
    * @param index location of current position in data
    * @param width width of the HEX dump
    * @return
    */
   private String formatHex(byte[] src, int lenSrc, int index, int width)
   {
      int i, j;
      int g = width / 4; /* number of groups of 4 bytes */
      int d = g * 9;     /* hex display width */
      StringBuffer sb = new StringBuffer();

      if ( (src == null) ||
           (lenSrc < 1)  || (lenSrc > width) ||
           (index < 0)   ||
           (g % 4 != 0)  ||   /* only allow width of 16 / 32 / 48 etc. */
           (d < 36) )
      {
         return "";
      }

      String hdr = Integer.toHexString(index).toUpperCase();
      if (hdr.length() <= 6)
         sb.append("000000".substring(0, 6 - hdr.length()) + hdr + ": ");
      else
         sb.append(hdr + ": ");

      /* hex display 4 by 4 */
      for(i=0; i < lenSrc; i++)
      {
         sb.append(""+"0123456789ABCDEF".charAt((src[i]) >> 4) + "0123456789ABCDEF".charAt((src[i] & 0x0F)));

         if (((i+1) % 4) == 0)
            sb.append(" ");
      }

      /* blank fill hex area if we do not have "width" bytes */
      if (lenSrc < width)
      {
         j = d - (lenSrc*2) - (lenSrc / 4);
         for(i=0; i < j; i++)
            sb.append(" ");
      }

      /* character display */
      sb.append(" ");
      for (i=0; i < lenSrc; i++)
      {
         if(Character.isISOControl((char)src[i]))
            sb.append(".");
         else
            sb.append((char)src[i]);
      }

      /* blank fill character area if we do not have "width" bytes */
      if (lenSrc < width)
      {
         j = width - lenSrc;
         for(i=0; i < j; i++)
            sb.append(" ");
      }

      return sb.toString();
   }

   /**
    * Entry point to program
    * @param args
    */
   public static void main(String[] args)
   {
      new Test_HEX_Dump();
   }
}

Here’s what the output looks like from running this sample:

Address  0 1 2 3  4 5 6 7  8 9 A B  C D E F  0123456789ABCDEF
------- -------- -------- -------- --------  ----------------
000000: 4D617279 20686164 2061206C 6974746C  Mary had a littl
000010: 65206C61 6D622C20 49747320 666C6565  e lamb, Its flee
000020: 63652077 61732077 68697465 20617320  ce was white as
000030: 736E6F77 2C20416E 64206576 65727920  snow, And every
000040: 77686572 65207468 6174204D 61727920  where that Mary
000050: 77656E74 20546865 206C616D 62207761  went The lamb wa
000060: 73207375 72652074 6F20676F 3B204865  s sure to go; He
000070: 20666F6C 6C6F7765 64206865 7220746F   followed her to
000080: 20736368 6F6F6C20 6F6E6520 6461792C   school one day,
000090: 20546861 74207761 73206167 61696E73   That was agains
0000A0: 74207468 65207275 6C652C20 4974206D  t the rule, It m
0000B0: 61646520 74686520 6368696C 6472656E  ade the children
0000C0: 206C6175 67682061 6E642070 6C61792C   laugh and play,
0000D0: 20546F20 73656520 61206C61 6D622061   To see a lamb a
0000E0: 74207363 686F6F6C 2E                 t school.

Regards,
Roger Lacroix
Capitalware Inc.

HPE NonStop, IBM i (OS/400), Java, JMS, Linux, macOS (Mac OS X), Open Source, Programming, Raspberry Pi, Unix, Windows 2 Comments