显示下一条  |  关闭

kinggod03的博客

 
 
 
 
 
 

湖南省 益阳市 天蝎座

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 
 
 

如果你在寻找一些关于FLEX的信息,比如教程,提示,源码,实例,这篇文章正适合你.我选择了一些最好的FLEX网站,可以帮助你改进你的FLEX技术,获得FLEX的相关信息, 

 

1 - SitePoint

2 - Visual Builder

3 - Sephiroth.it

4 - Flex.org

 

5 - Ted on Flex

6 - InsideRIA

7 - Pete Freitag Blog

8 - Switch On The Code

9 - Flex RIA

 

10 - Quietly Scheming

11 - Doug McCune

12 - RIApedia

13 - Mario Casario

14 - FLEX{er}

15 - EverythingFlex

16 -Axelology

17 - Eric Feminella

18 - The Flex Show

19 - The Flex Blog

20 -Dave Keen

作者  | 2009-9-1 14:33:50 | 阅读(1191) |评论(0) | 阅读全文>>

[置顶] 100个优秀的国外设计开发网站

2009-8-31 14:31:02 阅读2027 评论2 312009/08 Aug31

100个优秀的国外设计开发网站,涵盖了Web设计,平面设计,Flash和Flex,设计资源等网站推荐。

常用设计网站

100 dede sites 1 100个优秀的国外设计开发网站

  1. Spunk United 非常出色的杂志,里面提供的都是世界顶级设计师的专访,灵感以及文章还有更多。
  2. FreeLance Switch 这个站点上的所有资源都是开放免费的,你肯定要知道:)
  3. Computer Arts 这是一个非常优秀的网络杂志,中文版杂志是《Computer Arts 数码艺术》,相信设计者都有订阅这份杂志.
  4. David Airey 一位专业的图形以及logo设计大师分享他所有的知识在这儿,你一定可以从这里学习到很多知识。
  5. Behance 可以给你带来设计灵感,这里聚集了所有来自世界上所有的设计,非常酷吧
  6. Pdf Mags 非常出色的杂志,里面提供的都是世界顶级设计师的专访,灵感以及文章还有更多。
  7. Graphic Design Forum 这是最活跃的图形设计场所,比较针对于设计初学者。
  8. Design Is Kinky 这是来自澳大利亚的一个纯粹有关设计新闻和通用设计的站点
  9. Freelance Folder 一个Blog社区,发布的都是常用型文章,非常丰富。
  10. Bittbox 提供大量的设计资源,如教程,笔刷,矢量图还有更多 …
  11. Vandelay Webdesign 为网络设计师提供大量的非常易懂的文章资源和技巧。
  12. You The Designer 非常齐全而且多元化的有关设计的文章
  13. Design You Trust 这个站点展现的来自全球的优秀设计,这些设计也都代表了设计的走向,这儿还有非常棒的设计资源,设计杂志和blog文章。

Web设计网站

100 dede sites 2 100个优秀的国外设计开发网站

  1. Noupe 一个绝对出色的关于网络设计以及网络开发的站点(CSS&Ajax)
  2. Smashing Magazine 这个站点信息非常全面而且非常广,如果你是个设计师却不知道这个站点,那么我们就太为你遗憾了。
  3. Think Vitamin Vitamin是为网络设计师,程序员还有老板提供资源的站点,50,000个订阅者就很好的展示了他的实力。
  4. 24 Ways 我们设计,我们开发,这儿一直都是高质量的文章
  5. A List Apart 网络设计博客时间中另一个栋梁站点,多样化的成员提供着非常不错的文章。
  6. Site Point 非常多元化的站点,图形设计,css,ajax….
  7. The Rissington Podcast 杰出的设计站点,来至出色的网络设计师John Oxton 和 Jon Hicks
  8. Web Appers 为网络开发者提供开放的blog源码
  9. Happy Cog 他们分享自己最好的想法并向全世界的网络设计创达着
  10. Web Designer Wall 绝对是一个网络设计师以及所有设计必须知道的出色的站点。

相关: 50+Web设计工具、资源和素材

设计资源类网站

100 dede sites 3 100个优秀的国外设计开发网站

  1. Design Float 挖掘很多于设计有关的主题,你一定要知道
  2. Psd Tuts 呵呵,这是网络中最好的教程站点了….Great ,我非常喜欢这个站点。
  3. Blue Vertigo The MUST HAVE bookmark of all stock resourceson the net.
  4. SXC.hu 我最喜欢的资源站点
  5. Icon Finder Self explanitory.
  6. Da Font 免费字体
  7. Maniackers Design Make 在许多免费的资源中,你可以找到很多不一样的灵感,
  8. Colour Lovers 发现,创作交,换你最喜欢的色彩

相关: 60多个CSS GALLERY画廊网站简介

设计展示类网站

100 dede sites 4 100个优秀的国外设计开发网站

  1. Command Shift 3 不知道你是否有听过这个站点,这是个你可以得到灵感的站点,
  2. Showcase Point 展示Flash & CSS 的站点
  3. Zeniltuo 这儿有非常丰富的充满创意的站点
  4. The FWA 主要展示flash站点,但是全部都是高质量的哦,创意都非常不错。
  5. CSS Mania CSS de 另外一个展示架
  6. CSS Remix 非常不错的CSS画廊,可以看到很多优秀的CSS站点
  7. Best Web Gallery 设计的一个很好的选择。
  8. ScreenFluent 一个很好的网络设计选择。
  9. W3C Sites 通过校验W3C的优秀站点
  10. CSS Beauty 另一个非常不错的有关CSS的站点,有很多有趣的关于新的网络开发的文章
  11. Edu Style 在学校或者大学同样也有很多不错的css展示廊,这就是一个尤其不错的地址

开发相关类网站

100 dede sites 5 100个优秀的国外设计开发网站

  1. Problogger 通常在博客上的文章,都为很多的博客作者提供。
  2. Pro Blog Design 关于提升你的博客设计,这里只有高质量的文章
  3. WP designer 这些博客的作者多为WordPress的开发者
  4. Ajax Rain 网络上一个很大的Ajax书店
  5. CSS3.info CSS3.
  6. CSS Earth 这个站点有有最好的有关CSS的文章

Flash & Flex相关网站

100 dede sites 6 100个优秀的国外设计开发网站

  1. Labs Adobe 来自Adobe的新技术的文章
  2. Christophe Coenraets Flex 开发人员的Blog.
  3. Adobe AIR Tutorials AIR教程网
  4. Mike Chambers 基础程序和技术站点
  5. The Blog Flash Action Script. 3 和 Flex.的blog
  6. Jean Phi Blog 法国最出色的flash开发师之一,有很多杰出的作品

字型排版相关网站

100 dede sites 7 100个优秀的国外设计开发网站

  1. Swiss Legacy 印刷,栅格设计
  2. I Love Typography Speaks for itself. A must know.
  3. Design & Typo 著名的Peter Gabor的blog, 有非常多很独特的创意在这儿。
  4. The Typographer 法国的一个著名的关于印刷的站点
  5. Slanted 一个很大的德国关于印刷的站点

视频动画相关的网站

100 dede sites 8 100个优秀的国外设计开发网站

  1. Stage6 动画 (2d and 3d). 非常不错
  2. Fubiz 一个很不错的Blog,有很多关于创意细节的介绍,收藏它,绝对不会错
  3. Motiono Grapher International reference for all who are in the motion business.
  4. Video Copilot 制作video特效的教程站点
  5. Graphics/ Motion 意大利的motion博客,文章质量很好而且更新的非常有规律
  6. FX Guide 非常好的 motion 和video 的交流网站,别错过这么优秀的站点
  7. Works Motion John Dickinson的一个站点, 有很多创意和灵感和技巧

个人设计博客

100 dede sites 9 100个优秀的国外设计开发网站

  1. Elliot Jay Stocks Elliot Jay Stocks没有人不知道他。
  2. Veerle Blog 网络中最美丽的blog之一的站点,非常全面的文章还有教程
  3. Jina Bolton Jina Bolton 是这本书“Art & Science of CSS”的作者,“Create Sexy StyleSheet” 的发起人
  4. Snook Jonathan Snook是著名图形设计师,程序员,作家以演讲家,在他的Blog中,为所有设计师准备了非常多知识。
  5. Stuff And Nonsense Markley世界上最出名的设计师之一。
  6. Lysergid Lo?c SATTLER 法国非常著名的设计师.出色的文章和设计.
  7. Iso 50 Scott Hansen 绝对出色的设计师.
  8. John Nack Blog John Nack的blog,非常专业全面的关于图形设计以及Adobe

Web2.0设计相关的网站

100 dede sites 10 100个优秀的国外设计开发网站

  1. NetVibes The web comes to you. News aggregator plus!
  2. Del.Ico.Us A tool for bookmaking and social media attention, must have!
  3. Twitter Get updates on what your friends, co workers, etc are doing.
  4. FaceBook 一个你可以记录生活的站点,facebook..
  5. Flickr 一个摄影的交流场合,现在无数的用户用新照片发现每天的生活

其它与设计相关的网站

100 dede sites 11 100个优秀的国外设计开发网站
仅限于浏览,设计的面基本都是设计师感兴趣的(流行,音乐,设计)

  1. Vinyl misuses 关于玩具的一个杂志,一定要看看,设计真的非常酷…
  2. Discobelle Excellent site of music, showcases music videos, parties, etc.
  3. Hype Beast 时尚文化的杂志
  4. Lense A French reference for all those who wish to know some more about photography.
  5. PopRave Blog Underground culture of the clothes industry.
  6. All Graphic Design A site for everything graphic design related.
  7. North X East Articles for bloggers.
  8. Ads Of The World Web site which publishes all of the worlds ads. Great inspiration here.
  9. LogoPond Logo Design Inspiration
  10. Logo Design Love A blog focused totally on Logo Design. Regular articles and resources.
  11. Split Da Diz I have translated his page from French into English as he was theoriginal posterof this article however I changed the French sites he recommended
  12. intoEnglish ones, fixed the old links he had posted and changed the orderof some items… Visit his site!
  13. Boing Boing A genearl directory of wonderful things.
  14. Business of Design Online Pretty much anything to help a design business grow online.
  15. Just Creative Design Whoelse would have brought you this massive English list of 99+ graphicdesign resources? We provide graphic design tips, resources

相关: 10个激发Logo设计灵感的网站

最后,帕兰加一个国内的,已经推荐过很多次的站酷6大设计开发类中文网站

原文链接:99 Sites All Designers Must Know About
译者:元云
译文:99个站点设计师必须知道

来源于 100个优秀的国外设计开发网站 | 帕兰映像

作者  | 2009-8-31 14:31:02 | 阅读(2027) |评论(2) | 阅读全文>>

[置顶] 53个CSS技巧

2009-8-31 14:26:26 阅读77 评论0 312009/08 Aug31

CSS是简单易学的,但要成为一个CSS高手却不比其它任何一门Web技术语言要简单。本文收集了53个CSS技巧文章,助你步入CSS高手的队列(不过都是英文,想学习的朋友得多费点劲)。同时记得查看我们之前介绍的50款CSS工具60+CSS技巧教程资源大全

1. CSS Based Navigation //基于CSS的导航

2. Navigation Matrix Reloaded //导航矩块翻转

3. CSS Tabs //CSS标签

4. CSS Bar Graphs //CSS条状图表

5. Collapsing Tables: An Example //压缩表格:一个实例

6. Adam’s Radio & Checkbox Customisation Method //亚当的单选框和复选框的用户化方法

7. CSS Image Replacement //CSS图像替代

8. CSS Shadows(CSS Shadows Roundup) //CSS阴影(CSS阴影综述)

9. CSS Rounded Corners Roundup (Nifty Corners) //CSS圆角综述(漂亮的拐角)

10. Drop Cap-Capital Letters with CSS //用CSS实现首字母下沉

11. Define Image Opacity with CSS //用CSS定义图像半透明

12. How to Create a Block Hover Effect for a List of Links //如何给链接列表创建鼠标悬停的区块效果

13. Pullquotes with CSS (Automatic Pullquotes with JavaScript and CSS) //用CSS实现引用(用JavaScript和CSS实现自动引用)

14. CSS Diagrams //CSS图表

15.CSS Curves //CSS曲线

16. Footer Stickallows for the footer of a Web page to appear either at the bottom of the browser window or the bottom of the Web page content – whichever is visually lowest.

页脚帖允许一个网站页面的页脚显示在在浏览器窗口的底部或者网站页面内容的底部中实际最底的一个。

17. CSS Image Map //CSS图像地图

18. CSS Image Pop-Up //CSS图像弹出

19.CSS Image Preloader //CSS图像预载

20. CSS Image Replacement for Buttons //CSS按钮的图片替换

21.Link Thumbnail //链接缩略图

22. CSS Map Pop //CSS地图提示

23. PHP-based CSS Style Switcher //基于PHP的CSS样式改变

24. CSS Unordered List Calender (CSS Styled Calender) //CSS无序列表日历(CSS设计的日历)

25. CSS-Based Forms: Techniques //基于CSS的表单:技巧

26. CSS-Based Tables: Techniques //基于CSS的表格:技巧

27. Printing Web-Documents and CSS //打印网站文档和CSS

28. Improved Links-Display for Print-Layouts with CSS //用CSS改良打印布局的链接显示

29. CSS-Submit Buttons //CSS提交按钮

30. CSS Teaser Box //CSS内容摘要盒子

31. CSS Tricks for Custom Bullets //对于定义式列表的CSS窍门

32. Ticked Off Links Reloaded //用记号标出翻转的链接

33. CSS Zooming //CSS缩放

34. Creating a Star Rater using CSS //用CSS创建星型评价

35. The ways to style visited Links //设计浏览过链接的方法

36. PDF, ZIP, DOC Links Labeling //PDF,ZIP,DOC链接的标注

37. Displaying Percentages with CSS //用CSS显示百分比

38. Image Floats without the Text Wrap //没有被正文包围的浮动图片

39. Let visitors decide, whether or not will they open link in a new window //让访问者决定,是否会在新窗口带开链接

40. Simple accessible external links //简单易用的外部链接

41. Zebra Table with JavaScript and CSS //用JavaScript和CSS实现多条纹的表格

42. Vertical Centering with CSS (Horizontal and Vertical Centering with CSS) //用CSS实现垂直居中(用CSS实现水平和垂直居中)

43. Unobtrusive Sidenotes //不引人注目的旁注

44. Image Caption with CSS (Styled Images with Caption) //用CSS实现图像说明(设计给图像加上说明)

45. Dynamic Piechart with CSS //用CSS实现动态饼图

46. Format Footnotes with CSS //用CSS实现布局脚注

47. Hierarchical Sitemap with CSS //用CSS实现分等级的网站地图

48. Snook’s Resizable Underlines //史鲁克的可改变大小的下划线

49. Switchy McLayout: An Adaptive Layout Technique //马克布局改变: 一个自适应布局的技巧

50. StyleMap: CSS+HTML Visual Sitemap //样式地图:CSS+HTML 形象化的网站地图

51. Custom Reading Width //自定义阅读宽度

52. CSS Alert Message //CSS提示信息

53. CSS Production Notes //CSS产品注释

英文原文:http://www.smashingmagazine.com/ … uldnt-live-without/
中文译文:Blank(怿飞)

作者  | 2009-8-31 14:26:26 | 阅读(77) |评论(0) | 阅读全文>>

[置顶] 250个设计师、博客和站长应该订阅的RSS Feeds

2009-8-31 14:18:45 阅读80 评论0 312009/08 Aug31

下面是1stwebdesigner整理的250个RSS Feeds, 全都是一些顶尖优秀的英文博客,这些博客主要涉及的领域包括平面设计、Web设计、博客技巧和WordPress技巧,以及SEO等。如果你英语还不错,强烈推荐全部拿下。

[RSS] Smashing Magazine

[RSS] 2expertsdesign

[RSS] InstantShift

[RSS] CrazyLeaf Design Blog

[RSS] Garcya

[RSS] Positive Space Blog

[RSS] Happy Cog: News

[RSS] Dacheboard

[RSS] Think Vitamin

[RSS] Onextrapixel

[RSS] Tutzone

[RSS] Rotorblog

[RSS] The Rissington Podcast

[RSS] BlueBlots

[RSS] Naldz Graphics

[RSS] Best Photoshop Tutorials

[RSS] Digital Arts Magazine

[RSS] TOP CG Tutorials

[RSS] 90 Percent of Everything

[RSS] hongkiat.com

[RSS] wpcandy

[RSS] InteractiveBlend

[RSS] Vectordiary

[RSS] boagworld

[RSS] WPZOOM

[RSS] Tutorial Blog

[RSS] Blog.SpoonGraphics

[RSS] The Design Inspiration

[RSS] Web Design Tuts

[RSS] Google Blog

[RSS] CrazyLeaf Design Blog

[RSS] The Die Line

[RSS] AiBURN

[RSS] Janko At Warp Speed

[RSS] My Ink Blog

[RSS] Kreativuse

[RSS] Six Revisions

[RSS] Lee Munroe

[RSS] logodesignlove

[RSS] TutorialSwitch

[RSS] Dezignus

[RSS] yensdesign – Tutorials, Web Design and Coding

[RSS] Marcofolio

[RSS] Vandelay

[RSS] Inspired Magazine

[RSS] Web Design Marketing Podcast & Blog

[RSS] The Blog of Doug Cloud

[RSS] Dzineblog

[RSS] Eating Design

[RSS] Vitamin Feed

[RSS] Inspiredology

[RSS] Audiotts

[RSS] Tutzor

[RSS] Noupe

[RSS] High Resolution Textures

[RSS] WereWP

[RSS] FreelanceSwitch

[RSS] Softalize

[RSS] Flashden

[RSS] Min Tran’s weblog

[RSS] Creattica Daily

[RSS] Sharebrain

[RSS] Fuel Your Creativity

[RSS] Dosh Dosh

[RSS] Minervity

[RSS] Ajax Rain

[RSS] DesignFeedr

[RSS] Loon Design

[RSS] Everaldo.com : Blog

[RSS] Niki’s DesignO’Blog

[RSS] styl.eti.me

[RSS] SitePoint.com

[RSS] Observin

[RSS] Beeex.net

[RSS] Spyre Studios

[RSS] Ajaxian

[RSS] CSS Globe

[RSS] Snook.ca

[RSS] PSDTUTS

[RSS] Photoshop Lady

[RSS] Jenaelee

[RSS] BittBox

[RSS] Webitect

[RSS] HieuUK

[RSS] Signal vs. Noise

[RSS] CSS-Tricks

[RSS] Photoshop Tutorials and PST news

[RSS] Darkmotion

[RSS] Outlaw Design Blog

[RSS] Usability Post

[RSS] Work at Home Blog

[RSS] Pro Blog Design

[RSS] TutorialMagazine.com Tutorial Feed

[RSS] Colours Magazine

[RSS] advertising/design goodness

[RSS] Signalnoise

[RSS] We are not Freelancers

[RSS] Open Source Hunter

[RSS] Gavin Elliott |

[RSS] 640Pixels.com

[RSS] Veer: Ideas: The Skinny

[RSS] Mayhem Studios

[RSS] Weird Resources

[RSS] Kriesi.at – new media design

[RSS] Think Design

[RSS] Design Shard

[RSS] Designerside

[RSS] Fortytwo.gr – Blog

[RSS] WpRecipes.com

[RSS] Veerle’s blog: full articles

[RSS] Mashable!

[RSS] The Graphic Mac

[RSS] Planet Photoshop

[RSS] A List Apart

[RSS] Branded07

[RSS] Qvectors

[RSS] Script & Style

[RSS] ProBlogger Blog Tips

[RSS] Vectips

[RSS] Toxel.com

[RSS] CSS3 . Info

[RSS] SEOmoz

[RSS] Graphic Design Blog

[RSS] velvetmoth

[RSS] I love typography

[RSS] Wake Up Later: Freelance + Passive Income

[RSS] Copyblogger

[RSS] ilovecolors

[RSS] WPDONE

[RSS] Andy Sowards

[RSS] CameronMoll

[RSS] WooThemes

[RSS] Giackop Design

[RSS] farfromfearless

[RSS] Mark Forrester

[RSS] Smashing Apps

[RSS] TwiTip

[RSS] PelFusion.com

[RSS] Spoonfed Design

[RSS] You the Designer

[RSS] INHABITAT

[RSS] DesignM.ag

[RSS] The Design Cubicle

[RSS] The UX Booth

[RSS] Assault Blog

[RSS] Octwelve

[RSS] 10Steps.SG

[RSS] Well Medicated

[RSS] Pshero

[RSS] Woork

[RSS] Slick Affiliate

[RSS] Web Design Ledger

[RSS] Andrew Sellick

[RSS] John Nack on Adobe

[RSS] Search Engine Journal

[RSS] Zen Habits

[RSS] The Get Smart Blog

[RSS] Productivedreams.com

[RSS] Freelance Folder

[RSS] psdfan.com

[RSS] Developer Snippets

[RSS] Daily Bits

[RSS] 24 ways

[RSS] We Are Just Creative

[RSS] Hot College Girls Guide to Graphic Design

[RSS] Design Reviver

[RSS] Cult-foo

[RSS] Reaction!

[RSS] Elliot Jay Stocks

[RSS] WebAppers

[RSS] Lines and Colors

[RSS] neples

[RSS] About.com/ HTML: Popular

[RSS] David Airey

[RSS] 9rules Official Blog

[RSS] WebDesignDev

[RSS] Queness

[RSS] Fudge Graphics

[RSS] Make Design, Not War

[RSS] Redswish

[RSS] Blog Perfume

[RSS] GoMediaZine

[RSS] afrison.com

[RSS] Weblog Tools Collection

[RSS] CSSVault Blog

[RSS] Web Design from Scratch

[RSS] In the Woods

[RSS] Blog of Soh Tanaka

[RSS] Showcase Point

[RSS] Just Creative Design

[RSS] WebResourcesDepot

[RSS] Deziner Folio

[RSS] DevSnippets

[RSS] NETTUTS

[RSS] CatsWhoCode.com

[RSS] PV.M Garage

[RSS] Darren Hoyt Dot Com

[RSS] Resource Pile

[RSS] We Made This

[RSS] remy sharp’s b:log

[RSS] Mogdesign

[RSS] VECTORTUTS

[RSS] Design Blurb

[RSS] Ars Thanea Blog

[RSS] Digital Photography School

[RSS] mezzoblue

[RSS] Journal

[RSS] Lifesize

[RSS] Blog Oh Blog

[RSS] Arbenting

[RSS] Web Design

[RSS] Just Tweet It

[RSS] Designious Times

[RSS] Doodlage

[RSS] ferdychristant.com

[RSS] core77.com’s design blog

[RSS] Yanko Design

[RSS] iDesign Studios

[RSS] Tracey Grady Design

[RSS] Obsidian Dawn

[RSS] ReadWriteWeb

[RSS] Computer Arts

[RSS] Get Your Site Noticed

[RSS] SimpleBits

[RSS] Creative Curio

[RSS] Make Tech Easier

[RSS] DCTH

[RSS] Colorburned

[RSS] DaleAnthony

[RSS] Monofactor

[RSS] John Chow dot Com

[RSS] Lost and Taken

[RSS] KILLERSITES.COM

[RSS] Elite By Design

[RSS] Freelance Switch

[RSS] Web Designer Wall

[RSS] Stand Out Blogger

[RSS] Tutorial9 – Tutorial Bliss.

[RSS] SEO blog – SEO Tips, Social Media Marketing for the learner.

[RSS] Webdesigner Depot

[RSS] ImJustCreative

[RSS] MEDIAUPS

[RSS] DesignFlavr

[RSS] Nerd Business Blog

[RSS] Design Melt Down

[RSS] Raster Vector

[RSS] Photoshop Tutorials

[RSS] Drawn!

[RSS] wefunction

[RSS] Abduzeedo – graphic design

[RSS] Dot

[RSS] Gizmodo

[RSS] Design daily news

[RSS] Weekly Articles About Blogging – NxE

[RSS] CSS Beauty

[RSS] Stopdesign

[RSS] BOOOOOOOM!

[RSS] Function

[RSS] 1stwebdesigner

要手动一个一个的去订阅,当然是很麻烦的。1stwebdesigner很贴心的准确了OPML文件,下载地址

作者  | 2009-8-31 14:18:45 | 阅读(80) |评论(0) | 阅读全文>>

android上传图片至服务器 转

2011-11-10 13:46:58 阅读13 评论0 102011/11 Nov10

本实例实现了android上传手机图片至服务器,服务器进行保存服务器servlet代码
public void doPost(HttpServletRequest request, HttpServletResponse response)  
           throws ServletException, IOException {  
            
           String temp=request.getSession().getServletContext().getRealPath("/")+"temp";   //临时目录
           System.out.println("temp="+temp);
           String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录
           System.out.println("loadpath="+loadpath);
           DiskFileUpload fu = new DiskFileUpload();
           fu.setSizeMax(1*1024*1024);   // 设置允许用户上传文件大小,单位:字节 
           fu.setSizeThreshold(4096);   // 设置最多只允许在内存中存储的数据,单位:字节 
           fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 
           
           //开始读取上传信息 
           int index=0;
           List fileItems = null;
                
                         
                                try {
                                        fileItems = fu.parseRequest(request);
                                         System.out.println("fileItems="+fileItems);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                         
                
           Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
           while (iter.hasNext())
           {
               FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
               if (!item.isFormField())
               {
                   String name = item.getName();//获取上传文件名,包括路径
                   name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名
                   long size = item.getSize();
                   if((name==null||name.equals("")) && size==0) 
                         continue; 
                   int point = name.indexOf(".");
                   name=(new Date()).getTime()+name.substring(point,name.length())+index;
                   index++;
                   File fNew= new File(loadpath, name);
                   try {
                                        item.write(fNew);
                                } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                   
                  
               }
               else //取出不是文件域的所有表单信息
               {
                   String fieldvalue = item.getString();
            //如果包含中文应写为:(转为UTF-8编码)
                   //String fieldvalue = new String(item.getString().getBytes(),"UTF-8");
               }
           }
           String text1="11";
           response.sendRedirect("result.jsp?text1=" + text1);
    }  复制代码

android客户端代码
public class PhotoUpload extends Activity {
    private String newName = "image.jpg";
    private String uploadFile = "/sdcard/image.JPG";
    private String actionUrl = "http://192.168.0.71:8086/HelloWord/myForm";
    private TextView mText1;
    private TextView mText2;
    private Button mButton;

    @Override
      public void onCreate(Bundle savedInstanceState)
      {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photo_upload);

        mText1 = (TextView) findViewById(R.id.myText2);
        //"文件路径:\n"+
        mText1.setText(uploadFile);
        mText2 = (TextView) findViewById(R.id.myText3);
        //"上传网址:\n"+
        mText2.setText(actionUrl);
        /* 设置mButton的onClick事件处理 */    
        mButton = (Button) findViewById(R.id.myButton);
        mButton.setOnClickListener(new View.OnClickListener()
        {
          public void onClick(View v)
          {
            uploadFile();
          }
        });
      }

      /* 上传文件至Server的方法 */
      private void uploadFile()
      {
        String end = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        try
        {
          URL url =new URL(actionUrl);
          HttpURLConnection con=(HttpURLConnection)url.openConnection();
          /* 允许Input、Output,不使用Cache */
          con.setDoInput(true);
          con.setDoOutput(true);
          con.setUseCaches(false);
          /* 设置传送的method=POST */
          con.setRequestMethod("POST");
          /* setRequestProperty */
          con.setRequestProperty("Connection", "Keep-Alive");
          con.setRequestProperty("Charset", "UTF-8");
          con.setRequestProperty("Content-Type",
                             "multipart/form-data;boundary="+boundary);
          /* 设置DataOutputStream */
          DataOutputStream ds = 
            new DataOutputStream(con.getOutputStream());
          ds.writeBytes(twoHyphens + boundary + end);
          ds.writeBytes("Content-Disposition: form-data; " +
                        "name=\"file1\";filename=\"" +
                        newName +"\"" + end);
          ds.writeBytes(end);   

          /* 取得文件的FileInputStream */
          FileInputStream fStream = new FileInputStream(uploadFile);
          /* 设置每次写入1024bytes */
          int bufferSize = 1024;
          byte[] buffer = new byte[bufferSize];

          int length = -1;
          /* 从文件读取数据至缓冲区 */
          while((length = fStream.read(buffer)) != -1)
          {
            /* 将资料写入DataOutputStream中 */
            ds.write(buffer, 0, length);
          }
          ds.writeBytes(end);
          ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

          /* close streams */
          fStream.close();
          ds.flush();

          /* 取得Response内容 */
          InputStream is = con.getInputStream();
          int ch;
          StringBuffer b =new StringBuffer();
          while( ( ch = is.read() ) != -1 )
          {
            b.append( (char)ch );
          }
          /* 将Response显示于Dialog */
          showDialog("上传成功"+b.toString().trim());
          /* 关闭DataOutputStream */
          ds.close();
        }
        catch(Exception e)
        {
          showDialog("上传失败"+e);
        }
      }

      /* 显示Dialog的method */
      private void showDialog(String mess)
      {
        new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
         .setMessage(mess)
         .setNegativeButton("确定",new DialogInterface.OnClickListener()
         {
           public void onClick(DialogInterface dialog, int which)
           {          
           }
         })
         .show();
      }
    }

作者  | 2011-11-10 13:46:58 | 阅读(13) |评论(0) | 阅读全文>>

SQL养成一个好习惯是一笔财富

2011-10-2 0:12:05 阅读16 评论0 22011/10 Oct2

我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动 大,那么我么还能保证下一段时间系统还能流畅的运行吗?我么还能保证下一个人能看懂我么的存储过程吗?那么我结合公司平时的培训和平时个人工作经验和大家 分享一下,希望对大家有帮助。
  要知道SQL语句,我想我们有必要知道SQL Server查询分析器怎么执行我们的SQL语句的,我们很多人会看执行计划,或者用Profiler来监视和调优查询语句或者存储过程慢的原因,但是如 果我们知道查询分析器的执行逻辑顺序,下手的时候就胸有成竹,那么下手是不是有把握点呢?
  一、查询的逻辑执行顺序
  (1) FROM left_table
  (3) join_type JOIN right_table (2) ON join_condition
  (4) WHERE where_condition
  (5) GROUP BY group_by_list
  (6) WITH {cube | rollup}
  (7) HAVING having_condition
  (8) SELECT (9) DISTINCT (11) top_specification select_list
  (9) ORDER BY order_by_list
  标准的 SQL 的解析顺序为:
  (1) FROM 子句 组装来自不同数据源的数据
  (2) WHERE 子句 基于指定的条件对记录进行筛选
  (3) GROUP BY 子句 将数据划分为多个分组
  (4) 使用聚合函数进行计算
  (5) 使用HAVING子句筛选分组
  (6) 计算所有的表达式
  (7) 使用ORDER BY对结果集进行排序
  二、执行顺序
  1. FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1
  2. ON: 对vt1表应用ON筛选器只有满足 join_condition 为真的行才被插入vt2
  3. OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。
  4. WHERE:对vt3应用 WHERE 筛选器只有使 where_condition 为true的行才被插入vt4
  5. GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5
  6. CUBE|ROLLUP:把超组(supergroups)插入vt6,生成vt6
  7. HAVING:对vt6应用HAVING筛选器只有使 having_condition 为true的组才插入vt7
  8. SELECT:处理select列表产生vt8
  9. DISTINCT:将重复的行从vt8中去除产生vt9
  10. ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10
  11. TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者
   看到这里,那么用过Linq to SQL的语法有点相似啊?如果我们我们了解了SQL Server执行顺序,那么我们就接下来进一步养成日常SQL的好习惯,也就是在实现功能的同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应 该尽量的利用这个工具,所谓集合运算实际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。
  三、只返回需要的数据
  返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:
  A、横向来看
  (1) 不要写SELECT * 的语句,而是选择你需要的字段。
  (2) 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。
1
如有表table1(ID,col1)和table2(ID,col2)
1
Select A.ID, A.col1, B.col2
2
-- Select A.ID, col1, col2 –不要这么写,不利于将来程序扩展
3
from table1 A inner join table2 B on A.ID=B.ID Where … 
  B、纵向来看
  (1) 合理写WHERE子句,不要写没有WHERE的SQL语句。
  (2) SELECT TOP N * -- 没有WHERE条件的用此替代。
  四、尽量少做重复的工作
  A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。
  B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。
  C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。
  D、合并对同一表同一条件的多次UPDATE,比如
UPDATE EMPLOYEE SET FNAME='HAIWER' 
WHERE EMP_ID=' VPA30890F'UPDATE EMPLOYEE SET LNAME='YANG' 
WHERE EMP_ID=' VPA30890F' 
这两个语句应该合并成以下一个语句
UPDATE EMPLOYEE SET FNAME='HAIWER',LNAME='YANG'WHERE EMP_ID=' VPA30890F'
  E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。
  五、注意临时表和表变量的用
  在复杂系统中,临时表和表变量很难避免,关于临时表和表变量的用法,需要注意:
  A、如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成。
  B、如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据。
  C、如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据。
  D、其他情况下,应该控制临时表和表变量的使用。
  E、关于临时表和表变量的选择,很多说法是表变量在内存,速度快,应该首选表变量,但是在实际使用中发现:
  (1) 主要考虑需要放在临时表的数据量,在数据量较多的情况下,临时表的速度反而更快。
  (2) 执行时间段与预计执行时间(多长)
  F、关于临时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择,一般情况下:
  SELECT INTO会比CREATE TABLE + INSERT INTO的方法快很多,
  但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程。
  所以我的建议是,在并发系统中,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用中,使用SELECT INTO。
  六、子查询的用法
  子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。
  任何允许使用表达式的地方都可以使用子查询,子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。
  相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 关于相关子查询,应该注意:
  (1) NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法。比如:
SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOTIN (SELECT PUB_ID FROM TITLES WHERE TYPE ='BUSINESS')
  可以改写成:
SELECT A.PUB_NAME FROM PUBLISHERS A LEFTJOIN TITLES B ON B.TYPE ='BUSINESS'AND A.PUB_ID=B. PUB_ID WHERE B.PUB_ID IS NULL
  比如NOT EXISTS:
SELECT TITLE FROM TITLES 
WHERE NOT EXISTS 
(SELECT TITLE_ID FROM SALES WHERE TITLE_ID = TITLES.TITLE_ID)
1
可以改写成:
SELECT TITLE 
FROM TITLES LEFTJOIN SALES 
ON SALES.TITLE_ID = TITLES.TITLE_ID 
WHERE SALES.TITLE_ID ISNULL
  2)如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替。比如:
SELECT PUB_NAME 
FROM PUBLISHERS 
WHERE PUB_ID IN 
(SELECT PUB_ID 
FROM TITLES 
WHERE TYPE ='BUSINESS')
1
可以改写成:
SELECT A.PUB_NAME --SELECT DISTINCT A.PUB_NAME 
FROM PUBLISHERS A INNERJOIN TITLES B 
ON B.TYPE ='BUSINESS'AND 
A.PUB_ID=B. PUB_ID
  (3) IN的相关子查询用EXISTS代替,比如:
SELECT PUB_NAME FROM PUBLISHERS
WHERE PUB_ID IN
(SELECT PUB_ID FROM TITLES WHERE TYPE ='BUSINESS')
  可以用下面语句代替:
SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS
(SELECT1FROM TITLES WHERE TYPE ='BUSINESS'AND
PUB_ID= PUBLISHERS.PUB_ID)
  4) 不要用COUNT(*)的子查询判断是否存在记录,最好用LEFT JOIN或者EXISTS,比如有人写这样的语句:
SELECT JOB_DESC FROM JOBS
WHERE (SELECTCOUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)=0
  应该改成:
SELECT JOBS.JOB_DESC FROM JOBS LEFTJOIN EMPLOYEE
ON EMPLOYEE.JOB_ID=JOBS.JOB_ID
WHERE EMPLOYEE.EMP_ID ISNULL
  
SELECT JOB_DESC FROM JOBS
WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)0
  应该改成:
SELECT JOB_DESC FROM JOBS
WHEREEXISTS (SELECT 1 FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)
  七:尽量使用索引
   建立索引后,并不是每个查询都会使用索引,在使用索引的情况下,索引的使用效率也会有很大的差别。只要我们在查询语句中没有强制指定索引,索引的选择和 使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们在写SQL语句的时候尽量使得优 化器可以使用索引。为了使得优化器能高效使用索引,写语句的时候应该注意:
  (1)不要对索引字段进行运算,而要想办法做变换,比如:
SELECT ID FROM T WHERE NUM/2=100
应改为:
SELECT ID FROM T WHERE NUM=100*2

SELECT ID FROM T WHERE NUM/2=NUM1
如果NUM有索引应改为:
SELECT ID FROM T WHERE NUM=NUM1*2
如果NUM1有索引则不应该改。
  (2)发现过这样的语句:
SELECT 年,月,金额 FROM 结余表 WHERE100*年+月=2010*100+10
1
应该改为:
SELECT 年,月,金额 FROM 结余表 WHERE 年=2010 AND 月=10
  (3)不要对索引字段进行格式转换
日期字段的例子:
WHERECONVERT(VARCHAR(10), 日期字段,120)='2010-07-15'
应该改为
WHERE日期字段〉='2010-07-15'AND 日期字段'2010-07-16'

ISNULL转换的例子:
WHEREISNULL(字段,'')''应改为:WHERE字段''
WHEREISNULL(字段,'')=''不应修改
WHEREISNULL(字段,'F') ='T'应改为: WHERE字段='T'
WHEREISNULL(字段,'F')'T'不应修改
  (4) 不要对索引字段进行格式转换
WHERELEFT(NAME, 3)='ABC' 或者WHERE SUBSTRING(NAME,1, 3)='ABC'
应改为: WHERE NAME LIKE'ABC%'
日期查询的例子:
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期='2010-06-30' AND 日期 '2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')0
应改为:WHERE 日期 '2010-06-30'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期 '2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')0
应改为:WHERE 日期='2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期='2010-06-30'
  (5)不要对索引字段使用函数
WHERE LEFT(NAME, 3)='ABC' 或者WHERE SUBSTRING(NAME,1, 3)='ABC'
应改为: WHERE NAME LIKE 'ABC%'
日期查询的例子:
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期='2010-06-30'AND 日期 '2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')0
应改为:WHERE 日期 '2010-06-30'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期 '2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')0
应改为:WHERE 日期='2010-07-01'
WHEREDATEDIFF(DAY, 日期,'2010-06-30')=0
应改为:WHERE 日期='2010-06-30'
  (6)不要对索引字段进行多字段连接
比如:
WHERE FAME+'. '+LNAME='HAIWEI.YANG'

应改为:
WHERE FNAME='HAIWEI' AND LNAME='YANG'
  八:多表连接的连接条件对索引的选择有着重要的意义,所以我们在写连接条件条件的时候需要特别注意。
  A、多表连接的时候,连接条件必须写全,宁可重复,不要缺漏。
  B、连接条件尽量使用聚集索引
  C、注意ON、WHERE和HAVING部分条件的区别
   ON是最先执行, WHERE次之,HAVING最后,因为ON是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快 的,WHERE也应该比HAVING快点的,因为它过滤数据后才进行SUM,在两个表联接时才用ON的,所以在一个表的时候,就剩下WHERE跟 HAVING比较了。  
1
考虑联接优先顺序:
2
(1) INNER JOIN
3
(2) LEFT JOIN (注:RIGHT JOIN 用 LEFT JOIN 替代)
4
(3) CROSS JOIN
  其它注意和了解的地方有:
  A、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。
  B、注意UNION和UNION ALL的区别。-- 允许重复数据用UNION ALL好
  C、注意使用DISTINCT,在没有必要时不要用。
  D、TRUNCATE TABLE 与 DELETE 区别。
  E、减少访问数据库的次数。
  还有就是我们写存储过程,如果比较长的话,最后用标记符标开,因为这样可读性很好,即使语句写的不怎么样,但是语句工整,C# 有region,SQL我比较喜欢用的就是:
--startof 查询在职人数
SQL语句
--end of
  正式机器上我们一般不能随便调试程序,但是很多时候程序在我们本机上没问题,但是进正式系统就有问题,但是我们又不能随便在正式机器上操作,那么怎么办呢?我们可以用回滚来调试我们的存储过程或者是SQL语句,从而排错。
BEGINTRAN
UPDATE a SET 字段=''
ROLLBACK
   作业存储过程我一般会加上下面这段,这样检查错误可以放在存储过程,如果执行错误回滚操作,但是如果程序里面已经有了事务回滚,那么存储过程就不要写事 务了,这样会导致事务回滚嵌套降低执行效率,但是我们很多时候可以把检查放在存储过程里,这样有利于我们解读这个存储过程,和排错。
BEGINTRANSACTION 
--事务回滚开始 

--检查报错
IF ( @@ERROR0 ) 
BEGIN 
--回滚操作
ROLLBACKTRANSACTION 
RAISERROR('删除工作报告错误', 16, 3) 
RETURN 
END

--结束事务
COMMITTRANSACTION

作者  | 2011-10-2 0:12:05 | 阅读(16) |评论(0) | 阅读全文>>

如何算出你星座运程

2011-6-20 0:26:50 阅读28 评论0 202011/06 June20

我们所提到的星座运势指南,一般都是以太阳星座来论。比如你是水瓶座,也就是说你出生地时候太阳落在水瓶座,当然你提供的出生时间地点越精确,推算的结果 也越准确。由于星空中月亮移动相当迅速,利用当下时间月亮的位置和你出生时太阳及其他星体的位置的角度关系,来推测每日生活的状态,这就是星座流日运势 法,一般我们在报纸杂志网站上读到的星座运程都是用这种方法进行预测的。

具体的诠释方法是这样的:

  如果某天的月亮位置和出生盘中的太阳位置成90度或180度相位,都很容易带来情绪上的不安。

  如果成120度,则暗示着顺遂的一天。

  如果成0度会相,则会加强所落星座的力量,并使当事人关注内心需要和安全感、也是活动力和外放情况降低的一天。

  如果某天月亮和出生图中的金星构成不良相位,容易对感情或金钱问题感到不满,行事的积极度欠缺;

  如果和火星构成不良相位,当天的脾气会很不好,有争执、生气的情况,或因为好胜心、不耐、精力大量使用而造成情绪不稳;

  如果和水星构成不良相位,会遇到令自己紧张、烦恼的事情;

  如果和出生图中的土星构成不良相位,容易面临导致心情低落、沮丧的事,或有压抑情绪的情况发生;

  如果和木星成不良相位,虽不至于心情沮丧,但却很容易因为神经大条、匆促行事及下结论,而导致东西庞杂无章或遗漏、事情只做了一半就跑了、或讲话任意下断语而不够真确、不够谨慎的情况;

  如果某天月亮和出生图中的海王星成不良相位,则容易遇到令自己失望的事,精神也有不集中或脱离现实的倾向,也容易因没按计画行事而有乱呈一团的情况;

  如果和冥王星成不良相位,会遇到引起你嫉妒心、较劲心或防卫心的人或事,精神压力大,情绪有山雨欲来的倾向;

  如果和天王星构成不良相位,当天容易发生非预期之事,心情易不稳定,或有独排众议、坚持己见、与人产生距离或隔阂的行为;

  如果某天月亮位置和出生图中的月亮构成不良角度,则容易有内心需要不被满足、缺乏安全感、或没来由的情绪低潮的情况。

  如果因为月亮的加入,使得原本出生盘中所具有的90度或180度相位,变成三刑会冲(等腰直角三角形)的格局;或使得原本出生盘中所具有的三刑会冲格局,变成大十字格局;都会造成心情特别的紧张、不安。

  如果因为月亮的加入,使得原本出生盘中的120相位,变成大三角形的格局,则将会带来特别舒适、愉快的日子。

 

作者  | 2011-6-20 0:26:50 | 阅读(28) |评论(0) | 阅读全文>>

Oracle 查询时间差

2011-6-9 9:11:02 阅读181 评论0 92011/06 June9

if(type==1)
{
//昨日
StringBuffer str=new StringBuffer();
str.append(" select to_char(sysdate-1,'yyyy-mm-dd')||' 00:00:00' time_begin,to_char(sysdate-1,'yyyy-mm-dd')||' 24:00:00' time_end from dual ");
tempMap=this.queryForMap(str.toString(), param);
}else if(type==2)
{
//2:今日
StringBuffer str=new StringBuffer();
str.append("select to_char(sysdate,'yyyy-mm-dd')||' 00:00:00'  time_begin, to_char(sysdate,'yyyy-mm-dd')||' 24:00:00' time_end from dual");
    tempMap=this.queryForMap(str.toString(), param);  
}else if(type==3)
{
//3:上周
StringBuffer str=new StringBuffer();
str.append(" select to_char((to_date('2011-06-07', 'yyyy-mm-dd') -decode(to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd'),1,7, ");
str.append(" to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1),'yyyy-mm-dd')||' 00:00:00'  time_begin, ");
str.append(" to_char((to_date('2011-06-07', 'yyyy-mm-dd')  -(decode(to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd'),1,7, ");
    str.append(" to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6)),'yyyy-mm-dd')||' 24:00:00' time_end from dual ");
tempMap=this.queryForMap(str.toString(), param);  
}
else if(type==4)
{
//4:本周
   
}
else if(type==5)
{
//5:上月
StringBuffer str=new StringBuffer();
str.append(" select*from(select  to_char(to_date(mon,'yyyymmdd'),'yyyy-mm-dd')||' 00:00:00'  time_begin ,to_char(LAST_DAY(to_date(mon,'yyyymmdd')),'yyyy-mm-dd')||' 24:00:00' time_end,aa as curmon ");
str.append(" from (select '2011'||to_char(aa,'09')||'01' mon, aa from (select 1 aa from dual union select 2 aa from dual union ");
str.append("  select 3 aa from dual union select 4 aa from dual union select 5 aa from dual union select 6 aa from dual union ");
    str.append("  select 7 aa from dual union select 8 aa from dual union select 9 aa from dual union select 10 aa from dual union ");
    str.append("  select 11 aa from dual union select 12 aa from dual))) where curmon= to_char(add_months(trunc(sysdate),-1),'mm') ");
    tempMap=this.queryForMap(str.toString(), param);  
}else if(type==6)
{
//6:本月
StringBuffer str=new StringBuffer();
str.append(" select*from(select  to_char(to_date(mon,'yyyymmdd'),'yyyy-mm-dd')||' 00:00:00'  time_begin ,to_char(LAST_DAY(to_date(mon,'yyyymmdd')),'yyyy-mm-dd')||' 24:00:00' time_end,aa as curmon ");
str.append(" from (select '2011'||to_char(aa,'09')||'01' mon, aa from (select 1 aa from dual union select 2 aa from dual union ");
str.append("  select 3 aa from dual union select 4 aa from dual union select 5 aa from dual union select 6 aa from dual union ");
    str.append("  select 7 aa from dual union select 8 aa from dual union select 9 aa from dual union select 10 aa from dual union ");
    str.append("  select 11 aa from dual union select 12 aa from dual))) where curmon= to_char(add_months(trunc(sysdate),0),'mm') ");
    tempMap=this.queryForMap(str.toString(), param);  
}
---------------------------------------------------------------------------
---上周时间
select to_char((to_date('2011-06-07', 'yyyy-mm-dd') -decode(to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd'),1,7,
              to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1),'yyyy-mm-dd')||' 00:00:00'  time_begin,       
       to_char((to_date('2011-06-07', 'yyyy-mm-dd')  -(decode(to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd'),1,7,
              to_char(to_date('2011-06-07', 'yyyy-mm-dd'), 'd') - 1) - 7 + 1 + 6)),'yyyy-mm-dd')||' 24:00:00' time_end
  from dual;
 


select trunc(sysdate ,'D') from dual


    trunc(sysdate,'yyyy') --返回当年第一天。
    trunc(sysdate,'mm') --返回当月第一天。
    trunc(sysdate,'d') --返回当前星期的第一天。
    trunc(sysdate,'dd')--返回当前年月日
    
    select to_char(sysdate-1,'yyyy-mm-dd')||' 00:00:00' time_begin,to_char(sysdate-1,'yyyy-mm-dd')||' 24:00:00' time_end from dual



--Oracle 查询指定年份(比如2011)每个月的第一天和最后一天
select *
  from (select to_char(to_date(mon, 'yyyymmdd'), 'yyyy-mm-dd') ||
               ' 00:00:00' time_begin,
               to_char(LAST_DAY(to_date(mon, 'yyyymmdd')), 'yyyy-mm-dd') ||
               ' 24:00:00' time_end,
               aa as curmon
          from (select '2011' || to_char(aa, '09') || '01' mon, aa
                  from (select 1 aa
                          from dual
                        union
                        select 2 aa
                          from dual
                        union
                        select 3 aa
                          from dual
                        union
                        select 4 aa
                          from dual
                        union
                        select 5 aa
                          from dual
                        union
                        select 6 aa
                          from dual
                        union
                        select 7 aa
                          from dual
                        union
                        select 8 aa
                          from dual
                        union
                        select 9 aa
                          from dual
                        union
                        select 10 aa
                          from dual
                        union
                        select 11 aa
                          from dual
                        union
                        select 12 aa from dual)))
 where curmon = to_char(add_months(trunc(sysdate), -1), 'mm')
 
---今天
 select to_char(sysdate,'yyyy-mm-dd')||' 00:00:00'  time_begin, to_char(sysdate,'yyyy-mm-dd')||' 24:00:00' time_end from dual

作者  | 2011-6-9 9:11:02 | 阅读(181) |评论(0) | 阅读全文>>

【引用】oracle当月、当年、本周数据

2011-6-7 18:59:38 阅读241 评论0 72011/06 June7

当月数据
Sql代码 复制代码
  1. select * from table t    
  2. where t.create_time >=TRUNC(SYSDATE, 'MM')    
  3. and t.create_time<=last_day(SYSDATE)  
Sql代码
请点击查看影音文件...
  1. select * from table t   
  2. where t.create_time >=TRUNC(SYSDATE, 'MM')   
  3. and t.create_time<=last_day(SYSDATE)  
select * from table t where t.create_time >=TRUNC(SYSDATE, 'MM') and t.create_time<=last_day(SYSDATE)

当年数据
Sql代码 复制代码
  1. select * from table t   
  2. where t.create_time >=trunc(sysdate,'YYYY')    
  3. and t.create_time<=add_months(trunc(sysdate,'YYYY'),12)-1  
Sql代码
请点击查看影音文件...
  1. select * from table t  
  2. where t.create_time >=trunc(sysdate,'YYYY')   
  3. and t.create_time<=add_months(trunc(sysdate,'YYYY'),12)-1  
select * from table t where t.create_time >=trunc(sysdate,'YYYY') and t.create_time<=add_months(trunc(sysdate,'YYYY'),12)-1

本周(国外周日为一个星期第一天)
Sql代码 复制代码
  1. where t.create_time >=trunc(sysdate,'day')+1 and t.create_time<=trunc(sysdate,'day')+6   
Sql代码
请点击查看影音文件...
  1. where t.create_time >=trunc(sysdate,'day')+1 and t.create_time<=trunc(sysdate,'day')+6   
where t.create_time >=trunc(sysdate,'day')+1 and t.create_time<=trunc(sysdate,'day')+6 

本周(国内周一为一个星期第一天)
Sql代码 复制代码
  1. where t.create_time >=trunc(next_day(sysdate-8,1)+1) and t.create_time<=trunc(next_day(sysdate-8,1)+7)+1  

oracle 取当月最后一天的sql语句:

select last_day(sysdate) from dual;

 

其他方式:取得当月数据

 

select t.*
  from tbl_order_history_info t
 where t.store_id = '1e5dace9-8772-4897-a63a-429b74155958' and
       t.trade_time between trunc(sysdate, 'month') and last_day(sysdate)

 

add_months:在当前日期的基础上加/减月份,返回加/减后的日期。

SQL> select add_months(sysdate, -3) three_months_ago from dual;

作者  | 2011-6-7 18:59:38 | 阅读(241) |评论(0) | 阅读全文>>

20款对设计师非常有用的在线配色工具

2011-5-24 14:39:27 阅读49 评论0 242011/05 May24

配色是网页设计的关键之一,精心挑选的颜色组合可以帮助你让设计更有吸引力,相反的,糟糕的配色会伤害眼睛,妨碍读者对网页内容和图片的理解。然而,很多时候设计师不知道如何选择颜色搭配,好消息是如今有很多的配色工具帮助你挑选颜色。下面列出了20款优秀在线配色工具,看看哪款适合你。

COLOR SCHEME DESIGNER

Color Scheme Designer

Color Scheme Designer是一款互动的在线配色工具,通过拖动色轮来选择色调,可导出十六进制的颜色代码为HTML、XML和文本文件。

CHECK MY COLOURS

Check My Colours

Check My Colours是一款帮助你检查不同网页自己的颜色亮度和对比度的差异的工具,同时也检查所有DOM元素的前景色和背景色时候有足够的对比度。

COLOR JACK

Color Jack

ColorJack是一款在线配色工具,从球形的取色器中选择颜色。

COLOURMOD

colourmod

ColourMod是一个面板工具,让用户动态的改变网页的颜色设置。

COLOROTATE

colorotate

ColoRotate是一款3D工具,让你在三维空间里更方便的操作和选择颜色组合。

CONTRAST-A

Contrast-A

Contrast-A可以让你在一个三维的RGB颜色空间里进行颜色组合实验。

KULER

kuler

Kuler是一个设计师创建和分享配色方案的平台,可以使用易用的操作界面进行颜色组合实验及浏览成千上万的预制配色方案。

COLOURGRAB

colourgrab

ColourGrab可以让用户通过提交图片地址,然后获得分解出的图片配色。

PRO COLOR PALETTE SOFTWARE FROM COLOURLOVERS

Pro Color Palette Software from Colourlovers

Pro Color Palette这款工具包含从图片获取配色,还有一个取色器和配色器,可以保存正在使用的颜色。

COLOR EXPLORER

Color Explorer

Color Explorer是一款帮助你挑选主页颜色的免费工具。

PICTACULOUS

pictaculous

Pictaculous是一个方便的配色工具,可以从你选择的图片中提取颜色并生成配色的配色方案。

COLOR HUNTER

Color Hunter

Color Hunter可以让你从图片中选取颜色并生成对应的配色方案。

COLORZILLA

colorzilla

colorZilla是一个Mozilla扩展,帮助Web开发者和设计师选择网页中的对象颜色。

COLOR WIZARD

Color Wizard

Color Wizard是一款在线工具,你可以提交一个基准颜色,它会自动返回匹配的配色方案。

KOLUR

kolur

Kolur以简单愉快的方式浏览调色板,帮助你挑选配色方案。

COLOR WHEEL

Color Wheel

The color Wheel是一款帮助你挑选网站配色的工具,同时生成对应的颜色代码。

COLORMUNKI

colormunki

ColorMunki是一款工具齐全的配色工具,可配制出任何可见光谱范围内的颜色。

COLORSPIRE

colorspire

Colorspire这款工具有一个灵活的取色器和颜色轮子,帮助你快速的为网站选择配色方案。

COLOR SCHEMER ONLINE V2

color schemer Online V2

Color Schemer Online v2是一款即时的在线配色工具,帮助你选择网站的配色方案。

INFOHOUND COLOR SCHEMER

Infohound Color Schemer

Infohound Color Schemer是一款帮助你实验不同配色方案的简单工具。

原文出自:20 Color Scheme Generators for Web and Graphic Designers

作者  | 2011-5-24 14:39:27 | 阅读(49) |评论(0) | 阅读全文>>

商刊评美20大青年IT企业家:Groupon CEO入选

2011-5-18 14:37:04 阅读59 评论0 182011/05 May18

北京时间5月17日消息,《商业周刊》今天评出了2011年最佳青年科技企业家,并列出了他们创立的企业、所获得的投资以及最明智的投资决定。

1.亚历克莎··托贝尔(Alexa vonTobel),27岁

企业:女性理财网站LearnVest

融资:获得110万美元种子期投资;2010年获得风投公司AccelPartners的450万美元投资

亚历克莎·冯·托贝尔本应于2006年从哈佛大学毕业,加入摩根士丹利,成为一名交易员。她希望学习从未涉猎的个人理财知识,但发现很少有适合初学者的资料。2008年,她从哈佛商学院停学,创立了LearnVest网站,专门教女性用户如何理财。该网站能帮助用户找到各种小提示和工具,来设立并遵守理财计划。用户还可报名参加关于个人理财、摆脱债务、削减开支和积累财富的网上“训练营”。

最明智的融资决定:托贝尔表示:“我设立LearnVest动用了自己的积蓄,这让我在花钱的时候极为谨慎,如果你想把每个美元都花到刀刃上的话,就必须专注于对业务最重要的领域。即使是从AccelPartners获得450万美元投资之后,我仍然遵循这一原则。”

2.桑吉特·比斯沃斯(SanjitBiswas),29岁

企业:无线网络公司Meraki

融资:谷歌、风险投资公司红杉资本和DAGVentures投资了4000万美元

桑吉特·比斯沃斯于2006年5月在马萨诸塞州剑桥市创立了Meraki公司,当时他是麻省理工学院的博士生。他希望能创立一种服务,使任何人都能在几分钟内部署大规模无线网络,原本还计划在地下室里出售路由器,作为副业。好在投资者对Meraki颇为看好,他和联合创始人约翰·比吉特(JohnBicket)获得了充足的资金,可以全职研究上述概念。

最明智的融资决定:不要到山穷水尽的时候才融资。比斯沃斯表示:“我们融资的目的很清晰,不是为了生存而是为了加速发展。”他表示,风险投资公司也注意到了这一点,因此投资条款对该公司很有利。

3.丹·卡罗尔(DanCarroll),29岁

企业:财富管理网站Wealthfront

融资:获得风投公司DAGVentures及马克·安德森等天使投资人的1000万美元资金

丹·卡罗尔从15岁就开始投资股票,他于2007年创立了Wealthfront网站,以提高投资界的透明度。他表示,那时候“没人注意维护小投资者的利益”,他希望使有天赋的投资者能轻易获得以往只对富豪开放的财富管理工具。“这个行业25年来都没什么创新,”他表示:“Wealthfront希望改变这一点。”

最明智的融资决定:获得多名人脉广阔的风投家青睐。卡罗尔表示:“他们在创办公司方面的经验、人脉和真知灼见都很有裨益,能帮助我这样的初次创业者度过难关。”

4.艾伦·哈里斯(AaronHarris),26岁;瑞恩·拜德纳(RyanBednar),25岁;约什·阿布拉姆斯(JoshAbrams),27岁

企业:教辅网站Tutorspree

融资:获得YCombinator等投资者的100万美元资金;正在进行新一轮融资

艾伦·哈里斯创办Tutorspree的目的是,让所有学生都能获得优质教辅资源,进入像哈佛这样的名校。他表示,高中生找好辅导老师只能“依赖口碑和运气”。而且大学入学竞争激烈,学术要求越来越高,同时高中却在削减开支和教师数量,哈里斯及其同事认为他们可以弥补这一空当。

最明智的融资决定:更重视投资人的经验和能力,而非投资的规模。哈里斯特别注重寻找那些能提供宝贵经验、弥补公司战略缺陷的投资者。他表示:“如果你不这样专注的话,就可能过渡扩张,这对公司没有好处。”

5.亚历克斯·兰佩尔(AlexRampell),29岁

企业:在线支付平台TrialPay

融资:风投公司BatteryVentures、IndexVentures及其他投资者的3000万美元资金

TrialPay首席执行官亚历克斯·兰佩尔从10岁就开始自己做生意,他于2006年创立了最新一家公司TrialPay,为消费者销售虚拟物品和货币,鼓励他们去Gap、Netflix等网站消费,TrialPay从中抽取佣金。该公司已有120名员工,今年收入有望翻番,达到5000万美元。

最明智的融资决定:“早期融资的最大智慧就是要选择合适的投资者,”兰佩尔表示,“有些投资者会给你灌输错误观念,你得选择哪些能提供支持并帮助你向正确方向前进的投资者。”

6.贾里德·赫克特(JaredHecht),24岁;史蒂夫·马尔托奇(SteveMartocci),29岁

企业:短信群发服务GroupMe

融资:获得KhoslaVentures、GeneralCatalyst、First RoundCapital、SVAngel和其他投资者的1150万美元资金

赫克特和马尔托奇在音乐会上相识,他们于2010年5月想出了GroupMe的点子,以解决赫克特的未婚妻提出的问题:在音乐节上没什么与好友通讯的优良工具。几天后他们一场科技会议上开发出了一个群发短信服务的原型产品,并于九月份推出。如今,GroupMe每天信息发送量超过200万条,到今年6月份总发送量有望达到1亿条。许多音乐界的名人都使用该服务。

最明智的融资决定:“我们对电信行业毫不了解,”赫克特表示,“对我们来说,找到在这方面有经验的投资者非常重要。”

关键词:IT企业家,Groupon,CEO | 作者:吴超 | 收藏这篇资讯

7.马特·穆伦维格(MattMullenweg),27岁

企业:博客服务Automattic/WordPress

融资:从PolarisVentures、TrueVentures、RadarPartners和纽约时报公司获得3060万美元资金

穆伦维格本人曾撰写一个关于政治和爵士乐的个人博客,他发现普通用户设立博客困难重重。因此于2003年建立了Automattic公司,推出了WordPress免费博客服务,许多著名博客都使用了该服务,包括VentureBeat和音乐服务Spotify。目前WordPress服务在互联网上非常普及,每天帮助4万个新博客诞生。

最明智的融资决定:“从一开始,我就选择那随我们的发展壮大而增加投资的伙伴,”穆伦维格表示,“我们首轮筹集了100万美元,而第二轮募集的资金更为充裕,让我们可以专注于业务发展,而不必担心资金问题。”

8.亚当·德安吉罗(AdamD'Angelo),26岁;查理·奇弗尔(CharlieCheever),29岁

企业:问答网站Quora

融资:BenchmarkCapital为其提供了数额不明的资金

两位创始人曾在Facebook共事,德安吉罗原为Facebook首席技术官,而奇弗尔负责FacebookConnect通用登录服务。两人在2009年共同创立了问答网站Quora,既涉及天体物理学、私募股权投资等严肃问题,也探讨较为轻松的话题。凭借其专业性,该网站吸引了不少名人用户。

最明智的融资决定:“我们总共只向BenchmarkCapital进行过一次融资,对他们非常满意。”

9.史宗玮(ClaraShih),29岁;史蒂夫·加里蒂(SteveGarrity),29岁

企业:社交网络营销服务Hearsay

融资:募得310万美元,来自红杉资本、YouTube联合创始人陈士骏、Twitter副总裁迈克尔·阿伯特(MichaelAbbott)、Facebook设计总监艾伦·斯提格(AaronSittig)及CitySearch联合创始人托马斯·莱顿(ThomasLayton)

史宗玮与加里蒂两年前在其芝加哥公寓中创立了Hearsay,她当时正撰写一本关于社交网络营销的书,却发现许多财富500强公司在这方面缺乏经验。她和加里蒂决定满足这一需求。

最明智的融资决定:接受红杉资本的投资。

10.里奇·阿伯曼(RichAberman),26岁;比尔·克莱里科(BillClerico),25岁

企业:支付服务WePay

融资:获得Highland CapitalPartners、AugustCapital和YCombinator以及多名天使投资人的920万美元资金

阿伯曼原来是法学院学生,而克莱里科是个投资银行家,两人都经常参与各种活动,为其筹集资金。他们发现这一过程非常繁琐,因此决定创立WePay,解决这一问题。

最明智的融资决定:接受来自YCombinator的一小笔资金,并搬到美国西岸。

11.杰克·明茨(JakeMintz),28岁;大卫·利布(DavidLieb),30岁

企业:应用软件提供商Bump

融资:获得2000万美元融资,来自安德森·霍洛维茨基金(AndreessenHorowitz)、红杉资本、YCombinator和罗恩·康维(RonConway)、艾丁·森库特(AydinSenkut)和拉姆·施里兰姆(RamShrira)多名天使投资人

利布和明茨都是芝加哥大学商学院的学生,利布在大学期间提出了发明Bump的创意。利布希望交换通讯信息能够像碰一下手机这么简单。Bump应用软件的下载次数已经达到3200万次,可以让苹果及Android设备用户分享照片、信息、应用软件等。

最明智的融资决定:在2009年夏天参与YCombinator大会,从而获得了该项目提供的网络、建议和指导。关键词:IT企业家,Groupon,CEO | 作者:吴超 | 收藏这篇资讯

12.丹尼尔·格罗斯(DanielGross),19岁;罗比·沃克(RobbyWalker),27岁

企业:搜索服务提供商Greplin

融资:从红杉资本以及保罗·布奇海特(PaulBuchheit)、布雷特他·泰勒(BretTaylor)、罗恩·康维和基斯·拉博伊斯(KeithRabois)等知名投资者处获得480万美元

Greplin公司的软件可以让用户搜索Gmail信息、Facebook文章、LinkedIn联系人和Salesforce.com账户等个人信息。格罗斯表示:“我们拥有一个非常小的团队,在我们的搜索引擎索引中有数十亿的文件。”

最明智的融资决定:仅接受那些能带来更多价值而不只是现金的投资者的投资。

13.约翰·拉勒米(JohnLaramie),26岁

企业:室外广告买卖网站ADstruc

融资:通过Draper FisherJurvetson和FREVentures等公司融资110万美元。

约翰·拉勒米是ADstruc公司的首席执行官,他此前骑自行车对室外广告进行了观察,然后提出通过互联网提升广告牌广告买卖的效率。ADstruc网站在2010年上线,涵盖了全美各个地方的广告牌标示点,包括纽约和加州奥克兰等。

最明智的融资决定:与具有广告科技经验的投资者合作。

14.詹森·巴普蒂斯特(JasonBaptiste),26岁

企业:OnSwipe

融资:从SparkCapital、Betaworks、SVAngel等投资者处融资100万美元

詹森·巴普蒂斯特在2010年和他人联合创办了总部位于纽约的OnSwipe公司,帮助出版商更轻易地将内容投放到智能手机和平板电脑上。OnSwipe消除了为不同设备制作不同版本的应用软件的需要。巴普蒂斯特还与他人创办了基于互联网的软件商店Cloudomatic,该网站于今年早些时候被Zferral公司收购。

最明智的融资决定:找到了解媒体与科技如何共同协作的投资者。

15.亚当·戈尔茨坦(AdamGoldstein),23岁;史蒂夫·霍夫曼(SteveHuffman),27岁

企业:票务搜索引擎Hipmunk

融资:从YCombinator、IgnitionPartners和SVAngel等投资者处融资520万美元。

亚当·戈尔茨坦和史蒂夫·霍夫曼在去年8月推出Hipmunk搜索引擎,进入在线飞机票销售市场。Hipmunk能够按照路程和时间长短对航线进行筛选,并按便利程度对搜索结果进行排名。戈尔茨坦最近刚从麻省理工大学毕业,霍夫曼此前与他人共同创办社交新闻网站Reddit。

最明智的融资决定:从YCombinator处获得种子基金。

16.安德鲁·梅森(AndrewMason),30岁

企业:团购网站Groupon

融资:11亿美元

Groupon在2008年上线,安德鲁·梅森一直致力于将其建设成最大的优惠券网站。Groupon在去年拒绝了谷歌60亿美元的收购要约,并在今年1月融资接近10亿美元。该公司目前有员工7000人,今年的营收有望达到40亿美元,正在考虑进行IPO,届时该企业的价值可能达到250亿美元。

最明智的融资决定:梅森对Groupon所获得的10亿美元融资开玩笑说:“决定完全独立支持Groupon,拒绝投资者的任何资金。”

17.戴夫·莫林(DaveMorin),30岁

企业:社交网站Path

融资:从KPCB和IndexVenture等投资者处融资1120万美元

这位Facebook老兵去年创办了社交网络网站Path,部分原因是对其老东家的一种还击。与Facebook允许用户广泛传播文章和照片的方式不同,Path只允许用户在一个很小的好友群中分享这些内容。在职业生涯早期,莫林曾在苹果公司负责营销工作,并帮助Facebook创办了开发者平台。Path已经推出了iPhone应用,Android应用也将很快上线。

最明智的融资决定:最初获得天使投资者罗恩·康维的投资,之后在第一轮融资中与KleinerPerkins和Index公司合作。

18.凯文·希斯特罗姆(KevinSYstrom),27岁;麦克·克瑞格(MikeKrieger),25岁

企业iPhone照片效果编辑软件Instagram

融资:从BenchmarktCapital、BaselineVentures以及克里斯·萨卡(ChrisSacca)和杰克·多西(JackDorsey)处融资750万美元。

iPhone拍摄的照片效果并非总是尽如人意。因此曾经担任谷歌产品市场营销经理的希斯特罗姆和微软实习生克瑞格共同创办了Instagram公司,以打造一款能够提高照片效果的编辑软件。Instagram的下载量已经达到400万次。

最明智的融资决定:为我们希望合作的人优化自己。

19.丹尼尔·哈(DanielHa),25岁

企业:网站评论管理服务提供商Disqus

融资:从合广投资(Union SquareVentures)、YCombinator等公司以及艾丁·森库特等天使投资者处融资1450万美元。

为网站开放在线评论功能是一件痛苦的事情,因为这可能会吸引大量垃圾信息和骚扰信息。2007年时丹尼尔·哈2007年就读于加州大学戴维斯分校,他创办了Disqus,目的就是为了解决这个难题。Disqus帮助网站运营者管理评论,实现快速批准和拒绝流程,同时提供更加易读的评论格式。《连线》网络版和《时代》周刊网络版,以及美国总统奥巴马的竞选宣传网站均是该产品的用户。

最明智的融资决定:找到喜爱这款产品的风险投资者。

20.蒂姆·奥肖尼斯(TimO'Shaughnessy),29岁

公司:团购网站LivingSocial

融资:通过光速创投、亚马逊等公司及罗维·普莱斯(T.RowePrice)等投资者融资6.32亿美元。

奥肖尼斯在2007年与他在AOL的同事创办了LivingSocial的前身。该公司最初是Facebook应用软件的开发商,随后通过收购一款名为BuyYourFriendADrink.com的服务开始腾飞。奥肖尼斯及其团队通过这项服务与饮料公司和餐馆进行合作为消费者提供优惠券。自此,该公司逐渐进化成为一家在线优惠券服务网站,目前用户已经达到数百万,成为市场领导者Groupon的最大竞争对手。

原文出处:腾讯科技

作者  | 2011-5-18 14:37:04 | 阅读(59) |评论(0) | 阅读全文>>

最近在做自己的一个网站——艾普卡卡联盟(www.ipkaka.com),其中有个功能就是手機定位,无需手機支持GPS即可定位。所以并给大家讲其中一个关键技术google api之一“获取经纬度”。

看此文,请需要准备和温习一些东西。

1、如何获取移动手機基站ID?

对于这个东西,既然是手機基站ID,当然只能通过手機获取,所以建议你先了解手機软件这块的东西。

2、学习google api中的“Geolocation API Network Protocol”。

Geolocation API Network Protocol 是GOOGLE API提供的一个接口,主要功能是发送基站ID/WiFi信息给google api,然后api返回一些列参数,在这些参数中就包括了目标的经纬度。

好了,我们进入正题,主要是给一个PHP Demo 源码。以下源码中部分函数需要php5+支持,还有我封装的curl函数(curl.func.php)

<?php
/*
Desc: 提交请求参数 Request
version                        string        google api 版本[必]
host                        string        服务器域名[必]
home_mobile_country_code    integer        移动用户所属国家代号[选 中国460]
home_mobile_network_code    integer        移动系统号码[选 默认0]
address_language            string        反馈数据语言[选 中国 zh_CN]
radio_type                    string        信号类型[选 gsm|cdma|wcdma]
request_address                bool        是否返回数据[必]
cell_towers                    object        移动基站参数对象[必]
cell_id                        integer        基站ID[必]
location_area_code            integer        地区区域码[必]
age                            integer        使用好久的数据库[选 默认0表示使用最新的数据库]
timing_advance                integer        距离单位
*/

        
require(ROOT . 'include/curl.func.php');//加载封装好的curl函数库
        
if(function_exists(json_decode)) {//判断服务器是否支持json_decode函数
            
$post_data ='
{
    "version": "1.1.0",
    "host": "www.ipkaka.com",
    "home_mobile_country_code": "460",
    "home_mobile_network_code": "0",
    "address_language": "zh_CN",
    "radio_type": "gsm",
    "request_address": true ,
    "cell_towers":[
    {
        "cell_id": "2663",
        "location_area_code": "32902",
        "age": "0",
        "timing_advance": "5555"
    }
    ]
}
            
';
            
$data = array(
                
'url' => 'http://www.google.com/loc/json',//google API地址URL,注意请求一定要是Json格式
                
'post' => $post_data,
            
);
            
$arr_post_result = ns_curl($data);//curl POST 过去,返回一个数组
            
$result_html = $arr_post_result['html'];//API返回中有效东西,格式是JSON
            
$result_code = $arr_post_result['http_code'];
            
$obj_return_info = json_decode($result_html);//对Json解密,返回的是对象,请注意
            
if(is_object($obj_return_info) && !empty($obj_return_info) && $result_code == 200) {
                
object2array($obj_return_info);    //object2array 递归对象转数组
                
$arr_api_info = $obj_return_info;
                
$obj_return_info = null;//杀掉内存中的无效变量
                
$latitude = $arr_api_info['location']['latitude'];    //纬度
                
$longitude = $arr_api_info['location']['longitude'];    //经度
                
$country = $arr_api_info['location']['address']['country'];    //国家名称
                
$country_code = strtolower($arr_api_info['location']['address']['country_code']);    //国家简写 CN
                
$region = $arr_api_info['location']['address']['region'];    //省
                
$city = $arr_api_info['location']['address']['city'];    //市
                
$street = $arr_api_info['location']['address']['street'];    //街道
                
$accuracy = $arr_api_info['location']['accuracy'];    //误差 单位meters
                
$access_token = $arr_api_info['access_token'];    //连接值
                
print_r($longitude);
            
}
        
}
/*
Desc: google api 返回参数demo
Array
(
    [location] => Array
        (
            [latitude] => 30.644389
            [longitude] => 104.08439
            [address] => Array
                (
                    [country] => 中国
                    [country_code] => CN
                    [region] => 四川省
                    [city] => 成都市
                    [street] => 黄伞巷
                )
 
            [accuracy] => 723
        )
 
    [access_token] => 2:mqs0Jw83vIzz0OG2:pbCXuys2oe6pJgLy
)
*/

?>

作者  | 2011-4-27 13:57:31 | 阅读(190) |评论(0) | 阅读全文>>

搜索引擎优化(SEO)与网站开发优化

2011-4-26 11:26:36 阅读95 评论0 262011/04 Apr26

作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 
网址: http://www.javabloger.com/article/seo-java-j2ee-web-development.html
豆瓣读书 向你推荐有关 J2ee企业顾问、 SEO、 类别的图书。

对很多Java web、J2EE开发者来说“SEO搜索引擎优化”还是一个比较陌生的话题。他们中有的人并不知道有SEO–搜索引擎优化这一说法的存在,如何运用巧妙的手段提高网站的搜索排名和网站的点击率,更别说意识到了“SEO 搜索引擎优化”对与网站开发的关联性重要性了。

为什么对SEO比较陌生?
首先需要声明SEO对于当今而言已经再不是什么新兴产物,从SEO的起源迄今已有10年上下,之所以很多开发者对SEO仍然陌生,本人大致分为以下几点:
1.    企业对SEO的意识与重视程度。
2.    开发者对SEO研究兴趣与非工作范围的知识视野。
3.    SEO在社会传统媒体中达到的认知、认同度。

SEO是什么?
http://zh.wikipedia.org/wiki/Seo 虽然这个链接中的解释已经比较到位了, 但是我个人还是浅显的认为:“SEO是在网络上对消费心理学的运用,SEO一部分是给搜索引擎机器看的,另一部分是给人看的,当然是先给机器看的,再给人看的,人能看见你网站内容往往很多时候是先通过搜索引擎。也就是说你的网站既要符合搜索引擎的收录原则,还要注重网站的用户体验。高质量的经营性网站两者缺一不可,SEO只是营销手段中的一种,所以最终企业的决策者需要看到通过SEO的收益。”

SEO为什么非常重要?
开发者们构建的Web系统可以看做他们是在建造一所房子,企业的决策者将决定让这个房子用来具体干什么,很顺利,没多久房子盖好了,决策者现在将这所房子作为一个旅馆进行营业,里面的设施样样俱全,可一个月后还是无人问津。很多刚刚起步经营性的网站也同样会同样的问题,每日的访问人数地到了极点,对于这类网站的决策者来说是一件非常困扰的事情。如果决策者和开发者们能在构建的时候就能考虑到如何在网站内留下大量的SEO可扩展性,就不会等网站做好一个月以后也无人问津了。这样是多大的一笔损失啊。

网站进行SEO优化以后会怎么样?
很多人通过搜索引擎的搜索结果登陆你的网站,因为他输入的关键字和你网站里面的主要内容相匹配。如果你网站对于搜索引擎来说命中率越高,你网站的访问者就越多。可想而知网站对搜索引擎的友好程度是非常重要的。

Web网站开发的SEO手段:

1、    将动态网页,进行静态化,如果是才可以Java Web开发可以采用 Freemaker技术,或者是伪静态页面。

2、    正确的使用缓存,提高网站的访问速度,让搜索引擎认为你的网络服务质量较佳,这样比较容易对网站收录。

3、    网站的静态页面的url地址、名称,需要跟网页提要有关。例如本篇文章的链接中包含 javaseo这2个关键字。

4、    网站Title、Meta根据页面主要内容进行动态加载,正确使用heading标签。

5、    网站Title、Meta根据页面不仅仅需要根据内容动态加载,还需要建立分词表一起加载。

6、    图片显示多用ALT标记,少用图片中高、宽属性,图片文件名最好也好和图片主题一致。

7、    连接上动态加上 Title属性,例如:<a href="http://www.javabloger.com/article/mongodb-java-orm.html" title="MongoDB Java ORM 的设想">MongoDB Java ORM 的设想</a>

8、    CSS、JavaScript代码尽量放在底部,不要过多的把Javascript写入在页面中,搜索引擎会认为这样的网页不友好。

9、    页面的排版层次尽量简洁、清晰,网页结果层次复杂,不容易被搜索引擎收录,搜索引擎虽然是机器,还是站在人性化的立场考虑。

10、    内部链接的使用,具体使用技巧请查阅:http://www.njlanesoft.com/record/seo-internal-links.html

11、    注意每个网页文件最终生成的大小。

12、    合理的采用连接分类(category/tag)和站点导航这样对SEO会比较友好。

13、    在网站中建立正确的网站地图,例如:http://www.javabloger.com/sitemap.xml

14、    建立站点下的rebots.txt文件,让搜索引擎知道该怎么走。

15、    建立RSS信息订阅频道,读者可以通过多种方式访问你网站的最新信息。

16、    将访问者、客户的信息进行统计、分析、挖掘,提高将来商业决策的执行力度。

另外,对于SEO的手段而言没有绝对的好与坏,因为SEO本身不存在任何标准,并且一旦变化排名规则,大家都需要重新洗牌。

–end–

作者  | 2011-4-26 11:26:36 | 阅读(95) |评论(0) | 阅读全文>>

2011年04月25日

2011-4-25 12:34:54 阅读44 评论0 252011/04 Apr25

美国数据:星座出轨排名(不易出轨)

第一名:天蝎座

天蝎最着名的特性就是极端。不爱则已,一爱就不管不顾。
只要蝎子没动心,你们的婚姻就是安全的。哪怕是容易成为情慾
俘虏的天蝎男,不爱,就根本不把外遇放心上。反之,一旦动心,
一纸婚书也绑不住他们了。

第二名:处女座

处女追求完美,精神上又有洁癖,更何况是他们还被称为12星座
中的“被动之王”。通过社交网路出轨这种事对他们遥远了些,
最多也就是欣赏些有智慧的异性罢了。要他们出轨,
除非能完全符合处女挑剔的标准和完美主义的喜好,
又能主动追求或响应他们。

第三名:金牛座

金牛则喜欢实实在在的肌肤接触,通过社交网路出轨通常并不对
金牛的口味,牛不喜欢整这些虚的东西,也讨厌不够安稳、若即若离
的关係。所以除非能快速从网上发展至网下,又能维持相当频率的约会,
不然即便是部分好色的牛,网路出轨也不太容易搞得起来。

第四名:水瓶座


  许多人说水瓶座的思维象外星人,瓶子们有时也会带着种
“研究地球人”的倾向去社交。有趣、多样化是吸引水瓶的法宝,
各色人等聚集的社交网站自然是最好的採集样本场所。水瓶如果要出轨,
也容易蜻蜓点水,虽然他们不会把出轨看成多麽严重的事,
但同样也讨厌被另一个人束缚,轻易不让喜爱自由崇尚博爱的自己陷入麻烦。

第五名:天秤座

  秤子们的亲切和风度在社交网站中能赢得不少异性的好感,
甚至发展到网下的知心朋友,表面看暧昧多多。
但其实亲密情感关係对他们来说太沉重。更何况秤子非常之懒,
懒得改变现状。对野花抱以欣赏、爱慕还行,真要出轨,难!

作者  | 2011-4-25 12:34:54 | 阅读(44) |评论(0) | 阅读全文>>

视觉中国的NoSQL之路:从MySQL到MongoDB

2011-3-31 16:08:51 阅读82 评论0 312011/03 Mar31

文 /  潘凡

起因

视觉中国网站(www.chinavisual.com)是国内最大的创意人群的专业网站。2009年以前,同很多公司一样,我们的CMS和社区产品都构建于PHP+Nginx+MySQL之上;MySQL使用了Master+Master的部署方案;前端使用自己的PHP框架进行开发;Memcached作为缓存;Nginx进行Web服务和负载均衡;Gearman进行异步任务处理。在传统的基于静态内容(如文章,资讯,帖子)的产品,这个体系运行良好。通过分级的缓存,数据库端实际负载很轻。2009年初,我们进行了新产品的开发。此时,我们遇到了如下一些问题。

用户数据激增:我们的MySQL某个信息表上线1个月的数据就达到千万。我们之前忽略的很多数据,在新形势下需要跟踪记录,这也导致了数据量的激增;

用户对于信息的实时性要求更高:对信息的响应速度和更新频度就要求更高。简单通过缓存解决的灵丹妙药不复存在;

对于Scale-out的要求更高:有些创新产品的增长速度是惊人的。因此要求能够无痛的升级扩展,否则一旦停机,那么用户流失的速度也是惊人的;

大量文件的备份工作:我们面向的是创意人群,产生的内容是以图片为主。需要能够对这些图片及不同尺寸的缩略图进行有效的备份管理。我们之前使用的Linux inotify+rsync的增量备份方案效果不佳;

需求变化频繁:开发要更加敏捷,开发成本和维护成本要更低,要能够快速地更新进化,新功能要在最短的周期内上线。

最初,我们试图完全通过优化现有的技术架构来解决以上问题:对数据时效性进一步分级分层缓存,减小缓存粒度;改进缓存更新机制(线上实时和线下异步更新)提高缓存命中率;尝试对业务数据的特点按照水平和垂直进行分表;使用MogileFS进行分布存储;进一步优化Mysql的性能,同时增加MySQL节点等。但很快发现,即便实施了上述方案,也很难完全解决存在的问题:过度依赖Memcached导致数据表面一致性的维护过于复杂,应用程序开发需要很小心,很多时候出现Memcached的失效会瞬间导致后端数据库压力过大;不同类型数据的特点不同,数据量差别也很大;分表的机制和方式在效率平衡上很难取舍;MogileFS对我们而言是脚小鞋大,维护成本远远超过了实际的效益;引入更多的MySQL数据库节点增大了我们的维护量,如何有效监控和管理这些节点又成了新的问题。虽然虚拟化可以解决部分问题,但还是不能令人满意;

除了MySQL,能否找到一个更为简单、轻便的瑞士军刀呢?我们的目光投向了NoSQL的方案。

候选方案

最初,对于NoSQL的候选方案,我依据关注和熟悉程度,并且在甄别和选择合适的方案时特别制定了一些原则:是否节省系统资源,对于CPU等资源是否消耗过大;客户端/API支持,这直接影响应用开发的效率;文档是否齐全,社区是否活跃;部署是否简单;未来扩展能力。按以上几点经过一段测试后,我们候选名单中剩下Redis、MongoDB和Flare。

Redis对丰富数据类型的操作很吸引人,可以轻松解决一些应用场景,其读写性能也相当高,唯一缺点就是存储能力和内存挂钩,这样如果存储大量的数据需要消耗太多的内存(最新的版本已经不存在这个问题)。

Flare的集群管理能力令人印象深刻,它可以支持节点的动态部署,支持节点的基于权重的负载均衡,支持数据分区。同时允许存储大的数据,其key的长度也不受Memcached的限制。而这些对于客户端是透明的,客户端使用Memcached协议链接到Flare的proxy节点就可以了。由于使用集群,Flare支持fail-over,当某个数据节点宕掉,对于这个节点的访问都会自动被proxy节点forward到对应的后备节点,恢复后还可以自动同步。Flare的缺点是实际应用案例较少,文档较为简单,目前只在Geek使用。

以上方案都打算作为一个优化方案,我从未想过完全放弃MySQL。然而,用MongoDB做产品的设计原型后,我彻底被征服了,决定全面从MySQL迁移到MongoDB。

为什么MongoDB可以替代MySQL?

MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL。在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点:

使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。

Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个Collection,每个Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义Collection,随时可以创建。

Collection中可以包含具有不同schema的文档记录。 这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。

图1 MongoDB是一个Schema-free的文档数据库

图1 MongoDB是一个Schema-free的文档数据库

图2是一个例子,作品和评论可以设计为一个collection,评论作为子文档内嵌在art的comments属性中,评论的回复则作为comment子文档的子文档内嵌于replies属性。按照这种设计模式,只需要按照作品id检索一次,即可获得所有相关的信息了。在MongoDB中,不强调一定对数据进行Normalize ,很多场合都建议De-normalize,开发人员可以扔掉传统关系数据库各种范式的限制,不需要把所有的实体都映射为一个Collection,只需定义最顶级的class。MongoDB的文档模型可以让我们很轻松就能将自己的Object映射到collection中实现存储。

图2 MongoDB支持嵌入子文档

图2 MongoDB支持嵌入子文档

简单易用的查询方式:MongoDB中的查询让人很舒适,没有SQL难记的语法,直接使用JSON,相当的直观。对不同的开发语言,你可以使用它最基本的数组或散列格式进行查询。配合附加的operator,MongoDB支持范围查询,正则表达式查询,对子文档内属性的查询,可以取代原来大多数任务的SQL查询。

CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更新;对于更新模式,MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。Modifier也是MongoDB可以作为对用户行为跟踪的容器。在实际中使用Modifier来将用户的交互行为快速保存到MongoDB中以便后期进行统计分析和个性化定制。

所有的属性类型都支持索引,甚至数组:这可以让某些任务实现起来非常的轻松。在MongoDB中,“_id”属性是主键,默认MongoDB会对_id创建一个唯一索引。

服务端脚本和Map/Reduce:MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。MongoDB不支持事务级别的锁定,对于某些需要自定义的“原子性”操作,可以使用Server side脚本来实现,此时整个MongoDB处于锁定状态。Map/Reduce也是MongoDB中比较吸引人的特性。Map/Reduce可以对大数据量的表进行统计、分类、合并的工作,完成原先SQL的GroupBy等聚合函数的功能。并且Mapper和Reducer的定义都是用Javascript来定义服务端脚本。

性能高效,速度快: MongoDB使用c++/boost编写,在多数场合,其查询速度对比MySQL要快的多,对于CPU占用非常小。部署也很简单,对大多数系统,只需下载后二进制包解压就可以直接运行,几乎是零配置。

支持多种复制模式: MongoDB支持不同的服务器间进行复制,包括双机互备的容错方案。

Master-Slave是最常见的。通过Master-Slave可以实现数据的备份。在我们的实践中,我们使用的是Master-Slave模式,Slave只用于后备,实际的读写都是从Master节点执行。

Replica Pairs/Replica Sets允许2个MongoDB相互监听,实现双机互备的容错。

MongoDB只能支持有限的双主模式(Master-Master),实际可用性不强,可忽略。

内置GridFS,支持大容量的存储:这个特点是最吸引我眼球的,也是让我放弃其他NoSQL的一个原因。GridFS具体实现其实很简单,本质仍然是将文件分块后存储到files.file和files.chunk 2个collection中,在各个主流的driver实现中,都封装了对于GridFS的操作。由于GridFS自身也是一个Collection,你可以直接对文件的属性进行定义和管理,通过这些属性就可以快速找到所需要的文件,轻松管理海量的文件,无需费神如何hash才能避免文件系统检索性能问题, 结合下面的Auto-sharding,GridFS的扩展能力是足够我们使用了。在实践中,我们用MongoDB的GridFs存储图片和各种尺寸的缩略图。

图3 MongoDB的Auto-sharding结构

图3 MongoDB的Auto-sharding结构

内置Sharding,提供基于Range的Auto Sharding机制:一个collection可按照记录的范围,分成若干个段,切分到不同的Shard上。Shards可以和复制结合,配合Replica sets能够实现Sharding+fail-over,不同的Shard之间可以负载均衡。查询是对客户端是透明的。客户端执行查询,统计,MapReduce等操作,这些会被MongoDB自动路由到后端的数据节点。这让我们关注于自己的业务,适当的时候可以无痛的升级。MongoDB的Sharding设计能力最大可支持约20 petabytes,足以支撑一般应用。

第三方支持丰富: MongoDB社区非常活跃,很多开发框架都迅速提供了对MongDB的支持。不少知名大公司和网站也在生产环境中使用MongoDB,越来越多的创新型企业转而使用MongoDB作为和Django,RoR来搭配的技术方案。

实施结果

实施MonoDB的过程是令人愉快的。我们对自己的PHP开发框架进行了修改以适应MongoDB。在PHP中,对MongoDB的查询、更新都是围绕Array进行的,实现代码变得很简洁。由于无需建表,MonoDB运行测试单元所需要的时间大大缩短,对于TDD敏捷开发的效率也提高了。当然,由于MongoDB的文档模型和关系数据库有很大不同,在实践中也有很多的困惑,幸运的是,MongoDB开源社区给了我们很大帮助。最终,我们使用了2周就完成了从MySQL到MongoDB的代码移植比预期的开发时间大大缩短。从我们的测试结果看也是非常惊人,数据量约2千万,数据库300G的情况下,读写2000rps,CPU等系统消耗是相当的低(我们的数据量还偏小,目前陆续有些公司也展示了他们的经典案例:MongoDB存储的数据量已超过 50亿,>1.5TB)。目前,我们将MongoDB和其他服务共同部署在一起,大大节约了资源。

一些小提示

切实领会MongoDB的Document模型,从实际出发,扔掉关系数据库的范式思维定义,重新设计类;在服务端运行的JavaScript代码避免使用遍历记录这种耗时的操作,相反要用Map/Reduce来完成这种表数据的处理;属性的类型插入和查询时应该保持一致。若插入时是字符串“1”,则查询时用数字1是不匹配的;优化MongoDB的性能可以从磁盘速度和内存着手;MongoDB对每个Document的限制是最大不超过4MB;在符合上述条件下多启用Embed Document, 避免使用DatabaseReference;内部缓存可以避免N+1次查询问题(MongoDB不支持joins)。

用Capped Collection解决需要高速写入的场合,如实时日志;大数据量情况下,新建同步时要调高oplogSize的大小,并且自己预先生成数据文件,避免出现客户端超时;Collection+Index合计数量默认不能超过24000;当前版本(<v1.6)删除数据的空间不能被回收,如果你频繁删除数据,那么需要定期执行repairDatabase,释放这些空间。

结束语

MongoDB的里程碑是1.6版本,预计今年7月份发布,届时,MongoDB的Sharding将首次具备在生产环境中使用的条件。作为MongoDB的受益者,我们目前也在积极参与MongoDB社区活动,改进Perl/PHP对于MongoDB的技术方案。在1.6版本后也将年内推出基于MongoDB的一些开源项目。

对于那些刚刚起步,或者正在开发创新型互联网应用的公司来说,MongoDB的快速、灵活、轻量和强大扩展性,正适合我们快速开发产品,快速迭代,适应用户迅速变化和更新的种种需求。

总而言之,MongoDB是一个最适合替代MySQL的全功能的NoSQL产品,使用MongoDB+Perl/PHP/Django/RoR的组合将很快成为开发Web2.0、3.0的产品的最佳组合,就像当年MySQL替代Oracle/DB2/Informix一样,历史总是惊人的相似,让我们拭目以待吧!

作者简介:

潘凡(nightsailer,N.S.), 视觉中国网站技术总监,联合创始人,家有1狗2猫。目前负责网站平台设计和底层产品研发工作。当前关注:Apps平台设计、分布式文件存储、NoSQL、高性能后现代的Perl编程。Twitter:@nightsailer  Blog:http://nightsailer.com/

(本文来自《程序员》杂志10年06期)

《程序员》10月刊最新上市:http://www.programmer.com.cn/4128/
《程序员》订阅:http://dingyue.programmer.com.cn/

作者  | 2011-3-31 16:08:51 | 阅读(82) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 

自定义模块

 
 
模块内容加载中...
 
 
 
 
 

有道博客搜索

 
 
 
 
 
 
 
 
 
 
 
下载音乐盒  曲目表歌词秀
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

网易新闻资讯

 
 
 
 
新闻标题 
列表加载中...
 
 
 
 
 

天气

 
 
模块内容加载中...
 
 
 
 
 

发现好博客

 
 
列表加载中...
 
 
 
 
 

日历

 
 
模块内容加载中...
 
 
 
 
 

精彩摄影作品

 
 
相片列表加载中...
 
 
 
 
 
 
 
列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012

   
创建博客 登录  
 关注