Category Archives: Engineering Tools

Memo for Siemens Polarion


Polaris Overview

Key features

  • Unified Development
  • Agile, Waterfall and Hybrid
  • Collaboration & Compliance
  • Cloud or On-Premise

Which does tool cover more area ?

  • ALM > QA > Requirements > Pro > Reviewer

Price (TBD)

ALM Waiting for reply
QA Waiting for reply
Requirements Waiting for reply
Pro Waiting for reply
Reviewer $29.00 per user

Polaris License model

License model

  • Named User License
  • Concurrent User License

Can be midex?

  • YES

Providers in Korea ( for Polarion)

1CITEK SystemPlatinum Solution Provider Partner8.69 kmLocations: 3서울본사(Main Office)서울특별시
금천구 가산디지털2로 123, 월드메르디앙 2차 1007~1008호 (우:08505)
 김동률 상무 +82 2 2025 8740 SpecializationNX CAD
2KIMIES CORPORATIONPlatinum Solution Provider Partner17.1 kmLocations: 3서울본사(Main Office)서울특별시
서초구 서초중앙로 14, 하이트진로빌딩 17층 (우:06720)
 이상우 상무 +82 2 2088 1830 SpecializationNX CAMTeamcenter – PLM
3Uclick Co., Ltd.Platinum Solution Provider Partner14 km서울본사(Main Office)서울특별시 중구 퇴계로 286
쌍림빌딩 9층(우:04615)
 곽노성 +82-2-6320-0000
4JL Company Co. Ltd.Silver Solution Provider Partner11.8 kmMain Office서울특별시 강남구 테헤란로2길
8, 4층, (우: 06373)
 DongYeol Oh +82-2- 488-5661
5Taekwang Data System Co. LTDSilver Solution Provider Partner12.9 kmLocations: 3서울지사(PLM Main Office)서울특별시
중구 퇴계로 173 남산스퀘어빌딩 17층, (우:04554)
 정득영 이사 82-2-2262-0621
6Youl Systems Inc.Silver Solution Provider Partner31 kmMain OfficeA-2107, Bundang Suji U Tower, 767, Sinsu-Ro, Suji-Gu,
Yongin-Si, 16827
 Kris Kang 82-31-266-6338
7SPID Co. Ltd.Authorized Solution Provider Partner11.8 kmMain Office4F, Arum B/D, 27, Seolleung-Ro 93-Gil,Gangnam-Gu
Seoul, 6151
 Chang-do Park 82-2-3453-5345
8Hancom MDS Inc.Authorized Solution Provider Partner28.5 kmMain Office3 Fl Hancom Tower, 49, Daewangpangyo-Ro 644 Beon-Gil,Bundang-Gu
Seongnam-Si, Gyeonggi-Do, 13493
 Seol, JaeSung 82 31 627 3139

List of Tools

Polaris Reviewer

  • Review and Approval
  • Enable internal and external stakeholders to review and comment on work items
  • Accelerate external review
  • Support Cos-effective collaboration
  • Ideal for
    • Partners, Suppliers, Customers
    • Managers who need to approve task completion

Polaris PRO

  • Only for Tasks
  • Unify change management, task & issue tracking and work reporting across all project contributors across the enterprise
  • Ideal for Developers, DevOps/Technology operations team members, Contributor on specific tasks
  • Solution Highlights
    • Workflow-enabled environment
    • Real-time communication
    • Automate Change Management and Proof of Compliance
  • Enable Accurate Release Planning based on Real-Time Stats Updates


  • Requirements Management Tool
  • Gather, author, approve and manage requirements for complex systems across entire project lifecycles
  • Benefits
    • Core Functionality
      • Collaboration, Traceability and Workflow
      • Time machine function
        • Browse, search and report any historical state of the project
      • Load balancing / Fail over
      • Open API
    • Requirements Management
      • LiveDocTM functionality and “Easy-As-Word” authoring and real-time collaboration
    • Reuse & Branch Management
      • Reuse or branch your requirements for effective sequential or parallel project or product line development
    • Change & Configuration Management
      • Version History Record: Versioned, Auditability, Traceability
    • Audits, Metrics & Reports
    • Connectors & Extensibility
      • With Matlab Simulink, Microsoft TFS, HP QC, JIRA, Open API and Web Services API

Polaris QA

  • Test management features are added
  • Benefits
    • Core Functionality
      • Collaboration, Traceability and Workflow
      • Time machine function
        • Browse, search and report any historical state of the project
      • Load balancing / Fail over
      • Open API
    • Test and Quality Management
      • Manage all testing activities from a central platform
      • Including ‘Execute test cases with online test execution panel’
    • Issue and Defect Management
      • Track all possible and reported failure
      • Track issues automatically
      • Assign issues automatically based on classification type ( Category, Severify, component, etc.)
        • Like JIRA
    • Requirements Managements
      • With Polaris REQUIREMENTS
    • Change and Configuration Management
      • With Polaris REQUIREMENTS
    • Audits, Metrics and Reports
      • With Polaris REQUIREMENTS

Key features


lxd: First notes to use LXD/LXC




  • Reference
  • Install LXD on Ubuntu
    • Install LXD from distribution package.
    • ‘snap’ or ‘apt’
  • Configuraiton
    • Run ‘lxd init‘(Required)
  • Tools
    • /usr/bin/lxd
      • Wrapper for /usr/lib/lxd/lxd
    • /usr/lib/lxd/lxd
      • ELF file for LXD
      • LXD container manager (daemon file)
    • lxc
      • Command line client for LXD
      • lxc-*‘ commands
        • Set of tools for for every containment feature supported by the kernel
        • No relation with LXD

First use case with LXD

Before read this section, please read this document.

After you initialize LXD daemon, type lxc remote list. You can show this result

|      NAME       |                   URL                    |   PROTOCOL    | AUTH TYPE | PUBLIC | STATIC |
| images          |       | simplestreams |           | YES    | NO     |
| local (default) | unix://                                  | lxd           | tls       | NO     | YES    |
| ubuntu          | | simplestreams |           | YES    | YES    |
| ubuntu-daily    |    | simplestreams |           | YES    | YES    |

This list contains remote servers which you can use to create image and container runtimes. There is no image on ‘local’ at this time. Type lxc image list and you can’t see any image on the local.


If you do launch a container instance from a remote server named as ‘ubuntu’,

lxc launch ubuntu:18.04 u1804-build

This command downloads ‘18.04‘ image from ‘ubuntu(‘ repository. After you do it, you can an image from ‘lxc image list’.

| ALIAS | FINGERPRINT  | PUBLIC |                 DESCRIPTION                 |  ARCH  |   SIZE   |         UPLOAD DATE         |
|       | 0041760acce6 | no     | ubuntu 18.04 LTS amd64 (release) (20200729) | x86_64 | 187.09MB | Aug 6, 2020 at 9:00am (UTC) |

‘ALIAS’ field in this table is null. You can set this image’s alias by running lxc image alias create ubuntu-1804 0041760acce6 command. After doing it, run lxc image list and check the result

|    ALIAS    | FINGERPRINT  | PUBLIC |                 DESCRIPTION                 |  ARCH  |   SIZE   |         UPLOAD DATE         |
| ubuntu-1804 | 0041760acce6 | no     | ubuntu 18.04 LTS amd64 (release) (20200729) | x86_64 | 187.09MB | Aug 6, 2020 at 9:01am (UTC) |

After you download an image from the remote server, you can launch a runtime from ‘local’ repository. When you do it, you can omit a remote’s name like lxc launch ubuntu-1804 u1804-build2 .

Remote servers and mirrors for them

Server protocols

LXD’s remove servers use two protocols

You can communicate with the local lxd daemon by ‘LXD-Server’ protocol. ‘lxc’ command and ‘REST API’ help you to do so.

Public image servers contain base image files that you can launch a runtime from them. You can use them at your office or your home. But you may got too slow connection when you try to download an image from the remote server. If you have to do it two or more, a slow speed will disturb your job.

In order to help this problem, you can create your own mirror server with Nexus’s Raw Repositories format. This format is available for Nexus Repository OSS(Non-Paid) and Nexus Repository Pro(Paid).

You can use Raw Repositories format for the mirror server because Nexus’s proxy service redirect all requests to an original server if it does not have requested resources. LXD client use ‘simplestreams’ protocol to downloads images as we mentioned. But the mirroring image server doesn’t know about that protocol because all actions will be process by LXD client daemon.

Create an image mirror server

This is a simplified guide to create LXD image server’s mirror site.

At first, Create your Nexus Repository OSS Site.

Go to your Nexus OSS site and Create a raw proxy site

  • Nexus site >Server administration and configuration
  • Create ‘Blob’ store :
    • ‘Repository > Blob Stores’
  • Create ‘Raw proxy repository’:
    • ‘Repository > Repositories > Create repository > raw (proxy)’
  • Write an original remote server’s url
    • Where?
      • Proxy > Remote storage
    • You can check default remote server’s urls with lxc remote list command.

Gerrit: Access categories related with git tag management

Access Categories

Create Annotated Tag

  • Push an annotated tag object into the project’s repository
  • Tags should exist in ‘refs/tags/’ namespace

Create Reference

  • Push a lightweight tag
  • Lightweight tags are implemented just like branches in Git


  • Push an annotated tag on a new commit (commit not reachable from any branch/tag)
  • Grant permission on “refs/tags/*”

Delete/Update Tags

  • How to delete/Update tags
    • Create ‘Push’ access category with ‘force push’

Error messages

  • ! [remote rejected] testtag -> testtag (prohibited by Gerrit: update for creating new commit object not permitted)
    • Add ‘Push’ permission on ‘refs/tags/*’
  • ! [remote rejected] testtag -> testtag (prohibited by Gerrit: not permitted: create tag)
    • Add ‘Create Annotated Tag’ or ‘Create Signed Tag‘ on ‘refs/tags/*


  • If you try to make configurations for tag management, Define what tags you allow to be managed
  • Combinations between Tags and Access categories
    • Annotated
      • Create Annotated Tag, Push
    • Lightweight
      • Push
    • Signed
      • Created Signed Tag, Push

Docker error messages

Rootless Docker

systemctl –user start docker 시 error message

  • rootless docker 가 설치되지 않았을 때
    • “Unit docker.service could not be found.”
  • rootless docker 가 설치되었지만, dbus 관련 문제가 발생할 때
    • “Failed to connect to bus: No such file or directory”

Basic Guide for sending messages to user or channel on Telegram


  1. Create a bot user through BotFather
  2. Get a bot’s token on BotFather
    • Token’s example value: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
  3. Add a bot user to channel or group.
  4. Get a channel’s id from the result of{telegram_bot_token}/getUpdates
    • From the result, you can find “chat” object that contains the title that its value is a channel or username that you want to post messages.
    • Check “id”‘s value from “chat” object
  5. Prepare a code that posts a message to channel or username
    • Set ‘chat_id”s value as ‘id”s avalue at the previous step
    • API Link: sendMessage


# Case 1: Use 'requests' module with 'POST' method
import requests
telegram_bot_token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
url = f"{telegram_bot_token}/sendMessage"
r =, data={'chat_id': '123456789', 'text': 'hello world in bot: Personal message'})
# Case 2: Use python-telegram-bot module 
from telegram import Bot

telegram_bot_token = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
bot = Bot(token=telegram_bot_token)
bot.sendMessage(chat_id = "12345678", text="BHello World message ")


Create Docker registry on Nexus OSS

Plain HTTP

  1. Go to Server ‘administration and configuration‘ on the top banner and select ‘Repository > Blob Stores‘ on the left.
  2. Create a blob store for Docker registry
  3. Select “Repository > Repositories” and click “Create repository”
  4. Do double clicks on “docker (hosted)” recipe.
  5. Fill out required fields
    • Name: Repository name
    • Repository Connectors
      • HTTP: A port number for http-based communication
      • Allow anonymous docker pull
    • Docker Registry API Support
      • Enable Docker V1 API
    • Storage
      • Blot stores: Select a blob store that you created
      • Strict Content Type Validation
    • Hosted
      • Deployment policy: “Allow redeploy”
  6. Click “Create repository” button
  7. Go to “Security > Realm” and add “Docker Bearer Token Realm” to “Active” tab.

Secured HTTPS


Upgrade Gerrit from 2.16 to 3.1.2

Before you start

  1. An external database is needed after NoteDB migration for account patch reviews, which stores the ‘reviewed’ flag for files in a review per user
    • Supported external debases: H2, MySQL, PostgreSQL and MariaDb.


  1. Shutdown Gerrit instance
  2. Move to Gerrit instance’s directory
    • cd $GERRIT_HOME
  3. Check Gerrit version
    • java -jar bin/gerrit.war version
  4. Run ‘migrate-to-note-db’ command to migrate all changes on a separated database to NoteDB on each project
    • java -jar bin/gerrit.war migrate-to-note-db --treads 4 -d $(pwd)
    • When you run ‘migrate-to-note-db‘ command, you must have to set ‘–threads’ as small as possible. If you don’t set it, a migration process creates too many threads to make connections to a database and you will see error message ‘ you can’t make a connection to database’
  5. After a migration process is done, Check $GERRIT_HOME/notedb.config and set “noteDb.changes.disableReviewDb=true
  6. Download Gerrit 3.1.2 and place it into $GERRIT_HOME
  7. On $GERRIT_HOME, run this command
    java -jar gerrit-3.1.2 init -d $(pwd)
  8. After ‘init’ command is done, run ‘reindex’ command for ‘changes’
    java -jar bin/gerrit.jar reindex -d $(pwd) --index changes
  9. Start Gerrit instance and check its status
    bin/ start
    If you can’t show ‘error_log’ file at ‘$GERRIT_HOME/logs’ directory, run Gerrit instance using ‘java’ command directly. You can show error messages
    java -jar bin/gerrit.jar daemon -d $(pwd)

Remove or Reset Gerrit User Account since Gerrit 2.16

Since Gerrit 2.16 has been released, NoteDB is now required for accounts and groups. Also, it’s the preferred storage for changes.

This document show you the way to reset an existing account. If an account can’t be access or a user don’t show and change its information on Gerrit, this document help you to reset or delete an existing account information from Gerrit. If all is well, Gerrit user can log onto Gerrit instance with the same external account.

Before you start

  • You will get an new account ID value when you log onto Gerrit after removing an old.
  • All information like ssh keys, preferredEmail and other private configuration will be gone.
  • All changes are stored under All-Users‘s ‘/refs/users/*‘ and ‘/refs/meta/external-ids‘. So you can revert your change with them.


  1. Check an account’s ID
    • After you can add an account into one of groups, use ‘gerrit ls-memebers’ command to get an account ID value.
      ssh gerrit ls-members |grep ACCOUNT_NAME
  2. Clone All-Users repository
    • git clone ssh:// && pushd All-Users
  3. Fetch ‘refs/meta/external-ids
    • git fetch origin refs/meta/external-ids:external-ids && git checkout external-ids
  4. Find account’s external key files using grep. and delete all of them
    • grep -n “accountId = 12345” * -r
  5. Upload a change
  6. Delete a user’s refspec with a command
    • git push origin :refs/users/45/12345

Create a custom upstart service on Ubuntu(In progress)

  1. Create the service file in /etc/init.d/<service name>
  2. chmod 700 /etc/init.d/<service name>
  3. update-rc.d <service name> defaults
  4. update-rc.d <service name> enable

Now see you service in 

service --status-all

Sample service file

# chkconfig: 2345 20 80
# description: Description comes here....
# Provides:          tomcat9
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Tomcat9.
# Description:       Start the Tomcat servlet engine.

# start in normal runlevels when disks are mounted and networking is available
#start on runlevel [2345]

# stop on shutdown/halt, single-user mode and reboot
#stop on runlevel [016]

# Source function library.
#. /etc/init.d/functions
start() {
    # code to start app comes here
    # example: daemon program_name &
	pushd ${GERRIT_HOME}/bin
	./ start

stop() {
    # code to stop app comes here
    # example: killproc program_name
	pushd ${GERRIT_HOME}/bin
	./ stop

case "$1" in
       # code to check status of app comes here
       # example: status program_name
       echo "Usage: $0 {start|stop|status|restart}"

exit 0