解除咒语的还是咒语,Code.org把Flappy Bird改成编程课了 | 36氪.

解除咒语的还是咒语,Code.org把Flappy Bird改成编程课了
点击这里可以练习编程哦。

解除咒语的还是咒语,Code.org把Flappy Bird改成编程课了 | 36氪.

点击这里可以练习编程哦。

GAppProxy 是一个免费开源的HTTP Proxy代理上网软件,使用Python编写,运行于Google App Engine上,因此不需要我们搭建专门的服务器。GAppProxy 比较适合于个人使用,自己管理,自己使用,依托于Google的网络,代理上网比较稳定可靠,速度非常快。
这篇文章将详细介绍如何搭建安装GAppProxy ,以及如何通过GAppProxy 来代理上网。
因为GAppProxy基于Google App Engine,所以首先需要准备一个google账号(即gmail账号)。
一、申请GAE空间并创建新的的app_id:
1.打开浏览器,输入http://appengine.google.com/,输入gmail用户密码登入。

图:登录Google账户
2.点击“Create an Application”。

图:点击“Create an Application”
3.申请GAE需要用手机认证,输入自己的手机号,注意前面需要写+86。

图 :填写手机号码
4.手机收到验证码后输入验证码,验证成功后GAE申请完成。

图:填写验证码
5.创建新application identity,比如这里我使用了gappproxy200,注意记下该application identity,后面还会再用到。

图:填写应用程序名称

图:创建成功
二、部署GAppProxy服务器:
1. 从GAppProxy项目下载页http://code.google.com/p/gappproxy/downloads/list 下载服务器源码包+自动部署工具,即uploader-2.0.0-win.zip(若不能下载单击这里)。
2. 解压下载文件,双击执行该目录下的uploader.exe,在AppID提示后输入刚才创建的app_id,然后分别按提示输入自己的gmail用户名和密码(注意,输入密码时不会有任何显示)。

3.等待直到出现如下图的“ready to…”字样,表示部署完成。

4.在浏览器中输入http://xxx.appspot.com/fetch.py ,注意将其中的xxx换成刚才创建的app_id,如果显示如下图,说明服务器已经生效,否则可以多刷新几次试试 !

三、安装客户端:
1.从GAppProxy项目下载页http://code.google.com/p/gappproxy/downloads/list 下载windows客户端,即localproxy-2.0.0-win.zip(若不能下载单击这里)。
2.解压下载文件,用记事本打开并修改该目录下的proxy.conf文件,增加如下图的最后一行,特别注意红字部分改成刚才创建的app_id。

3.执行该目录下的proxy.exe,并设置浏览器代理,分别如下图:


4.至此代理设置全部完成,在浏览器中输入http://www.geoiptool.com/ ,看看自己的ip在哪里?

前些天发现了一个开源的HTTP Proxy软件GAppProxy,使用了几天,发现其速度非常快,很值得推荐。
GAppProxy使用Python编写并运行于Google App Engine上。GAppProxy是一个完整的Proxy解决方案: 与常见的HTTP Proxy不同,GAppProxy运行在Google App Engine上,不需要专门的服务器,这是最大优势.
普通Windows用户下载并运行解压GAppProxy,然后双击运行gui.exe.之后配置IE或Firefox浏览器,设置HTTP代理为127.0.0.1:8000.然后就可以通过代理上网了。

这种代理速度的确非常快,大概因为Google App的服务器速度快的原因,虽然该版本目前尚不支持HTTPS,但对于普通网站访问效果很好,包括域名被和谐的网站都可以正常访问。
不过有个问题是,使用人数多的话可能会有流量限制,建议自己申请一个Google App站点,下载其源代码,修改app.yaml,然后将其上传到自己的Google App目录下,修改proxy.py或者配置文件,使其指向自己的Google App站点,这样就能避免过多人访问造成的流量问题了。
FCKeditorAPI接口的应用 – 张海宁的专栏 – 博客频道 – CSDN.NET.
FCKeditor offers a complete JavaScript API so you can interact with it once the editor is loaded and running.
FCKeditor提供了完整的 js Api 接口函数,所以你可以在编辑器加载运行时与编辑器进行交互。
Once loaded, the editor registers a global object called FCKeditorAPI. This object offers the entry point to interact with any editor instance placed in a page (you can have more than one). 一旦加载完成,编辑器就会注册一个全局的对象叫做 FCKeditorAPI 。这个对象提供了与页面中的编辑器实例进行交互的入口(你可以有多个编辑器实例)。
NOTE: The FCKeditorAPI object will not be available during the page load. You need to wait for the editor to be loaded to use it. If you need to interact with the editor right after is has been loaded, use the “FCKeditor_OnComplete” function (see Events).
注意:这个FCKeditorAPI对象在页面加载没完成时是不会起作用的。所以你必须在编辑器加载完成后再使用它。如果你想在编辑器一加载完时就与其进行交互,可以使用”FCKeditor_OnComplete”函数(可以看下面的Events 部分)。
● From out of an external script 从当前页获取FCK编辑器的实例
When placing the editor in the page, you give it an “instance name”. To retrieve it, you must simply call theFCKeditorAPI.GetInstance method.
Example:
当在页面中放置编辑器时,你给他提供了一个实例名。所以要访问该编辑器的实例,只需调用FCKeditorAPI.GetInstance 方法,例如:
var oEditor = FCKeditorAPI.GetInstance('InstanceName') ;
该函数返回一个编辑器的实例,一个实例其实就是下面要提到的FCK对象。
● From out of a dialog of the editor 从 FCK 编辑器的弹出的对话框窗口中获得 FCK 编辑器实例:
Call the InnerDialogLoaded to get the FCKObject. 调用InnerDialogLoaded 方法来获取FCK对象。
Example:例如
var oEditor = window.parent.InnerDialogLoaded().FCK ;
这里所说的对话框窗口比较常见的有图像属性对话框,当你点击”插入/编辑图像”按钮后,就会弹出图像属性对话框来。当给该对话框设置的脚本要访问编 辑器时,就可以用上述的方法,比如dedecms里的图像属性对话框命令就使用的自己的 dede_image.php 文件,该文件里就有下面的一段代码:
<script language=javascript>
var oEditor = window.parent.InnerDialogLoaded() ;
var oDOM = oEditor.FCK.EditorDocument ;
var FCK = oEditor.FCK;
var picnum = 1;
上面代码是 InnerDialogLoaded 的具体的应用
Both methods return the main FCKeditor object that gives the necessary bridge to interact with it. These are the most useful properties and methods of this object:
上述的所有的方法都返回一个FCKeditor 对象,这个对象提供了与编辑器进行联系的桥梁。在该对象里有非常有用的属性和方法:
Properties: 属性:
● Name = ( string ) – the instance name. Name 属性(字符串类型)就是 实例名称
● Status = ( integer ) – the editor status (loading status). Status 属性(整形类型)指编辑器的状态(加载的状态)。
● EditorDocument = ( object ) – the DOM Document object for the editing area. EditorDocument 属性(对象类型)指编辑器区域的DOM (document)文档对象。
● EditorWindow = ( object ) – the DOM Window object for the editing area. EditorWindow 属性(对象类型)指编辑器区域的DOM (window)窗口对象。
Methods: 方法:
● AttachToOnSelectionChange( functionPointer )
● Focus()
● SetHTML( html ), or SetData( html ) – sets the contents of the editor. Note that when using this method, you will loose any listener that you may have
previously registered on the editor.EditorDocument.
SetHTML(html),或 SetData(html) – 设置编辑器的内容。注意当使用这个方法时,你会失去先前在editor.EditorDocument中注册的事件监听器,比如之前使用 editorInstance.EditorDocument.attachEvent(“onkeypress”, FCKeditor_OnKeyup) ; 挂接了一个按键事件,那么当使用了SetHTML后,挂接的事件会失效,所以此方法常用于”设置初始值”或”表单重置”。
● GetHTML( formatted ), or GetXHTML( formatted ), or GetData( formatted ) – retrieves the edited html from the editor. 获取编辑器中的html内容,其中oEditor.GetXHTML(formatted); // formatted 为:true|false,表示是否按HTML格式取出
● InsertElement( element )
● InsertElementAndGetIt( e )
● InsertHtml( html ) – inserts HTML in the current cursor position 在当前光标所在位置处插入html 代码。
● IsDirty() – checks if the content in the editor has been changed 判断编辑器的内容是否被修改了。
● MakeEditable()
● ResetIsDirty() – resets the dirty state 重置dirty(脏)的状态。
● SwitchEditMode()
● UpdateLinkedField()
Once the editor loading phase is complete and it is ready to use (and interact with JavaScript), a standard function is called in the page that contains the editor, if the function is defined. This function must be named“FCKeditor_OnComplete” and receives the related editor instance as the parameter. Using it, you can execute any initial code that may interact with the editor. This is a declaration example:
当编辑器的加载阶段完成后(就可以与js 脚本进行交互了),如果定义了一个名为”FCKeidtor_OnComplete”的函数的话,此时就会调用该函数,这个函数接收一个编辑器的实例作为 参数。使用这个函数,你可以执行任何与编辑器进行交互的初始代码,下面是该函数的定义声明的例子:
function FCKeditor_OnComplete( editorInstance )
{
alert( editorInstance.Name ) ;
}
Other than the above standard function, every FCKeditor instance has an “Event” object that can be used to listen for events to be fired. 除了上述的标准OnComplete函数外,每个FCKeditor 实例都有一个”Event”对象可以用于监听发生的事件,并针对不同的事件调用所需的回调函数。
Example: the following code listens for the “OnSelectionChange” to execute custom code: 例如:下面的代码用于监听 “OnSelectionChange”(该事件后面有说明)执行自定义的代码:
function FCKeditor_OnComplete( editorInstance )
{
editorInstance.Events.AttachEvent( 'OnSelectionChange', DoSomething ) ;
}
var counter = 0 ;
function DoSomething( editorInstance )
{
// This is a sample function that shows in the title bar the number of times
// the "OnSelectionChange" event is called.
window.document.title = editorInstance.Name + ' : ' + ( ++counter ) ;
}
Note that every event callback function receives the editor instance as a parameter.
注意每个事件回调函数都会接收一个编辑器实例作为参数。
The following is the list of events available: 下面是可用的事件列表:
● OnAfterLinkedFieldUpdate – fired right after the hidden linked field attached to the editor has its contents updated. It happens usually when the form is being posted.
(后面这段中文内容是转载自网上的,对LinkedField可以更好的理解 )FCKEditor的编辑器实际上是 一个IFrame,每次在创建一个FCKEditor实体的时候,都会新建一个IFrame,然后各种toolbar 和编辑区都塞到这个IFrame中去了,在IFrame外面必须有一个对应的input元素(这个一般是一个textarea,FCKEditor中称之 为LinkedField),这样就可以将textarea中的已有的内容导入到编辑器中,或者将编辑好的内容更新到LinkedField中。下面代码 是该事件的一个应用:
FCK.UpdateLinkedField = function () {
FCK.LinkedField.value = FCK.GetXHTML(FCKConfig.FormatOutput); // 将FCKEditor编辑的内容取出来,这里是我们关心的重点
FCK.Events.FireEvent(“OnAfterLinkedFieldUpdate”); //更新完LinkedField后触发OnAfterLinkedFieldUpdate事件。
};
● OnAfterSetHTML – fired once the HTML is loaded in the editor (including when changing views). 当编辑器内的html被载入后触发,包括改变视图.
● OnFocus – fired when the editor acquires the focus.当编辑器获得焦点时。
● OnPaste – fired when something is pasted in the editor. The function you specify must return true for the paste to proceed. 当在编辑器中粘贴内容时触发,你所指定的回调函数必须返回true ,才能让粘贴过程继续进行下去。
● OnStatusChange – fired when the editor status changes. The following constants are also available globally in the page: FCK_STATUS_NOTLOADED, FCK_STATUS_ACTIVE and FCK_STATUS_COMPLETE. 当编辑器的状态发生改变时。下面的常量是页面中可用的编辑器状态常量:FCK_STATUS_NOTLOADED, FCK_STATUS_ACTIVE 以及 FCK_STATUS_COMPLETE.
● OnSelectionChange – fired when the actual selection in the editor area changes (including cursor position and keystrokes). Note: In IE, this event does not fire on every keystroke, but only on some random keystrokes. 当编辑器中实际的选择区域发生变化时(包括光标位置和按键)。注意:在IE中,这个事件不会在每个按键时都触发,只会在一些随机的按键中触发。
The following are a few samples of things that can be done with the JavaScript API. (In these samples, oEditor = FCKeditorAPI.GetInstance(‘InstanceName’).)
下面是一些Javascript API 的使用的示例。(在这些例子中,oEditor = FCKeditorAPI.GetInstance(‘InstanceName’) 。)
● Insert HTML at cursor position:在光标所在位置插入HTML:
oEditor.InsertHtml(HTML);
● Triggering a toolbar button / command: 触发一个工具条中的按钮 / 命令:
oEditor.Commands.GetCommand(commandName).Execute();
● Disabling toolbar buttons: 禁用编辑器的按钮:
oEditor.EditorWindow.parent.FCKToolbarItems.LoadedItems[commandName].Disable();
● Setting a config value: 设置一个配置的值:
oEditor.Config['<configVariableName>'] = 'newValue';
● Change editor document style at runtime: 在运行时改变编辑器的document文档样式:
oEditor.EditorDocument.body.style.cssText += 'color: #322805; background-color: #F7C928;' ;
● Set or get anything of the editor: 设置或获取编辑器的任何需要的元素:
FCKeditorAPI.GetInstance('InstanceName').EditorWindow.parent...
● Add a dynamic Save function: 添加一个动态的保存函数:
// called on save 当保存时调用
function doSave(){
alert('Saved.');
document.getElementById('someElement').innerHTML = 'Saved!';
return false; //this disables default action (submitting the form) 返回false 来阻止默认的动作(提交表单)。
}
// called when FCKeditor is done starting.. 当编辑器完全准备好后会自动调用。
function FCKeditor_OnComplete( editorInstance ){
editorInstance.LinkedField.form.onsubmit = doSave; //当表单提交时触发自己的保存函数。
}
● Working with the selection in the editor: Use the Selection Object 可以使用Selection对象来操作编辑器的选择区。
独立开发者推荐的一些游戏制作工具(下) | GamerBoom.com 游戏邦.
作者:Tom Francis
RPG Maker
这是什么?是用于创造2D PRG的一个全面开发套件。包括一些推动你开始创造的图像。(请点击此处阅读本文上篇)
价格和授权:旧版本是18英镑,最新版本是55英镑。你可以卖掉你所创造的,而不是支付版税。试用期是30天。
面向平台:PC
链接:http://www.rpgmakerweb.com/
教程:RPG Maker Web的教程
案例研究:《去月球》
开发者:Kan Gao(主管/设计师)
RPG Maker需要花多长时间去学习?
IQ范围在115至140范围间的人平均学习时间是6个月至17天,淡然这伴随着巨大的误差。
我认为即使未深入可选择的脚本,花几个月时间也足以掌握基本的技术内容了。这比大多数同类型的工具更有效,尽管这仍与拿起画笔才能画画的道理一样。 引擎包含了一些基础,如任何人可以坐下并获得一个角色精灵去绕着一张带有基本战斗系统的地图奔跑;但为了创造你自己的系统和机制,你就需要包含像任何语言 等程序逻辑,虽然是基于更简化的语法。
它也具有编程能力,能够为此打开更多扇门。我们能够使用它创造类似但却需要花费更长时间的内容,这与传统编程具有更密切的联系。
哪些先验知识或技能能够带来帮助?
在技术方面,程序设计经验(游戏邦注:使用基于Ruby的脚本系统的引擎)以及一般的逻辑都是有帮助的。
另外,每一种创造技能迟早都会派上用场—-实际上引擎具有更加活跃的社区,这是让人激动的,因为这也意味着能够交换更多资源而继续发展。如果你拥有 像绘画和编曲等资源能够进行贡献,那么你不仅能够拥有游戏的这些元素,同时还能用自己的服务去交换其他人在其它元素中所作出的贡献。这就像是“火人祭” (游戏邦注:一年一度在美国内华达州黑石沙漠举办的活动)一样,但却没有那么多“沙子”。
你不能用它做些什么?
随着2D内容的发展,关于程序能力这里并不存在太多限制。你可以创造一套全新的系统,并创造一款像《Fleuret Blanc》的古怪冒险游戏,或运行于一个完整的引擎并创造出像《U.S.G.》等内容。
然而,有时候这种方法并不能有效(从开发和计算角度来看)地创造出某些关于替代引擎和编程语言等内容。对于我来说现在所存在的主要技术限制是不能移植到Mac和Linux上,但我相信在未来这种情况将会发生改变。
你认为游戏创造需要花多长时间,而实际上它又花了多长时间?
21个月。我们从2010年2月份开始,并在2011年11月1日发行游戏。但其最初“预期”的发行日期是2010年4月。说句实话,游戏最初只会持续30分钟左右,但是之后我意识到自己拥有这种想法是件愚蠢的事。
有多少开发时间是让你愉快的,又有多少开发时间是让你郁闷的?
虽然并不是整个过程都像在草地上跳跃那般愉快,但我确实很满足。这里存在的许多积极元素是各种任务能够缓解千篇一律的“工作”;每天我们都能够轻松地在不同事情间转换着,不管是音乐,对话或修补像素图像,并有一些出色的人才在旁边协助。
而让人郁闷的部分主要是源于个人而非工作事宜。鉴于项目的福分将一些糟糕的事情变成是富有意义且有成效的内容,而其诅咒则会在整个发展过程中降落在它们身上。但不管怎样,创造游戏仍具有87.3%的有趣体验。
如果你能够给予过去还未开始创造游戏的自己一个建议,你会说些什么?
基于较小的片段去规划进程,然后基于两倍时间去扩展它们,如此你便能够持续地遵循下去。同样的,明天的获胜彩票号码是08,21,59,37。
结论
RPG Maker非常适用于特别的游戏:带有回合制战斗和自上而下探索的日式RPG。你可以逃离模版,就像《去月球》所做的那样,但当你越发远离它,你在使用Game Maker时便越有意义。
Flixel
这是什么?创造能够为你处理许多棘手部分的Flash游戏的起点,就像实体和存档。
价格和授权:免费的,你可以卖掉自己所创造的内容,没有版税
游戏创造目标:任何带有Flash的网页浏览器
链接:http://flixel.org/
教程:创造一个基本的平台游戏
案例研究:《屋顶狂奔》
开发者:Adam Saltsman
学习Flixel需要多长时间?
对于我来说,这是一个很难进行客观回答的问题—-并不是因为巨大的市场潜能,而是因为我很难去想象不知道如何使用它的情况,因为这都是通过我个人的 感觉所创造出来的。我想如果你从未有过编码经验,然后选择它并决定去创造一款从未了解过的街机游戏,你可能需要花1,2周时间去熟悉它并运行它。而真正让 flixel运行起来至少需要更多周的时间,但最终你会发现其实也不存在多少需要学习的内容。
哪些先验知识或技能能够带来帮助?
我想最有帮助的应该是C-style程序设计经验或者一些面向对象的程序设计体验。但是它们都不是必要的元素,只是通过这些实践能够了解Flixel。如果你拥有这些经验,那么你便只需要1或2天时间便能够掌握Flixel。
你不能用它做些什么?
创造3D游戏是不可能的。这也不适合一些Flash游戏领域部分—-那里不存在关于电影片段的嵌入式支持,例如使用可变焦距摄像机效果创造大关卡于现在是可能的,但在程序库设计中却不是计划好的。Flixel非常适合具有相对固定视角以及幻灯软片风格图像资产的游戏。
你认为游戏创造需要花多长时间,而实际上它又花了多长时间?
这真的非常了不起。从机制上来看这是一款简单的游戏,这里不存在许多可钻进去的兔子洞。整个过程中最不有趣的一部分便是花几个小时为了使用一些免费的声音作为素材而沉浸于半成功的网页研究。
你需要花多少钱进行开发,这些钱是否能够推动着你持续下去?
大概是200美元,但这是通向Phoenix的费用。回想起来这真的很重要,但我当时却并未意识到。通常情况下我会花许多钱在声音上,但那时候我却 因为个人游戏而用掉了所有战争基金,所以我便只能充当录音师,而Danny Baranowsky出于人情免费为我写了音乐。幸亏《屋顶狂奔》表现不错,我才有能力偿还他的付出。
它在收益上的表现如何,从1至10的范围中做出选择。
其Flash版本应该是2。iOS版本可能是7或8。我们还创造了一个Android Humble Bundle,就其本身而言这是5。我不确定是否应该将其加起来或进行平均。而对所有的这些版本我所给出的整体分数是5.2382。
如果你能够给予过去还未开始创造游戏的自己一个建议,你会说些什么?
其实我没有什么可说的,除了“继续向前并尽早付钱给Danny这些非常琐碎的事外。”只有上帝才知道之后会发生些什么,所以不要轻易去干预过去。
结论
Flash游戏仍然是将陌生人从听说你的游戏带向玩游戏的最可行的方法,而Flixel可能是做到这点的最佳方法。Flash并不适用于iOS设备 上。我们需要知道的是Unity游戏能够运行在带有Firefox插件的浏览器上或者Chrome上。而Game Maker可以创造无需插件便运行于现代浏览器上的HTML5游戏 .
Unreal Development Kit
这是什么?是用于在Unreal Engine 3中创造3D游戏的全面开发套件。
价格和授权:60英镑,在你首次获得的5万美元收益中是需要提交版税的,而之后将收取25%的版税。可以免费进行非商业使用。
游戏创造目标:几乎所有的平台,包括PC,Mac,iOS,Android,Xbox 360,PlayStation 3,Flash(网页),WiiU,PS Vita。
链接:http://www.unrealengine.com/udk/
教程:Epic Games官方教程
案例研究:《Waves》
开发者:Rob Hale
学习UDK需要多长时间?
UDK较为棘手,因为你并不只是面对一个引擎,而是面对一整个游戏框架。你总是基于Epic如何创造并塑造他们的游戏结构而进行创造,但这需要花费较长的时间去适应。
这一结果便意味着你将花费前几周时间去搞清楚所有的一切内容以及它是如何运行的。关于你想要做某事但是Epic却已经做好了这件事是再寻常不过了, 但这还是取决于你去找到它并明确如何使用它。这一学习过程可能需要持续好几年—-就像在使用该引擎十几年后,现在的我仍在寻找某些内容。
但你也可以在几个小时内便运行并创造出一些较简单的内容,并在几周内变得更有能力。
哪些先验知识或技能能够带来帮助?
之前的程序设计经验便非常有帮助,但你需要收起傲气并基于“不真实的方式”去实践。我便曾与许多想要在Unreal上重新编写每一行代码的资深程序 员,因为他们觉得自己可以做得更好,但每次结果却比之前的还糟糕。这是Epic的引擎,他们已经基于该引擎创造了十年的游戏,所以如果你觉得它看起来很奇 怪或与自己想做的相矛盾,那么这背后必然存在一定的原因。
此外,你可以在前进过程中不断学习。当我在01年开始创造游戏时,我在创造《骇客任务》的模组,但却几乎什么都不了解,我便是在工作过程中不断进行学习。
任何创造图像,声音,模式或程度的技能都是有帮助的,并且能够推动着你更快速地完成任务,但你需要使用引擎的所有内容都必须进行有效的记录,并且社区也是有益的。
你不能用它做些什么?
像《我的世界》中任何可能实时改变地形,和体素世界的内容。UDK是专门为一些分割成不同关卡的静态图像导向型世界所设计的,但这却是唯一困难的限 制。脚本语言并不能快速执行,所以任何包含了数千个对象的内容将移动并与其它框架进行互动。但存在某些方法能够帮助你接近巧妙的程序设计。
你认为游戏创造需要花多长时间,而实际上它又花了多长时间?
我认为《Waves》的创造需要花费几个月的时间,如果你问我在开发过程中,我花了多长时间致力于它,我会回答“几个月。”
这似乎与引擎没有多大关系,更主要是因为我不清楚自己正在创造什么。《Waves》从未拥有一个设计文件,并且总是作为不同机制的实验案例,保留有效的内容而删除无用的内容。
我认为我正在反击自己的AAA级背景,即所有的一切都需要预先设计好,如果理念很糟糕,你通常都没有时间去思考如何完善它。最终,我共花了9个月时间致力于《Waves》,但因为我每周并未花费40个小时于游戏中,所以整体的时间并不准确。
有多少开发时间是让人愉快的?
有几次致力于游戏时感觉是在面对家庭杂物。特别是完成用户界面和菜单是最摧残精神的部分,因为尽管为了让人们玩游戏你需要所有这些内容,但这并不会 让你觉得自己是在创造游戏。所有的独立游戏预告片都会呈现出菜单系统是因为开发者花费了好几周的时间于这些菜单中,因为其他人并不会在乎它们,所以至少要 为其提供一些曝光的机会。
我想说的是如果你不喜欢解决问题并且每天都要面对一难以理解的内容,那就不要进入游戏开发中。最终你在项目中的大多数时间将是用于解决漏洞。
尽管我是在创造自己想创造的游戏,但是我到底有多想创造它呢,对于我来说这便是能在下午把我叫醒的工具。
你需要花多少钱进行开发,这些钱是否能够推动着你持续下去?
主要是生活费用和音乐制作费用。当我辞职并开始专职开发游戏时,我有6000英镑的储蓄,我将这些钱全部用于游戏开发。很幸运的是我无需为其他家属 或房贷操心,我的父母允许我搬到他们的客房,如此我便节省下一大笔钱去创造游戏,UDK只需要预先支付99美元,直到你准备好发行游戏前你将无需再支付任 何费用,在此所有用于创造游戏的工具都是免费的—-除非你真的需要Photoshop或Maya。
雇佣任何自由职业者都是一笔昂贵的费用,因为很少有人愿意为利润分成而工作。通常情况下最低的每小时工资率是15美元,并且他们要求在游戏赚钱前获 得报酬。我唯一不能独自完成的只有音乐,并且我知道自己想要为游戏添加一个出色的原声带,所以我只能咬紧牙关为此掏出腰包。幸运的是这一决定具有长期的回 报。
它在收益上的表现如何,从1至10的范围中做出选择。
我认为它的表现是6。我有能力创造另外一款游戏,并且还有一些额外的钱能够支付一些自由职业者的工资,但如果我不能在一年内发行另外一款游戏,我便会摊上大麻烦。
如果你能够给予过去还未开始创造游戏的自己一个建议,你会说些什么?
不要给它取名“Waves”!没有人会记得这个名字,你很难在谷歌中找到它。
结论
如果你想要创造一款大型且闪耀的跨平台游戏,你便需要学习UDK。这比学习Unity难多了,你需要足够全能或者组建一个团队去创造某些看起来不错的内容。但如果你想要加入一个已建立的开发商,这便是一个不错的体验,因为Unreal 3是主流游戏中最常出现的引擎。
(本文为游戏邦/gamerboom.com编译,拒绝任何不保留版权的转载,如需转载请联系:游戏邦)
The Indies’ Guide to Game Making
By Tom Francis
RPG Maker
What is it? An all-inclusive development suite primarily for making 2D RPGs. Includes some graphics sets to get you started.
Price and licence: £18 for the older version, £55 for the latest. You can sell what you make, no royalties. 30-day trial available.
Makes games for: PC
Link:http://www.rpgmakerweb.com/
Tutorial:RPG Maker Web’s tutorial
Case Study: To the Moon
Developer: Kan Gao (Director/Designer)
Get it:from the official site
How long does RPG Maker take to learn?
6 months and 17 days for the average person between the IQ range of 115 – 140, with a catastrophically significant margin of error.
I think a few months should be enough to get the basic technical aspects down, without going into the optional scripting. It’s much quicker than most tools of its nature, though it’s still like having to work out just to hold a brush before you can start painting. The engine’s got the foundation covered, such that anyone could just sit down and get a character sprite to run around on a map with a basic battle system; but to create your own systems and mechanics involves programming logic just like any language, albeit with much more simplified syntax.
It does actually have programming capabilities, which opens more doors than there are windows. And to be able to use it as well as to create something like this (which was indeed created with RPG Maker) takes much longer, and is a lot more in touch with traditional programming.
What prior knowledge or skills are helpful?
On the technical side, programming experience (the engine uses a scripting system based on Ruby) and a general grasp of logic.
Otherwise, every creative skill comes in handy – the engine actually has a rather active community, which is exciting because it also means that there’s a lot of bartering for resources going on. If you’ve something to contribute like drawing and composing music, then not only can you cover those aspects of your game, but also exchange your services for others’ contributions in other aspects as well. It’s like Burning Man, but with less sand.
What can’t you do with it?
As far as 2D stuff goes, there’s actually not much of a limitation as far as the program’s capability is concerned. You can create an entire set of new systems and make a quirky adventure game like Fleuret Blanc, or operate on the entire engine and create something like U.S.G..
However, it’s sometimes not very efficient (from both developing and computing perspectives) to make some of the things, relative to alternate engines and programming languages. The main technical restriction for me right now is the inability to port to Mac & Linux; but that might (and hopefully will) change in the future.
How long did you think the game would take to make, and how long did it actually take?
21 months. We started in February 2010, and it was released on November 1st, 2011. But its initial ‘expected’ release date was April 2010. Though to be fair, the game was originally going to be just 30 minutes or so; but then I realized I was being an idiot.
How much of the development time was enjoyable, and how much was unpleasant?
It wasn’t all prancing around a meadow, but I did purr a lot. A large positive factor was the variety of tasks to break down the monotony of “work”; it’s nice to switch between different sets of things to do every day, whether it’d be music, dialogues, or struggling to tinker with the pixel art that some wonderfully talented folks were helping me with.
The unpleasant part was mainly personal rather than work-related. Whereas the blessing of the project was turning crappy things into something meaningful and productive, its curse was being forced to dwell on them throughout its duration. But still, making the game was definitely an 87.3% enjoyable experience.
If you could give your past self one piece of advice before starting to make the game, what would it be?
Plan out the progress in small segments, then spread them out over twice the time so you can actually follow it sustainably. Also, tomorrow’s winning lottery number is 08 21 59 37.
Conclusion
RPG Maker is very well suited to a very particular kind of game: Japanese-style RPGs with turn-based combat and top-down exploration. You can certainly stray from that template, as To the Moon does, but the further away from it you go, the more sense it makes to use Game Maker instead.
Flixel
What is it? a starting point for making Flash games that handles a lot of the tricky bits for you, like physics and savegames
Price and licence: free, you can sell what you make, no royalties
Makes games for: any web browser with Flash
Link:http://flixel.org/
Tutorial:Making a basic platformer
Case Study: Canabalt
Developer: Adam Saltsman
Play it:free, on Adam’s site
How long does Flixel take to learn?
This is a really hard question for me to answer objectively – not because of the Great Marketing Potential but more because it’s really really hard for me to imagine not knowing how to use it, since it was all built out of my personal tastes, etc. I think if you picked it up and set out to make a like arcade game clone with no prior knowledge you could probably get it up and running in a week or two, without any prior coding experience. To really get flixel singing would take a few more weeks at least, but ultimately there is just not THAT much in it to learn, really.
What prior knowledge or skills are helpful?
The most helpful thing would be C-style programming experience and/or some object-oriented programming experience. Neither are strictly necessary but Flixel is definitely informed by these practices and my experience with them. If you know that stuff then the learning time for Flixel is more like 1 or 2 days.
What can’t you do with it?
Making 3D games is more or less out of the question (outside of duplicating the raster math from really old fake 3D arcade games or something). It’s not really cut out for some slices of Flash game domain too – there is no built-in support for movie clips, for instance, and doing large levels with zooming camera effects is actually possible now but not really thoroughly intentional in the library’s design. Flixel is definitely strongest for games with a relatively fixed perspective and film-strip style art assets.
How long did you think the game would take to make, and how long did it actually take?
Approximately 5 days, and approximately 5 days.
How much of the development time was enjoyable?
It was basically all completely awesome. Mechanically it is such a simple game, there weren’t many rabbit holes to go down. The least fun part of the process was a few hours sunk on semi-successfully searching the web for some free sounds to use as fodder for the things I couldn’t Foley.
How much did it cost you to develop, and what did that money go on?
Approximately $200, but that was for a plane ticket to Phoenix to attend a little game jam thing some friends were having. In retrospect, that was super important, but I didn’t realize that at the time. Usually I spend a lot of money on sound, but I’d pretty much used up all my war chest for personal games at that point in my life, so I did all the sound engineering myself, and Danny Baranowsky wrote the music for free as a personal favor. Thankfully Canabalt did well enough that I was able to repay him for his contribution!
How well has it done for you financially, on a scale from 1-10?
The Flash version was probably about a 2 or so. The iOS version is I think more like a 7 or 8 maybe. We did an Android Humble Bundle which was practically a 5 on its own. I’m not sure if I’m supposed to add those up or average them or what! I give it a 5.2382 overall score.
If you could give your past self one piece of advice before starting to make the game, what would it be?
That is the one thing I’ve ever made where I think I would have nothing at all to say. Except maybe “go ahead and pay Danny ahead of time, it will definitely all work out.” But then GOD who knows what would have happened? DON’T MEDDLE WITH THE PAST.
Conclusion
Flash games are still one of the most accessible ways for a stranger to go from hearing about your game to playing it, and Flixel is likely the best way to make one. Flash doesn’t work on iOS devices, though. It’s worth knowing that Unity games can run in a browser with a plugin for Firefox, or natively in Chrome. And Game Maker can make HTML5 games, which run in modern browsers without plugins.
Contents
Game Maker
Unity
Adventure Game Studio
RPG Maker
Flixel
Unreal Development Kit
Unreal Development Kit
What is it? An all-inclusive development suite for making 3D games in the Unreal Engine 3.
Price and licence: £60, no royalties on your first $50,000 in revenue, 25% royalty afterwards. Free for non-commercial use.
Makes games for: Almost everything – PC, Mac, iOS, Android, Xbox 360, PlayStation 3, Flash (web), WiiU, PS Vita.
Link:http://www.unrealengine.com/udk/
Tutorial:Epic Games official tutorial
Case Study: Waves
Developer: Rob Hale
How long does UDK take to learn?
UDK is tricky because you aren’t just getting an engine but an entire game framework. You’re always building on top of how Epic like to make and structure their games, and this can take a long time to get used to.
The result of this means you’ll spend the first few weeks finding out where everything is and how it works. It’s almost always the case that if you want to do something then Epic have already done it, and it’ll be in the code somewhere, but it’s down to you to find it and figure out how to use it. That learning process will continue for years – I’m still finding stuff after working with the engine for over ten years now.
But you can be up and running and making something simple very quickly maybe within just a couple of hours and be relatively competent in a few weeks.
What prior knowledge or skills are helpful?
Any previous programming experience is very helpful, but be prepared to swallow your pride and do things the “Unreal Way”. I’ve worked with a lot of very experienced programmers who wanted to rewrite every line of code in Unreal because they felt they could do it better, and every time the result was worse than how they started. This is Epic’s engine and they’ve been making games with it for over a decade, so if it seems odd or counter to how you would do it, there is always a good reason behind it.
Other than that, you can pretty much learn as you go. When I started in games back in ’01, I was modding Deus Ex and knew absolutely nothing, and I’ve taught myself everything I know along the way.
Any skills in making art, sounds, models or programming are going to be helpful and will get you working quicker but everything you need to use the engine is documented really well (far better than when I started) and the community is very helpful.
What can’t you do with it?
Anything that involves changing the terrain in real time, and voxel worlds like minecraft. UDK is designed for very pretty static art-led worlds divided into levels, but that’s pretty much the only hard limitation. The scripting language isn’t very fast to execute, so anything involving thousands of objects moving around and interacting with each other every frame is also out. But there are ways you can get close to that with clever programming.
How long did you think the game would take to make, and how long did it actually take?
I thought Waves would take a couple of months to make originally, and if you asked me during development how long I thought I had left to work on it, I would always say “A couple of months”.
That’s got far less to do with the engine, though, and far more to do with my not having a firm idea on what I was making. Waves never had a design document, and was always a case of experimenting with different mechanics, and keeping what worked and ditching what didn’t.
I think I was pushing back against my AAA background, where everything needs to be designed up front, and if an idea sucked, you often had no time to figure out how to improve it. Ultimately I worked on Waves for about 9 months in total, but I wasn’t doing 40 hour weeks or anything, so the total time completely eludes me.
How much of the development time was enjoyable?
There were a few times when working on the game was a chore. Specifically getting the user interface and menus done was the most soul crushing part, because while you need all that stuff in order for people to play the game, it doesn’t feel like you’re working on the game. All of those indie game trailers that show the menu system exist because the developer spent weeks on those menus and by god they’re going to get some of the limelight because nobody else cares about them.
I will say that if you don’t enjoy solving problems and being faced with mysteries on a daily basis, then don’t get into games development. The majority of the time at the end of a project is spent Debugging, and that tends to be a case of 8 hours of headbanging frustration and swearing followed by a huge Dopamine surge and dancing for 3 minutes when you finally solve the problem.
Ultimately though I was making a game I wanted to make, how I wanted to make it, and for me that’s the reason I get up in the afternoon.
How much did it cost you to develop, and what did that money go on?
Living expenses and music. I had about £6k saved up when I quit my job and went full time, and I spent every penny of that finishing the game. I was lucky in that I had no dependents or mortgage to worry, about and my parents let me move into their spare room so I could save money while I got the game out. UDK only has an upfront fee of $99, but you don’t need to pay anything until you’re ready to release, and all of the tools to make a game are available for free – unless you really need Photoshop or Maya.
Hiring in any freelancers is always expensive, because there are very few that will work for a profit share. Generally the minimum hourly rate is around $15, those hours add up really quickly, and they need to be paid before the game is making any money. The only thing I couldn’t do myself was the music, and I knew I wanted a good original soundtrack for the game, so I bit the bullet and paid for it. Fortunately that gamble paid off in the long run.
How well has it done for you financially, on a scale from 1-10?
I’d rate it as a 6. I can afford to make another game and I even have a little bit extra so I can pay some freelancers, but if I don’t get another game released inside of a year then I’ll be in trouble.
If you could give your past self one piece of advice before starting to make the game, what would it be?
Don’t call it Waves! Nobody remembers the name and you can’t find it on Google.
Conclusion
UDK is the thing to learn if you ultimately want to be making big, shiny, multi-platform games. It’s harder to learn than Unity, and you’ll need to be very versatile or form a team to make something that looks good. But it’s also great experience if you want to join an established developer, since Unreal 3 is the most commonly used engine in mainstream games.
Contents
Game Maker
Unity
Adventure Game Studio
RPG Maker
Flixel
Unreal Development Kit(source:pcgamer)
本文来自《Visual Programming Languages – Snapshots》,作者Eric Hosick收集了一堆关于可视化编程的工具,好多我都听都没听说过,我一股脑的全转过来,给大家看看,算是开开眼界了。本文也是参考了Wikipedia的 Visual Programming Language 词条。
另外,在原文有很多评论,其中也有很多正文没有提到的,你可以前去围观一下。
Maybe the first. 1963.












Flow-Based Programming.
图片来源 1, 图片来源 2 官方网站 1 和 官方网站 2

















More of a post on different ways to learn programming.

Chris Granger’s development environment. 图片来源, Wikipedia 和 官方网站

Really cool and hard to describe. You need to visit their demo web page and watch their videos. 图片来源, Wikipedia 和 官方网站


Someone built an An 8-bit Mechanical Adder in LittleBigPlanet

Considering someone has created a fully programmable computer using Minecraft.

This has a really cool looking interface. 图片来源, Wikipedia 和 官方网站


This was discussed quite a bit on Ycombinator. 图片来源 和 官方网站





Legos!!! 图片来源, Wikipedia 和 官方网站












图片来源 1, 图片来源 2, Wikipedia 和 官方网站









From Microsoft research.





图片来源 1, 图片来源 2, Wikipedia 和 官方网站



(全文完)
在互联网应用项目中分布式设计是必不可少的环节,通过分布式设计从而达到简单扩容硬件的方式来提高系统和平能的总体吞吐能力。但实际应用中并不是简单地进 行分布式设计就能解决问题,因为在现实应用并不是所有硬件资源都可以很好地进行扩容,比较常见的就是数据库资源,所以在设计整个架构的时候必须考虑部署资 源的局限制性;否则整个构架所产生的效果就不能达到设计前规划水平。下面讲述构建一个可靠、高吞吐的分布式业务架构基础改造。

以上结构是最常见的分布式设计结构,而我们现有项目也是遵循着这种结构。这种结构看上去似乎比较理想,通过添加的硬件就能支撑所需要的访问量;但这种架构在实际应用中不一定达到效果,还容易导致服务不具备良好的可靠性;主要原因如下:
在整个体系环境中数据库资源往往都不具备水平添加设备的可行性,所以即使上层硬件资源再充足也是无补于事的。虽然可以通过业务来水平拆分数据,但过多的数据库实例在业务处理同步上也会导致整个数据库环境非常复杂影响效率。
以上结构的请求逻辑到响应都是以同步的方式,同步方式的缺陷也是非常明显的,在整个业务线 上只要有一个点存在效能问题那上游上的所流入都会被阻塞,这个阻塞最终会影响到最上层导致用户请求无法响应。同样上游大量请求进来,也容易导致这个点出现 崩溃导致整个系统瘫痪;一旦这情出现即使你如何添加硬件资源也是无法支撑。
以上两点就已经说明了在架构设计的时候需要考虑情况的多样性,一旦有些应用层面的问题在设 计上没有考虑到那这个架构体系就达不到预期的设计目标。所以在作为架构人员了解业务知识,数据流向,支撑产品选择,系统支撑目标和实施规划是一件非常重要 的事情,反而代码细节层面的设计变得相对次要些了。
在高并发应用中数据库资源往往是很短缺的,而这资源确是高并发洪峰的问题点所在,如果在架构阶段没有考虑这些情况那就会产生很较严重的后果,就像平常我们 听到的什么XX年一遇的洪水一样.以上的设计架构就没有考虑洪峰的情况。在现实生活中人们都会在河流上设计堤坝来抵遇这此情况的发生,而这方法在软件架构 设计中也是非常有效的。
当下游的排水能力不足的情况,为了应付上游大量洪水涌入必须建立一个蓄水池。在架构中可以架设一个MQ服务用于积蓄消息的信息池。当用户提交处理数据系统 会直接把消息投递到MQ后就可以给用户确认,这样用户的响应时间缩短整体吞吐会提升N个级别;由于有MQ的隔离下游的逻辑处理就可以根据资源的使用情况, 可达到有序可靠的处理能力。
针对以上情况调整的架构体系如下:

通过以上架构的调整,上层应用就不会受限于数据库资源的缺少而影响。在不调整数据库资源的情况可以通过扩容中间部件资源来达到更高的吞吐效能和并发支撑能力。
业务异步处理可以很好地解决抗并发处理能力,在不需要等待复杂的业务处理的情况下可以大大缩短响应时间,提高吞吐量。
MQ在软件系统中可以很好的承担消息积蓄池的作用,它可提供高信息吞吐和可靠性的优点;通过它可以把业务消息和数据库进行一个很好的隔离支撑。
NOSQL产品有着其查询高效性的优点,而这些效能往往是传统关系数据所不能比的;通过它可以很好地隔离大量数据查询时的数据库瓶颈问题。
以上架构的总体出发点都是缓解数据库压力而设计的,而它并不能满足所有系统的需要,只是针对我们现有系统面临问题的基础规划。由于架构设计是为了让系统可 以更好的支撑相应的业务功能;所以架构设计前必须明确业务规则和业务指标,只有在这基础的构建才能保证架构的可靠性。在传统技术人员来看,架构往往是如何 把系统的代码规划好,制一个良好的代码层次规则。但架构规划更多的系统生态圈的支撑,所以考虑的面要比代码层面要高很多,具备业务的深度和技术的广度是非 常必要。
当然我自身也不具备架构师的资格,以上只是这些年来做架构所积累的一些经验分享出来,今后有时间会把这些年涉及B2C各个系统架构设计分享出来。
[转载]android handler 简介 – laozhu1124 – 博客园.
Android的handler 是一个神奇东西,处理异步消息的时候,我们离不开他.那么他的具体的介绍是什么了?
Handler基本概念:
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取 出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。
对于handler的常用的一些方法有:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
下面我们做一个小demo对handler有深一步的了解。
基本的业务描述是这样的:我们要做一个耗时的操作,要将新的runnable接口放到主程队列中。相应的源代码如下:
package com.mp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
public class MyThread extends Activity {
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler.post(new MyRunnable());
System.out.println("Oncreate---The Thread id is :"
+ Thread.currentThread().getId());
setContentView(R.layout.main);
}
private class MyRunnable implements Runnable {
public void run() {
System.out.println("Runnable---The Thread is running");
System.out.println("Runnable---The Thread id is :"
+ Thread.currentThread().getId());
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在这个demo中,整个过程如下:
程序已 启动,就把MyRunnable加入到消息队列中,Android的handler是异步机制,所以在handler.post(new MyRunnable()); 之后,程序会继续执行,所以以后的语句会继续,这时候我们输出Oncreate中的当前线程ID。同时 MyRunnable的run方法也在运行,一样输出run方法中的当前线程ID,然后让线程休眠6秒。
demo的结果分析:
1:控制台的输出: Oncreate—The Thread id is :1
Runnable—The Thread is running
Runnable—The Thread id is :1
2:程序启动后6秒,我们才看到main.xml中的内容(只有一个textview)
这2个结果都表明handler和主线程是同一个线程。如果这时候你做的是一个耗时的操作(比如下载),那么这样是不可行的。
于是,Android给我们提供了Looper这样一个类。其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列.、
这个demo 进一步告诉我们handler与looper之间的相互联系.
让我们回顾下2013年有哪些精品资源:Android精品开源项目整理_V20131115(持续更新中..)
引言:
成长和上升并不意味着前路永无止境,更不等于是无休止的重复劳作,行百里者半九十,许多人因为平时交流就太少,更没有机会开拓眼界,加上对知识和技能的理解运作不当,人脉又匮乏,如此囧境有何未来?
武侠小说中的杨过经常和东邪西毒南帝北丐等顶尖高手一起称兄道弟,切磋武艺,努力修行才有了神雕大侠的称号,他如果整天跟武家两兄弟,郭芙蓉,全真教那些 喽啰们一起混,就算再努力还能厉害到哪里?眼界又能拓宽到哪里?最多在武林大会上露个脸被金轮法王的弟子达尔巴一掌打死后被人抬下去,多可悲。如何在最短 的时间内出类拔萃,还需要学习更多关于杨过身上的优点,杨过开始很菜,要不是学了半招蛤蟆功防身有可能出去就被人打死了,他学了两招就要拿出去用,教训那 些曾经看不起他和有点小本事就嚣张欠扁的人,甚至是替别人解决危困,因为那样他才有成就感荣誉感存在感赢得了很高的荣誉和尊重,他有很强的自尊心和上进 心,世人越看不起他他就越强。甚至每次提升都会安排藏边五丑、武家兄弟、达尔巴,西山一窟鬼这样的小角色充当杨过的出场陪衬,IT行业的生存法则跟武侠的 生存环境是极为相像的,在这里能者才有发言权,不屈不挠有上进心的人才有出路。
技术要是有了,为人处世不够圆滑怎么办?领导布置的任务是要去刺杀康熙狗皇帝,企业文化是反清复明,感觉刚进来的新人不可能把这个大任务交给自己的所以毫 不担心,反清复明和自己有个半毛钱关系,谁知道老员工欺负新人,跟领导说了句新来的刚好试试他的决心和能力,无端就被躺枪暗算了。一个有一定能力的人一定 想深得领导的心意,更希望自己所做的事情都有所值,都不希望自己去当炮灰或者让他人领功自己背黑锅,做事重要?还是做人重要?做人做事都重要,一味的执迷 技术不问窗外事,那只能成为被人指使和利用的二愣子,一味的搞关系拍领导马屁做事却一塌糊涂,那只能沦为别人笑柄成为假大空。怎么才能搞定看似不可能的任 务,怎么才能为自己赢得更多声望和影响力,怎么才能经营好各种人脉关系,怎么才达到做人做事两全其美共利共赢,我们都还需要学习更多技术以外的知识。
EOE的目标在于汇集JavaAndroid业内精英,强强聚集全面提高你个人能力、视野和思维,形成良好强大的学术氛围,相互不断的交流,学习,分享,更快更好的实现每个人的人生理想和目标。
无论你是某领域的顶尖高手,还是集技术和管理为一身的全才,或者你一直觉得自己始终是个菜鸟,那么请记住一句话,只要你感觉到有负重和压力,那就说明你正 处于上升阶段正在走上坡路正在艰难的前进中,坚持下去就不会有错。成长和上升就是伴随痛苦和喜悦的,只有那些走下坡路的人才永远觉得很轻松永远鄙视他人的 努力,一直停留在原地,等着被后浪拍死在沙滩上。
注:源码下载地址回复可见!
1.11种安卓传感器使用源码
非常强大的11种安卓传感器使用例子集合源码,包括加速度传感器、磁力传感器、方向传感器、陀螺仪传感器、光线感应压力传感器、温度传感器、接近,近距离传感器、重力传感器、线性加速度传感器、旋转矢量传感器等11种安卓手机传感器的使用。

2.100种图片处理效果大全项目
可以处理出大约100种图片效果,常见的和不常见的滤镜效果可以处理出来,可以说涵盖了市面上所有特效相机可以处理出来的效果。项目所有代码都是纯java代码实现,没有封装成jar包。截图是挑选了几张有代表性的,更多截图可以看一下源码包

3.安卓wifi搜索连接热点创建项目
本项目是在飞鸽传书安卓版中提取的wifi连接部分的功能源码,可以实现wifi热点的搜索热点连接和创建,把手机创建的热点提供给其他设备。但是项目注释比较欠缺。如果没有相关安卓wifi的相关知识阅读起来可能有点吃力。

4.FlappyBird像素鸟Unity+cocos2dx项目
不说别的单说中国人的山寨能力在全球那绝对是数一数二的。这不FlappyBird这款虐心的游戏刚火了不多久国内的小伙伴们就按耐不住了。本项目是 FlappyBird(俗称像素鸟)的再现项目源码,包括Unity版本和cocos2dx版本,还带有一个详细的源码分析讲解pdf文档。另外压缩包里 还附带了一个Crack版的“不死鸟”apk,只要头不落地就不会死,同样附带破解过程的pdf分析文档。

5.安卓win8风格音乐播放器
本源码一款win8风格的入门级安卓音乐播放器项目源码,所有的界面都把通知栏隐藏掉了。点击歌曲列表会扫描sd歌曲,所以需要sd卡支持。实现了一些歌曲播放的基本功能。例如暂停、继续、拖放进度等。歌词功能还没有完善,但是代码里有相关的实现源码。

6.安卓多功能手电筒项目
不得不说手机的闪光灯是个好东西,小编租住的是一个建于上世纪80年代的老式居民楼,楼道破烂不堪没一个灯亮。每次开门都要祭出手机闪光灯才能捅准钥匙孔 开门。这次给大家分享的是一套安卓手电筒的项目源码界面相当炫,每次启动软件和打开闪关灯也都会播放很有科技感的音效。软件主界面上显示了当前手机的电 量,最下面是全屏彩灯、交通信号灯、警灯和SOS的功能按钮。功能都已经实现,详细的情况可以自己运行查看,本源码是一套比较不错的安卓手电筒方面的源 码。学习和借鉴开发都是比较不错的选择。另外项目中集成了google的广告sdk不想要的话可以删除调用代码即可.

7.安卓多功能手机助手项目
本项目是一套基于安卓手机的多功能手机助手的项目源码,实现的功能有手机软件的管理、硬件信息的读取显示、电量情况读取和显示、闹钟设置、相机、通讯录、 联系人、短信的读取和显示。还可以一键结束程序,看了一下源码注释很丰富,功能模块代码也都是放在独立的包里,总体来说是套不错的源码,值得借鉴学习.

8.安卓记账本毕业设计项目源码
本项目源码是一套安卓记账项目源码,项目不大很适合改动做毕业设计。通过SQLite实现了消费的记录支出的记录并可以汇总成账单按月或者按天显示,还可 以备份账单数据。但是不知道什么原因在我的手机上备份失败了。另外报表部分还没有做,涉及的技术点不多,代码也比较简单,另外项目还带有一个关于项目设计 和开发的报告文档

9.安卓快递跟踪信息查询急速版
上次网站给大家分享了一个快递查询的程序源码不知大家是否还记得,上次那个是因为快递100的api变动导致部分快递查询不能正常显示,这次这个程序很完 美的实现了快递查询,我测试了两个正在路上的件,查询速度非常快查询出的信息也很准确,几乎在点查询的时候立刻就可以展现物流跟踪信息,程序没有什么内置 广告。程序没有使用快递100的api而是采用了直接http请求快递100的wap站实现的快递查询,因为wap站返回响应包非常小所以比使用api方 式更高效。另外程序的UI非常简洁,只有核心的查询功能和一个历史记录功能。给大家推荐这套代码

10.安卓蓝牙对战塔防游戏
本源码是一套安卓的塔防游戏源码,在游戏里那些平时可爱的的小狗小猫小猪小兔小象小猴小鼠全部成了被攻击的目标,游戏有七张地图、14种动物、5种武器和 若干种武器的升级版本。UI很精美,还支持朋友间的蓝牙对战。小编还乐此不疲的试玩了半小时,游戏有保存进度功能不会说退出再登录必须要重头玩。重新进入 游戏的时候可以选择是新游戏还是继续玩。另外游戏内置ScoreNinja比分墙系,可以与其他玩家全球比分,总体来说本游戏是很优秀的一款游戏。

11.安卓手机钢琴模拟器项目
本项目源码为初级作品,可能存在一些bug,但整体功能是完整的,里面有几首歌的游戏关卡,每个琴键弹出的音都像真正的钢琴。项目注释丰富,可以学习一下,另外可能是因为手机系统的问题,我的2.3.3只能进Free模式,不能进入Challenge模式。

12.安卓应用市场app商店源码
本项目源码是一套安卓应用市场手机客户端项目源码,包括Android客户端+javaweb服务端,安卓客户端与服务端通过json交互,昨天有个朋友 找我咨询这方面的源码来着,我就把这套源码推荐给他的,项目涉及的技术比较全面例如app的断点续传下载、安装管理、app搜索、用户评论、投诉举报等一 些应用商店常见的功能都有,如果正在做这一块可以参考一下。


13.安卓应用游戏卸载器项目
一套应用卸载软件项目源码,可以卸载非系统应用对于系统应用会在应用名单中直接忽略掉。看了一下实现的代码不太多,注释打的也恰到好处,理解起来可以说很轻松。另外比较搞的是可以把自己也卸载掉,其他信息可以看一下截图。

14.安卓在线txt小说阅读器项目
本项目也是一个电子书项目源码,可以在线下载或者阅读本地SD卡上的txt格式电子书。书架效果比较不错,切换到我的书架可以自动列出下载的书目和本地的 书目。但是如果SD卡上txt文件比较多可能扫描文件的时间要长一些,我的手机上因为自动产生的txt日志文件比较多所以光扫描时间好长一会儿。本项目因 为服务端网站有变动所有小说下载部分不能做演示了,但是可以参考一下实现代码。另外文本阅读部分在我的机子上也有点小问题,可以自己下载跑一下.

15.纯java编写2d坦克小游戏
一款关于坦克的2D小游戏源码,项目虽小但是涉及的东西却不少,各种炮弹飞碟和坦克等效果使用了大量的绘图血量的计算也很多,按住屏幕上下滑动可以控制炮 管角度,点击屏幕发射炮弹,另外如果摧毁了敌方的坦克或者飞碟会给自身加血,坦克行进过程中也有炮弹补给箱动画。纯java代码实现,想学习绘图方面的知 识不要错过.

16.大学生心理健康职业性格测试
一款集合大学生心理素质健康测试和职场性格测试的源码,使用之前需要新建一个用户,测试结束会给出一个心理健康测试结果报告或者职场性格测试结果报告。题 库使用了单机的SQLite,另外作者留了一个关于个人说明的小彩蛋,在那个生活右手的选择图片上按住大约2秒左右会出现个人说明主页。

17.带进度条简易浏览器项目
本项目源码是一套简单的安卓浏览器项目源码,主要使用了安卓的WebView控件,另外还实现了网页加载进度条,可以实现浏览器内的前进后退。半透明菜单 使用的popwindow弹出菜单,另外项目中还有一个背景更换的功能的实现代码,但是不知道什么原因在我手机上没有效果。项目不大,注释比较丰富。很适 合新手学习安卓的WebView控件的使用。

18.带详细注释的水果消消看源码
本项目源码是安卓水果消消看游戏源码,连连看这一类的小游戏非常讨女孩子们的欢心。本项目是纯java代码打造的连连看项目。界面简介明了,开始有3次随 机打乱水果位置和三次自动消除功能。可以随心更换背景图片与水果图,替换成自己想要的图片。项目有比较详细的注释,有点安卓基础也绝对可以一看就懂。

19.电子书阅读器项目源码
本款源码是一款强大的安卓电子书阅读器源码,可以支持doc、txt、rtf、bf2、oeb、epub、mobi、prc等八种格式的文档(虽然我没有 听说过最后五种格式),人性化的操作是项目的一大亮点,点击屏幕上半部分可以选择转跳页数下半部分显示功能菜单点击屏幕右半部分可以阅读下一页,点击左半 边分可以阅读上一页,同时可以使用音量键进行翻页,书籍的阅读包括本地阅读和在线阅读,在线阅读的内容来自网友的上传分享。另外项目中大量使用了 github上的组件。其他具体情况可以查看运行截图或者自行导入项目编译。

20.仿QQ列表通讯录项目
QQ的好友列表大家都很熟悉吧?本项目源码就是一套仿QQ好友列表的通讯录项目源码。长按分组可以出现分组信息的增删改和联系人的新增选项,长按联系人可 以出现联系人的删除编辑和移动选项。点击联系人头像右边的箭头按钮可以出现发邮件、短信和打电话的选项。联系人信息的存储使用的SQLite、项目不大注 释合理。是套比较优秀的项目源码。

21.仿QQ邮箱安卓客户端项目
安卓通用邮件客户端项目源码,自动截取邮箱域名使用smtp方式登录邮箱,所以要求测试邮箱已经开通了smtp登录授权,详细的开通方法可以google 邮箱+smtp 例如:QQ邮箱 smtp就可以找到开通smtp的方法了。本文不做介绍。项目有超详细的中文注释。UI是扒的QQ邮箱客户端的皮。想学习这一部分内容的同学可以借鉴一 下。另外在avd上测试一直不能登录需要4.0以上的真机测试。可以操作邮件联系人和发邮件。本源码是一个不错的邮箱源码.

22.仿爱乐透安卓版彩票UI项目
本项目是仿爱乐透安卓客户端UI项目源码,是很有代表性的安卓复杂混合布局项目,比较适合初学者阅读和学习安卓布局方面的知识。代码量不大,结构层次也比较清晰。希望可以帮到一些刚刚学习安卓布局的朋友们.

23.仿唱片机音乐播放器
一款很个性的音乐播放器,是仿照老式留声机样式的播放器,使用之前先选几首歌然后添加到一个半圆形的歌曲列表里,然后先按右上角的开关按钮,会有一个留声机唱针缓缓右移的动画效果。项目工程量不大,源码注释比较少。项目的亮点是动画效果。

24.仿手机QQ音乐播放器项目
一款仿QQ音乐源码,可以实现按照歌名、歌手和专辑进行分类,也有lrc歌词同步功能,不过要把歌词放在一定的路径才能同步显示。源码中也有歌曲下载方面 的实现代码。但是在真机测试中最起码我没有看到可以下载歌曲,不知道是不是以前的服务器失效的缘故。播放器有点差强人意,如果十分是满分的话我只给这款播 放器源码打4分。

25.仿微信基于位置的聊天
本源码是一款类似于微信的程序源码,只不过是强制基于位置的。就是相当于一直开着微信的位置共享。源码有较完善的注册登录系统,可以在注册的时候选择本地 头像进行上传。软件载入后会先载入附近离你最近的人的消息。直接点击可以播放语音内容,点击头像可以打开发布人的主页信息给发布人发私信。程序内置了一些 频道,可以点击右上角的提问按钮进行录音并且发布。联系人信息里面有你关注的人和关注你的人。点击下面导航栏的设置按钮可以更改个人头像和查看个人信息。 如果在主界面点手机上的菜单键可以看到软件信息的一些详细的设置,其他详细的情况可以看一下截图所示。

26.高仿安卓捕鱼达人游戏
国内某个团队开发的一套高仿捕鱼达人的安卓游戏源码,已经有人二次开发后拿出去发布了,小编从来不提倡拿着别人的代码改改就当成自己的去发布,小编的初衷 只是为了让大家借鉴一些技术然后不去重复造轮子。本套游戏的画面比较精美,我的摩托老爷机玩起来也不卡,项目默认编译版本是Android1.6。有简 单、普通、困难三种模式,捕鱼网可以升级到5级别,鱼的种类也有很多。游戏的背景音乐是甩葱歌不喜欢的话可以在游戏里面关掉也可以从源码里替换,更多的功 能可以参照游戏截图。因为小编对安卓游戏的研究有限就不对涉及技术班门弄斧了

27.高仿微信5.2内测版UI项目
本站之前也介绍过两个仿微信项目源码,在本站搜索一下“微信”就可以找到,本次给大家分享的是高仿微信5.2内测版UI的项目源码。小清新界面,动画流畅,暂时没有涉及功能上的代码,主要是就是实现了动画和滑动事件的定义,项目导入eclipse可以直接编译运行。

28.基于XMPP的即时聊天项目
本项目是一套基于android+asmack+openfire+xmpp的安卓即时聊天服务端,项目直连google talk服务器,可以使用谷歌帐号登录客户端,测试需要至少两个谷歌帐号。在程序里添加好友即可聊天。聊天核心功能使用的smack库,本站也有本源码作 者的一个作品,本项目附带3个详细讲解本项目的pdf文档。想研究一下XMPP这一块的朋友绝对不容错过。

29.教务选课学生成绩管理项目
本项目是一套基于安卓的学生成绩管理系统,包括安卓客户端源码和mysql数据库。暂不包括服务端。实现了对学期信息
、班级信息、学生信息、课程信息、成绩信息的CRUD。项目是学生级别的所以界面和编码都不太严谨导致项目看起来比较臃肿。但是项目的注释比较丰富,涉及的技术也不多,安卓开发新手可以看一下。另外如果您想找毕业设计作品的话不太建议使用这个项目,在本站搜索一下“毕业”即可。

30.企业级discuz论坛安卓苹果客户端
“Discuz是全球成熟度最高、覆盖率最大的论坛软件系统之一”小编接触discuz还是在大一的时候,无聊在网上逛着玩的下了一个discuz搭了起 来,发现这玩意还真是强大。本次给大家带来的是discuz原生app程序系列源码,包括discuz安卓端源码、discuz苹果端源码和基于 discuz2.5的api程序,还有详细的安装部署文档等整套项目源码。可以实现论坛的登录、发帖、查看论坛详细帖子、查看论坛分类帖子列表,推送论坛 消息等功能。是一套比较完善的客户端源码。更多详细的内容可以http://www.verync.com/查看。下面的图是在官网借的几张图,android版源码也实现了iPhone版源码全部功能。

31.人机五子棋项目源码
一个五子棋游戏项目源码,包括算法都有有比较详细的中文注释。只支持与机器人对战,不支持网络对战与多人局域网对战。人用白旗先手AI智商一般。可以做毕设也可以美化一下界面。

32.三组图标可调连连看
一款连连看小游戏,游戏内置动物、圣诞、国旗三种不同的连连图标主题,并且可以在玩的时候随时切换。游戏玩起来比较流畅内置一个游戏排行榜可以查看游戏玩家的排行情况.源码比较简单基本没有注释。

33.史上最牛开源集合资讯阅读器
本项目是一套关于图文资讯的项目源码,该项目是由若干个小项目组成。整整集成了10个开源项目,把不要重复造轮子这句程序界的名言发扬的无比光大。其中七 个项目以jar包形式支持,其余三个需要以工程方式链接。另外项目使用了mvc和多种设计模式但是代码比较干净整洁。更多项目细节可以自己下载源码编译运 行。另外项目是从github直接下载的,如果出错可以访问https://github.com/geniusgithub/Look-Around下载最新源码

34.随手记安卓记账项目
本项目是一套安卓记账项目源码,UI做的很精致,实现了日常支出和收入的记录功能,可以按照天、周和月来查看自己的消费情况。并且可以记录是通过什么渠道 消费的。项目还有一个分类预算功能,可以提取设置每月预算,到月底可以对照预算与真实消费之前的差别,监督自己合理理财。

35.天气预报可换肤详细注释项目
本站之前也介绍过几个关于天气查询的项目源码,本次给大家带来的也是一套关于天气的安卓项目源码,数据使用的是中国天气网(http://www.weather.com.cn)的接口。项目源码里注释写的非常非常详细,另外本项目也实现了动态更换背景图片的功能,关于项目的其他详细信息可以看一下项目截图

36.童年小游戏超级玛丽项目
相信大多数80、90后对超级玛丽、魂斗罗、拳皇这些游戏的名字肯定不会感到陌生。还记得小编小时候屁颠屁颠的拿着借来的游戏卡插到那种简易游戏机里盯着 黑白电视屏幕玩的不亦乐乎。本项目就是安卓版超级玛丽游戏的源码,但是游戏背景与超级玛丽的不一样,另外人物大小也不太协调。可能更适合在平板上操作。游 戏内置有积分墙,积分数据没有使用数据库是直接存储在txt中的,所以可以任意篡改用户得分。源码不太复杂可以借鉴学习一下算法部分。

37.云信理财项目UI设计
一款理财产品软件的UI设计,无实际功能.投资资讯按钮可以点击进去。也实现了购买和付款的界面。登录界面UI设计的很标准。输入任意帐号密码以后点击登录既可打开个人中心。投资管理界面可以打开。如果有做类似产品的可以借鉴一下本源码

================================================================================================================
我们的技术交流群:
一群:173711587 (已经爆满,碰运气也难进)
二群:305967079 (即将满员)
三群:66756039 (即将满员)
海量源码,视频,资料,文档,均在群网盘共享,500G+一键下载,不收积分手续费。
众多大神老鸟纷纷伸腿等你来抱,还在犹豫什么呢?
Join Us!
[转载]《Troubleshooting SQL Server》读书笔记-内存管理 – Joe.TJ – 博客园.
自调整的数据库引擎(Self-tuning Database Engine)
长期以来,微软都致力于自调整(Self-Tuning)的SQL Server数据库引擎,用以降低产品的总拥有成本。从SQL Server 2005开始,SQL Server就是动态管理内存使用,并且调整内存使用时,不需要重启数据库引擎。
所以它也不提供内存分配的微调项。各个组件的内存分配,完全由数据库引擎自动管理,不能手动分配。但是这货还是提供了一些配置项,能够影响数据库引擎如何使用内存。
是否使用这些配置项来替代默认值,取决于操作系统版本,SQL Server版本,可用物理内存和处理器架构等。
SQL Server是怎么分配内存的
SQL Server本身设计就会尽可能多的使用内存。正常情况下,它不会释放已经分配的内存,除非OS引发并设定Low Memory资源通知标记(Resource Notification Flag)。
SQL Server 2005的SQLOS中添加了一个专用线程用于监控OS发出的内存通知(Memory Notification)(这也是自调整功能之一)。
OS中有两种类型的内存通知:
Memory High:SQL Server可以增加Working Set使用量并使用更多内存
Memory Low:OS有内存压力,SQL Server释放一些内存给OS
如果两种内存通知OS都没设定,则表明内存使用稳定,SQL Server将继续在现有的进程空间内运行。但是这个功能在Windows 2003和SQL Server 2005之前是没有的。
内存压力分类,根据Memory Pressure – Classified:
SQL Server可以使用多少内存,取决于:
32位VAS的限制
Windows在VAS中运行每一个进程。32位的进程最多只可寻址到4GB内存,而这4GB内存又分为内核模式(Kernel Mode)空间和用户模式(User Mode)空间。默认,windows会各分配2GB。
内核模式主要用于OS,用户模式用于当前执行的应用程序进程(例如SQL Server)。
1. 用户模式VAS分配和VirtualAlloc
SQL Server保留的2GB用户模式VAS,当出现物理内存分配时才会提交。它是通过VirtualAlloc这个Windows API。
32位的SQL Server或者Windows,调用VirtualAlloc返回一个32位的指针,这就是为什么SQL Server只能使用到2GB用户模式VAS的原因。
通过VirtualAlloc分配的内存并不一定是实际物理内存,当分配的内存被提交时,才会是RAM的内存。提交内存时,windows要确认SQL Server及其它应用程序进程提交的内存总量<=(RAM+分页文件)。
需要注意是VirtualAlloc分配的内存是可分页内存,意味着OS出现内存压力时,它们会被分页(page out)到磁盘上。
2. 非缓存池分配(MemToLeave)
SQL Server占用的大部分内存分配给了缓存池,用于缓存数据和查询计划。当需要大于8KB的连续页时,会通过多页分配器分配非缓存池,如LinkedServer,线程堆栈,CLR,备份缓存等。
为了确保有足够的非缓存池内存,32位SQL Server在启动时就会保留部分VAS。保留的部分也叫做MemToLeave,大小=MaxWorkerThread*0.5MB+256,其中 MaxWorkerThread=(ProcessorCount-4)+256.
默认情况下MemToLeave=256*0.5+256=384MB,所以缓存区的大小约为(2GB-384MB)=1664MB。
3. VAS调整(VAS Tuning)
在有4GB内存的服务器上,可以使用VAS调整使得用户模式VAS占到3GB,内核模式VAS减少为1GB.
需要注意的是内核模式内存的减少,使得系统PTEs(Page Table Entires)减少,造成系统不稳定,同时SQL Server可以寻址到的内存也变少了。
Windows 2008上实现VAS Tuning,使用BCDEdit /set IncreaseUserVa [value](value取2048到3072间的值)。
4. AWE(Address windowing extension)
在多于4GB RAM的服务器上,可以使用AWE让SQL Server使用内存。使用AWE需先启用PAE,在windows 2008上使用BCDEdit /set PAE ForceEnable启用。
然后SQL Server开启”AWE Enabled”,服务账号需要具有锁定内存页的权限(Lock Pages In Memory,在组策略分配这个用户权限)。
AWE使内存管理的指针由32扩展到36位,所以最能寻址64GB内存。并且分配内存时,不使用VirtualAlloc而使用AllocateUserPhysicalPages函数。此API通过PTE直接分配物理内存。
AWE的内存只能被缓冲池(Buffer Pool)使用,并且是被锁定和不可分页的,所以最好使用设定“’max server memory”来限制一下量。
5. -g启动参数
32位平台上可以使用SQL Server的-g启动参数指定MemToLeave内存量,从而提高MemToLeave的内存分配量。但同时这也会减少缓存池的分配量。
使用64位的SQL Server
64位平台的VAS理论上限可达16EB=16,000,000TB,实际上X64限制在8TB,IA64为7TB。使用超过4GB RAM时,SQL Server不用进行额外配置。
SQL Server使用的内存只能通过VAS提交,所以所有内存都是非锁定的和可分页的。这样当OS有内存压力时,这些内存可能会被分页到磁盘(hard page out)。
VAS如此充足,MemToLeave的分配理论已经不再适用,同理-g启动参数也没有意义。
过程缓存(Procedure cache)也会存得更多,这可能会带来过程缓存过量的问题。
64位SQL Server的内存配置选项
1. 最小/大服务器内存
SQL Server提供了两个实际级别的,限制缓存池大小的配置项:min server memory/max server memory.需要注意的是从SQL Server 2000到2008 R2,这两个配置只对缓存池(Buffer pool)有效。
在启用了“锁定内存页”时,两都的差值意味着:当有外部内存压力时,SQL Server可以调整的范围。
设定最大值时,没有一个通用的值。初始化配置的基本原则:服务器内存<=16GB时,OS保留1GB,每4GB RAM保留1GB;>=16GB时,OS保留1GB,每8GB RAM保留1GB.
例如:32GB的服务器,最大值=32-1-4=27GB。然后确保性能计数器Memory\Available Mbytes介于150~300之间,逐渐调整max server memory。
2. 锁定内存页(lock pages in memory)
64位SQLOS默认使用VirtualAlloc分配所有的内存,此API分配的内存是非锁定和可分页的。当OS有内存压力时标记MemoryLow, SQL Server会释放内存直到”最小服务器内存”。
如果它释放的速度不够快或者释放的量不满足于OS,则这些内存会被分页到分页文件。对于使用大内存的SQL Server,WorkingSet分页对性能影响是非常严重的。
启用锁定内存页,使得SQL Server分配缓存池内存时使用AWE API AllocateUserPhysicalPages。此函数分配的内存是锁定的和不可分页的。
而缓存池占用着SQL Server大部分内存,所以启用锁定内存页会很大程度上避免WorkingSet分页。AWE Enabled配置项在64位SQL Server是无效的空操作。
启用锁定内存页后,任务管理器的SQLServr.exe显示的是非缓存池内存用量。需要使用SQL Server:Memory Manager\Total Server Memory查看总的内存用量。
启用锁定内存页是SQL Server 2005/2008/2008 R2企业版和2008 R2标准版的功能。在2008 SP1_CU2和2005 SP3_CU4更新后,也可以通过启用跟踪标记845来其它版本启用锁定内存页。
3. LPA(Large Page Alloction)
在X64系统上,大页分配是指使用2MB的大小分配内存页,默认内存页是4KB。启用LPA需要满足条件:a). SQL Server 企业版 b).服务器RAM>=8GB c).启用锁定内存页
X64系统上,启用LPS(Large Page Support)和跟踪标记834,SQL Server将使用大页分配缓存池内存,并且SQL Server的启动时间显著增长。
要严格测试性能受益情况,并尽量在SQL Server专用服务器上启用。
诊断内存压力
通过性能计数器和DMV来判断系统是否有在在内存压力。需要谨记的一条:通过一两个性能计数器,是不能确定任何系统压力的,要全面的分析。
SQL Server:Buffer Manager下的性能计数器:
1. Buffer Cache Hit Ratio
建议值是OLTP>=95%,OLAP>=90.这个计数器本身并不能说明SQL Server有内存压力,>=95%只是说明了SQL Server按设计的那样执行了数据页的预读预取。
2. Page Life Expectancy
以秒为单位,代表高速缓存的页过期并所占空间被重用的时间。
3. Free Pages
SQL Server缓冲池中的空闲页数量。当Page Life Expectancy计数器持续下降,Free Pages接近0,Free List Stalls持续大小0,则是表示明显的内存压力。
4. Free List Stalls/Sec
每秒请求等待缓冲池中空闲页的次数。
5. Lazy Writes/sec
每秒被LazyWriter进程刷新的缓冲池数据页数量。发生Lazy Writes/sec的同时PLE和Free Pages较低,又发生Free List Stalls,则说明缺少RAM。
SQL Server:Memory Manager下的性能计数器:
1. Total Server Memory (KB) 和Target Server Memory (KB)
前者表示SQL Server已经占用的内存量,后者表示SQL Server想要占用的内存量。后者大于前者时,证明SQL Server需要更多可用内存,也是内存压力标志之一。
2. Memory Grants Outstanding
成功获得workspace内存的进程总数。值太低表示有大量的用户活动或者负载过重,如果同时Memory Grants Pending值偏高,则也是内存压力的标志之一。
3. Memory Grants Pending
正在等待被授予workspace内存的进程总数。
内存相关的DMVs
sys.dm_exec_query_memory_grants,sys.dm_os_memory_cache_counters,sys.dm_os_sys_memory,sys.dm_os_memory_clerks
常见的内存相关的问题
1. SQL Server内存泄露的误区
SQL Server看起来部会吃掉服务器尽可能多的内存,这不是内存泄露。扩展存储过程或者链接服务器驱动的内存泄露,可能会导致SQL Server无限制地去获取内存。
2. 分页问题
从SQL Server 2005 SP2后,当SQL Server进程的WirkingSet被收缩并分页到磁盘上时,错误日志中会写入”a significant part of SQL Server process memory has been paged out.”
可能的原因有:
1.设定了不正确的最大服务器内存,并且未启用锁定内存页
2.Windows执行非缓冲的IO操作占用了大量的系统调整缓存,如拷贝文件
3.硬件驱动问题导致的内存过量使用或内存泄露
参考KB918483并找到进程工作集被收缩的根本原因并解决之。对于SQL Server而言启用锁定内存页,是取后也是解决此问题的唯一手段。
3. 启用了锁定内存页但未限制最大服务器内存导致OS不稳定
启用了锁定内存页但未限制最大服务器内存或者设定了过高的值,SQL Server会占尽可用内存,从而导致OS缺少内存而不稳定甚至崩溃。
启用了锁定内存页,一定要限制最大服务器内存,留下合适的内存量给OS使用。
4. 应用程序域标记为卸载导致内存压力(App Domain is marked for unload due to memory pressure)
这是SQLCLR相关的错误,通常在32位SQL Server上发生,也可能在设定了最大服务器内存,限制了SQLCLR的可用VAS的64位SQL Server上发生。
一般是由于SQLCLR程序集低效的内存使用方式和SQLCLR可用的VAS受限引起。
32位上发生此错误,建议升级到64位,以使用更多的用户模式VAS。但是如果因为SQLCLR程序集使用大内存对象(如DataSet)导致,升级可能也解决不了问题,
把SQLCLR代码做成独立的控制台或者WinForm程序并正确配置其内存使用。
如果SQLCLR存储整个执行的状态,但是代码访问安全性(Code Access Security)定义为UNSAFE,则卸载会丢失状态信息导致更严重的问题。
解决此问题最好是升级到64位,临时的解决方案是使用-g启动参数增加MemToLeave内存给SQLCLR使用。
5. 701错误和FAILED_VIRTUAL_RESERVE
当SQL Server分配一段连续的VAS区域失败时,就会报此错误并输出请求分配的大小。
通常这个错误只出现在MemToLeave受限的32位系统上,因为各种需要分配大于8KB的操作类型,如设定了过大备份缓存,XML,SQLCLR,空间数据类型和链接服务器等。
解决此问题最好是升级到64位,临时的解决方案是使用-g启动参数增加MemToLeave内存。
6. 过渡分配的虚拟机
今时今日,SQL Server虚拟化已经很常见了。虚拟化的管理器提供的高级功能“内存过载(Memory Overcommit)”允许虚拟机的内存总量超过宿主服务器实际RAM总量。
内存过载时,虚拟化管理器是通过内存释放(Memory Ballooning)和内存分页(Memory Paging)两种方法来处理内存压力的。
内存释放是一个运行在Guest VM中的进程。它是VM工具之一,通过释放驱动(Ballooning Driver)安装到每个Guest VM中。它可以从Guest获取内存返还给宿主。
当宿主有内存压力时(内存过载时),会通知内存释放返还内存,如果返还的内存量或者返还的速度不足以让宿主机解决内存压力,则宿主会直接把Guest VM的内存分页到磁盘。
被分页的Guest性能会下降,同样其上运行的SQL Server也受影响,甚至缓冲池内存会降到0.
现在被微软支持的虚拟化管理器都提供了方法设定Guest VM的最小保留内存用于保证上面的SQL Server正常运行,所以在虚拟化时要合理设定。
同时为每个SQL Server设定最小服务器内存,也可以一定程序避免此问题。
7. 多实例的内存设置
一台机器上多个实例,每一个都必需设定合适的最小和最大服务器内存,并且最大服务器内存之和要小于物理RAM以保留足够内存给OS使用。
如果不设定最小服务器内存,当OS或者其它实例有内存压力时,此实例会主动收缩内存而导致性能问题。
总结
最重要的是:今时今日你还有什么理由不用64位的系统!?