unity – How can I get the name of a scriptable object via code

How can I get the name of a scriptable object, same way I would a game object gameObject.name?

I’ve tried:

object.name
scriptableObject.name
ScriptableObject.name
name
this.name

//String GetName()
WorldObjectData obj = ScriptableObject.CreateInstance<WorldObjectData>();
SerializedObject serializedObject = new SerializedObject(obj);
return serializedObject.FindProperty("m_name");

I can see that ScriptableObject extends Object, which has the .name attribute. But cant access it.

I want to create a 3D game in unity for wolf and sheep game. So, how can I set up pieces and move them using C# code?

This is the approach that I have made so far in the code that I have written. Based on the results in unity, I can see 4 white pieces on one end and 4 black pieces on the opposite end. When I try to move the pieces, it moves diagonally once. When I try to move the second piece it goes back to the original settings.
What I am trying to do here is that I want to set up 4 white pieces on one end and 1 black piece on the opposite end and to move them diagonally.
The code is given below:-

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GC : MonoBehaviour
{
(Tooltip(“The number of squares wide”))
public int width = 10;
(Tooltip(“The number of squares deep”))
public int depth = 10;
(Tooltip(“The prefab for the light board tile”))
public GameObject tileLightPrefab;
(Tooltip(“The prefab for the dark board tile”))
public GameObject tileDarkPrefab;
(Tooltip(“The prefab for the light playing piece”))
public GameObject pieceLightPrefab;
(Tooltip(“The prefab for the dark playing piece”))
public GameObject pieceDarkPrefab;
(Tooltip(“Any string put in messagetext.text will appear the the left of the screen”))
public Text messageText;
(Tooltip(“Reference to the camera to be used in determining the mouse position”))
public Camera cam;

// The following is used if you wish to have mouse input
private Vector2 mousePos;   // Can be used to hold the mouse screen position 
private Vector3 mouse3DPos; // Can be used to hold the mouse position on the ground (ignore y axis)
                            // To get the mouse position use the following code in the update method
                            //    mousePos = Input.mousePosition;//gets mouse postion
                            //    // Convert mouse screen position to a position on the ground
                            //    mouse3DPos = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, cam.transform.position.y));

public const int NumberOfPieces = 8;   // A constant used to hold the number of pieces created


GameObject() Piece = new GameObject(NumberOfPieces);     // This array will hold all the playing pieces
Vector3() Target = new Vector3(NumberOfPieces);       // This array will hold the target for each playing piece

GameObject() PiecePrefab = new GameObject(2);   // Used to hold the piece prefabs for easier selection

public float Speed = 10f;   // Speed to move peice in m/s
int Movethepiece = 0;        // Used as index to piece array to indicate piece to be moved    
public float PieceHeight = 0.1f; // The height the pieces should be placed above the tiles

public enum GameState { Begin, Player1, Player2, End };
public GameState gameState;
public bool isGameInitialised = false;
public Vector3 gizmoPosition = Vector3.zero;

// Start is called before the first frame update
void Start()
{
    InitialiseBoard(width, depth);  // Call method to create the playing board
    messageText.text = "";  // Any string assigned to this will appear on the left of the screen 

    PiecePrefab(0) = pieceDarkPrefab;  // Put the pieces prefabs into an array to be able to use the index
    PiecePrefab(1) = pieceLightPrefab;   //  to select a light or dark piece.
    //piece.clear();
    int i = 0;
    while ( i < NumberOfPieces)    // While Loop to initialise the playing pieces
    {
        Target(i) = new Vector3(i, PieceHeight, 0); // Target holds the initial piece position
        Piece(i) = Instantiate(PiecePrefab(i % 2), Target(i), Quaternion.identity);   // Create a new playing piece
        i++;
    }
    
}
void InitialGame()
{
    for (int i = 0; i < NumberOfPieces; i++)    // Loop to initialise the playing pieces
    {
        Target(i) = new Vector3(i, PieceHeight, 9 - (i % 2 * 9)); // Target holds the initial piece position
        Piece(i).transform.position = Target(i);
    }
    Target(1) = new Vector3(1f, PieceHeight, 1f);
    Piece(1).transform.position = Target(1);
    isGameInitialised = true;
} 

// Method:  InitialiseBoard
// Input:   int width - the width of the board in number of tiles
//          int depth - the depth of the board in number of tiles
// Output:  none
// Description:
//      Creates a draughts or checkers board of size given by the inputs.
//      It assumes that the first tile is at position 0,0 and that the tile are 1x1 in size.
private void InitialiseBoard(int width, int depth)
{
    for (int x = 0; x < width; x++)  // Loop through each row of the board
    {                               // x indicates the width position of tile
        for (int z = 0; z < depth; z++) // Loop through each column of the board
        {                               // z indicates the depth position of tile
            // By adding x and z we get a number that alternates between odd and even.
            // Taking the modulus'%' of 2 (i.e. dividing by 2 and taking the remainder)
            // we get a remainder of 0 or 1. We can now check if the number is even by comparing with 0.
            // This allows us to select the light or dark coloured tile to create.
            if ((x + z) % 2 == 0)     // Select light or dark coloured tile. 
            {
                // Create new instance of Light Tile
                Instantiate(tileLightPrefab, new Vector3(x, 0, z), Quaternion.Euler(0f, 0f, 0f));
            }
            else
            {
                // Create new instance of Dark Tile
                Instantiate(tileDarkPrefab, new Vector3(x, 0, z), Quaternion.Euler(0f, 0f, 0f));
            }
        }
    }
}

// Update is called once per frame
void Update()
{
    switch (gameState)
    {
        case GameState.Begin:
            Begin();
            break;
        case GameState.Player1:
            MovePiece();
            break;
        case GameState.Player2:
            MovePiece();
            break;
        case GameState.End:
            break;

    }
    //MovePiece();
}
void Begin()
{
    if (!isGameInitialised)
    {
        InitialGame();
    }
    messageText.text = "Wolf and Sheep GamenInstructions:-nPress Spacebar Enter to startnPieces move diagonal onlynLight piece only move forwardn Dark piece move back and forth";
   
    if (Input.GetKeyDown(KeyCode.Space))
    {
        gameState = GameState.Player1;
    }
}

void MovePiece()
{
    Vector3 tempTarget;

    if (Input.GetKeyDown(KeyCode.Space))    // Check for space bar to change piece to be moved
    {
        Movethepiece++;  // Space bar used to increment the piece to be moved
        if (Movethepiece >= Piece.Length)  // check that the piece to moved is valid, i.e. not greater that the pieces available
        {
            Movethepiece = 0;    // If not valid then wrap around to zero.
        }

    }
    if (gameState == GameState.Player1)
    {
        messageText.text = "Player 1n";
    }
    else
    {
        messageText.text = "Player 2n";
    }
    messageText.text = "Piece To Move: " + Movethepiece.ToString();  // Tell the play which piece is to be moved.

    tempTarget = Target(Movethepiece);
    if (Input.GetKeyDown(KeyCode.W))
    {
        if (tempTarget.z < (width - 1))
        {
            tempTarget.z += 1;
            tempTarget.x += 1;
            if (gameState == GameState.Player1)
            {
                gameState = GameState.Player2;
            }
            else
            {
                gameState = GameState.Begin;
                isGameInitialised = false;
            }
        }

    }
    
    if (Input.GetKeyDown(KeyCode.S))
    {
        if (tempTarget.z > 0)
        {
            tempTarget.z -= 1;
            tempTarget.x -= 1;
            if (gameState == GameState.Player1)
            {
                gameState = GameState.Player2;
            }
            else
            {
                gameState = GameState.Begin;
                isGameInitialised = false;
            }
        }

    }
    Target(Movethepiece) = tempTarget;

    Vector3 position = Piece(Movethepiece).transform.position;
    if (position != tempTarget)
    {
        if (position.z != tempTarget.z)
        {
            if (position.z < tempTarget.z)
            {
                position.z += Speed * Time.deltaTime;   // Look up LERP
                if (position.z > tempTarget.z)
                {
                    position.z = tempTarget.z;
                }
            }
            else
            {
                position.z -= Speed * Time.deltaTime;
                if (position.z < tempTarget.z)
                {
                    position.z = tempTarget.z;
                }
            }
        }
    }
    Piece(Movethepiece).transform.position = position;
    if (!IsTileOccupied(tempTarget))
    {
        Target(Movethepiece) = tempTarget;
    }

    if (Piece(Movethepiece).transform.position != Target(Movethepiece))
    {
        Piece(Movethepiece).transform.position = Vector3.Lerp(Piece(Movethepiece).transform.position, Target(Movethepiece), Speed * Time.deltaTime);
    }
    ShowSelection(Piece(Movethepiece).transform.position);

}
    public void ShowSelection(Vector3 position)
    {
    gizmoPosition = position;
    }
    public void OnDrawGizmos()
    {
    Gizmos.color = Color.green;
    Gizmos.DrawSphere(gizmoPosition, 0.25f);
    }

    public float MoveAxis(float targetAxis, float currentAxis)
    {
    if (currentAxis < targetAxis)
    {
        currentAxis += Speed * Time.deltaTime;   // Look up LERP
        if (currentAxis > targetAxis)
        {
            currentAxis = targetAxis;
        }
    }
    else
    {
        currentAxis -= Speed * Time.deltaTime;
        if (currentAxis < targetAxis)
        {
            currentAxis = targetAxis;
        }
    }
    return currentAxis;

    }

    bool IsTileOccupied(Vector3 targetTile)
    {
    bool isTileOccupied = false;
    for (int i = 0; i < Target.Length; i++)
    {
        if (Target(i) == targetTile)
        {
            isTileOccupied = true;
        }
    }

    return isTileOccupied;
    }

}

Bing Ads Coupon code

how i can get free Bing Ads Coupon code to run my PPC advertisements

javascript – Huffman encoding – Code Review Stack Exchange

The Huffman-Algorithm

The Huffman-Algorithm, named after David A. Huffman who first published this algorithm in 1952, is a algorithm for lossless data compression. As most encoding-methods, the words for often used symbols are shorter than the ones for not so commonly used symbols. The algorithm returns a binary code-word for every source symbol. The result is a optimal prefix-free code.

The Algorithm in detail

The first step is to count the number of occurences of every char in the text. After that, the algorithm creates a so called forest of tree-nodes, where every node contains one char and the number of occurences of this char:

After that, the algorithm looks at this node as roots of trees.

Then, while there is more than one tree left, the algorithm creates a new node with two children. The children are always the nodes with the two smallest numbers of occurences. For the new node, the number of occurences of the children are added together.

After that, the code-words for every char are created by looking at the path to every leaf.

The code

/*
 * Attribution:
 * https://stackoverflow.com/a/38362821/13634030
 * https://stackoverflow.com/a/14313213/13634030
 */

/*
 * This program is an implementation of the Huffman-algorithm.
 * Huffman-coding is an algorithm for lossless data compression. It was
 * first published by David A. Huffman in 1952.
 * The algorithm returns a binary code-word for every source symbol. Like
 * most encoding methods, the words for often used symbols are shorter than
 * the ones for not so commonly used symbols. The result is a optimal prefix-
 * free code.
 * For more information see https://en.wikipedia.org/wiki/Huffman_coding.
 */

document.getElementById('startHuff').addEventListener('click', huffman);

/*
 * ================================
 * Data-structures for this program
 * ================================
 */

/**
 * Provides the structure called a node for a binary tree
 */
class Node {
  /**
   * Creates a node
   * @param {number} value Number of occurences
   * @param {char} c The char this node represents
   * @param {Node} left The left child-node
   * @param {Node} right The right child-node
   */
  constructor(value, c, left, right) {
    this.value = value;
    this.c = c;
    this.left = left;
    this.right = right;
  }
}

/**
 * Provides a recursive binary-tree structure
 */
class Tree {
  /**
   * Creates a Tree
   * @param {Node} root The root of the tree
   */
  constructor(root) {
    this.root = root;
  }
}

/*
 * ==================
 * Main-functionality
 * ==================
 */

let input; // The text the user wants to compress
let occurences; // Array that contains the number of occurences of every char
let forest; // Array that contains the nodes for every char
let code; // Array that contains the code-words for every char
let text; // Compressed text
let codeWords; // Array code as user-friendly string
let ascii; // ASCII-text

/**
 * This is the only function that has to be called from outside
 * this script.
 */
function huffman() {
  // get user input
  input = document.getElementById('Input').value;

  // reset variables
  forest = ();
  ascii = '';
  text = '';
  codeWords = '';

  /*
   * Program only creates huffman-tree if
   * user only entered (non-extended) ascii-
   * chars
   */
  if (input != '' && isASCII(input)) {
    // Count occurences of every ascii-char
    count();

    // Create node for every char that occures at least once
    createForest();

    // Apply huffman-algorithm on the created nodes
    createTree();

    /*
     * "translates" the position of the leafs to the codeword
     * of the char represented by the leaf
     *
     *                   #
     *                 0/ 
     *                 /   
     *                #     #
     *               / 1
     *              /   
     *                   #
     *                 0/
     *                 /
     *                A
     *
     * The code-word of 'A' would be 010 in this example
     */
    code = new Array(128);
    createCode('', code, forest(0).root);

    // Creating html-table with created code-words
    getCode();

    // Creates string with every char replaced by the code-word
    getText();

    // Creates string with every char replaced by the binary ascii-value
    getAscii();

    // Output
    document.getElementById('Text').value = text;
    document.getElementById('CodeWords').innerHTML = codeWords;
    document.getElementById('numOfCharsText').innerHTML = ' ' + text.length;
    document.getElementById('Ascii').value = ascii;
    document.getElementById('numOfCharsAscii').innerHTML = ' ' + ascii.length;
    document.getElementById('compression').innerHTML = ' ' + text.length +
      "https://codereview.stackexchange.com/" + ascii.length + ' = ' + (text.length / ascii.length).toFixed(4);
  } else {
    window.alert('Please only enter ASCII-characters.');
  }
}

/**
 * Counts the number of occurences of every ascii-char in input
 */
function count() {
  occurences = new Array(128);

  // Initialize with zero
  for (let i = 0; i < occurences.length; i++) {
    occurences(i) = 0;
  }

  // Count occurences
  for (let i = 0; i < input.length; i++) {
    // charCodeAt(i) returns the ascii-code of the i-th character in the string
    occurences(input.charCodeAt(i))++;
  }
}

/**
 * Creates the forest with one tree for every char
 */
function createForest() {
  // Create tree (with only one node) for every char the text contains
  for (let i = 0; i < occurences.length; i++) {
    // Only chars that really occur in the text will be taken into account
    if (occurences(i) > 0) {
      // String.fromCharCode(i) returns the char with ascii-code i
      const x = String.fromCharCode(i);
      forest.push(new Tree(new Node(occurences(i), x, null, null)));
    }
  }
}

/**
 * Creates the huffman-tree
 */
function createTree() {
  /*
   * The result of the algorithm is just one tree, so the algorithm has
   * not finished yet, if there are more than one trees.
   */
  while (forest.length > 1) {
    // Find the two trees with the smallest number of occurences
    let minIndex = findMinimum();
    const min1 = forest(minIndex).root;

    /*
     * removes the minIndex-th element; the second parameter tells us that
     * only one element should be removed, starting at index minIndex
     */
    forest.splice(minIndex, 1);

    minIndex = findMinimum();
    const min2 = forest(minIndex).root;
    forest.splice(minIndex, 1);

    // Create new node that has min1 and min2 as child-nodes
    forest.push(new Tree(new Node(min1.value + min2.value, null, min1, min2)));
  }
}

/**
 * Creates the code-words from the created huffman-tree
 * @param {String} str (Part of) the codeword for the current leaf
 * @param {Array} code Array of codewords that has to be filled
 * @param {Node} node Current node
 */
function createCode(str, code, node) {
  if (node == null) {
    return;
  }

  // case the node is a leaf
  if (node.left == null && node.right == null) {
    code(node.c.charCodeAt()) = str;

    // Recursive calls if node is not a leaf
  } else {
    createCode(str + '0', code, node.left);
    createCode(str + '1', code, node.right);
  }
}

/*
 * ================
 * Helper-functions
 * ================
 */

/**
 * Creates a html-table with the codewords
 */
function getCode() {
  codeWords = '<table><tr><th>Character</th><th>' +
    'Occurences</th><th>Huffman-code</th></tr>';
  for (let i = 0; i < code.length; i++) {
    if (occurences(i) > 0) {
      codeWords += '<tr>';
      codeWords += '<td>' + String.fromCharCode(i) + '</td>';
      codeWords += '<td>' + occurences(i) + '</td>';
      codeWords += '<td>' + code(i) + '</td>';
      codeWords += '</tr>';
    }
  }
  codeWords += '</table>';
}

/**
 * Replaces every char with its codeword.
 */
function getText() {
  for (let i = 0; i < input.length; i++) {
    text += code(input.charCodeAt(i)) + ' ';
  }
}

/**
 * Replaces every char with its ASCII-code.
 */
function getAscii() {
  for (let i = 0; i < input.length; i++) {
    ascii += '00'.concat(input.charCodeAt(0).toString(2)).slice(-8) + ' ';
  }
}

/**
 * Finds the minimum.
 * @return {number} index of minimum
 */
function findMinimum() {
  let min = forest(0).root.value;
  let minIndex = 0;
  for (let i = 0; i < forest.length; i++) {
    if (min > forest(i).root.value) {
      minIndex = i;
      min = forest(i).root.value;
    }
  }
  return minIndex;
}

/**
 * Returns true, if str only contains ascii-chars.
 * @param {String} str String the function will be applied on
 * @return {Boolean} test True if str only contains ascii-chars
 */
function isASCII(str) {
  /*
   * returns true if str only contains (non-extended) ascii-chars;
   * see https://www.ascii-code.com/ for reference
   */
  const test = /^(x00-x7F)*$/.test(str);
  return test;
}
<!-- Just minimal working example -->
<!DOCTYPE html>
<html lang='en'>
    <!-- Head -->
    <head>
        <meta charset='utf-8'>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script>
            window.onerror=function(msg, url, linenumber) {
                alert('Error message: ' + msg + 'nURL: ' + url + 'nLine Number: ' + linenumber);
                return true;
            }
        </script>
        <title>Huffman</title>
        <link rel='stylesheet' type='text/css' href="https://codereview.stackexchange.com/css/style.css">
    </head>
    <body>
        <!-- Input Area -->
        <h4>Input:</h4>
        <div>
            <textarea id='Input' rows='8' style='resize: none; background: LightGray; position: relative; width: 80%;'></textarea>
        </div>
        <br><br>
        <button type='button' id='startHuff'>Huffman</button> 

        <!-- Output Area --> 
        <h4>Compressed text:</h4>
        <div>
            <textarea id='Text' rows='8' style='resize: none; background: LightGray; position: relative; width: 80%;' readonly></textarea>
        </div>
        <p>Number of chars:<span id=numOfCharsText></span></p>

        <h4>ASCII text:</h4>
        <div>
            <textarea id='Ascii' rows='8' style='resize: none; background: LightGray; position: relative; width: 80%;' readonly></textarea>
        </div>
        <p>Number of chars:<span id=numOfCharsAscii></span></p>
        <h4>Code:</h4>
        <div id='CodeWords'>
        </div>
        <p>Compression:<span id=compression></span></p>

        <script src='huffman.js'></script>
        

    </body>
</html>

I’ve checked the code with eslint and it didn’t show me any errors for this version.

Question

All suggestions to improve the code are appreciated.

Geting bundle product price by product id this code working without cron but in cron doesn’t work Magento2

This code work without cron, but in cron doesn’t work it’s returning Zero(0)
Also check cron is executing successfully.

$objectManager = MagentoFrameworkAppObjectManager::getInstance();
$product = $objectManager->create('MagentoCatalogModelProduct')->load($product_id);
if ($product->getTypeId() == 'bundle') {
  $regularPrice = $product->getPriceInfo()->getPrice('regular_price')->getMinimalPrice()- 
>getValue();
  $specialPrice = $product->getPriceInfo()->getPrice('final_price')->getMinimalPrice()- 
>getValue();            
}

Here product_id is your product Id.

algorithm – HackerRank Apples(Python) – Code Review Stack Exchange

There are M Women sitting on the chair in a row. Every woman has a number assigned to it.

Person A is distributing the apples to those women with following conditions.

Each woman has at least one apple

An woman with higher number than neighbour get more apples than that neighbour.

What number of minimum apples Person A should have ?

Input Format

First line is an array of intergers

Constraints

Each integer value < 50
Number of intergers in array < 10
Output Format

An integer

Sample Input 0
(11, 1, 34)

Sample Output 0
5

Explanation 0

Person A can give 2 apples to the first, 1 apple to the second and 2 apples to the third woman. Because it satisfies the given 2 conditions. i.e. First woman has number 11 assigned to her and Second woman has number 1, because second woman has low number than first woman minimum number of apples distribution is 2 apples to first woman and 1 apple to second woman, similarly for 3rd woman, she will get 1 apple(minimum) extra from second woman.

Sample Input 1

(1, 2, 2)

Sample Output 1
4

Explanation 1
Person A can give 1 apple to the first, 2 apple to the second and 1 apple to the third woman. Because it satisfies the given 2 conditions. i.e. First woman has number 1 assigned to her and Second woman has number 2, because second woman has higher number than first woman minimum number of apples distribution is 1 apple to first woman and 2 apples to second woman, similarly for 3rd woman, she will get 1 apple less than second woman because her number is not higher that the second woman.

Source code:

if __name__ == '__main__':

     temp = input().strip()

     temp = temp(1:-1)

     temp = ''.join(temp).split(',')

row = (int(i) for i in temp)

min = 0

min += len(row)

for i in range(0,len(row)):

    if i ==0:

         if row(i) > row(i+1):

              min += 1

    elif i == len(row)-1:

         if row(i) > row(i-1):

              min += 1

    elif row(i)>row(i-1) and row(i)>=row(i+1):

         min += 1
    
print(min)

I can pass the test case but not the hidden case?
Please help me debug it or suggest a new appproach

magento2.4 – Magento Deprecated code confusion

On Magento 2.4 i found this class extends (extends MagentoFrameworkAppActionAction) show deprecated.

Ref : Screenshot at end of the question

But Magento core use this code. I mean in core code they extends this class.

As per knowledge if a code get deprecated then on next release it may get removed, so there must be alternative code for the deprecated code. How can we easily found alternative for list of deprecated code in Magento 2?

enter image description here

perl – How to change one line of code in a block of code from linux command line?

I have a change I need to make across multiple different sites and may need to make again in the future, so I’d like to put it in a shell script. Essentially I want to find a specific class block in a css file, find one of its attributes and change the value of that attribute.

So for example:

.some-id {
  some-arbitrary-properties
  property-i-want: old-value
  maybe-some-more-properties
}

I want to only change old-value in property-i-want, and only if it’s in .some-id.

I’m very comfortable with grep, but it only works one line at a time. I’m somewhat less comfortable with sed, but I haven’t seen any way to do this without a deterministic set of properties. For instance, I could have sed replace the entire block. But I want to leave any other properties in the block alone.

I’d rather not use perl or python, but I can. I’d like to keep it short, because it’s going in a script of one-liners.

plotting – Why does Mathematica shade a region when this code is inputted?

Thanks for contributing an answer to Mathematica Stack Exchange!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

Use MathJax to format equations. MathJax reference.

To learn more, see our tips on writing great answers.

I will create unique professional custom qr code and barcode design within 6hrs for $1

I will create unique professional custom qr code and barcode design within 6hrs

For good communication, you need a professional and unique QR Code & Barcode that increases your business or your desire value.

I can help you with this section.☺

Here you will get 

100% Accuracy|Customization|Printable|Awesome Design with Satisfaction Guaranteed

✅Timely & Fast delivery within 5hrs & 24/7 friendly communication

✅Various format

✅Unlimited revision & lifetime support 

✅High-Quality graphics 

Color change, Photo, Logo, or any Design I can make & add as you want.

My Providing Services Formats:

Any kinds of QR Code:

  • 2D Codes
  • Mobile Tagging
  • Healthcare Codes

It can be used on or for any of the following:

  • For all social media
  • Web/URL Links
  • Plain Text
  • Emails
  • Geo-location
  • Banking & Payments
  • MECARD
  • VCARD
  • SMS
  • Event  
  • Business Cards
  • Phones
  • Calendars
  • Wireless Networks
  • Advertising Materials & many more

NoteI do not sell Barcode number.If you give Code No. I will create your Barcode.
Any kinds of Barcode:

  • Linear Codes
  • Postal Codes
  • GS1 DataBar
  • EAN / UPC
  • ISBN Codes

You can use it on or for any business, industrial company, personal need.

Literally, anything you need, you can have confidence I will deliver above and beyond your expectations.
Feel free to contact me if you have any query or you can see the  Requirements.

.