首页 文章 精选 留言 我的

精选列表

搜索[多分片],共10000篇文章
优秀的个人博客,低调大师

Android SDK和N多Android开发资源

文章目录[点击展开](?)[+] 开发资源 本文收集整理Android开发需要的Android SDK、工具、Android开发教程、Android设计规范,免费的设计素材等。 欢迎大家推荐自己在Android开发过程中用的好用的工具、学习开发教程、用到设计素材, Android SDK在线更新镜像服务器 腾讯Bugly 镜像 腾讯Bugly 镜像:android-mirror.bugly.qq.com端口:8080 速度绝对的给力,公司宽带是广东电信,几乎达到满速。 大连东软镜像 大连东软信息学院镜像服务器地址:mirrors.neusoft.edu.cn端口:80 家里用的铁通光纤,使用腾讯的镜像速度时好时坏,但这个镜像倒是速度给力。 配置方法 项目地址 github:https://github.com/inferjay/AndroidDevTools 官网:http://www.androiddevtools.cn/ 其它:http://tools.android-studio.org/index.php 如果要下载Android Developer Tools(Eclipse开发Android应用),可以选择ADT Bundle,它包含了Eclipse、ADT插件和SDK Tools,是已经集成好的IDE,只需安装好Jdk即可开始开发,推荐初学者下载ADT Bundle,不用再折腾开发环境。 本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5431255.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android -- ViewPager多页面滑动切换以及动画效果

背景 ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是android-support-v4.jar。 根据屏幕的分辨率和图片的宽度计算动画移动的偏移量 代码 viewpager.xml 界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="100.0dip" android:background="#FFFFFF" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡1" android:textColor="#000000" android:textSize="22.0dip" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡2" android:textColor="#000000" android:textSize="22.0dip" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="页卡3" android:textColor="#000000" android:textSize="22.0dip" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/a" /> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1.0" android:background="#000000" android:flipInterval="30" android:persistentDrawingCache="animation" /> </LinearLayout> 我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。3个lay.xml,设置颜色不同。 <?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="fill_parent" android:orientation="vertical" android:background="#1586FF" > </LinearLayout> 初始化头标 /** * 初始化头标 */ private void InitTextView() { t1 = (TextView) findViewById(R.id.text1); t2 = (TextView) findViewById(R.id.text2); t3 = (TextView) findViewById(R.id.text3); t1.setOnClickListener(new MyOnClickListener(0)); t2.setOnClickListener(new MyOnClickListener(1)); t3.setOnClickListener(new MyOnClickListener(2)); } 头标点击监听 /** * 头标点击监听 * */ public class MyOnClickListener implements View.OnClickListener { private int index = 0; public MyOnClickListener(int i) { index = i; } @Override public void onClick(View v) { mPager.setCurrentItem(index); } }; 以上功能就是点击第几个,就展示第几个页卡内容。 初始化ViewPager /** * 初始化ViewPager */ private void InitViewPager() { mPager = (ViewPager) findViewById(R.id.vPager); listViews = new ArrayList<View>(); LayoutInflater mInflater = getLayoutInflater(); listViews.add(mInflater.inflate(R.layout.lay1, null)); listViews.add(mInflater.inflate(R.layout.lay2, null)); listViews.add(mInflater.inflate(R.layout.lay3, null)); mPager.setAdapter(new MyPagerAdapter(listViews)); mPager.setCurrentItem(0); mPager.setOnPageChangeListener(new MyOnPageChangeListener()); } 我们将三个页卡界面装入其中,默认显示第一个页卡。这里我们还需要实现一个适配器。 ViewPager适配器 /** * ViewPager适配器 */ public class MyPagerAdapter extends PagerAdapter { public List<View> mListViews; public MyPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView(mListViews.get(arg1)); } @Override public void finishUpdate(View arg0) { } @Override public int getCount() { return mListViews.size(); } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(mListViews.get(arg1), 0); return mListViews.get(arg1); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == (arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } } 这里我们实现了各页卡的装入和卸载。 页卡切换监听 /** * 页卡切换监听 */ public class MyOnPageChangeListener implements OnPageChangeListener { int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量 int two = one * 2;// 页卡1 -> 页卡3 偏移量 @Override public void onPageSelected(int arg0) { Animation animation = null; switch (arg0) { case 0: if (currIndex == 1) { animation = new TranslateAnimation(one, 0, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, 0, 0, 0); } break; case 1: if (currIndex == 0) { animation = new TranslateAnimation(offset, one, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, one, 0, 0); } break; case 2: if (currIndex == 0) { animation = new TranslateAnimation(offset, two, 0, 0); } else if (currIndex == 1) { animation = new TranslateAnimation(one, two, 0, 0); } break; } currIndex = arg0; animation.setFillAfter(true);// True:图片停在动画结束位置 animation.setDuration(300); cursor.startAnimation(animation); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } } 初始化动画 private void InitImageView() { cursor = (ImageView) findViewById(R.id.cursor); bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth(); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenW = dm.widthPixels;// 获取屏幕分辨率宽度 offset = (screenW / 3 - bmpW) / 2; // 计算偏移量:屏幕宽度/3,平分为3分,如果是3个view的话,再减去图片宽度,因为图片居中,所以要得到两变剩下的空隙需要再除以2 Matrix matrix = new Matrix(); matrix.postTranslate(offset, 0); // 初始化位置,在中间 cursor.setImageMatrix(matrix); // 设置动画初始位置 } 根据屏幕的分辨率和图片的宽度计算动画移动的偏移量。 OnCreate函数 private ViewPager mPager;//页卡内容 private List<View> listViews; // Tab页面列表 private ImageView cursor;// 动画图片 private TextView t1, t2, t3;//页卡头标 private int offset = 0;//动画图片偏移量 private int currIndex = 0;//当前页卡编号 private int bmpW;//动画图片宽度 @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.viewpager); InitImageView(); InitTextView(); InitViewPager(); } 简短不割 TranslateAnimation TranslateAnimation是移动的动画效果。它有三个构造函数,分别是: public TranslateAnimation(Context context,AttributeSet attrs) 略过 public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) 这个是我们最常用的一个构造方法, float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值; float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值; float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值; float toYDelta,这个参数表示动画开始的点离当前View Y坐标上的差值; 如果view在A(x,y)点 那么动画就是从B点(x+fromXDelta, y+fromYDelta)点移动到C 点(x+toXDelta,y+toYDelta)点. public TranslateAnimation (int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue) fromXType:第一个参数是x轴方向的值的参照(Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF,or Animation.RELATIVE_TO_PARENT); fromXValue:第二个参数是第一个参数类型的起始值; toXType,toXValue:第三个参数与第四个参数是x轴方向的终点参照与对应值; 后面四个参数就不用解释了。如果全部选择Animation.ABSOLUTE,其实就是第二个构造函数。 以x轴为例介绍参照与对应值的关系: 如果选择参照为Animation.ABSOLUTE,那么对应的值应该是具体的坐标值,比如100到300,指绝对的屏幕像素单位。 如果选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相对于自身或父控件,对应值应该理解为相对于自身或者父控件的几倍或百分之多少。多试参数就明白了。 getLayoutInflater android允许我们在对话框中显示指定的xml文件,从而实现自定义对话框的效果。自定义的登录对话框。 XML <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loginForm" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="用户名:" android:textSize="10pt" /> <!-- 输入用户名的文本框 --> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请填写登录帐号" android:selectAllOnFocus="true" /> </TableRow> <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="密码:" android:textSize="10pt" /> <!-- 输入密码的文本框 --> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true" /> </TableRow> <TableRow> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="电话号码:" android:textSize="10pt" /> <!-- 输入电话号码的文本框 --> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请填写您的电话号码" android:phoneNumber="true" android:selectAllOnFocus="true" /> </TableRow> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注册" /> </TableLayout> Java bn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View source) { // 设置对话框的图标 builder.setIcon(R.drawable.tools); // 设置对话框的标题 builder.setTitle("自定义普通对话框"); //装载/res/layout/login.xml界面布局 TableLayout loginForm = (TableLayout)getLayoutInflater().inflate( R.layout.login, null); // 设置对话框显示的View对象 builder.setView(loginForm); // 为对话框设置一个“确定”按钮 builder.setPositiveButton("登录" , new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // 为对话框设置一个“取消”按钮 builder.setNegativeButton("取消" ,new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); //创建、并显示对话框 builder.create().show(); } } 参考:http://blog.csdn.net/lizhenmingdirk/article/details/7345851 LayoutInflater 作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用inflate来载入。 2、对于一个已经载入的Activity,就可以使用实现了这个Activiyt的的findViewById方法来获得其中的界面元素。 方法: Android里面想要创建一个画面的时候, 初学一般都是新建一个类, 继承Activity基类, 然后在onCreate里面使用setContentView方法来载入一个在xml里定义好的界面. 其实在Activity里面就使用了LayoutInflater来载入界面, 通过getSystemService(Context.LAYOUT_INFLATER_SERVICE)方法可以获得一个 LayoutInflater, 也可以通过LayoutInflater inflater = getLayoutInflater();来获得.然后使用inflate方法来载入layout的xml, @Override public void onClick(View v) { showCustomDialog(); } public void showCustomDialog() { AlertDialog.Builder builder; AlertDialog alertDialog; Context mContext = MainActivity.this; LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_dialog, null); TextView text = (TextView) layout.findViewById(R.id.text); text.setText("Hello, Welcome to Mr Wei's blog!"); ImageView image = (ImageView) layout.findViewById(R.id.image); image.setImageResource(R.drawable.icon); builder = new AlertDialog.Builder(mContext); builder.setView(layout); alertDialog = builder.create(); alertDialog.show(); } 参考:http://blog.sina.com.cn/s/blog_629b701e0100rg4d.html 艹奥,还有几个忘记是哪参考来的了,不好意思没有写出来哈。 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3697233.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

使用PostgreSQL_Notify实现多实例缓存同步

Parallel与Hierarchy是架构设计的两大法宝,缓存是Hierarchy在IO领域的体现。单线程场景下缓存机制的实现可以简单到不可思议,但很难想象成熟的应用会只有一个实例。在使用缓存的同时引入并发,就不得不考虑一个问题:如何保证每个实例的缓存与底层数据副本的数据一致性。 分布式系统受到CAP定理的约束,分区一致性P是一般来说是不允许牺牲的,不可能让两个实例对同样的请求却给出不同的结果。用缓存是为了更好的性能,所以如果还要追求可用性A,就一定会牺牲C。我们能做的,就是通过巧妙设计让AP系统的一致性损失最小化。 传统方法 最简单粗暴的办法就是定时重新拉取,例如每个整点,所有应用一起去数据库拉取一次最新版本的数据。很多应用都是这么做的。当然问题也很多:拉的间隔长了,变更不能及时应用,用户体验差;拉的频繁了,IO压力大。而且实例数目和

优秀的个人博客,低调大师

移动医疗玩法多,纯线上模式难突破

过去一周对百度而言是难过的一周。 一场血友病吧被卖事件,让外界第一次认识到百度贴吧背负着沉重变现压力的事实,也让外界第一次意识到,贴吧对广大病患依然有着重要意义。同时,贴吧商业化所引发的争议,也显现出PC端医疗服务发展乏力的现状。 医疗从来都是一块难啃的骨头。 在PC互联网时代,健康类信息网站、问答社区、贴吧、搜索引擎等是患者寻求医疗资源和帮助的主要工具,但商业模式以及难以连接实体医疗服务是它们难以逾越的发展瓶颈。 与之相比,近年来兴起的移动医疗,具备能够连接医疗行业多方角色、打通实体医疗服务的特点。在PC互联网医疗遭遇发展困境的同时,用户的需求却有增无减,在此背景下,在模式上进行了更多创新和突破的移动医疗,有着更大想象空间。 纯线上模式难突破 诸多如蚂蚁菜(百度血友病吧吧主)这样的病患,将百度贴吧当成获取医疗信息、寻求康复之路的重要途径和精神寄托,在过去近十年的时间里,以百度搜索引擎以及百度贴吧为代表的PC端医疗服务,也确实为病患群体提供了获取医疗信息的工具和阵地。 然而,近期的贴吧危机已经释放出一个信号,即以PC承载互联网医疗的时代已经走到尽头。 一方面,PC时代的互联网医疗难以打通实体医疗服务。无论是百度的医疗类贴吧,还是此前发展不错的39健康网、有问必答网、120健康网等,都是单纯将医疗信息搬到线上,缺乏与实体医疗的联系。这种脱离实体医疗的服务类似无根浮萍,价值有限;而且容易沦为导流渠道,扭曲医疗价值。 另一方面,PC时代的互联网医疗服务难变现。PC端的医疗信息网站,以及如百度的医疗类贴吧等社区,存在信息良莠不齐的弊端。更严重的问题在于,单纯的医疗信息服务很难产生收益,因为一旦从医疗信息上谋求利益,很难在利益与伦理之间做到平衡,病种类贴吧被卖引发风波就是典型例子,而长期以来百度的医疗广告也受人诟病。 贴吧危机已经充分说明,PC承载医疗服务很难满足用户需求,但用户对医疗信息以及医疗资源的需求大量存在。同时,PC时代的互联网医疗难以建立健康的商业模式,发展后劲乏力。 PC互联网医疗乏力的同时,移动医疗在迅速发展。春雨医生创始人张锐认为,移动医疗已经进入成熟期,从用户使用的频次和情况来看,移动端已经远远超过了PC端。 在近年在线医疗热潮中成长起来的企业,尽管目前并不能提供颠覆性的就医体验,但与过往的PC在线医疗相比,移动医疗越来越向实体医疗行业靠近,也为开展更多服务提供了想象空间。 移动医疗的多种玩法 移动医疗实现的核心是医疗信息的开放与互通,比如智能硬件数据与患者就医数据结合,进行慢病管理、辅助医生诊断等。经过多年发展,移动医疗已经衍生出多种玩法。 以阶段分,移动医疗服务分为诊前、诊中、诊后几个阶段。以服务对象分,移动医疗可以分为面对患者的2C业务,以及面向医院、药企等医疗机构的2B业务。而以提供服务的方式来看,移动医疗又分为纯线上模式,以及线上线下相结合的O2O模式。 包括预约挂号、在线诊疗、医患在线沟通的在线就医服务是当前移动医疗行业的发展热点。除此之外,为患者与医生提供交流的诊后服务、医疗信息化、医疗智能硬件、慢病管理、医药在线流通、医疗大数据也是重要的发展方向。 卓健医生创始人尉建锋对腾讯科技介绍,以医院为中心往外延扩展,移动医疗大概可以分为四个层面。 第一种层面是围绕医院自身的信息系统HIS(Hospital Information System,医院内部对所有业务和业务全过程进行管理的信息管理系统)做文章,例如阿里云。2015年4月,阿里云联合东华软件,与西安国际医学中心建设的“云上医院”,其90%以上的院方后台信息系统布局在阿里云上。 由于医院非常重视核心信息的安全性、隐私保护,以及不同公司推出的HIS标准并不统一,联网难度大等原因,在HIS层面进行在线医疗尝试难度偏大,因而在这一层面进行尝试的企业也并不多。 第二个层面是在医院的HIS基础上,基于医院开放的HIS各模块开发接口,为医院提供互联网化的解决方案,比如电子化验单、电子病历开发、随访或者做远程指导;以及为医院间提供联网建设,例如卓健医生。 第三个层面是网络挂号,典型代表是微医集团(前挂号网)。 第四个层面更加外延,也是当前移动医疗创业者最集中的地方,为患者提供在线问诊,如春雨医生、趣医网等。 在这四个层面之外,围绕医疗行业本身,为医生群体、医院等医疗机构提供服务的企业,如丁香园,以及医药电商等也属于移动医疗的范畴。 不难看出,不同模式实质上都是围绕医疗本身,利用互联网做信息化的事情,而各家移动医疗企业,在主营业务之外也都在尝试更多新业务。 避导流 重连接 与PC时代的医疗服务相比,移动医疗的共同特点在于,它们不再单纯提供医疗信息,而是与真实的医疗服务产生了更加紧密的联合,从另一个角度理解,即移动医疗真正通过互联网,将医院、医生、患者等元素结合在了一起。 面对公立医疗资源信息化推进缓慢的现状,移动医疗服务商开始尝试进军线下。2015年,丁香园、春雨医生相继进军线下,开办线下诊所。 对于开办线下诊所的原因,李天天在接受腾讯科技采访时表示,做线下诊所是希望做医疗的连接器。表面上是一个诊所,但是诊所背后还有信息化、质量控制以及费用控制的系统。通过这样的诊所平台,丁香园希望连接五方(5P):医生、患者、医院、药企以及保险公司。 “我们希望五个P通过诊所平台连接起来,特别是最后的保险公司,因为中国的医保只管病。但是出院以后的健康、慢病管理是不看的。所以我们希望和商业保险,以及少部分医保结合起来,让流程真正连接起来。我们希望诊所,以及后面的支持系统能够变成一个连接器,让这几方的利益在这上面得到运转,并且得到共赢。” 张锐则表示,春雨医生从诞生到现在,从在线问诊、私人医生一路走来,虽然轻问诊服务得到用户的欢迎,但是轻问诊存在用户体验不完整,医学的安全性和科学性无法得到保障等问题,针对这些问题,春雨医生推出了私人医生服务,开办线下诊所,则是春雨医生解决用户体验不完整的对策。 打通线下的意义在于,如果移动医疗服务仍停留在纯线上,很难摆脱为线下导流的老模式。要摆脱导流的模式,建立线下实体医疗服务点,结合线上的互联网管理系统,连接起医疗行业的各个方面,或许是一个不错的尝试。 PC互联网上的医疗服务已经式微,但用户对互联网医疗的需求仍在增长。贴吧事件或许只是偶然发生的一个导火索,但在移动医疗不断尝试更多可能的趋势下,贴吧的危机,或许就是移动医疗的好机会。 本文转自d1net(转载)

优秀的个人博客,低调大师

纠结:为什么OpenStack有辣么多版本?

选择出最合适在你企业中运行的OpenStack版本,并不如它所述的那样简单。有没有相关的技巧可以尽快发现相关的信息? 为了确保你所安装的OpenStack可以与你想要运行的软件兼容,那么确定当前使用哪一版本的OpenStack是最重要的。然而,找出这些信息却并不轻松。 当运行Linux时,确定操作系统的版本并不难。每个Linux发行版都会向the或etc目录中写入一个文件,其中包含所使用的分发名称及其版本。使用the /etc/os发布的文件,你可以找出Linux发行版的关键信息。 但是,确定运行哪一版本的OpenStack却是一个挑战。由于它的进程与Linux发行版不同,它将更加复杂,尤其是OpenStack还要运行在它的最上层。然而,虽然没有统一的答案,但却有几种方法可以更好地了解的OpenStack版本。 最简单的方法之一是查询您的分发包使用的包管理器。例如,如果使用RDO分发在CentOS上安装OpenStack,yum repolist命令将显示当前正在使用的OpenStack存储库。由于所有的OpenStack 包都来自于OpenStack 库,这显示了你所使用的OpenStack版本号。 在CentOS安装RDO时,这一命令行的的结果如下: 如果使用包管理器安装OpenStack,即使上面的这一方法有效,但当你从Git库中直接安装它是,这一方法没有效果。如是上述方面无用,那么试试使用git branch –la命令行,看看使用了哪一个Git库。 如果上述所有的方法都没有反馈有用户的信息,你可以查询一下Nova,这一OpenStack组件在所有的OpenStack云中都可用。使用nova-manage --version命令获得版本号,如13.1.0。接下来,您需要在Nova项目的项目网页上查找此版本。在这一页面中,你将会看到13.1.0是Mitaka OpenStack版本的一部分。 本文转自d1net(转载)

优秀的个人博客,低调大师

深度学习要多深,才能读懂人话?

研究背景 阿里小蜜是阿里巴巴推出的围绕电商服务、导购以及任务助理为核心的智能人机交互产品,在去年双十一期间,阿里小蜜整体智能服务量达到643万,其中智能解决率达到95%,成为了双十一期间服务的绝对主力。阿里小蜜所使用的问答技术也在经历着飞速的发展,从最初基于检索的知识库问答演进到了最新的语义深度建模。 近期,阿里小蜜正在开展新的探索,让机器具有如同人一般的阅读理解能力,这将使得问答产品体现出真正的智能,进一步提升服务效率。 在问答技术中,最常见的是检索式问答,但存在很多的限制,例如,需要人工进行知识提炼,让机器在事先准备好的问答对基础之上进行检索。而我们经常需要对这样一段话进行提问: 5月18日,阿里巴巴集团发布了2017财年Q4财报和2017财年全年的业绩报告。财报显示,阿里巴巴集团2017财年的收入为1582.73亿元人民币,同比增长

优秀的个人博客,低调大师

初探阿里云存储网关(多图慎入)

初探阿里云存储网关 有幸第一时间拿到阿里云存储团队提供的存储网关内部测试版本,我第一时间进行了尝鲜,分享给大家,相信不久大家就能看到这款新产品。 大家都知道阿里云对象存储OSS,它不同于ECS的云盘,既能提供低廉的成本又能提供海量吞吐,高并发的访问。最重要的是利用对象存储oss,能搭建动静分离的系统架构,系统的扩展性和健壮性都比直接使用云盘高。但对象存储使用RESTful的接口才能使用,有一定的动手成本,而且如果原本的应用已经基于文件系统开发好,无法修改的话。就无法享受对象存储带来的一系列便利了。 而今天,我有幸试用的存储网关,能完美的解决这一问题。它可以帮助你像使用普通磁盘一样,挂载在您的计算节点上(ECS)。你瞬间拥有一个无限扩容的云盘空间,而只需要付出对象存储oss的价格。OK,我们来一

优秀的个人博客,低调大师

人工智能多务虚,深度学习常务实

作者简介: Carlos E. Perez是Intuition Machine的一名编辑,擅长人工智能,商业,深度学习等领域的写作。 人工智能无疑是当下科技圈的风口,但我估计99%的文章都如同镜花水月,没有实质意义。为了说明这一点,我尝试在Google中以“Artificial Intelligence”和“Deep Learning”作为关键字进行搜索,让我们一起看看他们各自的热门Top5: 首先是Artificial Intelligence: 我们能从上述文章得到哪些新知识吗?遗憾地是没有。实际上类似的论点最早可见于1950年,只不过最近变得频繁且重复而已。 再看看Deep Learning的: 显而易见,深度学习的文章更有深度和价值。前两个文章来自福布斯。第二篇文章对Facebook的流程(即运行同步模拟)有着独到的见解。第三篇文章来自Wired,内容涉及使用深度学习进行海洋保护,这难道不是很具创新性吗? 第四篇IEEE文章谈到使用DL诊断机器上的故障。最后一篇来自IEEE的文章讨论了正在管线中的硬件选项,如FPGA,GPU等的种类。总而言之,如果你是老板,你一定会对这些文章视若珍宝。 自1950年代以来AI的探讨一直存在。但是我仍不能很明确地告诉别人它能做什么。相反,你如果在科技圈中搜索深度学习,你一定会很容易找到有价值的、可付诸实践的干货! 数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧! 以上为译文 本文由阿里云云栖社区组织翻译。 文章原标题《AI is Fluff but Deep Learning is Real》,作者:Carlos E. Perez,译者:伍昆 文章为简译,更为详细的内容,请查看原文

优秀的个人博客,低调大师

【原】Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)

更新日志 V1.2 2015.09.25 1.UITabBarItem badge is supproted; 2.Enable change badge properties when badge is showing; 3.Other code optimization. V1.1 2015.08.12 UIBarButtonItem badge is supported. UIBarButtonItem is kind of NSObject and its displayed view is invisiable. This version makes usage of UIBarButtonItem badge as to UIView. Slight adjustment for code structure to fit future extension. Other code optimization. V1.0 at 2015.06.16 Base functions are completed, which is able to meet most of requirements. 概述 今天我们来实现一个在iOS中让人又爱又恨的推送“小红点”WZLBadge。那什么是badge呢?当后台有数据更新需要让用户知道时,在按钮或者其他控件上显示一个“小红点”提醒用户。注意,这里的“小红点”仅仅是泛指,实际的视图可以天马行空,在这个版本中我们先实现以下几种: 小红点 红底白字“new” 红底白字数字 为了让小红点显示后更加醒目,在这个版本中我又实现了三种不同的状态动画(status animation): 心脏跳动效果(WBadgeAnimTypeScale) 呼吸灯效果(WBadgeAnimTypeBreathe) 横向抖动(WBadgeAnimTypeShake) 静止状态(WBadgeAnimTypeNone, 默认) WZLBadge还有以下优点: 支持横竖屏 支持iOS5~iOS8 允许高度定制化,包括“红点”的背景颜色,文字(字体大小、颜色),位置等 我们还是先看两张示例图片吧: 分析 想要使得实现出来的badge接口调用方便,我采用的是对UIView做category的方式,接口统一为实例方法。通过这种方式,可以给任意的UIView及其子类添加badge,而且接口简单。接口应该类似于这样: 1 [someView showBadgeWithStyle:WBadgeStyleRedDot value:0 animationType:WBadgeAnimTypeShake]; 现实往往是这样的,使用者使用起来越简单,接口提供方就需要做的越多。我们知道,小红点应该具有多个属性,比如大小、背景颜色、文字颜色等。想让badge具有更强的可定制性,就需要开放这些丰富的属性。那么问题来了,category中理论上只能添加方法,无法添加属性。这时候就需要一些运行时runtime方面的技巧了。我们可以在运行时为UIView添加属性,需要使用到的两个runtime api为: 1 2 OBJC_EXPORT id objc_getAssociatedObject(id object , const void *key) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1); 1 2 OBJC_EXPORT void objc_setAssociatedObject(id object , const void *key, id value, objc_AssociationPolicy policy) __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1); 例如,假设我们现在想给UIView动态添加badgeBgColor属性,用来操纵badge角标的背景色“ 1 2 3 4 - (UIColor *)badgeBgColor //getter { return objc_getAssociatedObject(self, &badgeBgColorKey); } 1 2 3 4 - ( void )setBadgeBgColor:(UIColor *)badgeBgColor //setter { objc_setAssociatedObject( self , &badgeBgColorKey, badgeBgColor, OBJC_ASSOCIATION_RETAIN); } 关于动态添加属性的知识在这里就不具体展开了,想要了解更多的可以参考我的这篇《iOS运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)》。这个知识点也是本文开源的WZLBadge的核心点,实际上这也是大多数开源工具的常规做法。另外,对于WZLBadge的其他技术细节在这里就不再细述,具体可以到文章末尾处转去Github查看。 使用方法 由于WZLBadge采用对UIView扩展category的方式,因此,所有的UIView及其继承子类(UIControl等)都可以无缝使用,当前版本开放的接口主要有以下几个: 1 2 3 4 /** * show badge with red dot style and WBadgeAnimTypeNone by default. */ - ( void )showBadge; 1 2 3 4 5 6 7 8 /** * showBadge * * @param style WBadgeStyle type * @param value (if 'style' is WBadgeStyleRedDot or WBadgeStyleNew, this value will be ignored. In this case, any value will be ok.) * @param aniType */ - ( void )showBadgeWithStyle:(WBadgeStyle)style value:( NSInteger )value animationType:(WBadgeAnimType)aniType; 1 2 3 4 /** * clear badge */ - ( void )clearBadge; 本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/4633937.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?

阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 “双11”的电商业务和技术场景在阿里云上实现,并保障这个混合云在双11当天能够满足全球客户的购物需求。 正文: 众多项目研发过程中为了调试观察应用运行时表现,修改常量配置的场景下往往需要频繁地对应用代码及配置项做打包发布进行应用版本更新甚至回滚代码。基于该场景,任何的应用配置项变更都需要将整个应用重新打包发布,整个过程非常繁琐,且容易出错。非常典型且具有代表性的是:Redis连接串配置,应用业务功能切换开关,应用的安全限流配置,数据库访问配置等等一系列。 在此引申一个切实场景:一批早期的数据库实例所在服务器都即将过保进行替换,新数据库实例的端口及用户名密码保持不变并且持续与老库保持数据同步,一个非常棘手的问题

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册