精华内容
下载资源
问答
  • 网页翻译

    千次阅读 2019-05-17 17:33:38
    本文所述的网页翻译功能,截取自Chrome浏览器,适合以下几种应用场景: 一、 网站开发,本站页面翻译 二、 浏览器开发(Google翻译不可用的情况) 三、 网络爬虫、数据分析 四、 后台翻译服务 基本原理 ...

    本文所述的网页翻译功能,截取自Chrome浏览器,适合以下几种应用场景:

    一、 网站开发,本站页面翻译

    二、 浏览器开发(Google翻译不可用的情况)

    三、 网络爬虫、数据分析

    四、 后台翻译服务

     

    基本原理

    JavaScript代码取自chrome浏览器自带的网页翻译功能,替换其翻译时的网络请求接口为 bing翻译服务器。

     

    bing翻译API
    https://www.bing.com/translator/api/translate?ref=edge&from=&to=zh-Hans
    request header:               "Content-Type": "application/json"
    method:                           "POST"
    body:                                ["string1","string2",...]

    google翻译API
    https://translate.googleapis.com/translate_a/t?anno=3&client=te_lib&format=html&v=1.0&key=AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw&logld=vTE_20170911_00&sl=auto&tl=zh&sp=nmt&tc=1&sr=1&tk=706275.834617&mode=1&sl=auto&tl=zh&sp=nmt&tc=1&sr=1&tk=625681.1046048&mode=1
    request header:               "Content-Type": "application/x-www-form-urlencoded"
    method:                            "POST"
    body:                                q=%E2%86%91&q=W3C&q=World%20Wide%20Web%20Consortium

     

     

    项目地址

    https://github.com/camike/webpage-translate

     

    展开全文
  • 一、什么是JSP?  JSP全称是Java Server ... 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译
  • 北京大学 俞敬松 计算机辅助翻译原理与实践 http://www.xuetangx.com/courses/PekingX/01718330X/_/about 这两天在看这个mooc有诸多感触 1、计算机技术+机器翻译技术 2、大型翻译公司会有综合管理,每个行业会有...

    北京大学   俞敬松  计算机辅助翻译原理与实践

    http://www.xuetangx.com/courses/PekingX/01718330X/_/about

    这两天在看这个mooc有诸多感触

    1、计算机技术+机器翻译技术

    2、大型翻译公司会有综合管理,每个行业会有自己的语料库、术语库、记忆库

    3、课程中学生们做的微课和设计很值得我在教学中借鉴,让学生以小组为单位做微课,讲双语课,或介绍软件的

    4、很多不错的专业软件,不同行业都有非常优秀的专业软件,很多都可以借鉴

    一、光学字符识别软件OCR:

    (1)ABBYY Screenshot Reader

    ABBYY FileReader,可以将pdf转换成doc将pdf中的图片表格转换到doc

    网址:http://finereader.abbyy.com

    (2)Nitro Pro 8

    可编辑pdf文档

    网址:http://nitropdf.com

    二、翻译记忆软件

    SDL Trados Studio 2011

    三、翻译中的术语管理软件

    SDL Multiterm 2011

    四、计算机辅助翻译软件

    Alchemy Catalyst 10 翻译

    SDL Trados

    MemoQ

    Google Translator Toolkit GTT翻译本地、网页文档、在线协同翻译

    MemSource

    XTM

    五、学生做的双语字幕视频mooc

    MemoQ+GTT+Aegisub(制作字幕)+mmg.exe(生成视频软件)

    六、网站双语化

    xampp+drupal+variable

    很多专业的计算机水平也很高,危机感呀

    展开全文
  • 谷歌网页排序背后的通信原理

    千次阅读 2011-12-16 18:52:28
    1)最近看果壳网上的死理性派文章,里面有许多有趣的科普文章,今早看见了一篇《谷歌怎样给网页排序》的文章,作者sqybi写的很好,喜欢这样的文笔,本文很多模型借源于此篇博文,可以说这篇文章给了我动机,自己只是




    真的是很久没有写新文章了,上个月获得了一个CSDN颁发的“恒”字奖章,感觉是另一种幸福与满足,至少肯定了我一个月来的尝试。

    今天为什么选择这样一个文章标题,其中有几点原因:

    1)最近看果壳网上的死理性派文章,里面有许多有趣的科普文章,今早看见了一篇《谷歌怎样给网页排序》的文章,作者sqybi写的很好,喜欢这样的文笔,本文很多模型借源于此篇博文,可以说这篇文章给了我动机,自己只是站在巨人的肩膀上,把他没有证明的问题用一种方式给实现了,可能是sqybi觉得太简单没必要吧。

    2)另一个原因,既然自己以后献身通信了,现在貌似通信领域大家普遍觉得遇到了瓶颈。但是,我想说的是,其实通信的基本原理包括概率论等知识,其实会永远熠熠生辉的,就像Gallager教授说的那样,Communication is not dead!,他写了一本《Principles of Communication》,来阐述那些复杂现象后的基本原理,中文版是母校北邮杨鸿文老师翻译,觉得是非常不错的一本书。

    3)最后,这篇文章背后的原理,其实我很早之前有过强烈的动机来阐述,记得当时是看线性代数的时候,但是,惰性使然,没能及时写下来。这也让我明白一个道理,只有当知识和实际东西联系在一起后,我自己才有动力,可是,为什么,自己没有能力主动把学过的知识运用到实际中去呢?这就是差距吧。

    注:为了尊重原著,红色部分的都是     引用自sqybi文章,其余才是自己写的。

    Sqybi文章链接:谷歌怎样给搜索结果排序

     

    好了,开始今天的话题吧,我们知道最传统的网页搜索结果排序是基于访问量的,但是这种排名算法有两个很显著的问题:一是因为只能够抽样统计,所以统计数据不一定准确,而且访问量的波动会比较大,想要得到准确的统计需要大量的时间和人力,还只能维持很短的有效时间;二是访问量并不一定能体现网页的“重要程度”——可能一些比较早接触互联网的网民还记得,那时有很多人推出了专门“刷访问量”的服务。有没有更好的方法,不统计访问量就能够为网页的重要度排序呢?

    就是在这种情况下,1996 年初,谷歌公司的创始人,当时还是美国斯坦福大学研究生的佩奇和布林开始了对网页排序问题的研究。在1999年,一篇以佩奇为第一作者的论文发表了,论文中介绍了一种叫做 PageRank 的算法,这种算法的主要思想是:越“重要”的网页,页面上的链接质量也越高,同时越容易被其它“重要”的网页链接。于是,算法完全利用网页之间互相链接的关系来计算网页的重要程度,将网页排序彻底变成一个数学问题,终于摆脱了访问量统计的框框。

    下面,我们利用sqybi文章中一个很好的例子来阐述这个问题

     

    在详细讲述这个算法之前,不妨让我们用一个游戏,先来简单模拟一下 PageRank 算法的运行过程,以便读者更好地理解。

    三兄弟分 30 颗豌豆。起初每人 10 颗,他们每次都要把手里的豌豆全部平均分给自己喜欢的人。下图表示了三兄弟各自拥有的初始豌豆数量,以及相互喜欢的关系(箭头方向表示喜欢,例如老二喜欢老大,老大喜欢老二和老三)。

    http://img1.guokr.com/gkimage/iu/xv/em/iuxvem.png

    第一次分配后,我们会得到结果如下

    http://img1.guokr.com/gkimage/t4/hz/ez/t4hzez.png

    就这样,让游戏一直进行下去。直到他们手中的豌豆数不再变化为止。

    在这里,我们把 “链接”比作“喜欢”,我们的模型是刚开始 每个人(好比网页)权重(网页重要级)是10,老大链接了老三,同时也链接了老二;老二只链接了老大,老三只链接了老二。

    那么这个游戏到底是否可以结束呢,如果可以,最终的结果又是什么样的?在此我们用电脑模拟了这个过程,得出的结果是:老大和老二的盘子里各有 12 颗豌豆,而老三的盘子里有 6 颗豌豆。这时候无论游戏怎么进行下去,盘子里的豌豆数量都不会再变化。

    好了,我们的任务就是用通信里的基本原理来解释这个迭代过程,高中的数列就是基本的迭代,一阶,二阶,或者是三阶,例如斐波拉契数列Fn+1 = Fn + Fn-1,利用通信里的术语就是二阶差分方程,记得高中的解法是直接把方程用二元函数表示为X^2-X-1=0,可以求解出两个特征根,非常熟悉的两个数字1.618和-0.618,然后利用这两个数构造等比数列最后求解出数列的表达式。当时我不知道为什么这样做就可以,反正这种差分的当时就直接那样上手了,很暴力有点。

    我们先回避下上述问题,先讲下今天的主题-----马尔科夫链,在通信里我们经常用到的模型,简单的说就是记忆长度为一,当前状态只受前一状态的影响,跟再前面发生的事情无关,用数学表达式表示如下:

    我们会用在信道建模还有维特比译码环节中,可以说马尔科夫链串连了通信。

    我们最关心的是什么?是一阶转移概率矩阵。我们先举出一个简单的例子来看看(随便一本信息论教材都会有),此例来自于MIT的教材:

    Problem:现在有两地域,加州和麻省,每年末加州有百分之90的人继续选择住在加州,另外百分之10 的人则搬家至麻省;同样,麻省百分之80人口选择继续,其它选择搬家至加州。起始人口分布是 加州0人,麻省1000人,问经过若干年后,人口分布能否平衡,且最后的分布情况。

    Solution:我们先把这个问题用前面所述的马尔科夫一阶状态转移矩阵表示如下:

    矩阵含义解释如下:A(1,1)表示的是加州留下概率,A(2,1)表示加州搬家概率,A(:,1)也就A第一列表示加州人的选择情况,这种情况就好比发送"0"接受到是“0”或者是“1”概率一样的简单(有点类似离散信道模型),我们用一个列向量来表示两地方人口数:

     其中Xc表示加州人口数,Xm表示麻省人口数。可以是归一化的,也可以是具体数。

    迭代方程如下:表示经过k年后两地人口数且初始状态为

    好了,我们问题的关键是怎么解决这样的迭代方程,我们不再像高中那样不知所措了,我们今天的主题就是线性代数,记得线性代数的核心就是特征值和特征向量,记得导师问过自己这样的问题,当时就蒙掉了。我们今天研究的矩阵很特别,它是马尔科夫矩阵,它有一些特征可以被我们利用,我们注意到马尔科夫矩阵所有列的和为1,那么它一定有一个特征值为1(证明见后记),既然有1就有稳态,另外其他特征值的绝对值都小于1。

    让我们回顾下特征值和特征向量(我们前提是所有特征值不相同,那么根据线性代数矩阵就有n个线性无关特征向量):

    1)我们把U0用特征向量表示,意思是U0是n个特征向量的线性组合,即U0 = c1*x1+c2*x2+..+cn*xn;其中xn是线性无关的特征向量

    2) 那么Uk怎么表示呢?A的k次幂去乘以U0得到什么呢?我们知道,特征向量的性质是,我们就有,,现在问题似乎明朗了点,我们假设为1,x1是lamda1对应的特征向量,其他特征值的绝对值都小于1,经过若干年后,除了第一项还存在外,其他都趋于0,那么意思是我们只要求出了x1的值就知道最后稳定的人口比例了。

    3)我们直接用Matlab来求解吧,在Matlab里用[v d] = eig(A)可以求出特征向量和特征值,计算结果如下:

    从图中可以看出对于特征值为1那个特征向量为[0.8944;0.4472]归一化后为[2/3:1/3]。终于我们找到了结果,意思是不管你起始分布怎么样,加州最后占总人口66.7%而麻省则占33.3%,这就是最后的稳态分布。转移矩阵A不变,那么特征向量不变,那么比例分布就不变,跟初始分布无关,常数C1不影响比例分布。其实在信息论里我们是这么求解的,U就是马尔科夫链的平稳分布,我们解这个方程的过程其实是什么呢?其它就是在求特征值为1对应的那个特征向量啊!!我们把方程化简一下我们发现这不是求矩阵特征向量的方程嘛,对应的U就是A-I的零空间里的向量啊,我们减去了一个I,不就是求特征值为1对应的特征向量嘛,所以这里的U不就是那个向量V(:,1)=[0.8944:0.4472]嘛。其实我也是写到这才明白这么一个显而易见的道理,好吧!

     

    现在终于可以回归到正题上了,我们要解决网页链接的问题,sqybi直接给出的结果是老大和老二的盘子里各有 12 颗豌豆,而老三的盘子里有 6 颗豌豆。这时候无论游戏怎么进行下去,盘子里的豌豆数量都不会再变化。我们希望用上面刚讲述的方法来验证一下:

    1)写出状态转移矩阵

    2)求特征值和特征向量:

    我们发现同样有一个特征值为1,其他绝对值小于1

    3)与特征值为1对应的特征向量是V(:,1) = [0.6667;0.6667;0.3333]归一化后为[0.4;0.4;0.2]

    4)结果出来了,老大占0.4,老二占0.4,老三占0.1,由于总共有30颗,所以0.4*30 = 12 同样0.2*30 = 6。结果验证成功!

     

    不同于之前的访问量统计,PageRank 求解了这样一个问题:一个人在网络上浏览网页,每看过一个网页之后就会随机点击网页上的链接访问新的网页。如果当前这个人浏览的网页 x 已经确定,那么网页 x 上每个链接被点击的概率也是确定的,可以用向量 Nx 表示。在这种条件下,这个人点击了无限多次链接后,恰好停留在每个网页上的概率分别是多少?

    在这个模型中,我们用向量 Ri 来表示点击了 i 次链接之后可能停留在每个网页上的概率( R 0 则为一开始就打开了每个网页的概率,后面我们将证明 R 0 的取值对最终结果没有影响)。很显然 R i 的 L1 范式为 1 ,这也是 PageRank 算法本身的要求。

    所以,通俗的说,就是刚开始我给每个网站的级别是一样的(假设),一般好的网站会有更多网站链接它,还有个事实是,一旦你被一个好的网站链接了,你的级别瞬间也就高了,这就是相辅相成吧。就如图中所示,我们可以预见,老二这个网站有两个网站链接它了,所以它是一个优秀的网站,虽然老大只有一个网站链接它,但这个网站就是优秀的老二,所以他的级别瞬间就跟同样只有一个链接的老三不一样了。


    后记:

       1)最初的引题斐波拉契数列,我们同样可以用特征值来预测,但是我们这里有个littel trick,就是二阶变成一阶,怎么变换呢?我们的目标还是

    我们的关键就是选择U和A了,这里我们选择 就可以把菲波拉契数列变成我们熟悉的形式了,同样我们求解A的特征值,我们发现特征值就是1.618和-0.618,这就是为什么高中老师把这两个数叫做特征值的缘由吧。

        2)为什么马尔科夫矩阵肯定有一个特征值为1呢?我们发现如果某个矩阵有特征值为1,那么矩阵减去一个单位矩阵后,必须是奇异的,也就是行列式等于0,也就是存在行相关情况,当我们把马尔科夫矩阵对角线上元素减去1后,会发生什么呢?这个平移了单位矩阵的新矩阵是不是奇异的呢?必须是,肯定是!!原因是:原来马尔科夫每列的和是1,现在你每列减去了个1,那么现在每列的和肯定为0,好了,既然列和为0,那么行就是线性相关的了,那么就肯定是奇异的了。

     

    总结:今天写这个文章,主要是把学到的东西来验证一些结果,作为sqybi文章的补充证明,那篇文章主要是科普,而我主要讲清楚一种计算机电脑模拟了这个过程是怎么实现的,以及它背后的通信原理的基本知识。








    展开全文
  • 显示一张图片或打开一个网页。在某些情况下,你可以通过一个意图( Intent )去启动一个 activity ,并接收这个 activity 返回的包含了结果数据的 Intent 。比如,你可以发送一个意图( ...

    转载时请注明转自:http://blog.csdn.net/sam_zhang1984

    交流可加新浪微博:Android开发人

     

    Android 应用程序是由 JAVA 编写的。 Android SDK 工具把编写好的应用程序代码连同一些数据和资源编译成一个 .apk 后缀的 Android 应用程序包。包含在同一个 apk 文件里面的所有代码就当成是一个应用程序安装包,并可以在 Android 设备上进行安装。

    安装在 Android 设备上的每一个应用程序都运行于自己的安全砂箱中:

    Android 操作系统是一个多用户 Linux 系统,每一个应用程序就相当于一个不同的用户;

    默认情况下,系统会为每一个应用程序分配一个只对系统可见而对程序不可见的 Linux 用户 ID 。系统为每一个应用程序包含的所有文件设置权限,以便通过分配给某应用程序的系统用户 ID 来访问该程序的这些文件;

    每一个进程运行在自己的虚拟机上,这样使每一个应用程序都是独立运行;

    默认情况下,每一个应用程序运行在自己的 Linux 进程中。当应用程序的组件需要被执行时, Android 系统会开启一个进程,当进程不再需要运行或系统必须为其它应用程序提供内存空间时, Android 会关闭这个线程;

    这样的话, Android 系统实现了最小特权原则。就是说每一个应用程序在默认情况下只能访问用来完成其工作的自身组件。这就创建了一个应用程序在没有得到授权时无法访问系统其它部分的安全环境。

    虽然如此,但应用程序还是有一些途径与其它程序共享数据,或访问系统的服务。

    可以让两个应用程序共用一个 Linux 用户 ID ,在这种情况下,他们就可以相互访问彼此的文件。为了节省系统资源,两个有共同用户 ID 的应用程序同样能运行在同一个 Linux 进程中,并共用一个虚拟机,当然这两个应用程序必须用同一个证书注册

    每一个应用程序能够请求访问设备数据的权限,如用户联系人、短信息、可安装存储(如 SD 卡)、摄像头、蓝牙等等。所有的这些应用程序权限必须由用户在初始化时进行授权。

    这里覆盖了关于一个应用怎么存在于系统中的一些基础知识,接下来在这个文档各个章节中将为你介绍以下内容:

    1、      在你的应用程序中使用的核心框架组件;

    2、      你用来定义组件和应用程序所需设备环境的 manifest 文件;

    3、      资源与代码分离,并允许完全优化针对各种不同配置设备的行为属性(如:针对不同屏幕分辨率 @Sam 注)。

     

    应用程序组件

    应用程序组件是一个 Android 应用程序必不可少的一部分。每一个组件都是系统能与你的应用程序进行交互的不同点。并不是所有组件都是对直接面向用户的实体,有一些组件依赖于其它组件而存在,但对于每一个组件来说,它都是以作为一个独自的存在实体,并扮演着特定的角色,也就是说,每一个组件都是来定义你的应用程序外部行为的特定组成部分。

    Android 里有四大应用程序组件,每一种类型的组件有不同的作用,并拥有不同的生命周期 ( 生命周期即组件从创建到销毁的整个过程 )

    下面就是这四种应用程序组件的介绍:

     

    Activity

    Activity 就是一个带有用户接口的界面。比如,一个 Email 应用程序应该包括一个用来显示邮件列表的 Activity 、一个用来写邮件的 Activity 和一个用来读邮件的 Activity 。虽然这些 Activity 共同组成了一个 Emailt 程序的用户体验,但他们彼此之间却是互相独立地存在。因此,只要 Email 应用程序授权的情况下,其它应用程序可以启动这些 Activity 的任何一个。比如一个照相程序可以通过启动一个 Email 程序中新建邮件的 Activity 来分享照片。

    每一个 activity 界面都是继承了 Activity 类,你可以在开发指南中学习更多关于 Activity 的知识。

     

    Services (服务)

    服务是一个运行在后台的组件,它不提供一些用户接口界面,一般是用于执行相对费时的操作或运行一些远程进程。比如当用户在使用其它应用时,用一个服务在后台播放音乐或在后台获取网络数据而阻塞影响用户的其它操作。其它一些组件(如 activity )可以启动一个服务运行在后台或绑定一个服务来与之进行交互。

    每一个服务是继承了 Service 类,你可以在开发指南中学习更多关于服务的知识。

     

    Content providers (内容提供器)

    内容提供器是用来处理应用程序的一些共享数据。你可以利用系统文件、 SQLite 数据库、 web 或一些永久存储设备(如 SD 卡, @ Sam 注)来存储数据,以便你的应用程序可以访问使用。其它应用程序可以通过你的应用程序提供的内容提供器( Content provider )查询或甚至修改这些数据(前提是你允许其它程序修改)。比如, Android 系统提供了一个管理用户联系人信息的内容提供器( Content provider ),因此,其它应用程序只要取得了相应的权限就可以取得诸如 ContactsContract.Data 这样的内容提供器内容( Content provider ),这样就可以查看或编辑联系人信息了。

    在读取或修改你的应用程序中不共享的私有数据时,内容提供器( Content provider )也是非常有用的,例如记事本程序就是提供一个内容提供器来实现存储内容的。

    内容提供器( Content provider )必须继承ContentProvider ,并实现一些执行数据交互的应用程序接口。

     

    Broadcast receivers (广播接收器)

    广播接收器是一个用来响应系统全局广播事件的组件。大部分的广播都是由系统产生的,比如屏幕关闭、电量低、选中了一张图片。应用程序也可以自己初定义一个广播,比如通知其它应用程序数据已经下载到了设备上,它们可以使用这些数据了。虽然广播接收器不能显示一个用户接口界面,但它可以在接收到广播时,创建一个状态栏通知信息通知用户。尽管如此,更普通的情况下 ,广播接收器只是一个与其它应用程序对接的出口,并仅仅是做一些很轻量级的操作(广播接收器不能进行费时的重量级操作 @ Sam 注)。比如,一个广播接收器在接收到某一个广播后启动一个服务去执行其它一些操作(一般是一些相对重量级的费时操作 @ Sam 注)。

    一个广播接收器需要继承 BroadcastReceiver 而且每一个广播都是以 Intent 对象的形式来进行传递。

     

    Android 系统的一个独特设计就是任何应用程序可以启动其它程序的组件,比如,当你想通过设备的摄像头获取一张照片,通常情况下利用其它有照相功能的应用程序去获取,然后你直接使用得到的这张照片数据就行,而不需要自己去开发一个具有照相功能的程序。要实现这样的功能,你也不需要去包含进照相程序的代码或去连接这个照相程序,你只需在代码中简单地打开一个照相程序的 activity 界面,然后直接使用现有照相程序进行照相,最后把照片返回供你的应用程序使用。在用户看来,这个照相程序就好像你的应用程序的一部分,实际他们是相互独立的两个程序。

    当系统启动一个组件时,如果应用程序还没运行,系统会启动一个包含应用程序和组件所需要的类实例进程。比如,当你的应用程序要启动一个照相程序来获取相片,那么系统将启动一个属于照相程序的线程,而不是你的应用程序进程中打开照相程序。因此, Android 应用程序并不像其它大多数系统应用程序一样,它没有一个单独的程序入口(比如并不像其它系统应用程序一样有 main() 函数这样一个入口)。

    因为 Android 系统中每一个应用程序都是独立运行在自己的进程中,并且有访问其它应用程序的文件权限约束,所以你的应用程序不能直接激活另一个应用程序的组件,只有 Android 系统可以激活。因此,如果需要激活其它程序的组件,你必须向系统发送一个包含你要打开的这个组件信息的意图( Intent ),并由系统为你打开这个组件。

     

    激活组件

    activities 、服务( services )、广播接收器( broadcast receivers )这三大组件都可以通过一个叫意图( Intent )的异步信息来激活。意图( Intent )在运行时为某一个特定的组件绑定了一个其它组件(你可以理解成一个用来请求其它组件动作的消息),这个组件可是属于你的应用程序,也可以不属于你的应用程序(比如上面例子中的照相程序就不属于你的应用程序 @ Sam 注)。

    一个意图( Intent )就是一个 Intent 对象,它定义了一个需要激活某个组件或某种类型的组件的消息,这个意图( Intent )可以是显式匹配、隐式匹配或 respectively

    对于 activities services ,一个意图( Intent )定义了需要执行的动作(如“ "view" "send" ),也可能指定了启动组件需要的数据 URI 。比如,可以通过一个意图( Intent )去请求一个 activity 显示一张图片或打开一个网页。在某些情况下,你可以通过一个意图( Intent )去启动一个 activity ,并接收这个 activity 返回的包含了结果数据的 Intent 。比如,你可以发送一个意图( Intent )打开一个联系人列表界面,让用户选择联系人,并接收一个包含了指向用户选中的联系人 URI 的意图( Intent )。

    对于广播接收器,意图( Intent )就只是简单地定义了当前广播的内容,比如,一个表示设备电量低的广播,只需要包括一个已经定义过的可知字符串去表示电量低这个事件就行了。

    四大组件的另一个组件——内容提供器( content provider )是不能通过意图来激活的。更确切地说,当有一个来自 ContentResolver 的请求指向它时,它才会被激活。由于内容分解器( content resolver )通过内容提供器( content provider )直接处理事务,所以组件不需要直接调用内容提供器( content provider )来处理事务,而只需要调用 ContentResolver 对象的方法就可以了。这就为内容提供器( content provider )和组件请求数据之间加入了一个抽离层,这样子做使得程序更为安全(即组件不直接与内容提供器打交道,而是通过 ContentResolver 对象来进行操作 @ Sam 注)。

    下面是激活每一种组件的方法:

    1、      激活 activity :通过传递一个意图( Intent )给 startActivity() startActivityForResult() 方法,后者是当需要 activity 有数据返回时调用;

    2、      激活服务( service )或向一个运行中的服务( service )传递指令:通过传递一个意图( Intent )给 startService() ,也可以通过传递一个意图( Intent )给 bindService() 绑定一个服务;

    3、      可以通过传递一个意图( Intent )给 sendBroadcast() sendOrderedBroadcast() sendStickyBroadcast() 来初始化一个广播;

    你可以通过调用 ContentResolver 类的 query() 方法来执行一个内容提供器的查询动作。

     

    Manifest 文件

    Android 系统启动应用程序组件前,系统必须通过读取应用程序的 AndroidManifest.xml 文件(即 manifest 文件)来明确有哪些组件存在应用程序中。应用程序必须在其工程根目录下创建这样一个包含了所有组件定义的 manifest 文件。

    这个 manifest 文件定义了各种关于应用程序组件定义的数据,比如:

    1、        定义应用程序需要的用户权限,比如访问网络、访问用户联系人;

    2、        定义应用程序至少需要的 API 级别( Level ,这个取决于你的应用程序使用的 API 版本(在 Eclipse 实际操作中,在创建工程时选择的 API 版本后面就有这个参数,是一个数字   @ Sam 注);

    3、        定义应用程序需要的软硬件环境,如需要摄像头、蓝牙或多点触控;

    4、        应用程序需要连接除了 Android 框架 APIs 外的 API 库,比如 Google Maps library (这个库虽然也是 Google 的,但并没有在标准 APIs 中,所以当使用时,则需要显式连接这个库进来 @ Sam 注);

    5、        还有更多……

     

    定义组件

    Manifest 的首要任务就是让系统知道当前应用程序的组件信息。例如,可以像下面一样在 manifest 文件中定义一个 activity

       

    <application> 标签中的 android:icon 属性是用来为应用程序指定图标资源(即应用程序的图标 @ Sam 注)。

    <activity> 标签中的 android:name 属性指定了一个完整修饰的类名,这个类是 Activity 的子类; android:label 属性则是指定一个字符串作为对于用户可见 activity 标签。

    你必须按照以下方法来定义应用程序的组件:

    1、        <activity> 标签来定义 activities

    2、        <service> 标签来定义服务( services

    3、        <receiver> 标签来定义广播接收器( broadcast receivers

    4、        <provider> 标签来定义内容提供器( content providers

    如果有一些 activities 、服务( services )和内容提供器( content providers )包含在你的应用程序源文件中的,但没有在 manifest 文件中定义,那么这些组件对于系统来说将是不可见,当然它们也永远不会运行。不同的是,广播接收器( broadcast receivers )即可以在 manifest 文件中定义,也可以代码中作为一个 BroadcastReceiver 对象动态创建,并通过调用 registerReceiver() 方法在系统中注册这个广播接收器。

    更多关于如何组织 manifest 文件的介绍,可以参考 The AndroidManifest.xml File 文档。

     

    定义组件的性能

    正如在“激活组件”一节中所说的,你可以通过传递一个意图( Intent )去启动 activities 、服务( services )和广播接收器( broadcast receivers )。你可以在意图( Intent )中通过组件的类名显式地指定目标组件。然而,意图( Intent )的真正强大之处是在于意图中有动作( action )的概念。利用意图( Intent )的这个动作( action ),你只需简单地描述你需要进行操作的动作( action )类型(如果有需要时也可以给这个动作带上必要的数据),然后让系统去匹配一个具有执行这个动作能力的组件并运行这个组件。如果匹配到多个组件具备执行这个动作的能力,那么就通过弹出选择框的方式让用户自己去选择用哪一个组件去执行(如在在手机上有多个浏览器,在打开网址前,系统会打开一个选择界面,让你选择用哪一个浏览器去打开 @ Sam 注)。

    系统确定哪一个组件能够对某一个意图( Intent )进行响应的方法是:系统通过比对收到的意图( Intent )和设备上其它应用程序在 manifest 文件中提供意图过滤器( ntent filters ),如果相匹配则调用这个应用程序对收到的意图( Intent )进行响应。

    当你在应用程序的 manifest 中定义一个组件时,在有需要的情况下,你可以选择为你的组件定义一个描述意图能力的意图过滤器,这样它就能够响应其它应用程序的意图( Intent )。定义意图过滤的方法是:在控件标签下增加一个 <intent-filter> 子标签进行定义。

    比如,一个包含了可以编辑新邮件 activity Email 程序,可以在它的 manifest 入口中定义一个意图过滤器来响应“ send ”意图(它的意思是发送电子邮件)。这样的话,你就可以在你的应用程序中创建一个包含“ send ”动作的意图(即 ACTION_SEND ),然后当通过调用 startActivity() 方法传递出这个意图时,系统就会去匹配并运行之前的那个 Email 程序。

     

    定义应用程序对配置的要求

    目前支持 Android 的设备有很多,但这些设备千差万别,并没有统一的性能。为了防止你的应用程序装到了一台无法提供程序所需性能,所以在 manifest 文件中明确定义你的程序运行所需的软硬件环境是非常有必要的。通常这些定义只仅仅是一些信息性的描述,而且系统是不会去读取它们的。然而当用户在搜索一些针对他们设备的应用程序时,像 Android 市场这些外部服务会利用这些信息性描述生成一个过滤器去确定程序与用户设备是否匹配。

    例如,你在 manifest 文件中定义了你的应用程序需要摄像头并且使用了 Android2.1 API API Level 7 ),那些没有摄像头或系统版本低于 Android2.1 的设备将无法从 Android 市场上下载安装你的应用程序。

    尽管如此,你也可以定义你的应用程序使用了摄像头,但不是必需的。在这种情况下,你就必须在你程序运行时去判断设备是否有摄像头,并在摄像头不可以情况下屏蔽一些使用了摄像头的属性

    以下是一些在设计开发程序时需要考虑的设备重要属性:

    1、      屏幕尺寸和密度

    为了通过屏幕来区分设备, Android 为每一个设备定义了两个属性:一个是屏幕尺寸,即屏幕的物理尺寸(也即我们平常说的 3.5 寸、 4.3 寸等等, @ Sam 注);另一个是屏幕密度,即屏幕像素的物理密度,或称为 dpi (每英寸上的像素点数)。为了简化不同屏幕配置类型的区分, Android 系统把他们归纳成不同的选择组,这样就可以地去确定屏幕配置类型。

    屏幕尺寸分为小、正常、大和超大四种。

    屏幕密度分成低密度、中密度、高密度和超高密度四种。

    默认情况下,由于 Android 系统为你的 UI 布局和图片资源提供了一个合适的校准,因此你的应用程序可以兼容所有的屏幕尺寸和密度。当然你可以用可选布局 资源并在你的 manifest 中用 <supports-screens> 标签明确指定你的应用程序所支持的屏幕尺寸,来创建针对某些屏幕的专门布局和提供针对某些密度的专门图片。

    2、      输入配置

    大部分机器提供了不同的用户输入设备,比如键盘、轨迹球和五维按键。如果你的应用程序需要特定的输入设备,那你就需要在 manifest 中用 <uses-configuration> 标签指定你所需的输入设备,然而很少有这种需要某种特定输入设备的应用程序。

    3、      设备属性

    在一个 Android 驱动的设备中,可能存在很多的软硬件属性,比如摄像头、光感、蓝牙、专门版本的 OpenGL 或触摸屏的精确度等等。你永远不要假设在 Android 驱动设备中的某一个属性是有效的(除了 Android 标准库外),所以你需要在 manifest 中用 <uses-feature> 标签显式指定你的应用程序所需的设备属性。

    4、      平台版本

    不同的 Android 设备经常使用不同版本 Android 平台,如有些使用 Android 1.6 ,有些使用 Android 2.3 。对于每一个后续版本经常是新增了一些前期版本没有的 API ,因此,为了更明确 API 的可用性,每一个平台版本都指定了 API 的级别( Level ),如 Android 1.0 API Level 1 ,而 Android 2.3 API Level 9 。如果你使用了 1.0 版本后 API ,你就必须利用 <uses-sdk> 标签定义你所用 API 的至少 API 级别。

    因为你在 Android 市场发布应用程序后,电子市场需要利用程序里定义的硬件件环境需求去匹配想使用该程序的设备,所以在程序中定义你的应用程序所需的所有配置环境就显得尤为重要。同样的,你的应用程序也只能在符合其配置需求的设备上运行。

     

    应用程序资源

    一个 Android 应用程序远远不只是由代码组成那么简单,它还包括了一些抽离于源代码的必要资源,如图片、声音文件或其它一些与应用程序相关的可视化界面。例如,你可以用 XML 文件定义一些动画、菜单、样式、颜色和用户交互界面的布局等。使用应用程序资源,你可以通过提供一些替代资源 alternative resources )就可以简便地更新应用程序的各种属性,使得你可以针对不同配置的设备进行相应的优化,如针对不同语言、不同屏幕尺寸的设备。

    对于你的 Android 程序中每一个资源, SDK 开发工具会自动为它定义一个唯一的 ID ,通过这个 ID 你可以在程序代码中或用 XML 定义的其它资源文件中关联该 ID 对应的资源。例如,你的应用程序中包含了一张叫 logo.png 的图片(它会被保存到 res/drawable/ 路径下),那么 SDK 开发工具就会自动生成一个名为 R.drawable.logo ID ,这样你就可以用这个 ID 来关联包含进来的图片,然后插入到你的用户交互界面中( UI )。

    可用资源文件最重要的作用之一,就是把资源和代码抽离,这样你就可以方便地为不同设备配置提供不同的替代资源。例如,在 XML 文件中定义用户交互界面( UI )中用到的字符串,你就可以把这些字符串翻译成其它语言,并保存在一个抽离的文件中。系统将会根据你在资源路径中插入的语言修饰符(如保存成 res/values-fr/ 即表示这个文件中的字符串表示法文)和用户机器中语言的设置为程序选择一个合适的用户界面变语言。

    Android 系统支持很多不同的替代资源修饰符,这个修饰符其实就是一些包含在资源路径中的字符串。通过这个修饰符可以让设备根据不同配置使用不同的资源。另一个例子就是你的程序可能需要根据设备屏幕方向和尺寸的不同使用不同的布局,比如当设备是纵向的你可能需要一个按钮是纵向的布局,当屏幕是横屏时按钮需要是水平对齐,这时你就可以定义两个不同的布局文件,并为它们分别添加合适的修饰,这样系统就会自动根据设备当前的方向选择合适的布局。

    展开全文
  • 原理:利用Bing+Google翻译引擎. 使用方法,启动自动翻译后.右键复制需要翻译的英语文本(例如msdn英文文档),则将内容自动翻译出来. 1,速度更快,占用内存极小,采用多线程技术 2,采用谷歌+bing翻译api 程序需要翻译key...
  • 当我们需要显示这些存储的中文的时候,再通过译码将这些二进制数字翻译成相应的中文。 所以不管是什么时候出现这种问题。中文乱码的本质是你存储中文的时候使用的编码方式,在某个“译码的东西”下面对这种...
  • 微信网页版接口来源自 gaosen的python 脚本 ,地址: https://github.com/0x5e/wechat-deleted-friends 主要接口通信源码:  package com.toltech.wchat.process; import java.io.IOException; import java....
  • 安卓应用基本原理

    千次阅读 2015-09-11 14:29:47
    安卓应用基本原理 谷歌官方原文链接:http://developer.android.com/guide/components/fundamentals.html  初尝翻译,如有不当,请多包涵 安卓应用程序是由Java语言所编写的。Android SDK工具编译你的代码(包括...
  • Android即时通讯实现原理

    万次阅读 2016-07-19 20:58:38
    即时通讯实现原理即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前者是以数据流的形式,将传输数据经分割、打包后,通过两...
  • 内网穿透工具的原理与开发实战

    万次阅读 多人点赞 2019-03-31 02:38:22
    本文主要介绍了内网穿透工具的原理与开发实战。
  • 爬虫原理

    千次阅读 2019-06-01 11:50:16
    今天,我主要从三部分开始讲,网络连接,爬虫原理网页构造。 网络连接 像是在地铁里的自助饮料售货机上购买饮料一样:购买者只需选择所需饮料,投入硬币(或纸币),自助饮料售货机就会弹出相应的商品。网络...
  • JSP的原理 JSP的基本语法 JSP三大指令 page指令 Java中的动态网页 一、 Servlet动态网页 = Java代码(主) + html代码(辅): (在Servlet中编写html代码) Servlet擅长的事情: 接受请求参数,封装成对象. 调用业务...
  • 【机器翻译machine translation】

    千次阅读 2017-12-21 20:28:24
    随着经济全球化及互联网的飞速发展,机器翻译技术在促进政治、经济、文化交流等方面起到越来越重要的作用。   翻译过程 整个机器翻译的过程可以分为原文分析、原文译文转换和译文生成3个阶段。在具体的机器翻译...
  • 最因为是调用网页接口翻译,使用必须联网 ====================================================== 经过几天的反响,我更新了下软件,做个详细的使用情况吧 1。有好多人说,有的程序只能翻译极个别的按钮或者其他的...
  • python免费使用谷歌翻译的方法

    千次阅读 2019-06-13 21:46:46
    本文介绍一下通过模拟浏览器向trranslate.google.com发起请求,从而免费使用谷歌翻译
  • QQ原理

    千次阅读 2009-11-30 10:10:00
    QQ原理 最近开始准备用Java开发QQ,由于在大四的时候曾经开发过一简单的QQ聊天机,现在想把它完善,使之尽量能够用于... 下面就是我在网上所搜索的资料一、IM技术概念 IM技术全称Instant Messaging,中文翻译“即时通讯
  • 知识图谱技术原理介绍

    千次阅读 2018-02-05 09:49:21
    http://www.36dsj.com/archives/39306...互联网正从仅包含网页网页之间超链接的文档万维网(Document Web)转变成包含大量描述各种实体和实体之间丰富关系的数据万维网(Data Web)。在这个背景下,Google、百度和搜狗等
  • GPU加速原理

    万次阅读 2018-11-18 15:01:21
    原理介绍 1、GPU&amp;CPU GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。从这个任务定位上面来说,不仅仅在计算机的显卡上面,在手机、...
  • 网络通信原理

    万次阅读 多人点赞 2019-06-02 17:13:06
    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序...网络通信原理 2.1 互联网的本质就是一系列的网络协议 一台硬件设备有了操作系统,然后装上软件你就可以...
  • Web(瓦片)地图的工作原理

    万次阅读 2015-03-04 11:16:14
    ,这篇文档通俗易懂地阐述了Web地图是如何工作的,其实更偏向讲瓦片地图的工作原理,鉴于之前很多人不了解地图切片的原理,因此简单翻译一下,由于源自MapBox文档,文中免不了涉及MapBox的相关术语,但不会影响我们...
  • sso 原理详解

    万次阅读 2017-06-20 23:17:33
    SSO( Single Sign-On ),中文意即单点登录,翻译得比较精简,个人觉得 Wiki 上的解释更细腻点—— SSO, is a property of access control of multiple related, but independent software systems. With this ...
  • 理解Canvas原理

    千次阅读 2017-01-20 10:40:56
    Canvas原理 Canvas这个概念最早在那里提出,我没查到,可现在好多地方都有,它都快无处不在了。下面从我看到的H5Canvas看看它有多牛逼。 在Html没有增加Canvas标签之前,网页在绘制图形图片这一块和客户端...
  • 所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫DNS服务器的计算机自动把我们的域名翻译成了相应的IP地址,然后调出IP地址所对应的网页
  • JavaWeb 原理及其相关知识

    千次阅读 2012-06-12 12:53:06
    Web服务器的作用 用于实时接收浏览器的请求,并将相应结果回送给浏览器。 ... 但对于要根据某些条件去动态创建内容的访问...因此,动态网页内容的创建过程包含两个步骤:首先使用某种编程语言写出相应的动态网页程...
  • PNG格式图片原理

    万次阅读 2016-05-27 15:38:02
    便携式网络图型( Portable Network Graphics [PNG])在过去几十年已经变成App开发里重要的组成部分。它广泛的运用在游戏开发、网页开发和Android开发里,但也可能被大量的滥用。
  • 破解有道翻译js加密,纯小白练手

    万次阅读 2021-02-26 11:33:45
    不知道发啥想起来有道翻译,当初学爬虫的时候,看韦世东的《Python 3反爬虫原理与绕过实战》有提到过这个案例,算最最初级的。记得当时自己还破了一下失败了,就放弃了。现在想起来想喂自己吃最喜欢的耳巴子。 ok,...
  • SpringBoot:认认真真梳理一遍自动装配原理

    千次阅读 多人点赞 2019-12-04 10:47:06
    Spring翻译为中文是“春天”,的确,在某段时间内,它给Java开发人员带来过春天,但是随着我们项目规模的扩大,Spring需要配置的地方就越来越多,夸张点说,“配置两小时,Coding五分钟”。这种纷繁复杂的xml配置...
  • SSL原理

    千次阅读 2009-03-21 18:29:00
    SSL原理一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。 2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将...
  • wifi基本原理

    千次阅读 2019-10-17 09:23:01
    1.4-wifi通讯原理 废话不多说,有图有真相 由于笔者之前的wifi硬件没有备份,离职之后被公司回收,所以这里我使用笔者的MAC电脑作为服务器,笔者的iPhone6S手机作为客户端演示wifi通讯 0301.gif ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,493
精华内容 13,397
关键字:

网页翻译的原理