Thursday, 12 September 2013
Struct and pointer sample
typedef struct Table Table;
struct Table {
int Height;
int Width;
};
Table * create_table(int height, int width)
{
Table *mytable_ptr;
Table my = {height, width};
mytable_ptr = &my;
return mytable_ptr;
}
int main()
{
Table * my;
my = create_table(10, 20);
int height = my->Height;
printf("h%d\n", height);
}
Thursday, 6 June 2013
Enviorment variables
export -p
2. View individual variables
echo $variable_name
3. Set variable dynamically
export APPLICATION_ENV='local'
4. Set variable permanently
put export statement in .profile
Wednesday, 27 March 2013
More MySql tips
dump db
mysqldump --host='127.0.0.1' --user=root --password='passwd' --column-statistics=0 db_name>dw.sql
redirect result to a csv file
select * from usermanager_users
into outfile '/tmp/test.csv' fields terminated by ',' enclosed by '"'
lines terminated by '\n';
redirect result on command line
mysql -u [username ] -p[password] [db_name] -e " SELECT * FROM [tbl_name] " > file_name
Case sensitive compare
#Will match first name Mary, but not match mary
SELECT first_name FROM `name` WHERE first_name REGEXP BINARY 'Mary';
Show stored procedures
SHOW PROCEDURE STATUS WHERE Db = 'db_name'\G
# show details of procedure
SHOW CREATE PROCEDURE procedure_name\G
Create a mysql user
CREATE USER lshen@'10.18.276.170' IDENTIFIED BY 'eikdkdk123scx';
select * from mysql.user where User="lshen"\G
GRANT SELECT ON *.* TO lshen@'10.18.276.170';
FLUSH PRIVILEGES;
Query Cache
If swap between different MySQL versions, cache may cause problem. For example, they may use the different end character. Therefore, need to flush cache.
#To check whether the query cache is present in your MySQL server
mysql> SHOW VARIABLES LIKE 'have_query_cache';
#To monitor query cache performance
mysql> SHOW STATUS LIKE 'Qcache%';
#removes all query results from the query cache
mysql> RESET QUERY CACHE ;
Slove authentication method unknown to the client issue
Error message: Unable to open PDO connection [wrapped: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client.
root cause:This error is coming from MySQL 8.x’s new default auth‐plugin (caching_sha2_password) which older PHP/MySQL clients (PDO_MYSQL via mysqlnd) don’t yet understand.
source database server is using Mysql8.4. data warehouse is using php7.3
Solution: upgrade data warehouse to use PHP 8.0
< apk add bash curl php7-mysqlnd php7-fileinfo php7-soap php7-pdo_mysql php7-xmlwriter mysql-client \
< php7-dom php7-tokenizer msmtp gnu-libiconv ncurses util-linux && \
---
> apk add bash curl php8-mysqlnd php8-fileinfo php8-soap php8-pdo_mysql php8-xmlwriter mysql-client mariadb-connector-c \
> php8-dom php8-tokenizer msmtp gnu-libiconv ncurses util-linux && \
Friday, 14 December 2012
PHP cheating sheet
Cope File to Remote Server Using PHP
1. install php ssh2 extension
in ubuntu
apt-get install libssh2-1-dev libssh2-php
test if php ssh2 installed
file_exists('ssh2_connect')
2. find finger print of remote server
connect to the server
ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
the second part is fingerprint
3. using ssh2 to scp files
$conn = ssh2_connect('remote-server-name', 22);
$fingerprint = ssh2_fingerprint($connection,
SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
if ($fingerprint != $knowprint) {
die("middle man found");
}
ssh2_auth_password($conn, 'username', 'password');
ssh2_scp_send($conn, 'file_name_in_local, 'file_name_in_remote', 0777);
Use call_user_func function
class Hello {
public static function say_hello()
{
echo "Hello World!\n";
}
}
//There are three ways to use call_user_func
//seperate class name and function
call_user_func(array("Hello", 'say_hello'));
//combine class name and function into one string
call_user_func('Hello::say_hello');
//create a object
call_user_func(array(new Hello(), 'say_hello'));
PHP extension
what extensions have been loaded
php -m
In Alpine, extension is here /usr/lib/php/modules
Thursday, 6 December 2012
Linux Commands
Limit resource a user can access
edit file /etc/security/limits.conf
//show limits
ulimit -a
See differences between two folders
diff -rq folder1 folder2
Find file in mac or Linux
find ./ -name platform_check.php
Open image
open test.png
open test.jpg
curl
//curl to redirect content to file
curl --output leo.jpg https://checkout.whahaha-content.com/images/unionpay.png
created nested directories
The -p flag will create nested directories if directories do not exist. If exist, do nothing.
//mkdir: leo: No such file or directory
mkdir leo/test
//this works
mkdir -p leo/test
sed command
replace all occurences of a pattern
//ie flag will replace in place and that file will be modified
sed -ie 's/unix/linux/g' my.txt
//all leo in my.txt will be replaced by developer. Also will make a backup file called my.txt.bak
sed -i.bak "s/leo/developer/g" my.txt
find which process is using a port number in mac
lsof -nP -iTCP -sTCP:LISTEN | grep <port-number>
In mac count items one level below current directory
find . -mindepth 1 -maxdepth 1 | wc -l
Saturday, 1 September 2012
Configure dual monitor
Click Dash home, and type "display". Launch the display configure program.
In Window 7
Press window command key+p to launch the display configure program.
PhpStorm
Select a symbol for which you want to find usages, right-click the symbol, and select Find Usages from its context menu.
Find functions in a fileView | Tool Windows | Structure
Variable type hint
/** @var RouteCollectorProxy $app */
public static $app;
Tuesday, 14 August 2012
SVN Tip
Run command in project root
1. Create a patch
svn diff > mypatch.diff
2. apply a patch
download patch
patch -p0 -i fix_path.diff
3. reverse patch
patch -p0 -R -i fix_path.diff
4. How to revert svn commit:
The following two commands will do the trick
svn merge -r 101:100 http://svn.example.com/repos/calc/trunk
svn ci
5. SVN Blamesvn blame svn://repositoy/filename
Thursday, 2 August 2012
Set up localhost server
- npm init
- npm install express
- create a index.html and index.js
- node index.js
- http://localhost:5000
//index.js
const express = require('express');
const app = express();
const port = 5000;
app.get('/', (req, res) => {
res.sendFile('index.html', {root: __dirname});
});
app.listen(port, () => {
console.log(`Now listening on port ${port}`);
});
Create a post api using express
const express = require('express');
const app = express();
//middleware to parse incoming request with json payload
app.use(express.json());
//middleware to parse incoming request with url encoded payload
app.use(express.urlencoded({ extended: true }));
const port = 5000;
app.get('/', (req, res) => {
res.sendFile('index.html', { root: __dirname });
});
app.listen(port, () => {
console.log(`Now listening on port ${port}`);
});
app.post('/api/create_transaction', (req, res) => {
const body = req.body;
console.log("body:", body);
res.status(201).json([]);
});
Sunday, 29 July 2012
Change wireless password
2. go to http://192.168.1.254
3. log in as admin
4. go to wireless ->security
5. change password
Wednesday, 21 December 2011
Propel Memo
Set up project
- create database scheme xml from an existing database > propel-gen reverse
- create model classes > propel-gen om
- create config file > propel-gen convert-conf
Update Database
After database scheme XML is modified, we need to update database. Also need to generate model class again and running time conf
- ../Propel/generator/bin/propel-gen sql
- ../Propel/generator/bin/propel-gen insert-sql
- ../Propel/generator/bin/propel-gen om
- ../Propel/generator/bin/propel-gen convert-conf
Tuesday, 20 December 2011
MySql tips
Connect
#enter password manually
mysql --host='10.22.999.162' --user=leo --password
#password in command
mysql -h 10.49.41.213 -u leo --password='mysecret'
Show comments1. Find table structure
> show columns from book;
> desc book;
get more details
> show create table book;
2 . Find table index
> show index from book;
3. Find permission of user
> show grants;
show grants for 'cs_user'@'10.32.%.%'
4. Find stored procedures> show procedure status
5. Find triggers
> show triggers
6. Find more shows
> help show;
Date time functions
> select date_format(convert_tz(from_unixtime(1370132292), "UTC", "America/Vancouver"), "%Y %m %d");
Stored Procedure
1. create procedure
drop procedure if exists countbook;
DELIMITER //
create procedure countbook()
BEGIN
select count(*)
from book;
END //
DELIMITER ;
2. call procedure
> call countbook()
3. more notes
Stored procedure can take parameters. Parameters can be inputs or outputs. Inside procedure, can declare function (see ben forta MySql crash course)
More Store Procedure
//find procedure
show procedure status where db="myDW"\G
//show procedure details
show create procedure load_dim_date\G
//flip that from security_type=definer to the invoker
ALTER PROCEDURE update_dim_date SQL SECURITY INVOKER;
More show process list
show full processlist
# 1234 is process id coming from show processlist
kill 1234
Find mysql server hostname
show variables where Variable_name = 'hostname';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| hostname | ip-10-32-210-21.corp.leotest.com |
+---------------+--------------------------------------+
1 row in set (0.09 sec)
Find mysql users
select * from mysql.user \G
Find mysql version
select version();
Update allowed ip for a user
# if version 5.7.8 and up, can use remame statement
RENAME USER 'qrhen'@'10.17.259.170' TO 'qrhen'@'10.31.248.110';
Grant permission to user
GRANT SELECT ON `MyTabble`.* TO `lyhen`@`10.33.264.%`;
FLUSH PRIVILEGES;
SHOW GRANTS FOR `lyhen`@`10.33.264.%`;
#show grants for current logged in user
show grants;
Check which process owns 3306
lsof -i :3306
Saturday, 26 November 2011
jQuery cheat sheet
- parent()
- parents()
- closest() find the parent element nearest to the selected element
- children()
- siblings()
- prev()
- next()
- remove() $("p").remove() remove p elements
- empty() $("p").empty() delete content in ps
- detache() $elememts = $("p").detache() remove and hold
- replacewith()
- before()
- after()
- first()
- eq()
- last()
- slice()
- filter()
- not()
Thursday, 24 November 2011
Create a SVN repository
1. ssh to apple
svnadmin create /var/svn/project_name
2. go back to my machine, cd to project_name/
svn import svn+ssh://apple/var/svn/project_name
3. check out
Wednesday, 23 November 2011
Regular Expression
\d is digit
\s is white space
. any char
\w equal [A-Za-z0-9_]
boundary
^ is start of string
$ is end of string
\b word boundary
how many times (for previous item)
? 0 or 1
* 0 or more
+ 1 or more
{n} n times
{n,} at least n times
{n,m} n<=match times<=m
group
(pattern) group as one item
(x|y) x or y
[abc] either a,b or c
[^abc] any char except a,b,c
[a-d] match a,b.c or d
PHP related function
preg_match("/mypatter/i", $subject) return 1 if match; otherwise, return 0. i is a flag for case insensitive search.
Example
all combinations of digits chars and spaces /^([a-zA-Z\d\s]+)+$/ For this regular expression, empty string will fail
Sample bashrc file
export CVSROOT=:ext:cvs.somedomain.com:/var/cvs/cvsroot/php
export PATH=/homes/lshen/bin/:/usr/local/lib/jre1.6.0_22/bin/:/usr/bin/:/usr/bin/php/bin/:$PATH
export CLASSPATH=/usr/local/lib/jdk1.6.0_22/bin/:.
export JAVA_HOME=/usr/local/lib/jdk1.6.0_22/bin/
export EDITOR=/usr/bin/vim
export LC_CTYPE=en_US.UTF-8
xset b off
alias ls='ls --color=tty'
alias phpcs='phpcs --standard=Zend';
alias vi='vim'
alias lpr='lpr -P Ricoh'
Some useful command (Mysql Vi etc) Memo
My SQL
Grant a user to a databasemysql>grant all on db_name.* to 'db_username'@'localhost' identified by 'db_userpasswd'
dump a database to a sql filemysqldump -u root -p --opt leo_db>dump.sql
vi
Auto replace string in vi:%s/pattern_search_for/new_string_to_be_used/gc
Open and create compressed files
Open filestar zxvf filename.tar.gz
unzip filename.zip
tar -xvf my.tar
bunzip2 studybuzz.bz2
bzip2 -d studybuzz.bz2
tar jxvf studybuzz.tar.bz2
unrar e test.rar
Create a zip file without parent directory
/test/test.txt
/test/test2.txt
cd test
zip -r -j my.zip *
Create fileszip -r filename.zip filedir
tar -cvf my.tar filedir
Print Env Variables
printenv
curl
curl -H "x-api-key:1234" http://myapi.com/user/1
#The -v option activates verbose mode, revealing detailed communication logs between the client and server
curl -v -H "x-api-key:1234" http://myapi.com/user/1
#curl does not follow HTTP redirects by default. Use the -L, --location option to tell it to do that
curl -L -H "x-api-key:1234" http://myapi.com/user/1