东东东 陈煜东的博客

分类存档: 未分类

sudo保持前用用户的env环境变量

在虚拟机里安装了一个Ubuntu,在局域网下,需要设置代理才能访问网络和安装程序。很自然的给sudo vim /etc/bash.bashrc添加代理。

# 设置代理
export http_proxy=http://web-proxy.oo.com:8080
export https_proxy=http://web-proxy.oo.com:8080
export no_proxy=localhost,.oo.com,.local

然后很愉快的sudo apt-get update发现根本无法连接服务器。如果切换到sudo su的root用户下,是可以的执行的。

研究了半天,原来是sudo在切换成root用户的时候,env并不会去保留这些环境变量,需要特别的指明才可以。

通过visudo命令来设置,需要保留的环境变量,新增下面的第10行。Defaults env_keep="http_proxy https_proxy ftp_proxy no_proxy DISPLAY XAUTHORITY"。这样就可以继续愉快的访问网络了。

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        env_keep="http_proxy https_proxy ftp_proxy no_proxy DISPLAY XAUTHORITY"
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

友情提示。只能通过visudo命令来更新,不能修改/etc/sudoers文件,会被覆盖的。

分类: 未分类

uwsgi python home设置

运行uwsgi,发现500错误,一看uwsgi的log。

ImportError: No module named random

一看就奇怪了,标准的python的类库,怎么就不支持呢?

一看原来以前的uwsgi配置里面有个,现在没有了。

./uwsgi ./uwsgi.ini -H /usr/local/services/python

增加一个PYTHONHOME的环境变量,

export PYTHONHOME=/usr/local/services/python

就可以把这个配置给取消了。

因为这个python不是标准的安装,所以这些都没有设置。

godaddy购买过期域名及其处理方式

去年帮别人建网站购买域名,当时提醒他们续费,但是他们没有消息。我又本着好心提醒他们续费,他们终于回复我了,让我帮忙处理一下。

我查看一下域名的状态,已经不在当时Godaddy的购买账户了,没办法续费,已经过期好几天了。

对于注册人来说,我们来看看Godaddy对域名过期续费的几个分段。

  • 过期第0天:godaddy尝试自动续费,如果自动续费失败,域名过期,仍可人工续费,不收额外费用。
  • 过期第5天:godaddy第2次尝试自动续费,如果自动续费失败,域名停止解析,仍可人工续费,不收额外费用。
  • 过期第12天:godaddy第3次尝试自动续费。
  • 过期第19天~42天:域名仍可自动续费,但是需要额外交域名赎回费(redemption fee)80美元。
  • 过期第43天:如果有竞标者,则把域名分配给获胜者,如果没有,则把域名返回给域名注册管理机构。

对于购买过期域名的人来说

  • 过期第26天:域名被放入拍卖(auction)列表,注册者仍可续费,额外交80美元赎回费。共10天
  • 过期第36天:拍卖结束,如果没有人竞标,则放到收尾竞标列表,清仓拍卖。有人竞标,等待6天,归他所有。赎回$80
  • 过期第37天:清仓拍卖第一天,直接$11可以购买。赎回$80
  • 过期第38天:清仓拍卖第二天,直接$10可以购买。赎回$80
  • 过期第39天:清仓拍卖第三天,直接$9可以购买。赎回$80
  • 过期第40天:清仓拍卖第四天,直接$8可以购买。赎回$80
  • 过期第41天:清仓拍卖第五天,直接$5可以购买。关闭收尾竞标。赎回$80
  • 过期第43天:如果有竞标者,则把域名分配给获胜者,如果没有,则把域名返回给域名注册管理机构。

要说明的是,Godaddy可能会在到期当天,帮你自动续费1年,查看whois信息,你会发现到期时间推迟了1年,但是如果你不续费的话,域名在43天后仍是进入删除阶段,管理机构会退给Godaddy帮你垫付的费用。

推荐:Godaddy续费优惠码

一些查老域名的工具

  • opensiteexplorer.com
  • archive.org

分类: 未分类

sina weibo qq oauth2 login

resource owner
      An entity capable of granting access to a protected resource.
      When the resource owner is a person, it is referred to as an
      end-user.

   resource server
      The server hosting the protected resources, capable of accepting
      and responding to protected resource requests using access tokens.

   client
      An application making protected resource requests on behalf of the
      resource owner and with its authorization.  The term "client" does
      not imply any particular implementation characteristics (e.g.,
      whether the application executes on a server, a desktop, or other
      devices).

   authorization server
      The server issuing access tokens to the client after successfully
      authenticating the resource owner and obtaining authorization.

分类: 未分类

对数据库触发器new和old的理解

在数据库的触发器中经常会用到更新前的值和更新后的值,所有要理解new和old的作用很重要。当时我有个情况是这样的:我要插入一行数据,在行要去其他表中获得一个单价,然后和这行的数据进行相乘的到总金额,将该行的金额替换成相乘的结果。

一开始我使用的after,然后对自身的值进行更改。

insert update delete
old null 实际值 实际值
new 实际值 实际值 null

在Oracle中用:old:new表示执行前的行,和执行后的行。在MySQL中用oldnew表示执行前和执行后的数据。

问题的起源

之前对数据库的触发器是这样写的,

CREATE TRIGGER triggerName after insert ON consumeinfo
    FOR EACH ROW
    BEGIN
      UPDATE consumeinfo SET new.金额=0;
    END;

触发器创建没问题,但是插入数据出现以下错误。

[Err] 1442 - Can't update table 'consumeinfo' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

但是通过上网搜索的结果说对本表进行修改不用使用update consumeinfo,直接使用SET new.金额=0。这个做法对的,因为这样使用new先对当前的金额改变了,然后存到数据库中的,不用使用update consumeinfo。

经过一番努力,以下是成功后的代码,贴出来看看

CREATE TRIGGER addnewReco BEFORE INSERT ON consumeinfo FOR EACH ROW
BEGIN
SET new.金额 = (
    SELECT `单价`
    FROM pricenow
    WHERE `类型` = new.类型
    ) * new.数量;
END;

后来在吃饭打汤喝的时候突然想到new和old在after和before上使用情况不同。其实还是因为new不能在after进行赋值,只能进行读取,复制要在before时赋值。

new和old的使用情况

下面具体说说old和new的使用情况。在对new赋值的时候只能在触发器before中只用,在after中是不能使用的,比如(以下是正确的)。

CREATE TRIGGER updateprice
BEFORE insert
ON consumeinfo
FOR EACH ROW
BEGIN
   set new.金额=0;
END;

这个说明对当前插入数据进行更新的时候使用before先更新完,然后才插入到数据库中的,在after的触发器中,new的赋值已经结束了,只能读取内容。 如果使用after不能使用new赋值,只能取值,否则会出错误,比如

CREATE TRIGGER updateprice
AFTER insert
ON consumeinfo
FOR EACH ROW
BEGIN
    set new.金额=0;
END;

出现这样的错误:

[Err] 1362 - Updating of NEW row is not allowed in after trigger

总结:new在before触发器中赋值,取值;在after触发器中取值。old在用于取值?因为赋值没意义?

分类: 未分类

IBM DB2 认证考试 Information Management Certification

今天4月21日参加了 IBM 的 DB2 Information Management Certification 全球认证考试,成绩83.33顺利通过。这们课程的认证课的费用是$150,不过IBM和中国的高校合作,价格当然是有优惠的啦。所以得趁着这样的机会在学校多拿些有优惠的证书啊!

IBM派来了一个美女来监督我们的考试,心情大好啊,话说也不容易,美女一直在各个电脑前输入密码。一下子就把题目给做完了,但是鉴于中国学生的考试能力,我还是放慢了速度,以免给他人带来不良的影响。

IBM与高校合作,开设IBM产品课程,这是为IBM产品做的一个推销。让大学生学习他的产品,使得大学生以后走向工作的岗位可以熟悉他的产品,可以快速上手。我们学校目前只有开设DB2、WebSphere、XML、UML,必须难道其中的两个学分才能毕业。因为学校和IBM合作,所以参加IBM的全球认证考试也比市场上的便宜。 但是Oracle没有在这样的和高校合作,或许认为是对自己的产品非常的信心,不必这样的合作。不过我们的数据库实验确是用Oracle的数据库,而不是IBM DB2数据库。这也和老师用多了Oracle的数据库有关。

不得不说,IBM这样在大学生这里抢占市场,这个战略感觉不错,很有见识。但是在学校中的学生能有几个认真的对待呢,不过是当作普通的一门考试而已,并不会发太多的时间在上面IBM的产品上,不过像XML这样的课程还是在编程中通用的,多少会认真的学学。

如何在大学中找到更适合的推广品牌的方法,需要进一步的去加强。

分类: 未分类

matlab常用基本函数 语法

最近数值计算用到了matlab做计算。之前没有接触过,不怎么会用,记录下常用语法吧。

基本语法

i~=j %逻辑判断i、j不相等,与其他编程语言中的 i!=j 表示一个意思
for i=0:9 ... end % for迭代循环0~9,相当于 for(i=0;i < 9;i++)

基本矩阵

eye(2,2)   %生成2*2的全1的矩阵 [1 1; 1 1; 1 1]
zeros(2,2)   %生成2*2全0矩阵 [0 0; 0 0]
ones(2,3)  %生成2*3矩阵,对角线上全1 [1 0 0;0 1 0]
tril(A)   %对A取下三角矩阵
triu(A)   %对A取上三角矩阵
A'   %对A进行求转置矩阵
norm(A)   %对A求范数。norm(A,1)一阶范数; norm(A, inf) 无穷阶范数
flipud(A) %对A上下颠倒
fliplr(A) %对A左右颠倒
vander(v)  %利用向量v,生成Vandermonde矩阵

常用分解

[L,U,P]=lu(A)  %对A进行LU分解,将下三角矩阵保存到L,U为上三角,P为矩阵的变化
chol(A)   %对A进行Cholesky分解

快捷键

Ctrl + I %格式化代码
Ctrl + R %注释选中代码
Ctrl + T %取消选中代码注释

画图

x=2:0.05:2; %x自变量区间[2,2] 每隔0.05生成一个点的横向量,因此该向量有400个分量
linspace(a,b,n); %在[a,b]之间生成线性的n个点的横向量,如果没有n,则默认100个点线性横向量
y=power(x,2); %定义y的函数形式 为y=x^2;
plot(x,y,'-O') %画图,每个点用O画出来
plot(x,y,'-') %画图,每个点用线直线画出来,与没有'-'该参数是一样的
hold on;%将图先保存,如果后面有继续图,和下面的图显示在一张图中,即共用一个坐标系
legend('曲线一','曲线二'); %对每个曲线做说明
title '图标题'; %对图添加标题

其他资源

官方文档:Matlab官方文档

分类: 未分类

Navicat 连接访问远程 Oracle 数据库

由于 Oracle 数据库是在远程的服务器上,不是在本地的,所以要远程登录 Oracle 数据库是我们这次要解决的问题。所以本地不需要Oracle数据库也行。

首先,我们使用 Navicat Premium 这个软件来作为我们的数据库前端GUI界面软件。但是这个软件只有30天试用期。

PS:Navicat Premium 是一个集成多种数据库前端的软件,支持Windows、Mac、Linux跨平台,支持Oracle、MySQL、SQL Server、PostgreSQL、SQLite。也有专门只支持专门一种数据库的程序(Navicat for MySQL、Navicat for SQL Server、Navicat for SQLite、Navicat for Oracle、Navicat for PostgreSQL)。

第二步,运行安装好的Navicat Premium,此时先别着急连接Oracle。

网上有人说Navicat Premium会提示需要安装 Oracle 客户端,那么不用安装,我这个Navicat版本没有提示需要安装。还有人说要下载Oracle 11g ODAC and Oracle Developer Tools for Visual Studio,这个我的本地机器里面没有这写东西,所以也不用下载这些。

因为连接Oracle要Instant Client,涉及到OCI(Oracle Call Interface),这个压缩包里面是一些dll文件,如果你使用的安装版本目录(或子文件夹)下有 oci.dll文件(当然还需要其他dll文件),那么就方便了,如果没有那么就要去Oracle官网下载压缩包了,那速度无比慢啊。下载链接:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

注意:Navicat Premium只支持Instant Client 32bit版本。如果你是Windows 64bit系统也是下载32bit的那个压缩包。如果你是Linux用户,也是下载Windows 32bit的那个。如果是Mac用户下载Mac 32bit版本的。详情请看Navicat Premium官方说明

http://wiki.navicat.com/wiki/index.php/Instant_client_required

第三步,把Instant Client压缩包下载下来后,可以参照刚才的那个页面 进行配置Navicat Premium,设置oci.dll地址。

第四步,连接Oracle。新建数据库连接,可以根据图片设置,但是不一定都适合大众。一般选择basic模式。navicat对Oracle连接数据库的设置

 

分类: 未分类

Android开发ADT SDK离线安装

  1. 首先,我们先把Java、Eclipse安装好,然后我们才能开始进行Android的开发。
  2. 接下来我们要安装ADT Pluginfor Eclipse,这个是android的eclipse插件,稍后再说怎么安装,先下载下来放着。其最新版的下载链接为
    http://dl.google.com/android/ADT-16.0.1.zip 约6.67MB
  3. 下一步安装Android SDK,下载最新版链接为,这个是压缩文件
    http://dl.google.com/android/android-sdk_r16-windows.zip 约28MB
    Android SDK是一个管理Android开发系统的组建的一个软件,里面没有Android系统的框架,比如Android2.3的类库没有,需要我们自己去下载安装,现在我们还要往Android SDK添加SDK Components。 解压到一个没有中文路径的目录下,开发Android最好都不要使用中文的用户名,程序也不要放到中文路径下。这边我们解压到根目录下,有D://android-sdk-windows/目录结构,以下我们用{sdk}来代替sdk根目录。
  4. 下载安装Android SDKComponents。进入{sdk}/SDK Manager,勾选要下载选项,点击右下角Install * packages...按钮,出现新窗口。看看你要下在些什么文件,右边有文件的详细信息,到下面的链接下载对应的文件。
    http://dl- ssl.google.com/Android/repository/addon.xml
    https://dl- ssl.google.com/android/repository/repository-5.xml
    https://dl-ssl.google.com/android/repository/repository-7.xml
    将下载下来的文件放到{sdk}/temp 目录下,打开SDK Manager安装。 在安装sdk component的时候可能出现问号,比如上面的那幅图,那个是因为没有Accept,不是因为SDK Manager找不到对应的文件。点击Install,下载的步骤会跳过,进行安装。
  5. 下一步就可以按照官网说明安装ADT Pluginfor Eclipse了,也可以自己自定义进行eclipse links安装插件。

分类: 未分类

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑