2013年7月31日星期三

iframe 去边框 - zyliang

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
iframe 去边框 - zyliang  阅读原文»

网上查了好久,蛋疼,总是没有一种让我用着舒心的方法。

不小心在一个插件里面看到一写法,很不错。特记录。

html部分:

<div class="rightpar">
   <IFRAME ID="testIframe" Name="testIframe" FRAMEBORDER=0 SCROLLING=AUTO width=100% height=600px SRC="*****.html">
   </IFRAME>
</div>

注释:红色‘***.html’,是iframe默认的指向地址。

js部分:

<script>
var demoIframe; //全局变量
$(function(){
  demoIframe = $("#testIframe");
  demoIframe.bind("load", loadReady);
  $('.child_node').click(function(){ //点击页面元素,更换iframe内容
    var server = "<?php echo Yii::app()->request->hostInfo; ?>";
    var link = $(this).attr('val'); //页面元素里放目标url
    demoIframe.attr("src", server+link);
    return false;
  });
  return false;
});
function loadReady() { //关键函数,获取iframe内容的高度并设置,如果对宽度有要求,可以做相应修改
  var bodyH = demoIframe.contents().find("body").get(0).scrollHeight,
  htmlH = demoIframe.contents().find("html").get(0).scrollHeight,
  maxH = Math.max(bodyH, htmlH), minH = Math.min(bodyH, htmlH),
  h = demoIframe.height() >= maxH ? minH:maxH ;
  if (h < 530) h = 530;
  demoIframe.height(h);
}
</script>


本文链接:http://www.cnblogs.com/zhongyuan/p/3229647.html,转载请注明。

Oracle 数据库数据排名函数:rank() 和dense_rank() 。 - Small-bai  阅读原文»

Oracle 数据库数据排名函数: rank() 和dense_rank() 。

--------------------------------------------间断排名(也称强制排名) rank() --------------------------------------------


SQL: SELECT empno,ename,sal,rank() over(ORDER BY nvl(sal,0) DESC) x FROM emp;

EMPNO

ENAME

SAL

X

7369

SMITH

8000

1

7839

KING

8000

1

7782

CLARK

7450

3

7788

SCOTT

7000

4

7698

BLAKE

6850

5

7902

FORD

6000

6

7566

JONES

5975

7

7499

ALLEN

5600

8

7844

TURNER

5500

9

7521

WARD

5250

10

7654

MARTIN

5250

10

7876

ADAMS

4100

12

9000

xiaoming

13

--------------------------------------------不间断排名 dense_rank() -----------------------------------------------


SQL: SELECT empno,ename,sal,dense_rank() over(ORDER BY nvl(sal,0) DESC) x FROM emp;

EMPNO

ENAME

SAL

X

7369

SMITH

8000

1

7839

KING

8000

1

7782

CLARK

7450

2

7788

SCOTT

7000

3

7698

BLAKE

6850

4

7902

FORD

6000

5

7566

JONES

5975

6

7499

ALLEN

5600

7

7844

TURNER

5500

8

7521

WARD

5250

9

7654

MARTIN

5250

9

7876

ADAMS

4100

10

9000

xiaoming

11


本文链接:http://www.cnblogs.com/small-bai/p/3229640.html,转载请注明。

阅读更多内容

SharePoint2013工作流workflow manager配置

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
SharePoint2013工作流workflow manager配置  阅读原文»

每日博报 精彩不止一点关闭

用户名:cdsi
文章数:12
评论数:2
访问量:420
无忧币:82
博客积分:180
博客等级:2
注册日期:2013-07-24

SharePoint2013工作流workflow manager配置

SharePoint2013版本的工作流较sharepoint 2010变化较大,将工作流部分从sharepoint中分离出来为单独的服务,通过与sharepoint关联使用。

SharePoint2013安装完成后,默认只能使用sharepoint2010版本的工作流,并不能直接使用2013版本的工作流,如下图所示:

image

如果要启用2013工作流,则需要安装 workflow manager 1.0

在web 平台安装程序中,搜索work flow 找到workflow manager 1.0进行安装

image

安装完成后会启动配置界面,点击使用"配置向导",进入"workflow manager 配置向导",如下图

image

在"证书生成密钥"框中输入一个密钥,该密钥用于多个服务器加入同一工作流场时

image

image

如上图,配置完成后,需将流程服务器与sharepoint服务器进行关联

  1. 登录到 SharePoint Server 2013 场中将 工作流管理器 安装到的计算机上。

  2. 以管理员身份打开 SharePoint Management Shell。通过右键单击"SharePoint 2013 Management Shell" 并选择"以管理员身份运行"完成此操作。

  3. 运行 Register-SPWorkflowService cmdlet。
    示例
    Register-SPWorkflowService SPSite http://sp2013 WorkflowHostUri "http://sp2013-workflow:12291" AllowOAuthHttp
    此处需要注意,工作流服务,默认端口,http为12291,https为12290,也可以去IIS管理器中查看

如果流程服务器在单独的服务器中,则需要在每台sharepoint前端服务器上分别执行此命令。

image

参考:http://technet.microsoft.com/zh-cn/library/jj658588(office.15).aspx

分享至 一键收藏,随时查看,分享好友!
昵称:
登录快速注册
内容:
返回顶部

阅读更多内容

2013年7月29日星期一

ASP.NET Web API框架揭秘:路由系统的几个核心类型 - Artech

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
ASP.NET Web API框架揭秘:路由系统的几个核心类型 - Artech  阅读原文»

虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除了对System.Web.dll程序集的依赖,实现在ASP.NET Web API框架中的URL路由系统亦是如此。也就是说,ASP.NET Web API核心框架的URL路由系统与ASP.NET本身的路由系统是相对独立的。但是当我们采用基于Web Host的方式(定义在程序集System.Web.Http.WebHost.dll)将ASP.NET Web API承载于一个ASP.NET Web应用的时候,真正实现URL路由的依然是ASP.NET本身的路由系统,Web Host实际上在这种情况下起到了一个“适配”的作用,是两个相对独立的路由系统的“适配器”。我们先来讨论一下实现在ASP.NET Web API框架中这个独立的路由系统是如何设计的。

目录
一、HttpRequestMessage与HttpResponseMessage
二、HttpRouteData
三、HttpVirtualPathData
四、HttpRouteConstraint
五、HttpRoute
六、HttpRouteCollection
七、注册路由映射
八、缺省路由变量

一、HttpRequestMessage与HttpResponseMessage

ASP.NET Web API框架通过具有如下定义的类型HttpRequestMessage表示某个HTTP请求的封装。HttpRequestMessage的属性Method和RequestUri分别表示请求采用的HTTP方法和请求地址,它们可以在相应的构造函数中直接被初始化,而默认采用的HTTP方法为HTTP-GET。

1: public class HttpRequestMessage : IDisposable 2: { 3: public HttpRequestMessage(); 4: public HttpRequestMessage(HttpMethod method, string requestUri); 5: public HttpRequestMessage(HttpMethod method, Uri requestUri); 6: 7: public HttpMethod Method { get; set; } 8: public Uri RequestUri { get; set; } 9: public HttpRequestHeaders Headers { get; } 10: public IDictionary<string, object> Properties { get; } 11: public Version Version { get; set; } 12: public HttpContent Content { get; set; } 13: 14: public void Dispose(); 15: }

只读属性Headers表示的System.Net.Http.Headers.HttpRequestHeaders对象具有一个类似于字典的数据结构,用于存放HTTP请求报头。通过利用字典类型的只读属性Properties,我们可以将任意属性附加到一个HttpRequestMessage对象上。类型为System.Version的Version属性表示请求的HTTP版本,默认采用的HTTP版本为HTTP 1.1(HttpVersion.Version11)。

HttpRequestMessage具有一个Content属性封装了HTTP消息主体相关的信息,其类型为HttpContent。如下面的代码片断所示,HttpContent是一个抽象类,它定义了CopyToAsync和ReadAsByteArrayAsync两组方法进行主体内容的读写操作。HttpContent的Headers属性返回一个System.Net.Http.Headers.HttpContentHeaders对象代表HTTP消息主体内容相关的报头列表,比如表示主题内容编码和长度的“Content-Encoding”和“Content-Length”等。

1: public abstract class HttpContent : IDisposable 2: { 3: //其他成员 4: public Task<byte[]> ReadAsByteArrayAsync(); 5: public Task<Stream> ReadAsStreamAsync(); 6: public Task<string> ReadAsStringAsync(); 7: 8: public Task CopyToAsync(Stream stream); 9: public Task CopyToAsync(Stream stream, TransportContext context); 10: 11: public HttpContentHeaders Headers { get; } 12: }

HTTP响应的基本信息本封装到具有如下定义的HttpResponseMessage类型中。它的RequestMessage表示与之匹配的请求。属性StatusCode和表示响应状态码以及辅助表示响应状态的文字。布尔类型的属性IsSuccessStatusCode用于判断是否属性一个成功的响应,所谓“成功的响应”指的是状态码在范围[200,299]以内的响应。类型为HttpResponseHeaders的属性Headers表示回复消息的HTTP报头列表,而Version代表HTTP消息的版本,默认采用的HTTP版本依然是HTTP 1.1(HttpVersion.Version11)。响应消息主体内容的读取和写入,以及相关内容报头的获取可以通过属性Content表示的HttpContent来完成。

1: public class HttpResponseMessage : IDisposable 2: { 3: //其他成员 4: public HttpRequestMessage RequestMessage { get; set; } 5: 6: public HttpStatusCode StatusCode { get; set; } 7: public string ReasonPhrase { get; set; } 8: public bool IsSuccessStatusCode { get; } 9: public HttpResponseHeaders Headers { get; } 10: public Version Version { get; set; } 11: public HttpContent Content { get; set; } 12: }

二、HttpRouteData

当我们调用某个Route的GetRouteData的时候,如果指定的HTTP上下文具有一个与自身URL模板相匹配,同时满足定义的所有约束条件的情况下会返回一个RouteData对象。ASP.NET的路由系统通过RouteData对象来封装解析出来的路由数据,其核心自然是通过Values和DataTokens属性封装的路由变量。

ASP.NET Web API用于封装路由数据的对象被称为HttpRouteData,其类型实现了具有

关于Ajax无刷新分页技术的一些研究 c# - 鹿4  阅读原文»

小弟新手,求大神有更好的解决方案,指教下~

以前做项目,用过GridView的刷新分页,也用过EasyUI的封装好的分页技术,最近在老项目的基础上加新功能,迫于需求,自己没事琢磨了个Ajax无刷新分页技术,

也在百度看了下, 写的都不是很系统,在这里写个系统的,简单的,方便大家研究下。

系统支持 和数据库交互的无刷新分页、删除后的 当前页 定位、在查询条件下的 分页 ,有数据,显示删除,列表,没有只显示新增按钮。

我写的这个无刷新分页用的最重要的sql 语句就是

sql = @"select * from (select ROW_NUMBER() over (ORDER BY CREATEDATE) rownum,a.goodsid,a.goodsname,a.itemname,a.price FROM GoodsOrderAccept a " + selectsql + ") t where t.rownum>='" + ((page - 1) * 10 + 1) + "' and t.rownum<='" + page * 10 + "'";

相信有些大神,看到这里,已经知道我采取的什么方法了,重点就是 ROW_NUMBER(),利用它和Page变量,从前台页面请求不同的页码,显示不同的数据

下面看一下项目的目录结构:

List.aspx就是页面,Page.ashx就是实现的分页技术,JSONObject.cs在后台对JSON序列化成对象。

List.aspx页面执行如下:

如页面所示,支持checkbox,单删除,多删除.

下面开始贴代码:

List.aspx页面代码如下:

1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="AjaxPage.List" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
7 <title>分页功能演示</title>
8 <script type="text/javascript">
9 $(function () {
10 //初始化首页数据以及各种变量
11 $.ajax({
12 type: "POST",
13 url: "Page.ashx",
14 dataType: "json",
15 data: {
16 action: "getFirstPageAndVariable"
17 },
18 success: function (data) {
19 if (data.outStr != "" && data.pagecount != "0") {
20 //有数据加载数据列表,显示数据列表,显示删除按钮,以及分页按钮
21 document.getElementById('btn_delete').style.display = "";
22 document.getElementById('div_list').style.display =阅读更多内容

绑定企业自有域名到Office 365订阅(一)

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
绑定企业自有域名到Office 365订阅(一)  阅读原文»

每日博报 精彩不止一点关闭
绑定企业自有域名到Office 365订阅(一)

购买了O365订阅后,系统会分配一个形如xxx.onmicrosoft.com的域名给O365使用。这个域名既不好记,也不能对外代表企业,所以一般我们都会用自有域名替换掉这个域名,这个过程就是绑定企业自有域名到Office 365订阅。

要完成此任务,需要分3步走:

一、指定一个域名并确认所有权。

二、添加用户并分配许可证。

三、设置域名用途并配置DNS。

截图170

下面就让我们一步一步地将自有域名与O365订阅绑定在一起。首先,打开O365的管理中心,点选左侧"域",在结果栏中会看到目前绑定域名状态,如下图:

截图169

图中所示就是创建O365订阅时系统分配的一个二级域名,要想添加自有域名,请点击"添加域"超链接,会弹出上边3步走向导,点击第一步中的超链接"指定一个域名并确认所有权",会弹出添加域向导,如下图:

截图171

在此处输入自有域名并点击"下一步",进入确认所有权的步骤,如下图:

截图172

在DNS提供商的下拉列表中选择为你提供域名解析的服务商的名称,系统根据你的选择会打开设置向导引导你完成DNS设置以确认你对该域名的所有权。这个步骤不会影响到域名的解析,只是以修改域名记录的方式来证明你的所有权。如下图,我选择的是DNSPOD。

截图173截图174

基本步骤是:首先登录到你的域名解析商的站点中,然后为你的域名添加一条TXT记录,按下图中所给的值创建:

截图176

创建过程就是将图中a、b、c、d、e中给出的值填入对应位置,然后点击"新增"按钮即可。添加该条TXT记录后,需要等待15分钟让所做的更改生效,之后再到上一步中点击"完成,现在验证"按钮。O365就会到DNS系统中查询刚刚创建的记录,如果查询成功就会弹出下图所示内容:

截图178

至此,对于要绑定域名的所有权验证完毕。接下来,进入第二步"添加用户并分配许可证"。在这步中,既可以添加单个用户,也可以通过CSV文件批量添加用户,还可以利用AD同步来添加用户,当然如果你现在不想添加也可以。需要注意的是,在为用户选择域时要选择我们刚刚添加到订阅中的域。如下图:

截图179

完成这一步后,点击"下一步"进入"设置域名用途并配置DNS"。

(未完,待续)

最小化centos安装mysql5.6问题集锦  阅读原文»

最小化centos安装mysql5.6问题集锦

本文系统Centos6.0

其实一般本人安装自己使用的系统的时候都会安装软件工作站,然后进行更新所有包;安装其他软件的时候少了很多的依赖关系,少了很多麻烦;这里本人故意安装最小化的系统进行源码包安装mysql5.6;只为记录其中遇到的问题进行解决;

1、安装yum源;

[root@bogon ~]# rpm -vhi ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm

2、安装编译环境:

[root@bogon ~]# yum install wget gcc* make -y
[root@bogon ~]# ls *gz
cmake-2.8.11.2.tar.gz mysql-5.6.12.tar.gz

3、首先安装cmake

tar zxvf cmake-2.8.11.2.tar.gz
cd cmake-2.8.11.2

4、安装mysql

useradd -s /sbin/nologin mysql
chown -R mysql.mysql /data
tar zxvf mysql-5.6.12.tar.gz
cd mysql-5.6.12
[root@bogon mysql-5.6.12]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL:STRING=bundled -DWITH_ZLIB:STRING=bundled -DWITH_LIBWARP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all

提示报错;

安装相关包

yum install openssl openssl-devel ncurses ncurses-devel -y

重新编译

rm -rf CMakeCache.txt
[root@bogon mysql-5.6.12]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL:STRING=bundled -DWITH_ZLIB:STRING=bundled -DWITH_LIBWARP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

5、调整lib库路径:将mysql的库文件路径:"/usr/local/mysql/lib/mysql" 加入带系统的库文件搜索路径中

[root@bogon mysql]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib

ldconfig //刷新,使修改生效

6、设置mysql程序的执行路径:

[root@bogon mysql]# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
[root@bogon mysql]# source /etc/profile

7、将mysql的man文档输入到系统手册;

2013年7月27日星期六

iOS6 代码实现安装ipa

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
iOS6 代码实现安装ipa  阅读原文»

用户名:chenjohney
文章数:5
评论数:0
访问量:227
无忧币:114
博客积分:80
博客等级:1
注册日期:2011-12-17

iOS6 代码实现安装ipa

在使用91助手的时候,下载应用的时候并没有弹出是否安装应用,所以91助手的实现有可能是通过代码来安装应用的,经过这两天的摸索(貌似效率有些低啊),最后实现了,整理了些资料,分享一下,如果有补充的,欢迎评论.

:需要在xcode中先把Command Line Tools装好。

一、破解Xcode,将项目生成无签名的app文件,这步很重要,若xcode不破解,使用ldid对权限进行修改时将卡住并失败。

Xcode破解链接:

<最简单破解Xcode,切换破解状态> http://chenjohney.blog.51cto.com/blog/4132124/1256600

二、使用private API,加载MobileInstallation 库,调用安装方法

h文件

  #import "dlfcn.h"  typedefint (*MobileInstallationInstall)(NSString *path, NSDictionary *dict, void *na, NSString *path2_equal_path_maybe_no_use);  

m文件

  - (int)IPAInstall:(NSString *)path  {      void *lib = dlopen("/System/Library/PrivateFrameworks/MobileInstallation.framework/MobileInstallation", RTLD_LAZY);      if (lib)      {          MobileInstallationInstall pMobileInstallationInstall = (MobileInstallationInstall)dlsym(lib, "MobileInstallationInstall");          if (pMobileInstallationInstall){              int ret = pMobileInstallationInstall(path, [NSDictionarydictionaryWithObject:@"User"forKey:@"ApplicationType"], nil, path);              dlclose(lib);              return ret;          }      }      return -1;  }  

三、将项目真机调试生成app, 使用ldid 修改app权限,ldid在文章中的附件中可以下载

新建一个配置文件entitlements.xml,粘贴以下内容

  <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  <plist version="1.0">      <dict>          <key>com.apple.private.mobileinstall.allowedSPI</key>          <array>              <string>Install</string>              <string>Browse</string>              <string>Uninstall</string>              <string>Archive</string>              <string>RemoveArchive</string>          </array>      </dict>  </plist>  

在终端中输出命令:

  ldid -Sentitlements.xml InstallApp.app/InstallApp  

查看结果:

  ldid -e InstallApp.app/InstallApp  

四、将app打包成ipa

新建一个文件夹,命名为"Payload"将刚刚添加好权限的APP文件放到这个文件夹中右键"压缩Payload",得到一个".zip"文件,将这个ZIP文件的后缀名改为".ipa"

本文出自 "漫步雨桥" 博客,请务必保留此出处http://chenjohney.blog.51cto.com/4132124/1256610

分享至 一键收藏,随时查看,分享好友!
昵称:
登录快速注册
内容:
请输入验证码:

阅读更多内容

HTML5项目笔记10:使用HTML5 IndexDB设计离线数据库 - 翁智华

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
HTML5项目笔记10:使用HTML5 IndexDB设计离线数据库 - 翁智华  阅读原文»

之前的文章()里面描述了HTML5 离线数据存储的Web SQL,一个基于SQLite 的离线数据库,不过W3C WebDatabase 规范中说这份规范不再维护了,取而代之的是IndexDB,一个NoSQL类型的数据库。

Html5Rocks把他们的优缺点做了比对,IndexDB综合看来有如下优点:

允许快速索引和搜索的对象,所以在HTML5 的 web应用程序中, 你可以有效管理你的数据和高效率的读/写操作。

W3C主推的离线数据库类型,逐渐替代Web SQL类型数据库,更新效率高并不断完善。

工作在异步模式下执行每步操作。让你使用高效率的的JavaScript事件驱动模块

现在我们来尝试使用这个IndexDB:

1、初始化声明

1 var dbName = "H5AppDB"; //数据库名称
2 var dbVersion = 2.0; //数据库版本
3 var tablename = "todo"; //表名

2、初始并实例化IndexDB数据上下文

1 //定义一个IndexDB方法集合对象
2 var H5AppDB = {};
3
4 //实例化IndexDB数据上下文,这边根据浏览器类型来做选择
5 var indexedDB = window.indexedDB || window.webkitIndexedDB ||window.mozIndexedDB;
6
7 if ('webkitIndexedDB' in window) {
8 window.IDBTransaction = window.webkitIDBTransaction;
9 window.IDBKeyRange = window.webkitIDBKeyRange;
10 }
11
12 H5AppDB.indexedDB = {};
13 H5AppDB.indexedDB.db = null;
14
15 //错误信息,打印日志
16 H5AppDB.indexedDB.onerror = function (e) {
17 log.debug(e);
18 };

3、打开数据库,初始化数据库,并创建存储对象

1 H5AppDB.indexedDB.open = function () {
2
3 //初始IndexDB
4 var request = indexedDB.open(dbName, dbVersion);
5
6 request.onsuccess = function (e) {
7 // Old api: var v = "2-beta";
8 log.debug("success to open DB: " + dbName);
9 H5AppDB.indexedDB.db = e.target.result;
10 var db = H5AppDB.indexedDB.db;
11 if (db.setVersion) {
12 console.log("in old setVersion: " + db.setVersion);
13 if (db.version != dbVersion) {
14 var req = db.setVersion(dbVersion);
15 req.onsuccess = function () {
16 if (db.objectStoreNames.contains(tablename)) {
17 db.deleteObjectStore(tablename);
18 }
19 var store = db.createObjectStore(tablename, { keyPath: "timeStamp" });//keyPath:主键,唯一性
20
21 var trans = req.result;
22 trans.oncomplete = function (e) {
23 console.log("== trans oncomplete ==");
24 H5AppDB.indexedDB.getAllTodoItems();
25 }
26 };
27 }
28 else {
29 H5AppDB.indexedDB.getAllTodoItems();
30 }
31 }
32 else {
33 H5AppDB.indexedDB.getAllTodoItems();
34 }
35 }
36
37 //如果版本不一致,执行版本升级的操作
38 request.onupgradeneeded = function (e) {
39 log.debug("going to upgrade our DB!");
Windows Phone 8初学者开发―第1部分:系列介绍 - zigzagPath  阅读原文»

您好,欢迎来到这个包含35课为Window Phone 8平台创建应用程序的系列教程。我叫Bob Tabor,在过去的11年中我一直在微软的网站和我自己的网站上(www.LearnVisualStudio.NET)创建针对微软开发工具和技术的视频讲座教程。

根据本系列的标题,本培训将针对“绝对初学者”,虽然这肯定正确,因为我们将从最基本的创建手机应用程序开始,但是您将看到我们将很快转到一些Windows Phone 8操作系统的新的和高级的特性。

本系列的推出是因为我之前的系列(Windows Phone 7 Development for Absolute Beginners,初学者Windows Phone 7开发)获得的积极的响应。我们完全重新设计了本系列教程,因此如果您看过那个教程,您将会观察到巨大的变化。

在观看本系列之前,我们假设您已经熟悉了C#如果不是这样,请暂时搁置几天本系列并去观看Channel9网站上的C# Fundamentals for Absolute Beginners。我在设计该系列时已将受众范围考虑为C#的初学者。在开始本系列之前的最低要求是您需要具备面向对象编程中有关类、属性、方法、可见性修饰符、集合、泛型集合等的基本知识。

我们将本系列课程设计为教程形式,也就是说本系列将通过演练创建两个全功能的应用步骤来指导您如何创建应用程序。希望这种方法能够帮助您理解在一个实际的应用程序场景中众多概念是如何进行相互的协同。为了理清基本的思路,我也将创建一些小的应用程序以说明一些概念。

我还将讨论操作系统和硬件要求,为了开始工作需要安装的软件,获取开发者许可,设计应用程序,提交至商店以及更多的事项。因此希望本教程能够成为Windows Phone 8平台开发者的一个很好的起点。

在向您展示我们将要在本系列中创建的应用程序之前,我们需要完成一些准备工作。此刻显示的屏幕是我的桌面。代码被加载到了visual studio中。视频以720p的高清格式录制,并且非常清晰。因此,如果您看不清屏幕上的文字,很可能是您的互联网连接不能处理高比特率的视频流。您最好的选择是使用在本视频下面的下载链接。您可以根据观看视频的目标设备下载不同格式和分辨率的文件。

接着您需要下载包含在zip文件中的素材及代码。我将确保该链接出现在本页面以及每一个显示本讲座视频的页面上。链接中有您需要包含在项目中的素材以及完成版本的应用程序,这样您就可以对我写的代码和您编写的代码进行比较。

最后,在Channel9网站上算是首次,我们提供了视频的文字和屏幕截图版本(它们出现在每个视频的下方)。虽然它们不是我在视频中所说的每一句话的记录,但是它们确实涵盖了完全相同的材料并提供了我输入的代码,因此您可以复制并粘贴它们到您的应用程序中。我提供该版本的初衷是为了方便有听力障碍和不将英语作为主要语言的人士。此外,它应该有助于日后的参考,您不必回头再次观看视频以回顾以前提及的某个想法或某项技术。

好的,那么我们将在本系列创建什么应用呢?

  • 名称为SoundBoard的演示应用程序
  • 名称为AroundMe的演示应用程序

在接下来的11个小时您将会一直听到我的声音,但这项工作实际上是多方协作的成果。首先是Channel9的Clint Rutkas,他是上述两个我们将要创建的应用程序背后的策划者。我想我们之间来来回回有过100封左右讨论各类代码细微差别的电子邮件,他很耐心并且非常乐于助人,不愧为本系列贡献最大的人。Windows Phone团队对这一努力提供了支持并使本系列能与读者见面。我认为在很大程度上是因为本系列的之前版本获得了各位Channel9忠实观众的热烈响应。因此,谢谢你们!

最后诺基亚和他们的开发人员顾问帮助我审核了素材。诺基亚加强了对Windows Phone 8平台及平台开发者的支持,并且我一直对他们做事的热情印象深刻。抽空看一看他们的网站:http://www.dvlup.com

他们提供一对一的支持,频繁的交互,竞赛奖品以及更多内容以使像你我一样的开发者更多地参与和思考如何协作以构建这个平台。您需要在www.dvlup.com网站上注册以便参与其中。

由此想到我钟爱的诺基亚Lumia 920。他毫无疑问是我拥有过的最酷的设备,请相信我,我也拥有一些在如今市场上可以得到的构建在其他平台之上的流行设备。如果您对Windows Phone 8开发感兴趣,虽然这并非是必需品,但是我想您会非常想拥有一部这样的手机。它不仅是一个优秀开发者构建应用程序的测试平台,而且是一个非常棒的设备。让我告诉您我最喜欢的一些特性:

  • 非常棒的相机—我的妻子不断地让我发送用我手机拍摄的照片,因为她的,嗯,她的功能较弱的手机,几乎不能与之比较,尤其是在弱光的情况下。
  • NFC—近场通信(Near Field Communications),与具备NFC功能的其他手机交换数据,不论该手机属于什么平台。
  • 固定—您可以将任何东西固定到开始页面,音乐、网站、应用程序....并且我可以找到那些用新的信息更新磁贴的应用程序,所以我不必打开应用就可以了解一些情况,例如查看天气或者我的日历,或查看假期的倒计时。
  • 无线充电—是的,您可以为几乎所有手机购买一个充电壳以实现这个功能,但是它内置于您的手机!
  • 语音命令—非常适合创建OneNote的代办事项或者当我在路上时发送消息。

另一个很酷的事情是该平台正在成长,每次在演示我手机的功能时,我都能改变他们的想法。我已经使我的家人和朋友确信当他们更新合约时,这就是他们的下一部手机。并且我刚阅读了一篇有关企业市场增长对应用程序开发者会带来什么的文章,它十分令人振奋。

http://www.windowsphone.com/en-US/business/for-business

那么您可能要问最好的功能是什么?我的看法是什么?我想那就是可以利用现有的C#、.NET和Windows运行时经验构建可以随时携带的应用程序。

是的,如果我想为另一个平台创建应用程序,我可以花几周甚至几个月时间学习一门新的语言,新的应用程序接口。或者我可以构建针对所有平台的应用程序,但是最终会错过只有Windows Phone 8操作系统才具备的一些关键新特性。这种想法很自然因此十分有趣。

所以如果您刚开始Windows Phone 8开发,我相信您很快就能分享到我此刻的兴奋心情。这个系列是快速提高的最好方法之一。

如果您在什么地方卡住了或者不理解某些内容,您可以在页面最底部的评论区域提出问题。Clint或我或者其他准备这份材料的人将帮助您解决问题并继续向前。

所以让我们在下一课中开始建立环境,然后迅速编写代码。下节课见。

整个系列的源代码:http://aka.ms/absbeginnerdevwp8

整个系列的PDF版本:http://aka.ms/absbeginnerdevwp8pdf


本文链接:http://www.cnblogs.com/zigzagPath/p/3220946.html,转载请注明。

阅读更多内容

2013年7月26日星期五

防火墙和深信服(SangFor SG 3.3R2)的误会

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
防火墙和深信服(SangFor SG 3.3R2)的误会  阅读原文»

用户名:sliang2012
文章数:4
评论数:11
访问量:2302
无忧币:374
博客积分:98
博客等级:1
注册日期:2012-03-04

防火墙和深信服(SangFor SG 3.3R2)的误会

首先说明一下公司的网络拓扑吧,如图:

网络很简单,四个vlan,防火墙和深信服单独一个vlan33,核心交换机除了必要安全配置外,对内网没有任何控制,路由都是自动生成,并且加了条默认路由下一跳是防火墙的lan口。

好了,下面描述一下问题,从我获得防火墙管理权限之后(以前都是上级在管理,出问题后我趁机接手了)发现每天都有一个重复事件,一个外网ip 1.2.3.4居然在我们内部网络一直向各台存在或者不存在的pc发送udp包,并且端口是999,防火墙发现异常把它deny了。有图如下:

我就奇怪了,去百度了一下这个ip是加拿大的,可是防火墙说得很清楚,是从1-Trusted 到 1-Trusted 内网口的,那就一定是内部的问题了,由于查到999端口是已知的木马Deep Throat(深喉)利用的端口,所以怀疑是中了木马了,而我们内网一直有木马和病毒我是知道的,而且用wireshark抓包后发现好多机器都发这个包。所以我在域中部署了360企业版(这在我另外的博客中有写到)杀毒后以为就解决了,杀了好多病毒和木马,但是就是没有Deep Throat,也没有用到999端口的,所以问题依旧!

因为好多机器都在发,而且很随机,所以一台台分析有点麻烦,并且只在刚上班的时候很多人开机的是发的最多,我就想把它禁掉试试看,所以我在h3c核心交换机上每个vlan的out方向做了禁止1.2.3.4的acl,结果好多机器过一会就断网了,而也有不少正常的,这就让我纳闷了,由于生产环境,虽然下班了,还是有不少人在办公,我立马把acl撤销了。后来我想了一下把标准acl拒绝原地址为1.2.3.4的包应用到各个vlan的in的方向,并且除了防火墙和深信服的vlan没有应用,结果毫无影响力,网络也正常,但是1.2.3.4还是出现了,豁然开朗了,防火墙的策略对自身没有任何影响,如果问题出在防火墙那防火墙肯定不会deny掉1.2.3.4,所以问题只能是在深信服上面了,打电话给深信服,他们的人说:"你们过期很久了,要购买服务,不然什么都不说"。公司为了省钱,而且以前的网管估计也没有这种意识,买回来就没动过,软件版本还是买回来的时候的样子

那就只能自己去寻找答案了,我和我的另外一个同事讨论了一下,发现有个很可疑的地方,就是深信服行为管控的时候,用户必须安装一个控件才能上网,于是跑到那些可以电脑上面一看,问题明白了

所有运行ingress.exe的都在向1.2.3.4发包,而深信服本身居然隐藏了一个1.2.3.4的ip,真不明白深信服公司为什么会用这么一个外网的ip来收发这些包,而不用我们配置给它的内网管理ip呢??搞得防火墙误报!而且在操作手册上面也从来没有提到过有这个ip。这里没有任何贬低深信服的意思,只是如实说而已,而且我觉得深信服做行为管控还是很不错的,很方便,也很简单!如果哪位朋友用深信服的帮留意一下你们是否也有这个问题,帮问问厂商^_^!

本文出自 "愤怒的菜鸟" 博客,谢绝转载!

分享至 一键收藏,随时查看,分享好友!
昵称:
登录快速注册
内容:

有关puppet agent端三种备份恢复方案探讨研究  阅读原文»

有关puppetagent端备份恢复方案探讨:

备份方案一、通过自定义facter结合元素backup进行备份恢复

一、facter部署

1、创建目录结构

[root@puppetservermodules]#mkdirpublic/{modules,manifests,files,lib/facter}-p

2、打开模块中的插件功能

[root@puppetserverpublic]#vim/etc/puppet/puppet.conf

[main]

pluginsync=true

3、编写自定义fact

[root@puppetserverpublic]#vim/etc/puppet/modules/public/lib/facter/backup_date.rb

#backup_date.rb

#

Facter.add("backup_date")do

setcodedo

Facter::Util::Resolution.exec('/bin/date+%Y%m%d%H%M%S')

end

end

4、建立环境变量(测试用)

[root@puppetserverpublic]#exportFACTERLIB=/etc/puppet/modules/public/lib/facter

5、测试fact(如果不正常,会显示调试信息)

[root@puppetserverpuppet]#facterbackup_date

6、客户端查看facter是否被下载生效

notice:StartingPuppetclientversion2.7.21

info:Retrievingplugin

notice:/File[/var/lib/puppet/lib/facter/backup_date.rb]/ensure:definedcontentas'{md5}91d97be10a35ab7971f77a2be9696031'

info:Loadingdownloadedplugin/var/lib/puppet/lib/facter/backup_date.rb

info:Loadingfactsin/var/lib/puppet/lib/facter/backup_date.rb

info:Cachingcatalogforagent1.bsgchina.com

info:Applyingconfigurationversion'1374652447'

notice:Finishedcatalogrunin1.47seconds

info:Retrievingplugin

info:Loadingfactsin/var/lib/puppet/lib/facter/backup_date.rb

info:Cachingcatalogforagent1.bsgchina.com

info:Applyingconfigurationversion'1374652447'

notice:Finishedcatalogrunin1.36seconds

[root@agent1ssh]#ll/var/lib/puppet/lib/facter/

total8

-rw-r--r--1rootroot138Jul2416:13backup_date.rb

[root@agent1ssh]#

二、使用backup调用自定义变量

1、在模块的config.pp文件中添加元素backup

[root@puppetservermanifests]#vim/etc/puppet/modules/ssh/manifests/config.pp

classssh::config{

file{$ssh::params::ssh_service_config:

ensure=>present,

owner=>'root',

group=>'root',

mode=>0440,

source=>"puppet:///modules/ssh/etc/ssh/sshd_config",

backup=>".$backup_date.bak",\\添加信息

require=>Class["ssh::install"],

notify=>Class["ssh::service"],

}

}

2、在节点查看对应目录下是否有按日期备份的文件

[root@agent1ssh]#llsshd*

-rw-r-----1rootroot3134Jul2416:20sshd_config

-r--r-----1rootroot3190Jul2416:17sshd_config.20130724162024.bak

-r--r-----1rootroot3173Jul2416:20sshd_config.20130724162039.bak

方案二、通过filebucket实现备份的集中化管理,通过节点或者puppetserver进行恢复

1、在site.pp中添加filebucket资源

[root@puppetserverssh]#vim/etc/puppet/manifests/site.pp

import'nodes/*'

$puppetserver='puppetserver.bsgchina.com'

filebucket{'main':

path=>false,#设置agent节点本地不需要保存

#path=>"/var/lib/puppet/databackup",

server=>'puppetserver.bsgchina.com'#设置将文件更改过之前的版本保存到远程服务器puppetserver.bsgchina.com

}

2、在puppetmaster上修改模块配置文件

[root@puppetserverssh]#vim/etc/puppet/modules/mysql/manifests/config.pp

classmysql::config{

file{"/etc/my.cnf":

ensure=>present,

owner=>'mysql',

group=>'mysql',

mode=>0644,

source=>"puppet:///modules/mysql/etc/my.cnf",

backup=>'main',#设置backup备份方式为之前site.pp中定义的main方式

#backup=>".$backup_date.bak",

require=>Class["mysql::install"],

notify=>Class["mysql::service"],

}

file{"/var/lib/mysql":

group=>'mysql',

owner=>'mysql',

recurse=>'true',

require=>File["/etc/my.cnf"],

}

}

3、修改测试文件模拟新版本发布

vim/etc/puppet/modules/mysql/files/etc/my.cnf

4、节点进行监听

[root@agent1ssh]#puppetagent--server=puppetserver.bsgchina.com--verbose--no-daemonize

info:Retrievingplugin

info:Loadingfactsinbackup_date

阅读更多内容