1、javascript:void(0)
Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。
#包含了一个位置信息.默认的锚是#top,也就是网页的上端。
而javascript:void(0)仅仅表示一个死链接。
这就是为什么有的时候页面很长浏览链接明明是#,却跳到了页首。
2、Integer.intValue == int
当封装bean的属性类型为封装类型Integer时,如user.id=11。
则if(user.getId() == 11)可能为false,而if(user.getId().intValue() == 11)返回true。
3、select * from test where id IN (309,3,308) order by field(id,309,3,308)
SQL中in()的返回结果默认有排序,若不想默认排序则使用order by field(id,返回顺序)。
4、规范javabean的属性使用封装类型。
因为bean 在很多中情况下使用的时候,都要求其属性要有toString,或者要求属性是一个object,所以用Long 不用long,用Integer 而不用int。JAVA是面向对象的,JAVABEAN作为一种规范使用,所以在习惯上会把它属性都包装成对象。记住,这本身就是一种规范。
以Integer 和 int 为例进行对比
1)如果成员变量的intValue还未确定,用Integer的话,只须令这个成员为NULL; 但如果用int的话,就必然存在问题,因为一个int成员变量的值总是确定的,即使你没给它赋任何值,它的值就是0
2)对一个对象运用反射机制时,比如setProperty()和getProperty(),都要将Field的值当作对象来处理。Integer成员可以直接用做对象,但int成员还要封装/解封才行
3)充当Map的key时,Integer比int更方便
http://www.williamlong.info/archives/3090.html
虽然 Evernote 的桌面客户端早已提供手动录入笔记相关地点的功能,手机版更是可以自动将记笔记的位置记录下来,但说实话我之前并没有太留意这个功能。直到最近使用 Evernote手机应用时,我不小心点到其分类列表中的“地点”查看方式,呈现出来的过去几个月笔记的位置地图才让我意识到这个功能的意义:就像我们已经开始习惯用地点来管理我们的照片一样,Evernote希望用一切可能的形式便利我们的个人信息管理,就像我们的大脑一样。
表象下的 Evernote作为笔记软件为人所知的 Evernote 并非如其给人的第一眼印象那样简单,跨平台的笔记同步、多样化的内容支持、强大的管理和搜索功能,这些仅仅是 Evernote 的表象,正像那句著名的口号所说的:“Evernote 要成为用户的外在大脑、全人类的记忆中枢平台。”
大脑是如何工作的?在我们的大脑中,一切信息都是通过彼此的关联来进行记忆和管理的。看到一个熟悉的地址,我们可能会想到一个很久不见的好友;听到一首流行的旋律,我们可能会记起曾经的一段趣事… 记忆的触发往往就来自于这些细小的关联,但在这个信息普遍过载的时代,我们难以分辨哪些信息、哪些关联是真正有用的,这导致我们不可避免的会忘记那些也许很重要的回忆。广泛的记事工具因此开始流行,但无论是最简单的纸和笔,还是复杂的软件工具,它们都面临一个共同的问题:应该记录哪些信息、如何进行信息的管理、怎样在信息间获得关联。
Phil Libin 与其公司同样在思考这些问题,当他听到著名计算机专家 Stepan Pachikov 的团队已经在这个方向上走出第一步时,他迅速与其达成了合并意向。Evernote 的重心也开始从笔记记录,向如何为用户提供一种更好的电子记忆方式转移,其多样的笔记形式、广泛的元信息支持、方便的信息输入、强大的内容搜索正是希望为我们模拟真实大脑在处理信息时的关联,并提供一个大容量、安全可靠的存储场所,避免我们因为过载遗忘重要的信息。
数字中的 Evernote虽然有一个宏大的设想,也有一个可行的商业模式,但 Evernote 的发展并非一帆风顺。2008 年的上线虽然受到广泛好评,但发展早期面临的用户增长缓慢与投资人的质疑,让 Evernote 曾经濒临倒闭的困境。但也许是运气,一位忠实用户的救急投资让其成功度过了自己最大的危机,在坚持其核心产品定位及免费加增值的清晰盈利模式下,Evernote 稳步前进的步伐已经证明了其巨大的价值,最新获得的 7000 万新一轮融资让其估值达到 10 亿美元,Phil Libin 证实公司正在为 IPO 做准备,同时也正计划进军中国这个让无数知名互联网公司遭遇滑铁卢的市场(最新消息:Evernote 打算在中国正式开展业务,同时在中国建立其美国以外的数据中心)。
Evernote 真的值那么多钱吗?相比一年以前,Evernote 的用户量已经增长了三倍,达到 3000 万。而在这其中,付费用户比例达到 110 万,有近 4% 的用户付费,这在 Freemium 付费模式中相当的优秀。更值得注意的数字是,在 4 年之后,Evernote 依然能够保持 40% 的原始用户,更不用说新增的大量用户。而随着使用时间的增加,用户付费比例会有显著的提高,使用 4 年的用户中有 25% 均选择了付费使用 Evernote 的服务。
Evernote 的核心要素Evernote 之所以会取得今天这样的成功,其一开始就确定的精准定位无疑是最大原因。
无处不在要想真正成为用户的大脑,需要克服的最大障碍是:如何让用户以最简单的形式记录自己生活中的一切。从简单文字、网页摘要、任务列表,到生活照片、语音录音、手写笔记,甚至更多附件,Evernote 为用户的记录提供了广泛的内容形式支持。从手机、桌面、网页客户端,到电子邮件,再到众多第三方应用,Evernote 真正做到了无处不在,用户在各个场景下都可以轻松向 Evernote 添加各种类型的笔记。即使是 Evernote 推出的如 Hello、Food,收购的 Skitch 等看上去独立的应用,其目的也都是为了更方便的实现用户的信息记录。
Evernote 的跨平台同步功能让用户能够更方便的在任何地方管理自己的笔记。笔记的分享与协作(付费功能)也为更好的完善某一段记忆进行了很好的补充。此外,笔记的文件夹、标签、注释、元数据支持(地理位置、内容来源网站等),图片 OCR、语音转文本强化下的全文搜索等也为我们更好的管理信息提供了更强大的检索和关联功能。比如你在某个活动上认识了某个感兴趣的人,你可以通过搜索活动地点、活动照片、活动录音,或是人名等多种方式来查找他\她的信息,正像我们的大脑一样。
Evernote 的信息管理可能还无法企及大脑那样强大的关联能力,但其无疑正在向其方向前进。
平台化拓展Evernote 的平台化思路无疑延续了其核心理念:让人们能够以更多样化的方式来纪录自己的思想和生活。毕竟人们日常使用的工具并非 Evernote 一款,如何能够利用更广阔的平台,为用户、也为自己更好的服务是 Evernote 的另一个重点。
2010 年诞生的 Evernote Trunk 和其后的开发者社区自推出以来获得了迅速的发展。到目前为止,已有数以千计的开发者发布了使用 Evernote API 的应用和服务。从文档管理、资料汇集,到会议记录、生活信息整理等,类型可谓丰富。这也是 Evernote 所希望看到的:为人们记录自己的生活提供更多样化的途径。这一切并不需要、也不应该都由 Evernote 自己亲力而为,而是通过为第三方开发者提供更好的平台,同时为自己的产品打造更大的机会。
Evernote 去年举办了首届 Evernote Trunk 开发者大会,同时还主办了许多国际性编程马拉松(Hackathons),获得了广泛好评。此外,Evernote 的平台开发团队在去年也扩展了三倍,在前不久发布了全新改版的应用开发平台,为开发者提供更多的帮助,这一切都显示 Evernote 的平台策略将是其未来发展的一个核心。据说其中国计划中也包含了与众多国内知名应用的合作,Evernote 的平台化未来值得用户和开发者期待。
清晰的盈利模式和现在很多火爆的应用(没错,我在说 Instagram)不同,Evernote 从创始之初就有一个清晰的盈利模式:付费和免费结合(Freemium)。用户可以在一定限制下免费使用该服务,并通过付费升级至高级版,这也是 Evernote 最主要的收入来源。
相比其他同样采用这种模式的服务,Evernote 的免费版并没有对功能进行太多限制,普通用户似乎并没有必要升级至付费服务,这让投资方一度非常担忧。Phil Libin 对此的解释是,用户在 Evernote 中存放越多的信息,Evernote 对他来说就变得更加重要。“你的笔记、你的餐厅、你的好友、你一年的生活,你许多年的生活,这些信息价值巨大。”你会吝惜到不给你的大脑供给吗?同样,对于一款存放了用户生活记忆,并帮助其进行检索的服务,一定会有用户愿意付费。
Phil Libin 认为,对于 Evernote 来说,只要用户喜欢这一服务,他们最终将会付费,因为该服务的成功将对他们有利。“对 Evernote 来说,最重要的是让用户继续使用我们的产品,而不是急于让他们为我们的产品付费。”在其用户的付费比例数字之下,Evernote 的逻辑被证明确实可行。(见下图)
百年创业者 Evernote“Evernote 希望做一个百年公司,一个百年的创业者。” CEO Phil Libin 如是说。
100 年后,我们可能不会再看到 Instagram,我们可能不会看到 Facebook,但我们的数据、我们的回忆?
就其本身来说,Evernote 也许只是一款简单的信息管理应用,但其核心 - 用户数据和记忆的保存和检索却是一个恒久不变的主题。你想在几十年后找到你年少时的一段记忆吗?相信这不但不会随时间褪色,反而会像陈酿一样不断发酵着价值,这正是 Evernote 可能延续百年的基础。
当然,如果像《黑镜》里那种事无巨细的记忆芯片还是比较让人恐惧的。至少就目前来说,Evernote 提供的方案更加让人能够接受。
Android默认的PopupWindow和EditText的外观是矩形框,看起来不是太好,本示例通过设置布局View的背景和PopupWindowd对象的背景,实现有白色圆角边框的对话框效果和圆角文字编辑框。代码如下(关键部分是背景布局XML)
对话框弹出效果图:
Java代码
package com.test;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.InputType;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.LinearLayout.LayoutParams;
public class RoundCorner extends Activity {
Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 定义按钮
mButton = (Button) this.findViewById(R.id.Button01);
mButton.setOnClickListener(new ClickEvent());
// 两个圆角文字编辑框
EditText et1 = (EditText) this.findViewById(R.id.roundedtext1);
EditText et2 = (EditText) this.findViewById(R.id.roundedtext2);
et1.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
et2.setInputType(InputType.TYPE_NULL); //不显示软键盘
}
// 处理按键事件
class ClickEvent implements OnClickListener {
@Override
public void onClick(View v) {
if (v == mButton) {
showRoundCornerDialog(RoundCorner.this, RoundCorner.this.findViewById(R.id.Button01));
}
}
}
// 显示圆角对话框
public void showRoundCornerDialog(Context context, View parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 获取圆角对话框布局View,背景设为圆角
final View dialogView = inflater.inflate(R.layout.popupwindow, null, false);
dialogView.setBackgroundResource(R.drawable.rounded_corners_view);
// 创建弹出对话框,设置弹出对话框的背景为圆角
final PopupWindow pw = new PopupWindow(dialogView, 300, LayoutParams.WRAP_CONTENT, true);
pw.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners_pop));
//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果
//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果
final EditText edtUsername = (EditText) dialogView.findViewById(R.id.username_edit);
final EditText edtPassword = (EditText) dialogView.findViewById(R.id.password_edit);
edtUsername.setHint("用户名..."); // 设置提示语
edtPassword.setHint("密码..."); // 设置提示语
// OK按钮及其处理事件
Button btnOK = (Button) dialogView.findViewById(R.id.BtnOK);
btnOK.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 设置文本框内容
edtUsername.setText("username");
edtPassword.setText("password");
}
});
// Cancel按钮及其处理事件
Button btnCancel = (Button) dialogView.findViewById(R.id.BtnCancel);
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pw.dismiss();// 关闭
}
});
// 显示RoundCorner对话框
pw.showAtLocation(parent, Gravity.CENTER|Gravity.BOTTOM, 0, 0);
}
}
1,圆角对话框的背景布局文件XML。
--------rounded_corners_pop.xml此为PopupWindow的背景布局文件
Java代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffffff" />
<stroke android:width="3dp" color="#ffff8080" />
<corners android:radius="10dp" />
<padding android:left="3dp" android:top="3dp"
android:right="3dp" android:bottom="3dp" />
</shape>
--------rounded_corners_view.xml此为对话框内容的背景布局文件
Java代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ff606060" />
<stroke android:width="3dp" color="#ffff8080" />
<corners android:radius="10dp" />
<padding android:left="5dp" android:top="5dp"
android:right="5dp" android:bottom="5dp" />
</shape>
2,圆角文字编辑框的三个布局XML文件
---------rounded_edittext_states.xml
Java代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:state_enabled="true"
android:drawable="@drawable/rounded_focused" />
<item
android:state_focused="true"
android:state_enabled="true"
android:drawable="@drawable/rounded_focused" />
<item
android:state_enabled="true"
android:drawable="@drawable/rounded_edittext" />
</selector>
----------rounded_edittext.xml
Java代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:padding="8dip">
<solid android:color="#FFFFFF"/>
<corners
android:bottomRightRadius="10dip"
android:bottomLeftRadius="10dip"
android:topLeftRadius="10dip"
android:topRightRadius="10dip"/>
</shape>
-----------rounded_edittext_focused.xml
Java代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:padding="8dip">
<solid android:color="#FFFFFF"/>
<stroke android:width="2dip" android:color="#FF0000" />
<corners
android:bottomRightRadius="10dip"
android:bottomLeftRadius="10dip"
android:topLeftRadius="10dip"
android:topRightRadius="10dip"/>
</shape>
3,对话框的布局文件popupwindow.xml
Java代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/username_view"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:text="用户名"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText android:id="@+id/username_edit"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:capitalize="none"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView android:id="@+id/password_view"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:text="密码"
android:textAppearance="?android:attr/textAppearanceMedium"/>
<EditText android:id="@+id/password_edit"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:capitalize="none"
android:password="true"
android:textAppearance="?android:attr/textAppearanceMedium" />
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="center"
android:paddingLeft="10dip"
android:paddingRight="10dip">
<Button android:id="@+id/BtnOK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定"/>
<Button android:id="@+id/BtnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消"/>
</LinearLayout>
</LinearLayout>
4,主布局文件 main.xml
Java代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="10dip">
<EditText android:id="@+id/roundedtext1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="圆角编辑框实例"
android:padding="5dip"
android:background="@drawable/rounded_edittext" />
<!-- 此View为布局使用 -->
<View android:layout_height="5dip" android:layout_width="fill_parent"/>
<EditText android:id="@+id/roundedtext2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="聚焦可变边框颜色"
android:padding="5dip"
android:paddingTop="30dip"
android:background="@drawable/rounded_edittext_states"/>
<!-- 此View为布局使用 -->
<View android:layout_height="5dip" android:layout_width="fill_parent"/>
<Button android:id="@+id/Button01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="弹出圆角对话框"/>
</LinearLayout>
注:附件中为完整项目代码实例