#!/usr/bin/env bash
#
# Description: Test your server's network with Speedtest to China
#
# Copyright (C) 2017 - 2017 Oldking
#
# URL: https://www.oldking.net/305.html
#
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
SKYBLUE='\033[0;36m'
PLAIN='\033[0m'
# check root
[[ $EUID -ne 0 ]] && echo -e "${RED}Error:${PLAIN} This script must be run as root!" && exit 1
# check python
if [ ! -e '/usr/bin/python' ]; then
echo -e
read -p "${RED}Error:${PLAIN} python is not install. You must be install python command at first.\nDo you want to install? [y/n]" is_install
if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then
if [ "${release}" == "centos" ]; then
yum -y install python
else
apt-get -y install python
fi
else
exit
fi
fi
# check wget
if [ ! -e '/usr/bin/wget' ]; then
echo -e
read -p "${RED}Error:${PLAIN} wget is not install. You must be install wget command at first.\nDo you want to install? [y/n]" is_install
if [[ ${is_install} == "y" || ${is_install} == "Y" ]]; then
if [ "${release}" == "centos" ]; then
yum -y install wget
else
apt-get -y install wget
fi
else
exit
fi
fi
clear
echo "#############################################################"
echo "# Description: Test your server's network with Speedtest #"
echo "# Intro: https://www.oldking.net/305.html #"
echo "# Author: Oldking#"
echo "# Github: https://github.com/oooldking #"
echo "#############################################################"
echo
echo "测试服务器到"
echo -ne "1.中国电信 2.中国联通 3.中国移动 4.本地默认 5.全面测速"
while :; do echo
read -p "请输入数字选择: " telecom
if [[ ! $telecom =~ ^[1-5]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${telecom} == 1 ]]; then
telecomName="电信"
echo -e "\n选择最靠近你的方位"
echo -ne "1.北方 2.南方"
while :; do echo
read -p "请输入数字选择: " pos
if [[ ! $pos =~ ^[1-2]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
echo -e "\n选择最靠近你的城市"
if [[ ${pos} == 1 ]]; then
echo -ne "1.郑州 2.襄阳"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^[1-2]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=4595
cityName="郑州"
fi
if [[ ${city} == 2 ]]; then
num=12637
cityName="襄阳"
fi
fi
if [[ ${pos} == 2 ]]; then
echo -ne "1.上海 2.杭州 3.南宁 4.南昌 5.长沙 6.深圳 7.重庆 8.成都"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^[1-8]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=3633
cityName="上海"
fi
if [[ ${city} == 2 ]]; then
num=7509
cityName="杭州"
fi
if [[ ${city} == 3 ]]; then
num=10305
cityName="南宁"
fi
if [[ ${city} == 4 ]]; then
num=7230
cityName="南昌"
fi
if [[ ${city} == 5 ]]; then
num=6132
cityName="长沙"
fi
if [[ ${city} == 6 ]]; then
num=5081
cityName="深圳"
fi
if [[ ${city} == 7 ]]; then
num=6592
cityName="重庆"
fi
if [[ ${city} == 8 ]]; then
num=4624
cityName="成都"
fi
fi
fi
if [[ ${telecom} == 2 ]]; then
telecomName="联通"
echo -ne "\n1.北方 2.南方"
while :; do echo
read -p "请输入数字选择: " pos
if [[ ! $pos =~ ^[1-2]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
echo -e "\n选择最靠近你的城市"
if [[ ${pos} == 1 ]]; then
echo -ne "1.沈阳 2.长春 3.哈尔滨 4.天津 5.济南 6.北京 7.郑州 8.西安 9.太原 10.宁夏 11.兰州 12.西宁"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^(([1-9])|(1([0-2]{1})))$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=5017
cityName="沈阳"
fi
if [[ ${city} == 2 ]]; then
num=9484
cityName="长春"
fi
if [[ ${city} == 3 ]]; then
num=5460
cityName="哈尔滨"
fi
if [[ ${city} == 4 ]]; then
num=5475
cityName="天津"
fi
if [[ ${city} == 5 ]]; then
num=5039
cityName="济南"
fi
if [[ ${city} == 6 ]]; then
num=5145
cityName="北京"
fi
if [[ ${city} == 7 ]]; then
num=5131
cityName="郑州"
fi
if [[ ${city} == 8 ]]; then
num= 4863
cityName="西安"
fi
if [[ ${city} == 9 ]]; then
num=12868
cityName="太原"
fi
if [[ ${city} == 10 ]]; then
num=5509
cityName="宁夏"
fi
if [[ ${city} == 11 ]]; then
num=4690
cityName="兰州"
fi
if [[ ${city} == 12 ]]; then
num=5992
cityName="西宁"
fi
fi
if [[ ${pos} == 2 ]]; then
echo -ne "1.上海 2.杭州 3.南宁 4.合肥 5.南昌 6.长沙 7.深圳 8.广州 9.重庆 10.昆明 11.成都"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^(([1-9])|(1([0-1]{1})))$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=5083
cityName="上海"
fi
if [[ ${city} == 2 ]]; then
num=5300
cityName="杭州"
fi
if [[ ${city} == 3 ]]; then
num=5674
cityName="南宁"
fi
if [[ ${city} == 4 ]]; then
num=5724
cityName="合肥"
fi
if [[ ${city} == 5 ]]; then
num=5079
cityName="南昌"
fi
if [[ ${city} == 6 ]]; then
num=4870
cityName="长沙"
fi
if [[ ${city} == 7 ]]; then
num=10201
cityName="深圳"
fi
if [[ ${city} == 8 ]]; then
num=3891
cityName="广州"
fi
if [[ ${city} == 9 ]]; then
num=5726
cityName="重庆"
fi
if [[ ${city} == 10 ]]; then
num=5103
cityName="昆明"
fi
if [[ ${city} == 11 ]]; then
num=2461
cityName="成都"
fi
fi
fi
if [[ ${telecom} == 3 ]]; then
telecomName="移动"
echo -ne "\n1.北方 2.南方"
while :; do echo
read -p "请输入数字选择: " pos
if [[ ! $pos =~ ^[1-2]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
echo -e "\n选择最靠近你的城市"
if [[ ${pos} == 1 ]]; then
echo -ne "1.西安"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^[1]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=5292
fi
fi
if [[ ${pos} == 2 ]]; then
echo -ne "1.上海 2.宁波 3.无锡 4.杭州 5.合肥 6.成都"
while :; do echo
read -p "请输入数字选择: " city
if [[ ! $city =~ ^[1-6]$ ]]; then
echo "输入错误! 请输入正确的数字!"
else
break
fi
done
if [[ ${city} == 1 ]]; then
num=4665
cityName="上海"
fi
if [[ ${city} == 2 ]]; then
num=6715
cityName="宁波"
fi
if [[ ${city} == 3 ]]; then
num=5122
cityName="无锡"
fi
if [[ ${city} == 4 ]]; then
num=4647
cityName="杭州"
fi
if [[ ${city} == 5 ]]; then
num=4377
cityName="合肥"
fi
if [[ ${city} == 6 ]]; then
num=4575
cityName="成都"
fi
fi
fi
# install speedtest
if [ ! -e './speedtest.py' ]; then
wget https://raw.github.com/sivel/speedtest-cli/master/speedtest.py > /dev/null 2>&1
fi
chmod a+rx speedtest.py
result() {
download=`cat speed.log | awk -F ':' '/Download/{print $2}'`
upload=`cat speed.log | awk -F ':' '/Upload/{print $2}'`
hostby=`cat speed.log | awk -F ':' '/Hosted/{print $1}'`
latency=`cat speed.log | awk -F ':' '/Hosted/{print $2}'`
clear
echo "$hostby"
echo "延迟 : $latency"
echo "上传 : $upload"
echo "下载 : $download"
echo -ne "\n当前时间: "
echo $(date +%Y-%m-%d" "%H:%M:%S)
}
speed_test(){
temp=$(python speedtest.py --server $1 --share 2>&1)
is_down=$(echo "$temp" | grep 'Download')
if [[ ${is_down} ]]; then
local REDownload=$(echo "$temp" | awk -F ':' '/Download/{print $2}')
local reupload=$(echo "$temp" | awk -F ':' '/Upload/{print $2}')
local relatency=$(echo "$temp" | awk -F ':' '/Hosted/{print $2}')
temp=$(echo "$relatency" | awk -F '.' '{print $1}')
if [[ ${temp} -gt 1000 ]]; then
relatency=" 000.000 ms"
fi
local nodeName=$2
printf "${YELLOW}%-17s${GREEN}%-18s${RED}%-20s${SKYBLUE}%-12s${PLAIN}\n" "${nodeName}" "${reupload}" "${REDownload}" "${relatency}"
else
local cerror="ERROR"
fi
}
if [[ ${telecom} =~ ^[1-3]$ ]]; then
python speedtest.py --server ${num} --share 2>/dev/null | tee speed.log 2>/dev/null
is_down=$(cat speed.log | grep 'Download')
if [[ ${is_down} ]]; then
result
echo "测试到 ${cityName}${telecomName} 完成!"
rm -rf speedtest.py
rm -rf speed.log
else
echo -e "\n${RED}ERROR:${PLAIN} 当前节点不可用,请更换其他节点,或换个时间段再测试。"
fi
fi
if [[ ${telecom} == 4 ]]; then
python speedtest.py | tee speed.log
result
echo "本地测试完成!"
rm -rf speedtest.py
rm -rf speed.log
fi
if [[ ${telecom} == 5 ]]; then
echo ""
printf "%-14s%-18s%-20s%-12s\n" "Node Name" "Upload Speed" "Download Speed" "Latency"
start=$(date +%s)
speed_test '12637' '襄阳电信'
speed_test '5081' '深圳电信'
speed_test '3633' '上海电信'
speed_test '4624' '成都电信'
speed_test '5017' '沈阳联通'
speed_test '4863' '西安联通'
speed_test '5083' '上海联通'
speed_test '5726' '重庆联通'
speed_test '5192' '西安移动'
speed_test '4665' '上海移动'
speed_test '6715' '宁波移动'
speed_test '4575' '成都移动'
end=$(date +%s)
rm -rf speedtest.py
echo ""
time=$(( $end - $start ))
if [[ $time -gt 60 ]]; then
min=$(expr $time / 60)
sec=$(expr $time % 60)
echo -ne "花费时间:${min} 分 ${sec} 秒"
else
echo -ne "花费时间:${time} 秒"
fi
echo -ne "\n当前时间: "
echo $(date +%Y-%m-%d" "%H:%M:%S)
echo "全面测试完成!"
fi
大陸 vps 測試
https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh
[轉]Linux服务器被黑遭敲诈,3小时紧急逆袭!
http://www.yunweipai.com/archives/22780.html
#查看是否为管理员增加或者修改 find / -type f -perm 4000 #显示文件中查看是否存在系统以外的文件 rpm -Vf /bin/ls rpm -Vf /usr/sbin/sshd rpm -Vf /sbin/ifconfig rpm -Vf /usr/sbin/lsof #检查系统是否有elf文件被替换 #在web目录下运行 grep -r “getRuntime” ./ #查看是否有木马 find . -type f -name “*.jsp” | xargs grep -i “getRuntime” #运行的时候被连接或者被任何程序调用 find . -type f -name “*.jsp” | xargs grep -i “getHostAddress” #返回ip地址字符串 find . -type f -name “*.jsp” | xargs grep -i “wscript.shell” #创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量 find . -type f -name “*.jsp” | xargs grep -i “gethostbyname” #gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针 find . -type f -name “*.jsp” | xargs grep -i “bash” #调用系统命令提权 find . -type f -name “*.jsp” | xargs grep -i “jspspy” #Jsp木马默认名字 find . -type f -name “*.jsp” | xargs grep -i “getParameter” fgrep – R “admin_index.jsp” 20120702.log > log.txt #检查是否有非授权访问管理日志 #要进中间件所在日志目录运行命令 fgrep – R “and1=1″*.log>log.txt fgrep – R “select “*.log>log.txt fgrep – R “union “*.log>log.txt fgrep – R “../../”*.log >log.txt fgrep – R “Runtime”*.log >log.txt fgrep – R “passwd”*.log >log.txt #查看是否出现对应的记录 fgrep – R “uname -a”*.log>log.txt fgrep – R “id”*.log>log.txt fgrep – R “ifconifg”*.log>log.txt fgrep – R “ls -l”*.log>log.txt #查看是否有shell攻击 #以root权限执行 cat /var/log/secure #查看是否存在非授权的管理信息 tail -n 10 /var/log/secure last cat /var/log/wtmp cat /var/log/sulog #查看是否有非授权的su命令 cat /var/log/cron #查看计划任务是否正常 tail -n 100 ~./bash_history | more 查看临时目录是否存在攻击者入侵时留下的残余文件 ls -la /tmp ls -la /var/tmp #如果存在.c .py .sh为后缀的文件或者2进制elf文件。
vi /etc/motd 发现
历史记录和相关访问日志已经被删除,痕迹清除。
安装chrootkit检查是否有rootkit mkdir chrootkit cd chrootkit/ wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz tar zxvf chkrootkit.tar.gz cd chkrootkit-0.50/ ls yum install -y glibc-static make sense ./chkrootkit
vi /etc/motd 发现
[轉]OVS (Open vSwitch) 心得 楊金龍
https://www.facebook.com/dominic16y/posts/1378435818935569
今天跑去台中聽了OVS (Open vSwitch)講座,收獲頗豐(真的值回車票價了!),這個東西我自己的研究可能要花好幾個月的時間,還不一定能抓對方向或抓到重點,講師今天一個下午就把所有關鍵的問題都提到了,比如說你linux bridge 用的好好的幹嘛要轉到ovs來,這是大家都會關心的問題。
底下一些重點整理:
1.linux bridge效能很好,沒有什麼特殊的需求的話,不用轉到OVS去。
2.linux bridge效能的極限,kernel 跑不滿10G的頻寬(大約7G/s左右),若你不用10G的網路的話,linux bridge很好用。
3.OVS原生的效能比linux bridge效能差
4.OVS必須要另外加DPDK才能夠跑滿10G頻寬。(大約可跑到15~20G/s)
5.OVS單台機器沒有什麼用,它的功能跟linux bridge一樣
6.OVS必須要多台,並加上controller才能發揮它真正的功能
7.controller 推薦ONOS、OVN
8.OVS支援所有L2的功能(和靜態路由L3功能),它要使用controller之後,就可以不用STP,可充份利用所有頻寬,也不怕looping所造成的廣播風暴。
srs rtmp forward (push) out || pull in push out
master 192.168.105.20 srs.conf
isten 1935;
max_connections 1000;
srs_log_tank console; #file; #console;
srs_log_file ./objs/srs.log;
daemon off; #on or delete this line
http_api {
enabled on;
isten 1935;
max_connections 1000;
srs_log_tank console; #file; #console;
srs_log_file ./objs/srs.log;
daemon off; #on or delete this line
http_api {
enabled on;
listen 1985;
}
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
}
stats {
network 0;
disk sda sdb xvda xvdb;
}
vhost __defaultVhost__ {
ingest livestream {
enabled on;
input {
type stream;
url rtmp://xxx.ooo.xxx.ooo/live/nna1
}
ffmpeg ./objs/ffmpeg; #if no build, just install then link -s
engine {
enabled off;
output rtmp://127.0.0.1:[port]/live?vhost=[vhost]/nna2 #this push back this server
}
}
forward 192.168.105.21:1935;
gop_cache off;
queue_length 10;
min_latency on;
mr {
enabled off;
}
mw_latency 100;
tcp_nodelay on;
}
slave 192.168.105.21 srs.conf
listen 1935;
max_connections 1000;
srs_log_tank file; #console;
srs_log_file ./objs/srs.log;
#daemon off;
#http_api {
# enabled on;
# listen 1985;
#}
#http_server {
# enabled on;
# listen 8080;
# dir ./objs/nginx/html;
#}
#stats {
# network 0;
# disk sda sdb xvda xvdb;
#}
vhost __defaultVhost__ {
}
==========finsih===========for test======
obs push video to master rtmp://192.168.105.20/live/obs1
master player rtmp://192.168.105.20/live/obs1
slave player rtpm://192.168.105.21/live/obs1
***srs pull rtmp nna1 then push localhost nna2 ***
check rtmp://xxx.ooo.xxx.ooo/live/nna1 first
master player rtmp://192.168.105.20/live/nna2
slave player rtmp://192.168.105.21/live/nna2
PS:
1、debug just
a. daemon off
b. srs_log_tank console;
then see screen have any error msg. Some info like restart ffmpeg.
2、if slave can't play, just use port :1935
============
go-oryx
2、if slave can't play, just use port :1935
============
go-oryx
linux usb boot windows
https://www.pendrivelinux.com/yumi-multiboot-usb-creator/
https://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
https://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/
[轉]在Ubuntu 使用 Lets Encrypt 與 Nginx
https://blog.technologyofkevin.com/?p=591
see http://sueboy.blogspot.tw/2017/11/nginx-proxy-pass-best-practices.html
http://sueboy.blogspot.tw/2017/11/nginx-proxy-pass-best-practices-2-for.html
see http://sueboy.blogspot.tw/2017/11/nginx-proxy-pass-best-practices.html
http://sueboy.blogspot.tw/2017/11/nginx-proxy-pass-best-practices-2-for.html
docker db Volumes
http://dockone.io/article/128
http://container42.com/2014/11/18/data-only-container-madness/
http://dockone.io/article/129
在volume产生时,是docker run的准备阶段(create),而执行entrypoint.sh则是在启动阶段(start)
http://container42.com/2014/11/18/data-only-container-madness/
http://dockone.io/article/129
在volume产生时,是docker run的准备阶段(create),而执行entrypoint.sh则是在启动阶段(start)
clustercontrol install finish
ssh-copy-id better use root
ssh-copy-id finish
Reboot clustercontrol server
======sysbench======
[sysbench]
select
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/select.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 prepare
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/select.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 run
Oltp read/write
* 产生数据
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 prepare
* 执行
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 run
*清除
最後面改成 cleanup
ssh-copy-id finish
Reboot clustercontrol server
======sysbench======
[sysbench]
select
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/select.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 prepare
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/select.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 run
Oltp read/write
* 产生数据
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 prepare
* 执行
sysbench --num-threads=128 --report-interval=3 --max-requests=0 --max-time=300 --test=/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-table-engine=innodb --oltp-table-size=5000000 --mysql-user=root --mysql-password="E<8r)^t-E<8r)^t-" --oltp-tables-count=1 --db-driver=mysql --mysql-host=192.168.xxx.xxx --mysql-port=3306 run
*清除
最後面改成 cleanup
Operating System User clustercontrol
https://severalnines.com/docs/requirements.html#operating-system-user
firebase hosts cloudflare
ERR_TOO_MANY_REDIRECTS
Or
Error 526
SSL change Full or Full (strict)
just try
go gae telegram bot telegrambot
https://blog.sean.taipei/2017/05/telegram-bot
https://github.com/cortinico/telebotgae
Use this token to access the HTTP API:
445067055:AAG8Lz1EL---------------------------------
.https://api.telegram.org/bot<Token>/<Method Name>
https://api.telegram.org/bot445067055:445067055:AAG8Lz1EL---------------------------------/getMe
https://api.telegram.org/bot445067055:445067055:AAG8Lz1EL---------------------------------/getUpdates
.https://api.telegram.org/bot<Token>/sendMessage?chat_id=<Chat_id>&text=<Message>
chat_id 使用者送訊息給telegram bot後,去getUpdates,就會有chat id
https://api.telegram.org/bot445067055:AAG8Lz1EL---------------------------------/sendMessage?chat_id=265----------&text=Hello+World
.https://api.telegram.org/bot<Token>/setWebhook?url=<Url>
刪除是用 deleteWebhook
取得Webhook資料 getWebhookInfo
https://api.telegram.org/bot[API_KEY]/setWebhook?url=https://[PROJECT-ID].appspot.com
https://api.telegram.org/bot445067055:AAG8Lz1EL---------------------------------/setWebhook?url=https://xxx---bot-17------.appspot.com
https://github.com/cortinico/telebotgae
Use this token to access the HTTP API:
445067055:AAG8Lz1EL---------------------------------
.https://api.telegram.org/bot<Token>/<Method Name>
https://api.telegram.org/bot445067055:445067055:AAG8Lz1EL---------------------------------/getMe
https://api.telegram.org/bot445067055:445067055:AAG8Lz1EL---------------------------------/getUpdates
.https://api.telegram.org/bot<Token>/sendMessage?chat_id=<Chat_id>&text=<Message>
chat_id 使用者送訊息給telegram bot後,去getUpdates,就會有chat id
https://api.telegram.org/bot445067055:AAG8Lz1EL---------------------------------/sendMessage?chat_id=265----------&text=Hello+World
.https://api.telegram.org/bot<Token>/setWebhook?url=<Url>
刪除是用 deleteWebhook
取得Webhook資料 getWebhookInfo
https://api.telegram.org/bot[API_KEY]/setWebhook?url=https://[PROJECT-ID].appspot.com
https://api.telegram.org/bot445067055:AAG8Lz1EL---------------------------------/setWebhook?url=https://xxx---bot-17------.appspot.com
inscapsula cdn ddos free plans
https://www.incapsula.com/pricing-and-plans.html
最近才知道 Incapsula 蠻有名的,有免費試用喔
免費的額度是
頻寬 5Mb/s
1個月2T以內
最近才知道 Incapsula 蠻有名的,有免費試用喔
免費的額度是
頻寬 5Mb/s
1個月2T以內
ip firewall filiter raw input forward
https://www.mobile01.com/topicdetail.php?f=110&t=3205444&p=574#5738
ip firewall filter是在nat動作後
ip firewall raw在nat動作前
當封包透過nat進來後會分兩個路徑: 1.提供路由器(Router)自用 2.給區域網路的電腦使用
若要指定給路由器(Router),進入chain使用input
若要指定給區域網路的電腦,chain則一律用forward
一般病毒防護都著重在區網的桌機,所以要在firewall filter進行過濾,chain設為forward即可.
RouterOS路由器的smb伺服器預設是關閉的,所以若沒開啟不太需要再新增一筆chain=input封鎖項目.
/ip firewall raw操作:
在nat之前的意思即,封包在進入路由器前就先判定有敵意.
所以在這操作即不管這封包最終是路由器使用,還是給區網的電腦操作一律都先行丟棄,這樣明白吧XD
input/forward都是在nat後的動作,所以在firewall raw看不到這兩個chain.
prerouting是在nat前的動作,所以在firewall filter看不到這個chain.
ip firewall filter是在nat動作後
ip firewall raw在nat動作前
當封包透過nat進來後會分兩個路徑: 1.提供路由器(Router)自用 2.給區域網路的電腦使用
若要指定給路由器(Router),進入chain使用input
若要指定給區域網路的電腦,chain則一律用forward
一般病毒防護都著重在區網的桌機,所以要在firewall filter進行過濾,chain設為forward即可.
RouterOS路由器的smb伺服器預設是關閉的,所以若沒開啟不太需要再新增一筆chain=input封鎖項目.
/ip firewall raw操作:
在nat之前的意思即,封包在進入路由器前就先判定有敵意.
所以在這操作即不管這封包最終是路由器使用,還是給區網的電腦操作一律都先行丟棄,這樣明白吧XD
input/forward都是在nat後的動作,所以在firewall raw看不到這兩個chain.
prerouting是在nat前的動作,所以在firewall filter看不到這個chain.
go gae mux static html css js images
1、裝官方gcloud工具
2、裝python 2.7
3、到官方工具目錄 ..........\Local\Google\Cloud SDK\google-cloud-sdk
3-1、設定path //執行 install.bat 會有說明
source
在原本開發go的目錄執行下面指令及可,但要特別注意 出現套件未安裝的話 go get github.com/xxxx 裝一裝就行了
dev_appserver.py app.yaml //這裡要特注意,因為是local測試,會出錯!因為init()問題,如果是用flexible就不會,但又要改app.yaml
gcloud app deploy
gcloud app browse
======
gcloud init //reset project id
注意:gae flexible environment vs standard environment
https://cloud.google.com/appengine/docs/the-appengine-environments
所以要用 standard environment
====================
https://www.slideshare.net/takuyaueda967/gaegoweb
2、裝python 2.7
3、到官方工具目錄 ..........\Local\Google\Cloud SDK\google-cloud-sdk
3-1、設定path //執行 install.bat 會有說明
source
在原本開發go的目錄執行下面指令及可,但要特別注意 出現套件未安裝的話 go get github.com/xxxx 裝一裝就行了
dev_appserver.py app.yaml //這裡要特注意,因為是local測試,會出錯!因為init()問題,如果是用flexible就不會,但又要改app.yaml
gcloud app deploy
gcloud app browse
======
gcloud init //reset project id
注意:gae flexible environment vs standard environment
https://cloud.google.com/appengine/docs/the-appengine-environments
所以要用 standard environment
====================
https://www.slideshare.net/takuyaueda967/gaegoweb
elk Elasticsearch Logstash and Kibana fortigate ubuntu
https://www.rosehosting.com/blog/install-and-configure-the-elk-stack-on-ubuntu-16-04/
https://www.elastic.co/guide/en/logstash/current/configuration.html
https://dotblogs.com.tw/supershowwei/2016/05/25/185741
install finish
1、/etc/logstash/conf.d/ put some logstash conf
2、ubuntu have logstash listen error, so nano /etc/logstash/startup.options
LS_USER = root
3、/usr/share/logstash/bin# ./system-install reuse LS_USER for config
注意:
mutate {
add_field => {
"logTime" => "%{+YYYY-MM-dd} %{time}"
}
https://www.elastic.co/guide/en/logstash/current/configuration.html
https://dotblogs.com.tw/supershowwei/2016/05/25/185741
install finish
1、/etc/logstash/conf.d/ put some logstash conf
2、ubuntu have logstash listen error, so nano /etc/logstash/startup.options
LS_USER = root
3、/usr/share/logstash/bin# ./system-install reuse LS_USER for config
注意:
mutate {
add_field => {
"logTime" => "%{+YYYY-MM-dd} %{time}"
}
aws linux partition resize
http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux
1、AWS console EC2 resizse
2、login EC2
2.1、 lsblk get info to disk size. Is resize ok?
2.2 resize2fs /dev/xvda1
If 2.2 finish, then resize faild. follow 2.3
2.3 parted /dev/xvda
2.3.1 parted> print all -> get disk real size
2.3.2 parted> resizepart
2.3.3 parted> 1
2.3.4 parted End?>put size is 2.3.1
2.3.5 parted>exit
then 2.2 again. If ok then 2.1 check age.
PS:
2.3.4
1、AWS console EC2 resizse
2、login EC2
2.1、 lsblk get info to disk size. Is resize ok?
2.2 resize2fs /dev/xvda1
If 2.2 finish, then resize faild. follow 2.3
2.3 parted /dev/xvda
2.3.1 parted> print all -> get disk real size
2.3.2 parted> resizepart
2.3.3 parted> 1
2.3.4 parted End?>put size is 2.3.1
2.3.5 parted>exit
then 2.2 again. If ok then 2.1 check age.
PS:
2.3.4
End?> -1
-1 最大磁碟空間
go control docker
https://blog.kowalczyk.info/article/w4re/using-mysql-in-docker-for-local-testing-in-go.html
https://github.com/kjk/go-cookbook/tree/master/start-mysql-in-docker-go
https://github.com/kjk/go-cookbook/tree/master/start-mysql-in-docker-go
[轉]谁吃了我的Linux内存?
http://colobu.com/2017/03/07/what-is-in-linux-cached/#more
slabtop -s c
pcstat
slabtop -s c
======================
https://github.com/tobert/pcstat
#!/bin/bash#you have to install pcstatif [ ! -f /data0/brokerproxy/pcstat ]thenecho "You haven't installed pcstat yet"echo "run \"go get github.com/tobert/pcstat\" to install"exitfi#find the top 10 processs' cache fileps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids#find all the processs' cache file#ps -e -o pid>/tmp/cache.pidsif [ -f /tmp/cache.files ]thenecho "the cache.files is exist, removing now "rm -f /tmp/cache.filesfiwhile read linedolsof -p $line 2>/dev/null|awk '{print $9}' >>/tmp/cache.filesdone</tmp/cache.pidsif [ -f /tmp/cache.pcstat ]thenecho "the cache.pcstat is exist, removing now"rm -f /tmp/cache.pcstatfifor i in `cat /tmp/cache.files`doif [ -f $i ]thenecho $i >>/tmp/cache.pcstatfidone/data0/brokerproxy/pcstat `cat /tmp/cache.pcstat`rm -f /tmp/cache.{pids,files,pcstat}
go aws ec2 control
package main
import (
"fmt"
"log"
"net/http"
"io/ioutil"
"github.com/gorilla/mux"
"github.com/smartystreets/go-aws-auth"
)
func stopEC2InstanceHandler(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
w.Write([]byte(fmt.Sprintf("stopEC2InstanceHandler: %v \n\n", vars["id"])))
var Action = "StopInstances" //check aws website
var Version = "2016-11-15" //need to check api version from aws website
//regoin need to check url from aws website. ex: ap-northeast-2
//some region no support some action
apiUrl := "https://ec2.ap-northeast-2.amazonaws.com/?Action=" + Action + "&Version=" + Version + "&InstanceId.1=" + vars["id"]
client := new(http.Client)
req, err := http.NewRequest("GET", apiUrl, nil)
aws_secret_access_key := "ooooooxxxxxxx"
aws_access_key_id := "ooooooxxxxxxx"
awsauth.Sign(req, awsauth.Credentials{
AccessKeyID: aws_access_key_id,
SecretAccessKey: aws_secret_access_key,
//SecurityToken: "", // STS (optional)
})
//awsauth.Sign(req) // Automatically chooses the best signing mechanism for the service
resp, err := client.Do(req)
fmt.Printf("\n\nGet = |%#v|, |%v|\n\n", resp, err)
if err != nil {
fmt.Println(err)
}
if resp == nil {
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(body))
w.Write([]byte(body))
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/stopEC2InstanceHandler/{id}", stopEC2InstanceHandler).Methods("GET")
fmt.Println("Endpoint Hit: ./")
log.Fatal(http.ListenAndServe(":8080", r))
}
======================Then========================
github.com/smartystreets/go-aws-auth HAVE bug for regoin, auto regoin can't v4
some just change source code
go\src\github.com\smartystreets\go-aws-auth\awsauth.go
func Sign
signVersion := awsSignVersion[service]
signVersion=4 //add this line in here. let api just use v4
Now ok to use this code.
go crawler
https://codereview.stackexchange.com/questions/70263/go-go-gadget-web-crawler
https://github.com/PuerkitoBio/gocrawl
https://github.com/PuerkitoBio/gocrawl
rtmp srs
https://github.com/ossrs/srs
https://github.com/ossrs/srs/wiki/v2_CN_Home
https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP
https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=srs&starCount=0
http://ossrs.net/srs.release/releases/
====低延时配置======
https://github.com/ossrs/srs/wiki/v2_CN_LowLatency
考虑GOP-Cache和累积延迟,推荐的低延时配置如下(参考min.delay.com):
# the listen ports, split by space.
https://github.com/ossrs/srs/wiki/v2_CN_Home
https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP
https://hub.docker.com/search/?isAutomated=0&isOfficial=0&page=1&pullCount=0&q=srs&starCount=0
http://ossrs.net/srs.release/releases/
====低延时配置======
https://github.com/ossrs/srs/wiki/v2_CN_LowLatency
考虑GOP-Cache和累积延迟,推荐的低延时配置如下(参考min.delay.com):
# the listen ports, split by space.
listen 1935;
vhost __defaultVhost__ {
gop_cache off;
queue_length 10;
min_latency on;
mr {
enabled off;
}
mw_latency 100;
tcp_nodelay on;
}
docker lxc
FaceBook Proxmox VE 伺服器虛擬化管理平台 使用者社團
楊金龍
剛剛看到這一頁,有各種虛擬技術的比較表,很值得一看
https://openvz.org/Comparison
pve 4 之前的版本都是使用openVZ的技術,現在轉換到 LXC 的技術了,一起來觀注一下openVZ現在的發展如何了。
另外比較值得深思的是那一頁的第一段文字,寫到它沒有把 Docker放進來比較的原因是,它不認為 Docker 是個虛擬化解決方案(virtualization solution) ,它認為Docker只是一個...中文不太好翻,大意是應用程式自動佈署的容器 (原文:It automates the deployment of applications inside software containers)
看到這邊我有恍然大悟的感覺,難怪我之前用Docker時怎麼用都不順手,因為Docker它不是給系統管理員所使用的面向,它是給應用程式開發人員所使用的面向,方便那些開發人員快速開發和佈署他們的應用程式。
系統管理員,管的是整台機器系統的安全性,思考的基點都是從一台台機器(不管是vm或實體機)來規劃與管理的,硬要把Docker的使用概念套進來,我始終覺得卡卡的、用不了。
所以,之前 向聖夫 (Chris Hsiang) 提到 LXC 的使用概念,要象 Docker 一樣,「一個服務、一個 Container」 我有看到這是 Docker 針對它的產品所提出來的概念。
我想這概念不一定適用LXC,上面那一頁我想說明了應有不少人有同樣的看法。
所以,使用LXC時,真有必要象Docker那樣,一個服務、一個container呢? 這涉及整體規劃,若你有空弄的話,就試試看,再跟我們說這樣管理上會有比較方便嗎?
若沒有時間弄的話,按系統管理員的思考基點去用LXC也不錯,能管好機器就好,不要被使用者客訴就好。
但是做 Software development 的人, 卻極為厭惡裝系統這件事情, 因為他們的專長不在系統面, 所以總是搞不定這些安裝流程, 還可以同樣裝 10 次, 卻產生 10 種不一樣的系統, 更別說叫它們裝好 100 個相同的系統環境了, 對他們而言, Docker 當然是一個救星.....
如果你只是要「很快速的產生一個跟上次一模一樣的系統」, Docker 確實做得很好; 但是如果你要「在不同環境下把一個系統調校得非常完美」, 用 Docker 會累死你....
.
Docker vs LXC 最大的差異是, 假設 Docker 裡面有一個 nginx 2.3 但是現在有 ngnix 2.4 出來了, 然後是一個重要的 security fix 時, 你無法更新 Docker 裡面的套件. 你必須要整個 docker image 重新下載. 只為了一個小 patch. 但是 Docker Image 是最能維持 開發者 所假設的 "環境狀態". 但是 如果是 在 Centos 下面建立的 Docker, 在 Unbuntu 下面運行時, 會有奇怪的問題 (這點很討厭)
.
LXC 它有預設好的 lxc template 服務 (如 ldap+samba+mariadb) 等等. 當你有新版時, 你可以在 LXC 下面手動更新任何一個套件. 但是它還是不適合一個incident 跑多服務. 當你要大量 deploy 跟控管時, 它就無 docker 那樣可以迅速快速複製控管, 或是 LXD 那樣子 可以透過 controller 去操作.
.
docker, lxc, lxd 全部都要學, 它們各自有其運用的地方. 同時它們前面有時都需有個 proxy 或是 load balancer
===========================
同程旅游5000个Docker实例上的CI实践
http://www.infoq.com/cn/presentations/ci-practice-on-ly-travel-5000-docker-instances?displayableIdp=google&idp=2&emailMatch=my%40esast.com#downloadPdf
楊金龍
剛剛看到這一頁,有各種虛擬技術的比較表,很值得一看
https://openvz.org/Comparison
pve 4 之前的版本都是使用openVZ的技術,現在轉換到 LXC 的技術了,一起來觀注一下openVZ現在的發展如何了。
另外比較值得深思的是那一頁的第一段文字,寫到它沒有把 Docker放進來比較的原因是,它不認為 Docker 是個虛擬化解決方案(virtualization solution) ,它認為Docker只是一個...中文不太好翻,大意是應用程式自動佈署的容器 (原文:It automates the deployment of applications inside software containers)
看到這邊我有恍然大悟的感覺,難怪我之前用Docker時怎麼用都不順手,因為Docker它不是給系統管理員所使用的面向,它是給應用程式開發人員所使用的面向,方便那些開發人員快速開發和佈署他們的應用程式。
系統管理員,管的是整台機器系統的安全性,思考的基點都是從一台台機器(不管是vm或實體機)來規劃與管理的,硬要把Docker的使用概念套進來,我始終覺得卡卡的、用不了。
所以,之前 向聖夫 (Chris Hsiang) 提到 LXC 的使用概念,要象 Docker 一樣,「一個服務、一個 Container」 我有看到這是 Docker 針對它的產品所提出來的概念。
我想這概念不一定適用LXC,上面那一頁我想說明了應有不少人有同樣的看法。
所以,使用LXC時,真有必要象Docker那樣,一個服務、一個container呢? 這涉及整體規劃,若你有空弄的話,就試試看,再跟我們說這樣管理上會有比較方便嗎?
若沒有時間弄的話,按系統管理員的思考基點去用LXC也不錯,能管好機器就好,不要被使用者客訴就好。
=====
Ray Tracy 身為一個 30 年經驗的 Sysadmin, 安裝任何系統都是勝任愉快, 要我裝 100 遍也不厭倦; Docker 不能讓我隨心所欲的快速調整, 除非我自己下來做 Image, 但卻很難根據不同場合去微調, 或者是臨時因應緊急狀況去應變, 總要花很多時間重建 Image, 對我來說, Docker 的效益並不高....但是做 Software development 的人, 卻極為厭惡裝系統這件事情, 因為他們的專長不在系統面, 所以總是搞不定這些安裝流程, 還可以同樣裝 10 次, 卻產生 10 種不一樣的系統, 更別說叫它們裝好 100 個相同的系統環境了, 對他們而言, Docker 當然是一個救星.....
如果你只是要「很快速的產生一個跟上次一模一樣的系統」, Docker 確實做得很好; 但是如果你要「在不同環境下把一個系統調校得非常完美」, 用 Docker 會累死你....
=====
雅竹題 最近我為了要自已加一個功能,每次Docker開起來都能自動運作時我才發現Docker真的累死我!因為我從頭到尾去k一個image怎麼弄,Dockerfile怎麼寫,script怎麼寫自動化....我都快哭了!
=====
向聖夫 LXC 還是輕量級服務. 所以還是一個服務一個 LXC... 但是重點要形成一個 cluster of service... 這個就是慢慢有 LXD 可以大量透過 restful api 來控管.
Docker vs LXC 最大的差異是, 假設 Docker 裡面有一個 nginx 2.3 但是現在有 ngnix 2.4 出來了, 然後是一個重要的 security fix 時, 你無法更新 Docker 裡面的套件. 你必須要整個 docker image 重新下載. 只為了一個小 patch. 但是 Docker Image 是最能維持 開發者 所假設的 "環境狀態". 但是 如果是 在 Centos 下面建立的 Docker, 在 Unbuntu 下面運行時, 會有奇怪的問題 (這點很討厭)
.
LXC 它有預設好的 lxc template 服務 (如 ldap+samba+mariadb) 等等. 當你有新版時, 你可以在 LXC 下面手動更新任何一個套件. 但是它還是不適合一個incident 跑多服務. 當你要大量 deploy 跟控管時, 它就無 docker 那樣可以迅速快速複製控管, 或是 LXD 那樣子 可以透過 controller 去操作.
.
docker, lxc, lxd 全部都要學, 它們各自有其運用的地方. 同時它們前面有時都需有個 proxy 或是 load balancer
===========================
同程旅游5000个Docker实例上的CI实践
http://www.infoq.com/cn/presentations/ci-practice-on-ly-travel-5000-docker-instances?displayableIdp=google&idp=2&emailMatch=my%40esast.com#downloadPdf
[OK] install magento, mariadb use kitematic control docker on windows 10
1、First install kitematic
2、see video
PS:remeber if login failed, just clear cookie. Then relogin two times.
==========
user docker shell
docker exec -ti xxxxoooo bash //xxxxoooo is docker name
check hosts and use ping can link success
==========
docker images
2、see video
PS:remeber if login failed, just clear cookie. Then relogin two times.
==========
user docker shell
docker exec -ti xxxxoooo bash //xxxxoooo is docker name
check hosts and use ping can link success
==========
docker images
Import!! install magento, mariadb use kitematic control docker on windows 10
Can't use kitematic install mariadb, magento, because two container can't connect
get error msg: Failed to connect to mariadb:3306 after 36 tries
How to do
https://github.com/bitnami/bitnami-docker-joomla/issues/2
1、download
https://raw.githubusercontent.com/bitnami/bitnami-docker-magento/master/docker-compose.yml
2、docker-compose up
then everyting is ok !
Can't Use!
get error msg: Failed to connect to mariadb:3306 after 36 tries
How to do
https://github.com/bitnami/bitnami-docker-joomla/issues/2
1、download
https://raw.githubusercontent.com/bitnami/bitnami-docker-magento/master/docker-compose.yml
2、docker-compose up
Can't Use!
pve PostgreSQL ZFS
Ray Tracy 在Proxmox VE社群中
.永遠開compression
.不要用dedup
.留意scrub結果
.多利用zil
.關掉atime
.調整recordsize
.保持ARCi,只使用25%的Total RAM
.必要時選擇primarycache=metadata,
.checksum error 是硬碟故障的前兆,必須加以監視
.1個db instatnce 獨佔一個zfs dataset
.不要開啟pSQL的checksum和compression(讓zfs做就好
.要經常移除舊的snapshot
.永遠開compression
.不要用dedup
.留意scrub結果
.多利用zil
.關掉atime
.調整recordsize
.保持ARCi,只使用25%的Total RAM
.必要時選擇primarycache=metadata,
.checksum error 是硬碟故障的前兆,必須加以監視
.1個db instatnce 獨佔一個zfs dataset
.不要開啟pSQL的checksum和compression(讓zfs做就好
.要經常移除舊的snapshot
UI/UX
專業的路上一定是孤獨的,很難找到伴,要能忍著孤獨,自己撐過去,才有辨法看到彩虹
如果有人說可以陪妳,那是騙人的!但可以陪妳看彩虹的喜悅。
UI/UX 就我知道UI分兩種情況:
一、只出版型、畫面:
a.網頁:前端會拿畫面去切版,把元件切出來,然後做出網網頁
b.App:把元件切出來,app工程師會套出來
二、除版型、畫面外,也要把網頁或app畫面產生出來
高手的話,特效都是css做出來的,好壞就見人見智了
國外、專業公司才會是第一種,不然大部份都是第二類型。
.UX 只能靠經驗、心理學、觀查、調查、回鐀才辨法進步,要會問問題,仔細發現,思考
=====建議======
1、追縱 台中前端社群 FB https://www.facebook.com/groups/taichung.f2e
但有沒有人回答就不一定了 ~ ~
還有其他社群,天天逛ui/ux的網站是必要的
2、把這個站bookmark http://goodui.org/
有空就看一下,了解為什麼建議這樣做!好壞、用在那、為什麼比另一個好。
實際運用是:當有看過有印象,或是參考不到,或是排完覺得怪怪,用英文關鍵字或是靠印象找到它的範例,然後想看看要不要改成它建議的
做網站和app有時候會拿來參考,但是有時候會和後端開發衝突,指增加後端開發難度,所以我會放棄,因為我是一人開發;
上一份工作做網站時,會和前端討論,後端寫法怎樣讓前端好做,前端那些不要做比好,那些沒問題
最終還是要看主管、客戶有沒有理解,不理解很正常,PM或業務要有辨法說服客戶,我們要說服主管、PM
但不要抱期望,不要浪費太多時間在這上面,多參考文章、網站,了解客戶實際原因,自己做網頁操作分析,這些會帶來成長
正常情況下:花一堆時間說服,客戶還是不買帳,實際客戶回鐀不好用...就是不好用,想再多都沒用
能上線趕快上線,上線得到的回覆才是真實的,不是主管的偏見,也不是業主的執著,更不是自己的主觀意見
3、底下網站是之前兩個參考網站,每天會看的,供參考,因為我不是設計出身,所以不知道有沒有用
妞新聞 http://www.niusnews.com/
淘靈感 https://pick.mydesy.com/
4、梅問題 https://www.minwt.com/
5、手機的UI和網站是完全不同,就算RWD給手機、平版用,UI/UX差非常很多!
純形像網站,用RWD
購物 用RWD,會麻煩,最好是改用hyper app,想成有連接系統操作的,最好用hyper app
hyper app指的是用web css html javascript針對手機android ios產生對應的專屬app,但只需寫一次,再針對手機android ios分別做小修改
遊戲 只能用原生
剩下就是youtube、網站一堆在說明ui/ux,不過很多文章沒有什麼實質內容,只能自己多花時間在上面。
如果是做平面的話,上面說的部份很多都無關,只是提供自己的心得。
之前前端妹妹,也是剛畢業,來公司只用bootstrap來做網站RWD,兼一些圖片切版,和她配合,認真做半年以上後,就覺得可以了,只是很多小細節要等到實際發生過後,才會知道怎麼處理。
結語:
有付出才有收獲
如果有人說可以陪妳,那是騙人的!但可以陪妳看彩虹的喜悅。
UI/UX 就我知道UI分兩種情況:
一、只出版型、畫面:
a.網頁:前端會拿畫面去切版,把元件切出來,然後做出網網頁
b.App:把元件切出來,app工程師會套出來
二、除版型、畫面外,也要把網頁或app畫面產生出來
高手的話,特效都是css做出來的,好壞就見人見智了
國外、專業公司才會是第一種,不然大部份都是第二類型。
.UX 只能靠經驗、心理學、觀查、調查、回鐀才辨法進步,要會問問題,仔細發現,思考
=====建議======
1、追縱 台中前端社群 FB https://www.facebook.com/groups/taichung.f2e
但有沒有人回答就不一定了 ~ ~
還有其他社群,天天逛ui/ux的網站是必要的
2、把這個站bookmark http://goodui.org/
有空就看一下,了解為什麼建議這樣做!好壞、用在那、為什麼比另一個好。
實際運用是:當有看過有印象,或是參考不到,或是排完覺得怪怪,用英文關鍵字或是靠印象找到它的範例,然後想看看要不要改成它建議的
做網站和app有時候會拿來參考,但是有時候會和後端開發衝突,指增加後端開發難度,所以我會放棄,因為我是一人開發;
上一份工作做網站時,會和前端討論,後端寫法怎樣讓前端好做,前端那些不要做比好,那些沒問題
最終還是要看主管、客戶有沒有理解,不理解很正常,PM或業務要有辨法說服客戶,我們要說服主管、PM
但不要抱期望,不要浪費太多時間在這上面,多參考文章、網站,了解客戶實際原因,自己做網頁操作分析,這些會帶來成長
正常情況下:花一堆時間說服,客戶還是不買帳,實際客戶回鐀不好用...就是不好用,想再多都沒用
能上線趕快上線,上線得到的回覆才是真實的,不是主管的偏見,也不是業主的執著,更不是自己的主觀意見
3、底下網站是之前兩個參考網站,每天會看的,供參考,因為我不是設計出身,所以不知道有沒有用
妞新聞 http://www.niusnews.com/
淘靈感 https://pick.mydesy.com/
4、梅問題 https://www.minwt.com/
5、手機的UI和網站是完全不同,就算RWD給手機、平版用,UI/UX差非常很多!
純形像網站,用RWD
購物 用RWD,會麻煩,最好是改用hyper app,想成有連接系統操作的,最好用hyper app
hyper app指的是用web css html javascript針對手機android ios產生對應的專屬app,但只需寫一次,再針對手機android ios分別做小修改
遊戲 只能用原生
剩下就是youtube、網站一堆在說明ui/ux,不過很多文章沒有什麼實質內容,只能自己多花時間在上面。
如果是做平面的話,上面說的部份很多都無關,只是提供自己的心得。
之前前端妹妹,也是剛畢業,來公司只用bootstrap來做網站RWD,兼一些圖片切版,和她配合,認真做半年以上後,就覺得可以了,只是很多小細節要等到實際發生過後,才會知道怎麼處理。
結語:
有付出才有收獲
[轉]樣本數過低
https://www.mobile01.com/topicdetail.php?f=292&t=5158596&p=12#117
我來告訴你 問題在哪
而且是正確答案
但你現在很生氣 情緒不穩定
接下來的答案 我想你以後才能領悟
你的問題有2個
1 在於 你對於婚姻 已經預設一個view
門當戶對 人人稱羨 幸福簡單美滿
當這些點 都出現了
妳當然願意嫁
但事實上 對方隱滿了很多你不知道的事實
這問題歸咎於 你社會經驗不足
你的樣本數過低 導致你以為這男人是符合你要的框架
但事實不是
你沒看出來他有問題 當然他也隱藏的很好
而你說你的風格是不管對方
但問題是 你這種風格就失去 真實理解他的訊號
導致誤判
這是第一個問題 : 即 你想要的的婚姻框架 跟 對方真實情況有巨大落差
2
你嚴重缺乏 對真正好男人的洞察力
這需要龐大的觀察數量跟人生經驗 以及 大量心中資料庫建立
這需要認識很多很多朋友才能擁有的智慧
而且要深入的理解
這是原因2
=========
你心裡的門當戶對 跟人人稱羨的幸福簡單婚姻的想法
充分顯示你的經驗極度不足
真正體驗過 美滿婚姻的人 絕對不會有這種想法
這根本就是背道而馳
我認識的人極多 從20-30億身價 到 窮困潦倒 各種職業 我都認識
真正婚姻幸福的 從不出現所謂的 人人稱羨 公主帥哥門當戶對這種條件
真正婚姻幸福的公式
(注意看喔 這極少數人會跟你說的 最正確的真理)
首先 雙方個性要在各方面極度成熟
兩個人都是屬於堅持不作惡的人
什麼是不作惡?
這種人有以下特點
不殺人 不傷害生命
不偷 不搶 不犯法
不說謊 不愛整天卡唬爛 講543廢話
不巧言令色 不說別人壞話 不挑播離間
多數只講有意義的話
不喝酒 不賭博
做事情非常有責任感
常常願意自我犧牲 不以自己慾望為第一首要
很擅長控制情緒 不讓情緒左右自己 而且一定是包含性
堅持端正做人才是王道
絕對不會吵架
因為作惡的人 心是扭曲的 心一扭曲就完了 例如張忠謀 就是很端正 看得遠
如果兩人都符合以上 就會帶來真正的幸福
而具有上述特色的人有些外表特徵可以參考
1 捍衛以上的行為
2眼神端正 不亂飄 堅定 堅毅 乾淨 清澈 正派
3走路坐姿 舉手投足之間 也是非常端正 不會有過多多餘的動作
4不浪漫 不搞花言巧語那套 不會虧妹 講低俗話 講話專業 科學
5這種人通常事業成功 我說的是很正派的成功 不是搞不入流事業或是違法事業
6這種人通常跟周遭的人關係都很穩定 都能 維持一種很適當 而且良好的距離
7這種人通常不跟爛朋友 低等級 不專業 愛講543的人混在一起
反之 多數人不符合上述條件 通常人生都會有很多缺陷
==========
但可惜 男生女生 在選對象 通常都是以其他因素來決定
一定會有人說這種人根本不存在
但 我還真認識幾個這種人
也過得非常幸福穩定
不是為了裝聖人
而是這樣的心 是有遠見的~ 才是真正能帶來長久的利益
只要偏離這些行為 那一定會走偏
我不見有任何其他的做法 能帶來長久的利益
當你遇見上述條件的人 那你就可以結婚 但你首先得訓練自己的洞察力
===============
有愛才能組家庭 沒錯
問題 妳洞察能力有誤⋯⋯不是檢查手機這麼膚淺的方式
是「平常人格觀察」就能理解很多資訊
正派人、帶來幸福的男人, 都會有固定特徵
妳得學會觀察出來
而不是用妳 「喜歡不喜歡來判斷」
懂把妹的老手 非常熟練女性心理
很容易操作到 讓女生 「有愛」
例如 溫柔體貼 帥氣 多金 虧妹 很會逗女生 等等
然後女生就 「有愛」
女生覺得 「有愛」 就結婚
但其實都是操作
像妳這種 天真妹 根本會被這類型的男人被矇的一愣一愣的
擅長操作的男生會聽得懂我在說啥
所以我上一個留言才列出多項特徵
來過濾
不過妳似乎看不懂 也無法體會
看妳的留言你還是在情緒化裡面
妳智慧太低 情緒穩定度低
妳不想辦法進步
妳往後依然會中招
參展心得
一、先行人員必需準備螢光衣及通行證,否則無法進入施工會場
先行人員:住宿需要和會場同一個飯店,減少移動時間。
先行人員:餐費最少需要200以上澳門幣,建議250,澳門物價太貴,最便宜在飯店美食街吃就要80澳門幣起跳
先行人員:飯店早餐儘可能是吃到飽,不要是套餐,因為吃不飽
先行人員:Wifi大會有提供,可以直接使用,也可以給遠端人員操作使用,但需經過網頁驗証方式,無法經過分享器
先行人員:會有缺插類情況,要帶足的萬用插座(澳門轉萬用),和延長線(要買澳門使用的,否則會跳電)
先行人員:飯店房間內WiFi會有連不到的情況,需要有預備方案:手機4G上網
先行人員:SIM建議附電話號碼,在台灣先買好,到澳門插卡,SIM會產生臨時電話號碼,避免到澳門,網路不通,連絡不到人
先行人員:MIS至少二人,因為設備(Mac Pro、平板、手機)非常重,如果沒辨法事先運送的話(還在修正測試),改用隨身攜帶會非常重
先行人員:MIS
進場:要提前兩三天,因為主機設備等需要先行架設,並測試,避免主機出問題,再從台灣傳送有問題檔案或設備時時間不夠。
離場:要先確認時間,如果要馬上打包要先準備好箱子和泡綿,最好不要當天就打包,隔天打包比較理想,東西可以仔細擺放及包好,很趕的話,容易有東西遣漏。
另外需要有人進行輪班,否則現場網路出問題,無人處理,只有一人時,無法走開。
大型櫃子或是道具 要事先做木櫃來裝,而且要符合規定,不是隨便想運就運,要事先詢問貨運公司;不用木櫃裝,物品可能會在運送中,損壞情況會比較嚴重。要運送物品需要確認價值,不然運費比物品價值高。
二、電腦、手機、平版 相關:
1、Wifi部份儘可能使用5G頻道,因為現場2.4G非常糟糕,以這次為例,2.4G非常緩慢,載入遊戲或視訊,會嚴重延遲,改用5G情況變好,但十公尺距離就有訊號衰減的情況
5G也最好有二至三個以上,分擔手機、平版使用量
2、Internet部份:一定要申請一條專屬網路,頻寬容量依展出產品使用情況來訂,另專屬網路還是會有一點不穩,但原則上是可以用的,不需要申請共用網路,因為專屬網路可以接分享器,可以給各產品使用,而共用網路只能給一個設備使用,非常不方便
.專屬網路:需注意,展會期間大會wifi網路非常不好,會有接待人員之類,想使用專屬網路,仍不建議開放使用,使用4G上網為宜
如果接待人員自帶筆電,請用有線網路為主,可以將原本準備的網路線拔來使用,或是事先多申請一條網路線到固定位置即可。
3、主機相關:
主機、各產品 DHCP MAC-IP一定要事先綁定
各產品必需把流程簡化,只需開啟虛擬機就可以,儘量不要有操作行為
各產品必需把產品登入程序簡化
連 單機:帳號密碼最好是自動切換或記憶密碼
連 DEMO主機:展示人員,各自記好對應產品的相關密碼
手機(android、ios):
1、儘量找到可以連有線Ethernet方式,比較穩定
ipad camera connection kit
https://www.apple.com/shop/product/MD821AM/A/lightning-to-usb-camera-adapter
Lightning 至 USB 3 相機轉換器
https://www.gottabemobile.com/how-to-connect-an-ipad-to-ethernet/
2、充電方式則是廠商會提供防盜裝置並有充電線,不需要準備
三、產品展示
1、手機、平版展示產品時,未操作時,不可以自動熄屏,要持續執行
2、能自動執行,連續展示畫面
產品解說人員需要更多人,這次展會發生產品人員已在服務中,沒有多餘人員能夠幫忙,造成客戶不耐久候,先行離開。
產品解說人員需要更多人,進行輪班,否則連吃飯時間都不夠。
產品展示 最好有各別影片長時間循環撥放,可以吸引對特定產品有興趣之客人,了解產品特色,進而詢問。
產品解說人員 需要事先了解一下,客人可能會詢問相關問題及回答;展會中,客人所提問題,需要記錄下來,後續參考。
aws ami snapshot 備份
參考網路上的修改過
https://simplyopensource.blogspot.tw/2014/04/script-to-create-daily-ami-of-aws.html
https://github.com/colinbjohnson/aws-missing-tools/blob/master/ec2-automate-backup/ec2-automate-backup.sh
https://simplyopensource.blogspot.tw/2014/04/script-to-create-daily-ami-of-aws.html
https://github.com/colinbjohnson/aws-missing-tools/blob/master/ec2-automate-backup/ec2-automate-backup.sh
使用指令
amibackup.sh -i i-0102e3b13418794d4 -r ap-northeast-2 -d 1 >> /root/ami_backup/AmiBackupLog.log 2>&1
# ReadMe - How to use this script
# cyfbackup.sh -r [region] -i [instance name]
# -d [How may days ago to delete] -t [emulate today is how many days ago]
#Define TextColor Varible to use
#TextRedBgYellow="\e[0;31;43m"
TextGreen="\e[0;32m"
TextRed="\e[0;31m"
TextYellow="\e[0;33m"
TextBlue="\e[0;36m"
EndText="\e[0m"
#Define test_day for Emulate Today is some days ago.
declare -i test_day=0
#get Paramenter -d beforeDay2Del, -i InstanceID, -r Region
while getopts :d:i:r:t:end opt; do
case $opt in
d) remainDay=$OPTARG;;
i) instance_id=$OPTARG;;
r) region=$OPTARG;;
t) test_day=$OPTARG;;
*) echo "Option is invalid, Please check."; exit 1;;
esac
done
StartBackup()
{
echo -e "----------------------------------\n `date` \n----------------------------------"
#To create a unique AMI name for this script (Get From NameTag)
InstanceName=$(aws ec2 describe-instances --region $region --instance-id $instance_id \
--query 'Reservations[*].Instances[].[Tags[?Key==`Name`].Value]' \
| grep \" | cut -d "\"" -f 2)
if [[ ! $InstanceName ]];then
echo -e "\n[ ${TextRed}Warning${EndText} ] Instance's Name Tag has no value, Please Check!!\n"
echo -e "[ ${TextRed}Warning${EndText} ] AMI Backup Job Aborted.\n"
exit 1;
fi
# if Got paramenter -t 2 , then Emulate today is 2 days ago (what the AmiName to Create).
if [ $test_day -eq 0 ];then
DateToday=$(date +%Y%m%d)
else
DateToday=$(date -d "$test_day days ago" +%Y%m%d)
fi
AmiName2Create=${InstanceName}_$DateToday
# AmiTagName: Date 20170518 modify to 170518
AmiNameTagValue=${InstanceName}_$(echo $DateToday | cut -c 3-)
echo -e "Starting the Daily AMI creation: `echo $AmiName2Create`\n"
#To create AMI of defined instance
amiID=$(aws ec2 create-image --region $region --instance-id $instance_id --name $AmiName2Create \
--description "AutoBackup_$AmiName2Create" --no-reboot \
| grep -i ami | awk '{print $2}' | cut -d "\"" -f 2)
# Create AMI Name Tag
if [ $amiID ];then
aws ec2 create-tags --region $region --resources $amiID --tags Key=Name,Value=$AmiNameTagValue
AmiNameTagQuery=$(aws ec2 describe-tags --region $region --filters "Name=resource-id,Values=$amiID" \
| grep Value | awk {'print $2'} | cut -d "\"" -f 2)
#Showing the AMI ID , Name And NameTag created by AWS
echo -e "AMI ID is: `echo $amiID`\n"
echo -e "AMI Name is: `echo $AmiName2Create`\n"
echo -e "AMI Name Tag is: `echo $AmiNameTagQuery`\n"
# If create AMI not success (not get the AMI id) then abort.
else
echo -e "\n${TextRed}[ Error ]${EndText} Create AMI Error, Please Check Messages Above."
exit 1;
fi
}
# If Specify the day to remain, then delete ami and snapshots before the remain day, count 3 days.
ami_snap_del()
{
sleep 2
echo -e "Looking for AMI older than $remainDay days:\n "
# Range(set to 3 days) to delete AMI & snapshot which the day before you specify to remain.
declare -i delRange=$remainDay+2
echo "Remain Day = $remainDay"
echo "del Range = $delRange"
for (( i=$remainDay; i<=$delRange; i++ ))
do
#Define the value of AMI_Name older than 3 days which needed to be removed
amiName2del=${InstanceName}_$(date -d "$i days ago" +%Y%m%d)
echo "amiName2del = $amiName2del"
#Finding Image ID of instance by AMI_Name which needed to be Deregistered
amiID2del=$(aws ec2 describe-images --region $region --filters "Name=name,Values=$amiName2del" \
| grep -i imageid | cut -d "\"" -f 4)
#If Find the target AMI_Name to delete , then process delete.
if [ $amiID2del ];
then
echo -e "Following AMI is found : $amiID2del\n"
echo "This Snapshot will be deleted:$snap2del"
#Find the snapshots attached to the Image need to be Deregister
snap2del=$(aws ec2 describe-images --region $region --image-ids $amiID2del | grep snap | cut -d "\"" -f 4)
echo -e "Following are the snapshots associated with it : $snap2del:\n "
echo -e "Starting the Deregister of AMI... \n"
#Deregistering the AMI
echo "amiID2del: $amiID2del"
aws ec2 deregister-image --region $region --image-id $amiID2del
echo -e "\nDeleting the associated snapshots.... \n"
#Deleting snapshots attached to AMI
for n in $snap2del;
do aws ec2 delete-snapshot --snapshot-id $n ; done
else
echo -e "No AMI found older than minimum required no of days \n"
fi
done
echo -e "${TextBlue}Deleting Job Completed!!!${EndText}"
}
# Create Snapshot NameTag
CreateSnapTag()
{
sleep 5
#_ remove region paramanter
snapID=$(aws ec2 describe-images --image-ids $amiID | grep snap | cut -d "\"" -f 4)
if [ -n "$snapID" ];then
# For multiple snapshots
for snaps in $snapID;
do
# Create Snapshot NameTag
createSnapNametage=$(aws ec2 create-tags --region $region --resources $snaps \
--tags Key=Name,Value=$AmiNameTagValue)
# Get Snapshot NameTag
SnapNameTag=$(aws ec2 describe-tags --region $region --filters \
"Name=resource-id,Values=$snaps" \
| grep Value | awk {'print $2'} | cut -d "\"" -f 2)
echo -e "Snapshot ID is $snaps\n"
echo -e "Snapshot NameTag is $SnapNameTag \n"
done
# ReQuery SnapNameTag: May Cause Loop, Not Use Now
else
echo -e "Snapshot ID not Found, Please Set Snapshot's NameTag Manually."
fi
}
# Detect if Parameters: instance id, region has got or not, if yes, Starting Backup
if [ ! $instance_id ]; then
echo -e "\nPlease Specify Option with -i [instance id] -r [region]\n";
exit 1;
else
if [ ! $region ];then
echo -e "\nPlease Specify the region name with -r [region]\n"
exit 1;
else
# Set the AWS Default Region as User Specify
export AWS_DEFAULT_REGION=$region
StartBackup;
fi
fi
# [Create Snapshot NameTag] if amiID exist , Find Snapshot ID and then create Tag.
if [ $amiID ];then
echo -e "${TextYellow}Please wait 10 second to Create Snapshot NameTag...${EndText}\n"
CreateSnapTag;
echo -e "${TextBlue}$DateToday Backup Job Completed!!${EndText}\n"
fi
# [Delete Snapshot which ami is Deregisterd] if not specify the day to Remain, Ami and Snapshots will not to delete
if [ $remainDay ]; then
ami_snap_del;
fi
訂閱:
意見 (Atom)






