To keep your prompt (PS1) with color shown in tmux screen, add the following property in .bashrc:
force_color_prompt=yes
Wednesday, December 18, 2019
Tuesday, December 17, 2019
Create docker container with the simple flask application
I will try to create a docker container with the simple flask application created some times ago.
First, I create a shell script for starting the flask application, namely "boot.sh":
boot.sh
#!/bin/sh
export FLASK_APP=simple.py
flask run --host 0.0.0.0
export FLASK_APP=simple.py
flask run --host 0.0.0.0
Second, we need to create a requirements.txt file:
requirements.txt
flask==1.1.1
Actually you can run the following to get the requirements.txt:
pip freeze > requirements.txt
Third, together with the simple.py file created in the simple flask application, put those 3 files in an "app" directory:
app/
- boot.sh
- requirements.txt
- simple.py
Forth, create a Docker file outside the app directory:
Dockerfile
FROM python:3.6-alpine
WORKDIR /home/app
COPY app/ ./
RUN chmod +x ./boot.sh
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["./boot.sh"]
WORKDIR /home/app
COPY app/ ./
RUN chmod +x ./boot.sh
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["./boot.sh"]
Build the docker image using the Dockerfile:
docker build -t simple:latest .
Run the docker container with the docker image we just created:
docker run -d -p 5000:5000 simple:latest
Check "http://localhost:5000" to check the Flask application.
Simple Flask sample
Just wanna to create a very simple Flask application in a single python source file:
simple.py
To run this Flask application, run the following:
Now, navigate "http://localhost:5000" to see the word "Hello World" displayed on the browser.
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
- 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:
In tmux environment, do the following:
- Ctrl-b
- 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
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
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.
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:
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:
- 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.
"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.
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()
Subscribe to:
Posts (Atom)
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...
-
When Office2003 couldn't find file SKU011.CAB: regedit -> [HKEY_LOCAL_MACHINE] -> [SOFTWARE] -> [Microsoft] -> [Office] -...
-
The resolution can be changed by editing the BlueStack's registry: HKLM\SOFTWARE\BlueStacks\Guests\Android\FrameBuffer\0\Height and ...
-
Suppose you got a file in Big5 containing some HKSCS characters (e.g. 深水埗, 赤鱲角, etc). When your environment (Ref: Charset.defaultCharset( ) ...

