Tuesday, December 17, 2019

Simple Flask sample

Just wanna to create a very simple Flask application in a single python source file:

simple.py

from flask import Flask
application = Flask("simple")
@application.route("/")
def index():
return "Hello World"


To run this Flask application, run the following:
  • export FLASK_APP=simple.py
  • flask run
If you want to put this application in a Docker container, you need to bind to 0.0.0.0:
  • flask run --host 0.0.0.0

Now, navigate "http://localhost:5000" to see the word "Hello World" displayed on the browser.

Navigate tmux splitted pane using mouse

To enable navigation on tmux splitted pane using mouse

In tmux environment, do the following:
  1. Ctrl-b
  2. Type :setw -g mouse on
Done, try to switch your tmux pane with mouse.

Note:
To make this setting persistent, save this line in .tmux.conf:
setw -g mouse on





Wednesday, December 11, 2019

Assign locale for moment.js

To assign locale in moment.js, we can use the following:

     moment.locale("en")

It will returns "en". However, if you assign an unaccepted locale to it, it won't update its value. For example:

     moment.locale("zh")

It still returns "en", since "zh" is not an accepted locale for moment.js.

Up till now, moment.js accepts:

     zh-hk
     zh-tw
     zh-cn

Reference: momentjs

Wednesday, December 4, 2019

QGIS freezes while editing features

There are many possibilities for QGIS to hang / freezes while editing features. But for my experience, I found it often hangs when using a Shapefile layer.

To minimize this kind of problem, I tried to use other feature format (e.g. SpatialLite). And the problem is relieved to some extent.



Have a try and let me know if it helps or not.

Tuesday, December 3, 2019

Windows equivalent of "wc -l" command in Linux

To count the number lines of files / stdout in Linux, we uses "wc -l" to achieve. In Windows, we use the following instead:
  • find /c /v ""

For example, suppose we have a file "sample_file.txt" and we want to know the number of lines of that file, we can perform the following:
  • type sample_file.txt | find /c /v ""



Monday, December 2, 2019

Handling table names with underscore ("_") in flask_sqlalchemy / Python

When you create table class using flask_sqlalchemy (the Flask extension for SQLAlchemy), it can maps the modal class to a proper table automatically. This is cool but if you have a table name with underscore (e.g. MY_SAMPLE_TABLE) and you name your model class with the underscore ('_') as usual, you will find SQLAlchemy will map your table name as something the following:

"MY__SAMPLE__TABLE"

Each single underscore (_) with becomes a double underscores (__). This is annoying and you might believe this is a bug, but in fact you can resolve this issues by naming your table class using the PEP8 naming convention, and named your class as:

class MySampleTable(db.Model):
     field_id = db.Column(db.Integer, primary_key = True)
     field_data = db.Column(db.String(200))

The the SQLAlchemy will map the MySampleTable class to table name as "MY_SAMPLE_TABLE" correctly.

For more information about PEP8, click here for details.

A job with mixture of joy and technology

Job with LEGO + IT, what else I can asked for ?


Thursday, November 28, 2019

Connecting Oracle with Python via cx_Oracle extension


Installation Prerequisites

  • Python 2.7, 3.5 or above
  • Oracle Client / Oracle Instant Client "Basic" or "Basic Light"
  • libaio / libaio1 package


Installation Reference



Sample Python Code

import cx_Oracle

# Make DSN address. Real values for host address, port and service name were replaced by '<>'.

dsn = cx_Oracle.makedsn('<host_address>', '<port>', service_name='<service_name>')

# Connect to DSN

orcl = cx_Oracle.connect(user='<username>', password='<password>', dsn=dsn)

# Get cursor

cursor = orcl.cursor()

# Execute SQL statement

cursor.execute('<SQL SELECT STATEMENT>')

# Fetch result

data = cursor.fetchone()

Friday, November 22, 2019

Sending F10 in Ubuntu Terminal

By default, you just can't send F10 to Ubuntu Terminal's curses program. This is because F10 is being captured by Terminal.app already.

A quick workaround is to use "ESC 0" to simulate sending F10 inside Terminal.app.

Reference

Tuesday, November 19, 2019

Customized Dash (Launcher / Taskbar) Icon in Ubuntu

To customize application icon in Ubuntu:

  1. Create a .desktop file in ~/.local/share/applications/
    e.g. /home/user/share/applications/<application name>.desktop
  2. Add the following content to the desktop file
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Name=ApplicationName
GenericName=ApplicationName
Icon=/home/user/application-icon.png
Exec=/home/user/application/application-executable
Categories=Category;Subcategory
Done!

Upgrade nodejs in conda (from v18 to v26)

If your conda env is nodejs v18, doing a conda install nodejs=26 is likely to create a lot of conflict. Consider remove those conflicting p...