拍集体照用什么镜头为佳?无论是户外徒步、家庭聚餐都能遇到拍合影的情况,那么拍集体照的镜头该怎么选呢?下面就让小编给你讲讲。
1、应选用标准镜头
标准镜头的视角与人眼一致,用广角镜头拍集体照时会出现透视变形现象,前排人物离镜头近而头大,后排人物离镜头远而头小。因此,拍集体照不能使用广角镜头。如果使用变焦镜头拍集体照也应选择50毫米焦距段。
2、光圈和快门速度的选择
集体合影的特点是:人物是静止的且纵深大。要获得较大的景深,一般得使用小光圈和较慢的快门速度。20~30人的合影宜用f/5.6~f/8光圈;在60~70人合影时宜用f/8~f/11光圈,在100人以上合影时宜用f/11~f/16光圈。快门速度最好不低于1/30秒,这样可避免个别人在拍摄中突然的晃动。当然,在光线较差的情况下,为了保证有足够的景深,只好牺牲快门速度,但一般不能低于1/8秒。
3、使用三脚架和快门线
因为拍摄集体合影需要较大的景深,所以常选用较小的光圈拍摄,这时快门速度较慢,为防止拍摄中出现“手震”,影响画面清晰度,因此在拍照中必须使用三脚架稳定照相机。
4、光线的选择
拍集体合影以柔和的自然光为好,应尽量避免直射阳光和逆光。时间应选在上午10点至下午4点这个时段,不要在树荫下拍照,以防产生花脸。
阅读全文
1。从www.sqlite.org下载SQLite 3.3.4的版本
为了方便,我把它解压了,就一个SQLite3.exe,放入Windows目录下。
Cmd 进入命令行
1)
创建数据库文件:
>SQLite3 d:\test.db 回车
就生成了一个test.db在d盘。
这样同时也SQLite3挂上了这个test.db
2)
用.help可以看看有什么命令
>.help 回车即可
3)可以在这里直接输入SQL语句创建表格 用;结束,然后回车就可以看到了
4)看看有创建了多少表
>.tables
5)看表结构
>.schema 表名
6)看看目前挂的数据库
>.database
7)如果要把查询输出到文件
>.output 文件名
> 查询语句;
查询结果就输出到了文件c:\query.txt
把查询结果用屏幕输出
>.output stdout
8)把表结构输出,同时索引也会输出
.dump 表名
9)退出
>.exit 或者.quit
2。从http://sqlite.phxsoftware.com/下载Ado.net驱动。
下载了安装,在安装目录中存在System.Data.SQLite.dll
我们只需要拷贝这个文件到引用目录,并添加引用即可对SQLite数据库操作了
所有的Ado.net对象都是以SQLite开头的,比如SQLiteConnection
连接串只需要如下方式
Data Source=d:\test.db 或者DataSource=test.db–应用在和应用程序或者.net能够自动找到的目录
剩下的就很简单了~~
3。SQL语法
由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜
1)创建一个单个Primary Key的table
CREATE TABLE [Admin] (
[UserName] [nvarchar] (20) PRIMARY KEY NOT NULL ,
[Password] [nvarchar] (50) NOT NULL ,
[Rank] [smallint] NOT NULL ,
[MailServer] [nvarchar] (50) NOT NULL ,
[MailUser] [nvarchar] (50) NOT NULL ,
[MailPassword] [nvarchar] (50) NOT NULL ,
[Mail] [nvarchar] (50) NOT NULL
) ;
CREATE TABLE [ESOA_User] (
[UID] [integer] PRIMARY KEY NOT NULL ,
[U_Account] [varchar] (50) NOT NULL ,
[U_Password] [varchar] (50) NOT NULL ,
[U_UserName] [varchar] (50) NOT NULL ,
[U_Company] [varchar] (100) NULL ,
[U_DepartmentID] [integer] NOT NULL ,
[U_Tel] [varchar] (50) NULL ,
[U_QQ] [varchar] (50) NULL ,
[U_Address] [varchar] (100) NULL ,
[U_Post] [varchar] (10) NULL ,
[U_UserGroup] [integer] NOT NULL ,
[U_Power] [varchar] (50) NULL ,
[U_Lock] [tinyint] NOT NULL ,
[U_Memo] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
2)创建一个多个Primary Key的table
CREATE TABLE [CodeDetail] (
[CdType] [nvarchar] (10) NOT NULL ,
[CdCode] [nvarchar] (20) NOT NULL ,
[CdString1] [ntext] NOT NULL ,
[CdString2] [ntext] NOT NULL ,
[CdString3] [ntext] NOT NULL,
PRIMARY KEY (CdType,CdCode)
) ;
3)创建索引
CREATE INDEX [IX_Account] ON [Account]([IsCheck], [UserName]);
还可以视图等等。
4.还有很有用的SQL
Select * from Sqlite_master
Select datetime('now')
Select date('now')
Select time('now')
以及很多函数,具体可以参考SQLite的wiki.
oh,还有就是看到有人说,好像成批插入的时候,启动事务,比不启动事务快n倍
还有就是尽量使用参数化的SQL,估计和商用DB一样能够自动Prepare.
===========
sqlite可以在shell/dos command底下直接执行命令:
sqlite3 film.db "select * from film;"
输出 HTML 表格:
sqlite3 -html film.db "select * from film;"
将数据库「倒出来」:
sqlite3 film.db ".dump" > output.sql
利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):
sqlite3 film.db < output.sql
在大量插入资料时,你可能会需要先打这个指令:
begin;
插入完资料后要记得打这个指令,资料才会写进数据库中:
commit;
;
————————————
System.Data.Sqlite入手。。。
首先import/using:
代码
using System.Data.SQLite;
Connection和Command:
代码
private SQLiteConnection conn;
private SQLiteCommand cmd;
连接db:
代码
conn = new SQLiteConnection("Data Source=c:\\test.db");
conn.Open();
INSERT/UPDATE:
代码
cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO user(email,name) VALUES ('email','name')";
cmd.ExecuteNonQuery();
cmd.CommandText = "UPDATE userSET name = 'Codelicious' WHERE ID = 1";
cmd.ExecuteNonQuery();
SELECT:
代码
cmd.CommandText = "SELECT ID, name FROM user";
SQLiteDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("ID: " + reader.GetInt16(0));
Console.WriteLine("name: " + reader.GetString(1));
}
}
—
sqlite是最近比较火的一个小型embeddable RDBMS。 用C实现的,开源,memory footprint非常小,而且对不同的语言有很多wrapper支持。
在.NET中使用sqlite,其实很简单,主要是找个.NET的wrapper。看了几个,最终选了phpguru的SQLite.NET
把sqlite.dll和SQLiteClient.dll放在.NET的current path下面,在项目的references中添加SQLiteClient.dll
程序中引用
c# 代码
using SQLite.NET;
使用方法,打开db:
c# 代码
try
{
Console.WriteLine("opening db…");
// Open database
SQLiteClient db = new SQLiteClient("c:\test.db");
}
catch (SQLiteException e)
{
Console.WriteLine("Fatal error: {0}", e.Message);
return;
}
select应用:
c# 代码
ArrayList tables = db.GetColumn("SELECT name FROM sqlite_master WHERE type = 'table'");
foreach (string tableName in tables)
{
Console.WriteLine("\t" + tableName);
}
其他update,insert,delete都支持得不错。 sqlite小巧玲珑,用起来十分方便。
Google Gears和Adobe AIR都在使用sqlite,看来必有其过人之处。。。
—
SQLite 作为一个轻量级嵌入式数据库,还是非常好用的。雨痕极力推荐~~~~~~
今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!
下面是他发给我的测试代码。我晕~~~~~~
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <——————-")。
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
// 创建数据库文件
File.Delete("test1.db3");
SQLiteConnection.CreateFile("test1.db3");
DbProviderFactory factory = SQLiteFactory.Instance;
using (DbConnection conn = factory.CreateConnection())
{
// 连接数据库
conn.ConnectionString = "Data Source=test1.db3";
conn.Open();
// 创建数据表
string sql = "create table [test1] ([id] INTEGER PRIMARY KEY, [s] TEXT COLLATE NOCASE)";
DbCommand cmd = conn.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
// 添加参数
cmd.Parameters.Add(cmd.CreateParameter());
// 开始计时
Stopwatch watch = new Stopwatch();
watch.Start();
DbTransaction trans = conn.BeginTransaction(); // <——————-
try
{
// 连续插入1000条记录
for (int i = 0; i < 1000; i++)
{
cmd.CommandText = "insert into [test1] ([s]) values (?)";
cmd.Parameters[0].Value = i.ToString();
cmd.ExecuteNonQuery();
}
trans.Commit(); // <——————-
}
catch
{
trans.Rollback(); // <——————-
throw; // <——————-
}
// 停止计时
watch.Stop();
Console.WriteLine(watch.Elapsed);
}
执行一下,耗时 0.2 秒。这差距是不是太大了点?
为什么只是简单启用了一个事务会有这么大的差距呢?
很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,
这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
阅读全文
相信不少朋友升级或者安装了WordPress 3.4 版本以上会 发现运行Wordpress的时候, 登入后台想更换新的主题时候,
居然无法显示主题, 后台只显示:
You only have one theme installed right now. Live a little! You can choose from over 1,000
free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes
tab above.
截图:
于是在百度上面搜索了相关问题的解决方法, 发现找不到相关的解决方案, 只能跑去谷歌上面搜索英文相关问题解决方案.但
是找了两天时间, 今天无意间把上面的”You Onlu have one theme installed right now.”放在谷歌里面搜索了一下, 终于找
到了答案. 答案是在服务器或者VPS上面的”php.ini”里面的函数中的disable_funcions = 后面的"scandir"去掉就行了.
在LNMP的环境下:
运行命令: vi /usr/local/php/etc/php.ini
搜索 “scandir” 然后将这个删除掉,顺便把”逗号”也删除了,然后保存退出
最后重启LNMP: /root/lnmp restart
这样就可以显示了.
阅读全文
其实很简单的
涉及到还原的其实就3个文件
config.php sys_data_done.php sys_data_revert.php
我把他们都复制了,重命名以别的名字开头,比如变成
xh_config.php xh_sys_data_done.php xh_sys_data_revert.php
然后打开 xh_config.php去掉验证
大概34行后面变成
//检验用户登录状态
/* $cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
header(“location:login.php?gotopage=”.urlencode($dedeNowurl));
exit();
}
if($cfg_dede_log==’Y’)
{ */
$s_nologfile = ‘_main|_list’;
$s_needlogfile = ‘sys_|file_’;
$s_method = isset($_SERVER[‘REQUEST_METHOD’]) ? $_SERVER[‘REQUEST_METHOD’] : ”;
$s_query = isset($dedeNowurls[1]) ? $dedeNowurls[1] : ”;
$s_scriptNames = explode(‘/’, $s_scriptName);
$s_scriptNames = $s_scriptNames[count($s_scriptNames)-1];
$s_userip = GetIP();
/* if( $s_method==’POST’ || (!preg_match(“#”.$s_nologfile.”#i”, $s_scriptNames) && $s_query!=”) || preg_match(“#”.$s_needlogfile.”#i”,$s_scriptNames) )
{
$inquery = “INSERT INTO `#@__log`(adminid,filename,method,query,cip,dtime)
VALUES (‘”.$cuserLogin->getUserID().”‘,'{$s_scriptNames}’,'{$s_method}’,'”.addslashes($s_query).”‘,'{$s_userip}’,'”.time().”‘);”;
$dsql->ExecuteNoneQuery($inquery);
}
} */
然后修改
xh_sys_data_done.php
把13行的引用改成我们新弄成的
require_once(dirname(__FILE__).’/xh_config.php’);
然后把后面的权限检查去掉
//CheckPurview(‘sys_Data’);
再替换一下文件名 把sys_data_done.php全替换成xh_sys_data_done.php
继续修改xh_sys_data_revert.php
前面是一样的
把13行的引用改成我们新弄成的
require_once(dirname(__FILE__).’/xh_config.php’);
然后把后面的权限检查去掉
//CheckPurview(‘sys_Data’);
然后我把这行引用给去掉
//include DedeInclude(‘templets/sys_data_revert.htm’);
后面加个?>结束PHP
然后打开templets\sys_data_revert.htm吧里面内容全复制到xh_sys_data_revert.php的刚才弄的?>后面
修改其中一个sys_data_done.php为xh_sys_data_done.php
就OK了
使用方法:
直接访问后台/xh_sys_data_revert.php开始还原吧
阅读全文
奶奶的,前些日子才给两个站换的新主题,今天上去一看,统计里怎么PV为0呢?
然后翻墙看了一下,两个站都被挂马了,挂到竟然不能访问,说是什么缺少大括号
一看主题的index.php上面一串乱码
再仔细看看根目录的index.php还是一样上面有加密的乱码
然后我把乱码全删除了,浏览我的站,结果还是不能显示
看来不知道是哪个文件被修改了,手工查询太费时间了
干脆用本地的文件覆盖算了,登陆本地程序后台一看,竟然有新版本的WP,不会是发现漏洞才升级的吧
但是我用其他主题的站却没事,估计还是刚换上的主题的问题,看来以后我只能自己修改官方主题来用了
难看是难看,相对安全一点吧~
阅读全文
https://me.alipay.com/lcxde
哈哈~其实也挺不错的
直接叫对方填一下就可以收款了~
以后卖模板方便了
阅读全文
查资料花了好几天
然后想新主题又花了一点时间
最后动手写,才发现自己脑子里还是一片空荡荡的,所有资料在脑子里乱成一锅粥
然后就一直处于抓破头皮写不出几个字的状态
拖拖拉拉写了3天,明天就要交了,那个急啊
实在想不出怎么写了,上网搜索了一下,发现还是有蛮多例子的
有了例子就好办多了
COPY过去,然后开始缝缝补补
到现在终于完工了
TNND,真是伤神啊
看来以后写文章还是先得找到范文,闭门造车真的太难弄了
阅读全文
以前老婆买那辆3K块不到半年就被偷了
于是买了个破车,以为不会有贼会看上
没想到最终还是给偷了
感觉这个贼真的有点饥不择食了
对面楼那里前几天晚上7点钟左右也是有贼入室偷东西
当时主人还刚好在楼下带小孩玩耍
他的家人,貌似是他母亲,可能是发现家里被翻乱了,就到窗口和他对话,可能是叫他报警
10来分钟后警察到了,估计贼还没跑远,就对整栋楼进行搜索
结果上上下下,里里外外搜索了2个小时,却是一无所获,现在的LJ警察真多
明明屋主说堵住了,贼不可能跑下楼
可警察还是没找到
才没过几天,我的助力车就被偷了
尤其诧异的是,我早上去上班,发现出门不远的路上空荡荡啥都没有
中午回来发现路中间多了一辆助力车,感觉有点像我楼下的车
仔细一看,车头的锁完全被撬碎了
估计贼没启动得了,就丢那了
非常奇怪的是我上午出去时没看见,怎么到中午才发现
难道那些贼是隔壁家的,晚上偷车以后转移到隔壁家,然后早上才开走
不管怎么样,这些只是我的猜测而已
那么LJ的警察,要他们帮找会车是绝无半点希望的事情,干脆就放弃了
重新买一辆算了
本来已经够钱买相机的,看来只能无限期延长了
阅读全文
其实就是个数据库编辑工具,不过这个功能火车头竟然要收费
对于一向铁公鸡的我来说还不如自己做一个
前面用DELPHI做那个貌似出问题了~
前段时间用C#做了一个,感觉也不是很难
今天晚上完善了一下,左边加入了任务选择,双击就可以打开任务,进行数据编辑了
这下方便多了,不用去选文件夹了,那些文件夹都是以任务ID命名的,每次选文件夹都得到火车头里面看ID
确实比较麻烦~
今晚花了点时间解决了这个问题
至于分组,懒得弄了~能用就先用着了,以后心情好了再说
阅读全文