百度语音朗读的在线REST的API

星期六, 十月 20th, 2018 | computer, JAVA-and-J2EE | 没有评论

访问如下地址即可返回对应的语音朗读文件:

http://tts.baidu.com/text2audio?cuid=baiduid&lan=zh&ctp=1&pdt=311&tex=昔孟母,择邻处,子不学,断机杼

只需要将tex换成你需要朗读的文字即可。

更多AI 相关API可以去百度的开发平台查看,比较全了
http://ai.baidu.com/

Tags: ,

https的证书格式转换教程说明

星期一, 九月 10th, 2018 | computer | 没有评论

第一步:安装转换所需的运行环境
转换证书需要使用本地拥有 OpenSSL 和 JDK 运行环境,如果没有可以参考 《 OpenSSL 安装教程 》 和 《 Java 安装教程 》

第二步:合并证书链
完整的证书拥有四个部分

根证书
中级证书
域名证书
证书私钥
我们以 Symantec 品牌证书为例,您将收到以下三个文件

文件名称 文件说明
CACertificate-ROOT-2.cer 根证书
CACertificate-INTERMEDIATE-1.cer 中级证书
ServerCertificate.cer 域名证书
我们以 Comodo 品牌证书为例,您将收到以下四个文件

文件名称 文件说明
AddTrustExternalCARoot.crt 根证书
COMODORSAAddTrustCA.crt 中级证书
COMODORSADomainValidationSecureServerCA.crt 中级证书
129688217.crt 域名证书
我们需要按照 域名证书 – 中级证书 – 根证书 的顺序合并为证书链才能被绝大多数浏览器信任。

Symantec 合并顺序:
我们用打开各个证书文件

证书转换教程
› Continue reading

Tags:

php-fpm的php参数的配置和启动

星期二, 九月 4th, 2018 | php | 没有评论

0.启动:(基于php5.5.20)

/usr/local/webserver/php/sbin/php-fpm -D

1.配置文件路径
/usr/local/webserver/php/etc
重要的配置文件:
php.ini 及php-fpm.conf

2.说明如下:php.ini

######避免PHP信息暴露在http头中
expose_php = Off
 
######避免暴露php调用mysql的错误信息
display_errors = Off
 
######在关闭display_errors后开启PHP错误日志(路径在php-fpm.conf中配置)
log_errors = On
 
######设置PHP的扩展库路径
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20141001/"
 
######设置PHP的opcache和mysql动态库
zend_extension=opcache.so
extension=mysqli.so
extension=pdo_mysql.so
 
######设置PHP的时区
date.timezone = PRC
 
######开启opcache
[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1
 
######设置PHP脚本允许访问的目录(需要根据实际情况配置)
;open_basedir = /data/nginx/html;

3. 配置php-fpm.conf 保持

Tags:

kindle 安卓(Android) app把下载好的电子书放置

星期三, 七月 4th, 2018 | computer, 读书 | 没有评论

kindle 安卓(Android) app下载的电子书放在什么文件夹?

具体位置如下:/sdcard/Android/data/com.amazon.kindle/files/
或者是:Android\data\com.amazon.kindlefc\files\ 下

只要把对应的电子书(比如:斜杠创业家.mobi)放到这个位置就可以在kindle的软件中阅读了.

Tags:

azkaban-web-server 邮件配置遭遇Connecting to SMTP server failed

星期三, 六月 27th, 2018 | Database, JAVA-and-J2EE, 大数据 | 2 Comments

azkaban-web-server 邮件配置遭遇Connecting to SMTP server failed

0.先说下使用的版本azkaban-web-server-3.45.0-10使用jdk1.8.151编译

1.启用azkaban的邮件配置在 azkaban.properties中定义发送邮箱

mail.sender=xx@qq.com
mail.host=smtp.exmail.qq.com
mail.user=xx@qq.com
mail.port=465
mail.password=xxxxxx
#[email protected]
#[email protected]
mail.tls=true

2.配置job文件里配置接收邮箱地址

#file.job
type=command
command=sh /usr/local/bg/files/test.sh
working.dir=/usr/local/bg/files/job/working
notify.emails=xx@qq.com
failure.emails=xx@qq.com
success.emails=xx@qq.com

3.遭遇错误如下

ERROR [EmailMessage] [Azkaban] Connecting to SMTP server failed, attempt: 0
     javax.mail.MessagingException: Exception reading response;
     nested exception is:
     java.net.SocketTimeoutException: Read timed out
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2210)
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950)
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)
     at javax.mail.Service.connect(Service.java:295)
     at azkaban.utils.EmailMessage.connectToSMTPServer(EmailMessage.java:226)
     at azkaban.utils.EmailMessage.retryConnectToSMTPServer(EmailMessage.java:236)
     at azkaban.utils.EmailMessage.sendEmail(EmailMessage.java:219)
     at azkaban.utils.Emailer.sendSuccessEmail(Emailer.java:231)

4.解决方式需要修改源码并重新编译之 重新编译azkaban.utils.EmailMessage即可,
› Continue reading

Tags: ,

mysql的全量(查询)日志general-log的开启

星期一, 五月 21st, 2018 | JAVA-and-J2EE, linux | 没有评论

怀疑有异常连接进来操作数据库则开启日志记录.

mysql> show global variables like '%general%';
+------------------+----------------------------+
| Variable_name    | Value                      |
+------------------+----------------------------+
| general_log      | OFF                         |
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+
2 rows in set (0.00 sec)
 
mysql> set global general_log=on;
Query OK, 0 rows affected (0.00 sec)
 
mysql> set global general_log_file='/data/logs/mysql/mysql_general_log.log';
ERROR 1231 (42000): Variable 'general_log_file' can't be set to the value of '/data/logs/mysql/mysql_general_log.log'

1. 设置general log保存路径
2. 注意在Linux中只能设置到 /tmp 或 /var 文件夹下,设置其他路径出错
3. 需要root用户才有访问此文件的权限

4. 针对 2的一点注意 此版本是mysql-5.1.73 无法使用其他路径,可能新版本可以使用

已经尝试

chown -R mysql:mysql /data/logs/mysql/
chomd 777 /data/logs/mysql/mysql_general_log.log

Tags:

Git没有记录你的Contributions的修复记

星期二, 五月 15th, 2018 | JAVA-and-J2EE, linux | 一条评论

1.可以通过git log 查看提交的用户不一致造成的,只要调整成一致的用户即可(主要是email地址)

2.全局指定用户信息(如果有不同的账号信息,见3配置,可能公司和个人不同的git账号)

git config --global user.email "你的邮件地址"
git config --global user.name "你的Git用户名"

3.配置指定的git项目的config文件从而使每个独立账号
修改(.git下的config文件)
新增内容如下:
[user]
name = 正确的用户名
email = 正确的邮件地址

4.git提交历史的恢复及修改错误的email(若很在意提交的email信息请谨慎执行,比如把公司的email信息带到了log中,本人已验证可以正确执行)
重新clone 一份操作
4.1复制粘贴脚本,并根据你的信息修改以下变量:旧的Email地址,正确的用户名,正确的邮件地址

#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="旧的Email地址"
CORRECT_NAME="正确的用户名"
CORRECT_EMAIL="正确的邮件地址"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

4.2按 Enter键 执行脚本。

4.3用git log命令看看新 Git 历史有没有错误

4.4把正确历史 push 到 Git

git push --force --tags origin 'refs/heads/*'

删除此次的clone
5.现在已经完全记录了你的提交数(4不执行的话,下次提交才会生效)

Tags:

centos7 里面修改hostname的方式

星期三, 三月 21st, 2018 | linux, 大数据 | 没有评论

在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵活的(pretty)。

“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。
“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。
静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。

centos7 里面修改hostname的方式有所改变,修改/etc/hosts和/etc/sysconfig/network两个文件已经不能生效。使用的新命令是:
默认 set-hostname 同时修改三个值,想只修改一个加 -static 对应的参数

shell> hostnamectl set-hostname centos7
shell> su
shell> hostname
centos7

centos7之前的版本请用此方法:

shell> vi /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=centos6
:wq #保存并退出

局域网A/B主机直接通过hostname访问主机B:

#A主机设置
shell> vi /etc/sysconfig/network
GATEWAY=192.168.1.100 #当前主机内网ip
:wq #保存并退出
#A/B主机设置
shell> vi /etc/hosts
192.168.1.100 hostname
:wq #保存并退出

Tags:

Elasticsearch 启动报错参数配置处理 参数配置

星期五, 一月 26th, 2018 | 大数据 | 3 Comments

1.elasticsearch-6.1.2的具体就不介绍了,详情可以去看Elasticsearch guide

2.为了主机可以访问虚拟机里的ES 开启外部访问

vi config/elasticsearch.yml
 
network.host: 0.0.0.0  #打开此注释,正式环境根据情况指定IP

3.启动elasticsearch报如下错误

./bin/elasticsearch -d

[2018-01-26T03:06:12,987][ERROR][o.e.b.Bootstrap ] [sA_Y-N7] node validation exception
[3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: max number of threads [3884] for user [hadoop] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

针对上述错误修改如下:

vi /etc/security/limits.conf
 
* soft nofile 65536
* hard nofile 65536
* soft nproc  4096
* hard nproc  4096
vi /etc/security/limits.d/20-nproc.conf
 
*          soft    nproc     4096
root       soft    nproc     unlimited
vi /etc/sysctl.conf
 
vm.max_map_count=655360

使其生效

sysctl -p

退出shell,重进生效,然后启动ok了

可以访问 http://192.168.1.188:9200/ 查看

Tags: ,

几种常见的分布式锁的策略优缺点及对应处理

星期二, 十二月 19th, 2017 | JAVA-and-J2EE | 没有评论

在微信朋友圈看到的文章总结的很好,记录下以便翻阅.自己主要是以redis做分布式锁实现.

前言

随着互联网的发展,各种高并发、海量处理的场景越来越多。为了实现高可用、可扩展的系统,常常使用分布式,这样避免了单点故障和普通计算机cpu、内存等瓶颈。

但是分布式系统也带来了数据一致性的问题,比如用户抢购秒杀商品多台机器共同执行出现超卖等。有些同学容易将分布式锁与线程安全混淆,线程安全是指的线程间的协同。如果是多个进程间的协同需要用到分布式锁,本文总结了几种常见的分布式锁。

基于数据库

悲观锁—事务

比如用户抢购秒杀商品的场景,多台机器都接收到了抢购的请求,可以将获取库存、判断有货、用户付款、扣减库存等多个数据库操作放到一个事务,这样当一台机器与数据库建立链接请求了抢购商品这个事务,另外的机器只能等这个机器将请求完成才能操作数据库。在实际应用场景中,常常库存与交易是两个独立的系统,这时的事务是一个分布式事务,需要用到两段式、三段式提交。

优点:是比较安全的一种实现方法。

缺点:在高并发的场景下开销是不能容忍的。容易出现数据库死锁等情况。

乐观锁—基于版本号

乐观锁常常用于分布式系统对数据库某张特定表执行update操作。考虑线上选座的场景,用户A和B同时选择了某场次电影的一个座位,都去将座位的状态设置为已售。

设想这样的执行序列:
1、用户A判断该座位为未售状态;
2、用户B判断该座位为未售状态;
3、用户A执行update座位为已售;
4、用户B执行update座位为已售。

这样会出现同一个座位售出两次的情况,解决方案是在这张数据库表中增加一个版本号的字段。执行操作前读取当前数据库表中的版本号,在执行update语句时将版本号放在where语句中,如果更新了记录则说明成功,如果没有更新记录,则说明此次update失败。

加了乐观锁的执行序列:
1、用户A查询该座位,得到该座位是未售状态,版本号是5;
2、用户B查询该座位,得到该座位是未售状态,版本号是5;
3、用户A执行update语句将座位状态更新为已售,版本号更新为6;
4、用户B执行update语句时此时这个座位的记录版本号为6,没有版本号为5的这个座位的记录,执行失败。

优点:乐观锁的性能高于悲观锁,并不容易出现死锁。

缺点:乐观锁只能对一张表的数据进行加锁,如果是需要对多张表的数据操作加分布式锁,基于版本号的乐观锁是办不到的。

› Continue reading

Tags: ,

Search

文章分类

Links

Meta