[转载]Flex Spark皮肤定制
[转载]Flex Spark皮肤定制 – twaver – 博客园.
Flex3到Flex4,增加了Spark组件,这是Flex的一次重要升级,基本上组件全部重写了一套,为了保持向下兼容,出现了同一组件两套实现并存的现象,虽然说Spark组件中也可嵌入MX组件,但实际使用常会遇到些小麻烦,例如mx:Tree滚动条异常,透明背景无法监听鼠标事件等等,如果你使用定制的组件,写法稍有不规范,就会出现Spark下显示异常,比如之前定制的TWaver圆角文本输入框就是如此,不得不在Spark下重新实现。
Spark与MX组件的区别
Spark最大的目的或许是方便Adobe兜售它的Flash Catalyst,当然这是个玩笑,Spark组件更加轻量,更易扩展。所有的Flex组件都从UIComponent继承,Spark组件也是如此,只 不过它多了一层包装,从SkinnableComponent继承。MX中每个组件对应一个类,在Spark体系中,每个组件对应两个类,一个 Component类,一个Skin类,例如按钮组件对应:spark.components.Button和 spark.skins.spark.ButtonSkin,这种设计实现了组件行为逻辑与视图呈现的分离,就像将程序员和美工的工作分开一样,这也是 MVC思想的产物。
Flex 3与Flex4的区别详见:
Differences between Flex 3 and Flex 4
what is difference in halo and spark in Flex3 and Flex4
Spark组件外观定制
前面提到Flash Catalyst,这就是Adobe提供的组件外观可视化编辑工具,这个工具主要针对美工、设计师,对于习惯于写代码的程序员们也可以使用Flash Builder 4+来定制组件。
回到实际问题,之前我定制的圆角文本输入框在Spark框架下出现了问题,我决定将其改造,使用定制组件Skin的方式实现圆角文本输入框。
定制圆角文本输入框
需求与分析
我的需求很简单,文本框带圆角,其内放个图标,如同mac osx的搜索框。实现思路也很清晰,给矩形增加圆角,再多放个icon,定好位置,做好布局……
定义组件类
开始动手,按Spark组件定制的步骤,先定义组件类,再定义外观类。
组件类描述组件的行为和属性,这里我们定义一个 CustomTextInput.as,继承于spark.components.TextInput,组件行为不需要特别定义,这里只是增加两个样 式:icon和radius,分别表示图标和圆角半径,而具体的呈现将在Skin类中实现。
package component{
import skin.CustomTextInputSkin;
import spark.components.TextInput;
[Style(name="icon", inherit="no", type="Object")]
[Style(name="radius", inherit="true", type="Number")]
public class CustomTextInput extends TextInput{
[Embed(source="/images/search.png")]
private const defaultIcon:Class;
public function CustomTextInput(){
super();
this.setStyle('icon', defaultIcon);
this.setStyle('radius', 10);
this.setStyle("skinClass", CustomTextInputSkin);
}
}
}
定义外观类外观类描述组件的呈现,这里我们按Flash Builder提示创建MXML Skin,选择名称为CustomTextInputSkin,设置Host component为component.CustomTextInput, 完成向导,自动生成文件CustomTextInputSkin.mxml


生成的文件实际上是默认TextInputSkin的复本,找到下面的片段:
<!-- border --> <!--- @private --> <!--- @private --> <!-- fill --> <!--- Defines the appearance of the TextInput component's background. --> <!--- @private Defines the background fill color. --> <!-- shadow --> <!--- @private --> <!-- text --> <!--- @copy spark.components.supportClasses.SkinnableTextBase#textDisplay -->
其中边框,填充,阴影,文本框都有对应的块,分别对边框、填充、阴影添加圆角,并在文本块增加了图片组件,修改如下:
<!-- border --> <!--- @private --> <!--- @private --> <!-- fill --> <!--- Defines the appearance of the TextInput component's background. --> <!--- @private Defines the background fill color. --> <!-- shadow --> <!--- @private --> <!-- icon --> <!-- text --> <!--- @copy spark.components.supportClasses.SkinnableTextBase#textDisplay -->
使用运行测试定制的组件,代码如下:
<!--?xml version="1.0" encoding="utf-8"?-->
运行界面

代码下载
注意
此代码使用的Flex SDK 4.5编译,需要在Flash Player 10.2+运行,当然你也可以稍微改造一下代码,使其兼容Flex SDK 4.0,如图标改s:Image为mx:Image:
1 |
<!-- icon --> |
2 |
<mx:Image id="icon" x="0" y="0" source="{hostComponent.getStyle('icon')}" verticalAlign="middle" height="100%"/> |
参考文档
http://www.unitedmindset.com/jonbcampos/2010/03/21/new-spark-skinning-workflow/
http://www.slideshare.net/danorlando/creating-custom-spark-components-in-flex-4
http://www.adobe.com/devnet/flex/videotraining/exercises/ex5_06.html
[转载]信息发布系统 Jquery+ASP.NET MVC架构开发(1) 需求分析和架构构思
[转载]信息发布系统 Jquery+MVC架构开发(1) 需求分析和架构构思 – 似水流年-johnhuo – 博客园.
最近朋友的公司已经注册完成了,需要我帮它来开发信息发布系统.
我最近在公司做的项目多为微软的mvc 架构的开发,借给朋友做系统的机会,自己也总结一下,也跟大伙分享一下.
首先是工具准备
Enterprise Architect 7.5 汉化版(描述需求和设计)
microsoft visio
VS2010+SQL SERVER 2008(朋友的网站小access就够了,我本机就用SQL server吧)
动软.Net代码生成器+CodeSmith Studio(用于生成一些重复用的代码)
下面描述一下信息发布的需求:
开发这个系统本身是为了朋友公司的网站信息发布,朋友的公司主要是做仪表类的产品销售。这样的网站需要发布的内容如下:
1.一些普通的信息.2.带图片的信息.3.直接为一个图片.4.一个仪器类别。
网站的首页及其子页面主要是把后台存取的类别,信息,图片展示出来。
这样我们分析一下,软件的功能需求如下:
账号管理(增,删,改,查)
类别管理(增,删,改,查)
新闻管理(增,删,改,查)
图片管理(增,删,改(覆盖))
下面是用例描述:
单个用例的描述可参考下面的例子
| 用例名称:账号查询 |
| 用例标识号:101 |
| 参与者:管理员 |
| 简要说明:
查询所有的账号信息 |
| 前置条件:
管理员已经登录后台信息管理系统 |
| 基本事件流:
1.管理员进入账号管理页面 |
| 其他事件流A1: |
| 异常事件流:
1.提示错误信息,管理员确认 2.返回到管理系统主页面 |
| 后置条件: |
| 注释:无 |
架构构思:
主要想采用
modal+dal+bll (wcf ) +Controllers+view(JQuery)展现层

请注意我是为了总结一些技术,朋友的网站就不需要wcf了。
[转载]Android开发教程 --- 葵花宝典第二层 Activity生命周期
[转载]Android开发教程 — 葵花宝典第二层 Activity生命周期 – Jason_CC – 博客园.
Hi 大家好
今天我准备花一节课来讲讲Activity的生命周期,这个概念还是比较重要的,相信大家看书或者资料都会提及它,可想而知!希望大家能看了我的博客后能搞明白生命周期的概念以及在以后的代码编写中,代码往哪里去写。
照例,上笑话。。。
有的女人就是Windows虽然很优秀,但是安全隐患太大。
有的女人就是MFC她条件很好,然而不是谁都能玩的起。
有的女人就是C#长的很漂亮,但是家务活不行。
有的女人就是C++,她会默默的为你做很多的事情。
有的女人就是汇编虽然很麻烦,但是有的时候还得求它。
有的女人就是SQL,她会为你的发展带来莫大的帮助。 感慨下,呵呵
这是Android帮助文档中的图,我先发上。帮助文档位置在例如我将SDK文件夹放在D盘,那么我的帮助文档路径为
D:\Adnroid\Android-sdk-windows\docs\index.html 英文好的朋友可以参考这个帮助文档

我们主要会学习以下七个生命周期函数,活动(窗体)的生命周期函数并不止这七个,后面会说到。。耐心看

以下是对每个生命周期函数的中文解释

大家看过这些解释,对它有了一个大概的认识,那么接下来我们动手开始编写代码,来看看运行时的效果,这是代码

public class MainActivity extends Activity {
Button btn1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
System.out.println("第一个活动(窗体)初始化------------- onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 =(Button) findViewById(R.id.btn1);
btn1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, ResultActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("第一个活动(窗体)初始化完毕,并将要显示时------------- onStart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("第一个活动(窗体)在即将于用户交互时------------- onResume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("第一个活动(窗体)在系统即将启动第二个活动时------------- onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("第一个活动(窗体)在用户不可见时------------- onStop");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("第一个活动(窗体)当重新启动时------------- onRestart");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("第一个活动(窗体)当活动销毁时------------- onDestroy");
}
}
public class ResultActivity extends Activity {
TextView txtResult;
Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
System.out.println("第二个活动(窗体)初始化------------- onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
txtResult = (TextView)findViewById(R.id.txtResult);
txtResult.setText("第二个窗体");
btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.setClass(ResultActivity.this, MainActivity.class);
startActivity(i);
}
});
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("第二个活动(窗体)初始化完毕,并将要显示时------------- onStart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("第二个活动(窗体)在即将于用户交互时------------- onResume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("第二个活动(窗体)在系统即将启动第二个活动时------------- onPause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("第二个活动(窗体)在用户不可见时------------- onStop");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("第二个活动(窗体)当重新启动时------------- onRestart");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("第二个活动(窗体)当活动销毁时------------- onDestroy");
}
}
如果大家要创建多个活动(窗体)时,需要到AndroidManifest.xml中进行活动(窗体)的注册:
<!--?xml version="1.0" encoding="utf-8"?-->
在这里说下,如何LogCat切换到Java透视图中
在Java透视图的左下角有一个小图标,点击后 -> 其它 -> Android -> LogCat -> 确定 此时LogCat就会出现在我们的包资源管理器那里,你可以拖动它到你想要放置的地方。
由于我们在代码中使用了System.out.println 那么 我们可以在LogCat中去新建一个Filter 如何建立呢?

点击那个绿色的加号,会弹出一个窗体 ,在Filter Name 中任意输入一个名字 ,我这里叫做Sys,在By Log Tag 中输入 System.out 然后确定,此时就会创建成功,我们在程序中使用的System.out.println 就会显示在刚才建立的那个选项卡中。
大家观察,打印结果

到这里,两个窗体跳转所要执行的函数,大家应该是能够明白了。
当我们按下Home键,又该如何执行呢?

大家看图,然后再参照最开始的那七个生命周期的说明,自己动手实践下,就能明白了

当点击Back键后,其实,Android操作系统是在向活动栈中逐一销毁之前压入的活动。大家可以这样做个试验,两个窗体直接反复跳转4次,在跳转前,在编辑框中输入一些值,然后在点击Back键,看要点击几次,并看编辑框中的值。

Visible Lifetime 可视期介于调用 onStart 与 onStop 之间。此时Activity是可见的,但是不能响应用户事件。一个Activity在其生命周期中是有可能经历多个可视期的。在非常极端的情况下,系统也有可能终止一个处于可视期的活动,这种情况很少见。onStop 方法通常用于暂时或者停止那些用来更新UI的动画,线程,定时器,服务等,所以当活动不可见的时占用的系统资源是很少的。当活动由不可见状态转化为可见状态时,在 onStart 中再启动相关的线程和服务。onStart 和 onStop 同样也用来注册和取消注册(unregister)那些用来更新UI的广播接收者。在活动不可见时我们需要取消注册接受者(Receivers),特别是那些支持目的动作(Intent)以及更新UI的接收者。
[转载]ASP.NET中动态获取数据使用Highcharts图表控件
[转载]ASP.NET中动态获取数据使用Highcharts图表控件 – 某人的 – 博客园.
Highcharts 官网:http://www.highcharts.com
Highcharts 官网示例:http://www.highcharts.com/demo/
Highcharts 官网文档:http://www.highcharts.com/documentation/how-to-use
Highcharts 官网参考手册:http://www.highcharts.com/ref/#credits–enabled
具体实现的效果如图:
具体代码:
ASP.NET前台脚本代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/MyHome/MasterPage.master" AutoEventWireup="true" CodeFile="ryfb.aspx.cs" Inherits="MyHome_tixi_ryfb" %>
<script src="http://www.cnblogs.com/JScript/JQuery/jquery-1.4.2.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/JScript/JQuery/Highcharts/highcharts.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/JScript/JQuery/Highcharts/modules/exporting.js" type="text/javascript"></script> <script type="text/javascript">// <![CDATA[
var chart;
$(document).ready(function() {
chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'bar'
},
title: {
text: '人员体系分布情况'
},
subtitle: {
text: 'Source: 下级人员' //图标的副标题
},
xAxis: {
categories: <%= xAxisCategories %>,//从后台获取数据
tickPixelInterval:0.2,
title: {
text: null
}
},
yAxis: {
min: 0,
title: {
text: '人数 (个)',
align: 'high'
}
},
tooltip: {
formatter: function() {
return ''+
this.series.name +': '+ this.y +' 个';
}
},
plotOptions: {
column: {
pointPadding: 0.3,
borderWidth: 0
},
bar: {
dataLabels: {
enabled: true
}
}
},
legend: {
layout: 'horizontal',
align: 'center',
verticalAlign: 'top',
y: 50,
borderWidth: 1,
backgroundColor: '#FFFFFF',
borderColor: '#CCC',
shadow: true
},
credits: {
enabled: false
},
series: <%= returnValue %> //此处数据从后台获取
});
});
// ]]></script>
<div class="profile">
<div class="profile_title">
<h2>人员分布</h2>
</div>
</div>
CS获取数据并处理数据的代码段:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LHCYW.Core.DataAccess;
using System.Data;
public partial class MyHome_tixi_ryfb : System.Web.UI.Page
{
public string returnValue = "";//"[{name: '人员体系城市分布情况',data: [15,18,13,13,10,16,23,23]}]";
public string xAxisCategories = "";//"['北京市', '上海市', '重庆市', '天津市','抚州市','长沙市','常德市','济南市']";
public string containerHeight = "400px";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
XTUserDataAccess l_XTUserDataAccess = new XTUserDataAccess();
DataTable dt = l_XTUserDataAccess.GetRYFB(LHCYW.Core.WebSession.User.DTG);
if (dt.Rows.Count > 0)
{
if (dt.Rows.Count > 4)
{
containerHeight = (dt.Rows.Count * 50).ToString() + "px";
}
else
{
containerHeight = "200px";
}
string dataY = "[{name: '人员体系城市分布情况',data: [";
string dataX = "[";
foreach (DataRow dr in dt.Rows)
{
dataX += "'" + dr["CS"].ToString() + "',";
dataY += dr["NUM"].ToString() + ",";
}
xAxisCategories = dataX.Substring(0, dataX.Length - 1) + "]";
returnValue = dataY.Substring(0, dataY.Length - 1) + "]}]";
}
}
}
}
代码下载:点击我下载
[转载]60款高质量的网站模板免费下载(上篇)
[转载]60款高质量的网站模板免费下载(上篇) – 梦想天空(山边小溪) – 博客园.
当你想快速制作出一个网站的时候,网站模板就非常有用了。学习网页设计的朋友也可以从网站模板入手,学习模板网站的布局方式和编码风格。这篇文章收集了60个高质量的网站模板免费,您可以免费下载使用,希望这些网站模板能帮助到您。
Beez design
演示 | 下载







New Horizon
演示 | 下载




Imagination
演示 | 下载



Green House
演示 | 下载



Nightvision
演示 | 下载






Vectorlover
演示 | 下载

UrbanArtist
演示 | 下载

Techjunkie
演示 | 下载

Watch This
演示 | 下载

Unbound 1.0
演示 | 下载

[转载]60个优秀的免费网站模板下载(下篇)
[转载]60个优秀的免费网站模板下载(下篇) – 梦想天空(山边小溪) – 博客园.
这篇文章收集了60款各式各样的高质量网站模板,您可以免费下载使用。当你需要在短时间内制作出网站的时候,网站模板就非常有用了,感谢那些优秀的设计师分享他们的劳动成果,让更多的人可以使用他们的创意设计,希望这些网站模板能帮助到您。
Conceptnova
演示 | 下载







Environmental Brand Design
演示 | 下载

Eco Business
演示 | 下载
The Autumn
演示 | 下载







News Portal
演示 | 下载

Electronix
演示 | 下载

[转载]程序员该如何规划自己的人生
[转载]程序员该如何规划自己的人生 – 南京.王清培 – 博客园.
其实大大小小的文章讨论程序员的人生规划不计其数。本人还是坚持谈谈个人对于程序员日后规划的看法,也是本人做事的一种风格跟对人生的态度吧。希望能给大家有点帮助。
首先我们庆幸的是我们是软件行业的一员,我们作为程序员从最基础的“农民工”开始的,从反反复复的代码中成长起来。我们要为我们的职业感到骄傲才对,他赋予了我们善于动脑的习惯,程序员每天要应对的问题多种多样,我们要快速的思考,不知不觉我们锻炼出了思考的习惯。[当思考成为习惯,成功将随之而至]
思考是前进的本质,我们在当初能进入程序员行业,就说明我们还是喜欢挑战的。但是话说回来,程序员的最终是需要归宿的,我们不可能一辈子这样处于 “基层”。所以我们需要思考,我们以后的归宿在哪里,等过了三十岁,我们的本钱是什么。可能你会说我有的是编程的经验,是项目经验,我框架写的很好。技术 就好比水,“可载舟亦可覆舟”。当我们沉浸在技术的水潭里,可能无法自拔。模式、框架等等太多了,我们是学不完的。多年的项目经验固然是我们的核心竞争 力,但是这样的竞争力似乎显的有点“沧桑”,已没有当年的激情和霸气。仅靠那些辛辛苦苦的血汗“架构”,已不能满足我们所付出的回报。
我们基本上都是来自小城市,到大城市上班工作,我们买不起房子。从二十出头就出来打拼,到了三十岁我想都该回家了;这短短的近十年的时间,对我们程 序员来说真的很重要,我们不要企图一步登天,我们需要慢慢的学习。学习做人、学习技术、学习与人交流、学习公司的运行原理、学习盈利模式、学习的东西太 多。我们要抓紧这短短的时间好好学习,不仅要学技术,我们还需要学习更多的大智慧、大战略。[没有远虑,必有近忧]
所以我们程序员需要做长远打算,在学习技术的过程中,我们更多接触的是公司的业务。业务驱动公司日常运转,我们应该善于总结一个公司是如何运转的,包括管理、资金、营销、广告等等。
我们是程序员,我们的资本是什么,相比大家都知道,我们有技术我们有项目经验。不错,我们是有这些,但是我们不能总是停留在代码的层次上,我们需要 有产品的理念,代码不值钱,产品值钱。在不断的开发过程中,我们需要将自己提升到一个高度,看产品不是看代码。这样的理念对于日后的创业尤其重要。
下面是本人抽象出来的人生规划图(程序员职业病改不了,喜欢分析):
1。

我大概将程序员的整个发展周期进行了基本四项的抽象。
一:自身修养
俗话说的好,先学会做人在学会做事。这是我们做人的根本,任何事情均是建立在与人交往上的。如果我们在三十岁之前还没有改变自己身上的缺点,没有让自己进入一个备战状态,还是整天浑浑噩噩,那就真的太迟了。这是纵向分析,所有的东西离不了它,我们日常需要注意了。
二:技术的学习
这是我们天天都在做的,但是技术这个东西变化太快。所以我们必须抓住核心的东西,以不变应万变。我们是.NET程序员,那么我需要抓住框架本身的原 理,C#语言的原理,任何新东西都是建立在这些基础上的。就算哪天学起来也很快。如果有时间的话,可以学习一些底层知识。我们来看对技术的抽象图:
2。

技术是我们的核心竞争力,我们必须话大功夫去学习。由于以后自主创业的可能性比较大,所以多学点技术不坏。
三:荣誉,提高自己的身份
其实这种身份不是贬义词,而是我们的知名度,在技术的领域里,我们需要有一帮自己玩的好的朋友。比如一些技术的圈子如:MVP圈子,程序员俱乐部等 等;在靠自己去跟人打交道的时候,往往真的很看重个人的荣誉,所以我们可以参加一些国内的或者国际的一些荣誉考试,MVP、Oracle、Java等等; 证书在手还是有好处的。
3.

荣誉可以根据个人喜好自己去争取努力。需要有一定含金量的证书,能证明自身能力的证书才重要。
四:三十而立的准备
这是至关重要,十年的时间,我们好好总结好好学习对于我们后期的创业也好,干嘛都好,不只是一个简简单单的程序员了。我们有产品的理念,我们有与人交往的技巧等等。
4。

总结:这样全面的学习,等我们到了三十岁。那就全身是宝,那个时候再做什么决定可能60%意味着成功。
[转载]Ubuntu安装Mono2.10并使用Apache承载Asp.Net mvc3应用程序
[转载]Ubuntu安装Mono2.10并使用Apache承载Asp.Net mvc3应用程序 – 傲雪啸风 – 博客园.
ASP.NET长久以来令大规模部署所诟病的便是其成本的高企,mono的出现为.net应用程序打开了通往linux的一扇大门,使得.Net应用程序 低成本部署成为可能。最近为了尝试将ASP.NET Mvc3部署在Linux下,查阅了很多资料,但发现大多数都是在OpenSUSE的,介绍如何Ubuntu下使用Apache2的文章比较少,但也终于 找到了一些比较有价值的并最终安装部署成功,把安装过程总结出来,供广大.Neter参考。
0. 在安装之前
Ubuntu10.04为全新安装,并在安装的过程中选择了ssh server, LAMP server, samba三个角色
1. 安装依赖程序
apt-get install build-essential bison gettext pkg-config autoconf libtool automake
2. 安装Mono2.10
wget http://ftp.novell.com/pub/mono/sources/mono/mono-2.10.tar.bz2 tar -xjvf mono-2.10.tar.bz2 cd mono-2.10 ./autogen.sh make sudo make install cd ..
记得make install需要sudo,否则会提示无权限
参考资料[1]中的./autogen.sh一行有路径参数,但发现实际输入路径参数会提示找不到该参数,故取消,安装后路径在/usr/local/bin下
3. 安装XSP服务器
wget http://ftp.novell.com/pub/mono/sources/xsp/xsp-2.10.tar.bz2 tar -xjvf xsp-2.10.tar.bz2 cd xsp-2.10 ./configure make sudo make install cd ..
同第2步,参考资料[1]中的./configure一行有路径参数,但发现实际输入路径参数会提示找不到该参数
4. 安装apache-dev
apt-get install apache2-dev
5. 修整相关文件
sudo mv /etc/apache2/mod_mono.conf /etc/apache2/mods-available/ sudo a2enmod mod_mono sudo service apache2 restart
默认mod_mono安装完成后mod_mono.conf会直接出现在/etc/apache2下,ubuntu下的apache2采取分离-包含的配置文件策略,需将mod_mono.conf复制至mods-available并启用mod_mono
6. 修改站点配置文件
ServerAdmin webmaster@localhost ServerName mono.me.com DocumentRoot /var/www/mono MonoServerPath mono.me.com "/usr/local/bin/mod-mono-server4" MonoDebug mono.me.com true MonoSetEnv mono.me.com MONO_IOMAP=all MonoApplications mono.me.com "/:/var/www/mono" Allow from all Order allow,deny MonoSetServerAlias mono.me.com SetHandler mono SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-zip dontvary AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript ErrorLog /var/log/apache2/error-mono.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel debug CustomLog /var/log/apache2/access-mono.log combined
除了手动更改, 该配置文件还可使用Mono Config Tool自动生成.
需要注意”MonoServerPath mono.me.com “/usr/local/bin/mod-mono-server4″一行,mono2.10采取上述默认过程安装完成后并不在很多文章中提到的/usr/bin下,而在/usr/local/bin下
还有DocumentRoot /var/www/mono 此目录需要有执行权限,否则apache会报403错误
7. 部署站点
新建一个ASP.NET Mvc3应用程序,将该Mvc项目生成部署包,通过samba复制至第6步中设置的站点根目录下,并重启apache2服务,在客户机设定好Host并在 浏览器中输入设定的域名,如果一切正常,恭喜你可以看到一个经典的Asp.Net错误页,将customerError设为Off,将会看到,是因为缺少 一个System.Web.Helpers的dll。此时,回到Mvc项目中,你需要
(1). 添加如下引用
System.Web.Razor.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.Deployment.dll
(2). 将如下引用的dll设定为复制到本地
System.Web.Helpers.dll
System.Web.Mvc.dll
System.Web.WebPages.dll
System.Web.Razor.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.Deployment.dll
(3). 重新生成部署包,覆盖服务器上的bin目录即可。
OK,此时,你已经摆脱了昂贵的Window Server,当然,使用盗版的同学可以偷偷走开,如果你还想摆脱昂贵的SQL Server,那么你可以使用MySQL、PostgreSQL、Mongodb,如果你不需要多么强大的性能,那么sqlite也是一个不错的选择。
参考资料:
[1] 《How to get ASP.NET MVC 2 working with Mono in 10 Steps》 – buddylindsey
[2] 《ASP.NET MVC 3 with Razor on Mono 2.10.1》 – Robert Jordan
[转载]Android开发教程 --- 葵花宝典第一层 初识Android
[转载]Android开发教程 — 葵花宝典第一层 初识Android – Jason_CC – 博客园.
Hi 大家好!
今天带大家一起来认识Android,照例上笑话。。。
某邮局下面的支局通过MODEM于总局连通.但线路质量不好, 常常在用的时候断线,于是,支局打电话给维护人员,”我的机死 啦……”维护人员说:”你的进程吊在上面了,等一下,我帮你把 进程杀掉……” 时间长了,支局打电话的时候就说,”我又吊死啦,你把我杀掉!” 🙂

创建一个Android项目 选择菜单栏中的 文件 -> 新建 -> Android Project
会弹出如下窗体

创建成功后,将在包资源管理器中,生成的项目框架如图

运行程序 需要先配置AVD(虚拟机) 单击菜单栏中的 窗口 -> Android SDK and AVD Manager 选项,在弹出的窗口中,选择 New… 按钮
创建。
然后 对着包资源管理器中的项目名称 右键 -> 运行方式 -> 1 Android Application
此时,模拟器就会启动,第一次启动 大概需要1-2分钟,请耐心等待。
双击打开src 下的HelloActivity.java文件,会看到如下图的代码,
1 首先一个活动(窗体)需要继承 一个叫做 Activity的类
2 需要重写基类的onCreate方法
2.1 生成onCreate方法的快捷方式 在空白处 输入 oncreate 然后 按 Alt + / (呼出智能提示) 然后回车
2.2 在空白处 鼠标右键 -> 源代码 -> 覆盖/实现方法 在弹出的窗体中,找到onCreate方法,选中 -> 确定

展开 res 文件夹 ,会看到有一个叫做 values的文件夹,里面有一个string.xml
这个文件里可以定义我们程序中需要用到的显示常量 ,例如 按钮中的提交 ,提示用户的信息 ,例如 注册时的用户名 提示,等。。
都可以在string.xml中的 <string name=””></string>定义,此时定义的name将会在项目的 gen文件夹下的R.java中生成索引ID
这个生成过程是自动完成,不需要我们编写代码。

在 res 下还会有一个叫做 layout的文件夹,此文件夹下主要是用来存放,活动(窗体)的布局文件。。如果不太好理解,大家可以
把它理解成 我们做HTML时,用到的CSS文件 ,只不过这个文件中不仅可以写样式,还可以写标签而已。可以在这个文件中定义一些控件,
以及对这些控件进行美化(样式)。

好,到这里不知道大家对Android是否有了一个大概的了解。还是没有弄清的朋友在回头好好看看,加深理解。
现在大家学习3个控件
1 TextView (用于提示的文本框) 例如我们在网页中的注册页面中看到的 用户名: 类似与HTML标签中的 <label>
2 EditText (用于用户填写的编辑框) 类似与HTML中的 <input type=”text”>
3 Button 这个不用说了吧。。。。
大家把这3个控件都写到布局文件中(main.xml),并给它们赋值,使用上边说到得string.xml进行配置,勤加练习!
接下来,需要大家了解下Intent,目前,到这里大家先知道Intent可以做活动(窗体)与活动(窗体)之间的跳转,大家暂时可以把它
理解为HTML中的a标记

首先
1 Button btn1; 需要先声明一个Button类型的对象
2 btn1 = (Button)findViewById(R.id.btn1); 这里需要获取main.xml(布局文件)中你定义的Button,并赋值给btn1对象
2.1 R.id.btn1 代表
2.2<Button android:id=”@+id/btn1″ android:layout_width=”wrap_content”
android:layout_height=”wrap_content” android:text=”@string/btnck” />
上边红色代码将会在R.java中生成出一个对应的ID值,我们在代码中只需要通过R.id.btn1就能获取到这个Button控件
3 btn1.setOnClickListener(new Button.OnClickListener(){}); 代表需要向btn1对象绑定一个单击事件(监听器),当用户单击这个按钮时,会触发
public void onClick(View v) {
这里面的代码
}
4 test.class 这个代表我又创建了一个叫做test.java文件并继承了Activity 重复HelloActivity.java的步骤
并且单击btn1按钮后,跳转到test窗体中

今天的课程就到这里,给大家布置一个小练习,如图

PPT和代码我已经上传到公司网站 http://www.bj-stl.com/android.html
Mikel









