精华内容
下载资源
问答
  • 建立一个网页,手机APP或桌面应用是个很大的工程,好记笔记技能是让这个工程井然有序关键,也是克服压力、绝望和倦怠好方法。 但是大多数笔记应用设计并不是以程序员作为目标受众,可能会让我们起来很...

    编程容易产生挫折,即使作为一种业余爱好也可能是这样。建立一个网页,手机APP或桌面应用都是个很大的工程,好的记笔记技能是让这个工程井然有序的关键,也是克服压力、绝望和倦怠的好方法。

    但是大多数笔记应用的设计并不是以程序员作为目标受众,可能会让我们用起来很难受,甚至放弃这些工具。这就是为什么找来了这些比较好用的做笔记工具。可以看看是否有你在用的。同样也欢迎大家在留言区分享你最喜爱的笔记软件!

    1. Boostnote

    (适用OS: Windows, Mac, Linux)

    Boostnote是为编码器设计的笔记应用典范。它虽然不具备现代笔记应用的所有功能(例如,它具有Markdown格式和基于文件夹的组织功能,但缺少可自定义的键盘快捷键),但具备所有程序员喜欢的功能:
    在这里插入图片描述
    你可以直接在普通笔记中嵌入代码块,也创建单独的代码片段型注释,用于在一个注释中收集和分组多个代码块。它还支持TO-DO LIST来帮助你进行任务管理,和番茄钟混用岂不是美滋滋?

    Boostnote的价值同时体现在他的免费和开源。结合其功能,Boostnote是计算机系学生的理想选择

    2. MedleyText

    (适用OS: Windows, Mac, Linux)

    MedleyText与Boostnote非常相似,功能较少,但对每项功能都挖得比较深:富文本格式,笔记中可嵌入代码块以及可自定义的键盘快捷键。对于需要管理大项目程序员来说是十分理想的选择。

    在这里插入图片描述

    当你将格式化的代码直接嵌入到笔记中时,应用程序会自动高亮语法,你也可以手动调节需要高亮的部分。截至发稿时,MedleyText已支持超过40种编程语言。

    MedleyText在使用本地笔记时完全免费,没有任何限制。高级服务版本MedleyText + S于2017年下半年发布,届时他能允许使用者将笔记同步到云端存储,访问Web版本应用并与其他人共享笔记。

    3. Quiver

    (适用OS: Mac)

    Quiver是另一个类似上面两个的应用程序:使用者可以针对嵌入代码进行混合和匹配文本(Markdown和LaTeX格式)功能。但Quiver内有个代码专用的编辑器,比其他竞品更简洁,速度更快。
    在这里插入图片描述
    在这里插入图片描述
    至于语法高亮,该应用支持120多种编程语言。云存储同步支持Dropbox,Google Drive,iCloud等。而且由于笔记被存储为JSON格式,所以可以安全地使用版本控制来追蹤更改。共享笔记本甚至允许大型项目的团队协作。

    所以既然Quiver如此牛,为什么将它列在第三位呢?因为它只能在Mac上使用。虽然Mac是相當不錯的编程环境,但大多数编码器仍然在Windows或Linux上。我们认为这是相当负面的影响。

    4. OneNote

    (适用OS: Windows, Mac, Android, iOS, Web)

    OneNote可以说是最好的笔记应用程序,但目前它缺乏语法高亮功能,因此不适合程序员使用。幸运的是,由GitHub用户发布的免费插件使OneNote可以在代码中突出语法了
    在这里插入图片描述

    插件是有点笨重,但终于可以使用OneNote保存代码注释应该是相当开心的一件事。OneNote是学生记笔记的最佳方式之一,对于计算机和工科学生来说,这是一个特别好的消息。

    笔记共享功能使得OneNote协作项目起来也非常方便。而最重要的是它几乎在所有主要平台上都是完全免费的,包括台式机和移动设备(除了Linux以外~)

    5. CherryTree

    (适用OS: Windows)

    CherryTree不像大多数笔记应用程序,而更像一个个人维基。但是由于页面可以彼此嵌套在层次结构中,所以记笔记绰绰有余了。是什么让它看起来像维基呢?主要是因为可以在整个笔记本中插入链接,跳转到其他页面。
    在这里插入图片描述
    还有其他功能类似CherryTree的应用,包括wikidPad和以星,但CherryTree支持特殊的代码专用页面类型。程序员可以使用常规的笔记记录想法和任务,并使用代码专用页面纪录片段的代码。就页面层次而言,两种类型的操作方式完全相同。

    CherryTree非常快,使其成为最好的轻量级笔记应用程序之一

    6. Sublime Text

    (适用OS: Windows, Mac, Linux)

    作为程序员,你可能早就知道Sublime Text。是的,这是一个文本编辑器,而不是一个笔记应用程序,但它当然也可以用于记笔记:每个笔记作为一个文本文件,每个代码片段在一个单独的语言文件中。

    Sublime Text的原生功能非常适合提高整体生产力,分割多个编辑器窗格的功能更是不可或缺的功能。但是对于记笔记和组织功能来说,使用一些免费的插件还可以获得更好的效果。

    SideBarEnhancements是每个Sublime Text用户必备插件。它增加了一些优化的侧边栏,主要是在菜单中当你键盘单击文件时会出现。PlainTasks在编辑器中集成一个TO-DO LIST。MarkdownEditing为你提供了用markdown语法记笔记的途径。
    在这里插入图片描述

    Sublime Text理论上要花上你70美元,但免费期其实永远不会结束。只要你可以忍受偶而出现的弹窗提醒你购买完整版本,就可以无限期地免费使用Sublime Text。

    7. TickTick

    (适用OS: Windows, Mac, Android, iOS, Web)

    尽管TickTick是一个TO-DO LIST应用,但有一个微妙的功能,使它很适合记笔记:每个列表项都有一个“描述”字段,完全可以充当记事本。
    在这里插入图片描述

    作为程序员,你可以使用TickTick将所有任务作为单独的列表项目进行追踪,并存储每个任务所需的任何注释。但因为没有突出语法功能或丰富的文本格式,它其实更适合用来管理程序员的想法而不是存储代码片段。

    此外,你还可以享受完整的TO-DO LIST功能:文件夹系统,子任务,定期任务,提醒,优先事项等等的功能。TickTick的免费版本限制了列表数量,付费则是每年28美元。

    成为更好的程序员的额外秘诀

    如果这些你都不喜欢,还是可以在代码中以粘贴注释的方式记笔记。这不是管理抽象级项目的最佳方法,因为这需要清晰的编码习惯,但这样作却是针对某些低阶字段注释的好方式。

    无论哪种方式,一定是不断改进的。编程是困难的,所以自傲编程的时候,有时候一点小小的技巧或者捷径,都能让我们的效率提高很多。

    展开全文
  •   现在AngularJS已经出到4.x版本了,可我对它认识...  现在就职公司也有个项目是混合式的手机app,居然也是AngularJS+ionic来做的,而且也是1.x版本。  本来没我什么,我这段时间...

      现在AngularJS都已经出到4.x的版本了,可我对它的认识还是停留在1.x的版本。
      之前用它是为了搭配ionic来写web手机天气 应用(用来应付我大学里一门学科的课设的︿( ̄︶ ̄)︿)。之后就因为它太难学而没有继续深入下去。
      现在就职的公司也有个项目是做混合式的手机app的,居然也是用AngularJS+ionic来做的,而且也是用1.x的版本。
      本来没我什么事的,我这段时间都在用Vuejs。然后上头发现那个项目加载是在太慢了,问我有没有优化的方法。我看了下项目工程结构,发现是用gulp打包的一个工程。可能刚开始做这个项目的时候没掌握好要点,导致整个项目臃肿不堪。gulp我是不会的了,由于一直在用Vuejs,官方cli提供的模板就是用webpack打包的,而且我之前写ReactJS用的也是webpack来打包的。因此,我就用了webpack来重构一下工程。然后写下这篇详细的文章,想给可能会同样遇到的这种问题的朋友做一个参考( • ̀ω•́ )✧。 另外,本文也可以当做webpack的一篇入门文章。

    首先,要先配置好工程文件。

      我先列一下我的package.json里的配置:

    {
      "name": "angular-ionic-webpack",
      "version": "1.0.0",
      "description": "a project base on angular 1.x and webpack",
      "main": "index.js",
      "scripts": {
        "build": "webpack --config ./build/webpack.prod.config.js",
        "dev": "set NODE_ENV=dev&& webpack-dev-server --config ./build/webpack.dev.config.js"
      },
      "devDependencies": {
        "css-loader": "^0.26.4",
        "extract-text-webpack-plugin": "^3.0.1",
        "html-loader": "^0.4.4",
        "html-webpack-plugin": "^2.24.1",
        "style-loader": "^0.13.1",
        "url-loader": "^0.5.7",
        "webpack": "^3.1.0",
        "webpack-dev-server": "^2.9.2",
        "webpack-manifest-plugin": "^1.3.2",
        "webpack-merge": "^4.1.0"
      },
      "dependencies": {
        "angular": "1.4.3",
        "angular-cache": "^4.5.0",
        "angular-cookies": "1.4.12",
        "angular-ui-router": "^0.3.2",
        "jquery": "^3.2.1"
      },
      "author": "homer",
      "license": "MIT"
    }复制代码

      第一个首先是项目直接用到的依赖,也就是dependencies里的东西
    分别有:

     "dependencies": {
        "angular": "1.4.3", 
        "angular-cache": "^4.5.0",
        "angular-cookies": "1.4.12",
        "angular-ui-router": "^0.3.2",
        "jquery": "^3.2.1"
      }复制代码

      我这里的angularangular-cookies都用了具体的版本(就是版本号前面没有用符号^,直接写数字1.4.3),因为不合版本的这两个东西会跟ionic里的angular-ui-router发生冲突导致渲染失败。
      而我这里也没有装ionic,是因为我直接引用的时候会报can't resolve 'ionic'的错误,我也不知道为什么,所以我是直接调用了/app/assets/lib里的ionic.bundle.min.js来引入的。请有找到原因的朋友麻烦告知一下我是为什么。

      接下来是开发时用到的依赖:

    "devDependencies": {
        "css-loader": "^0.26.4",
        "extract-text-webpack-plugin": "^3.0.1",
        "html-loader": "^0.4.4",
        "html-webpack-plugin": "^2.24.1",
        "style-loader": "^0.13.1",
        "url-loader": "^0.5.7",
        "webpack": "^3.1.0",
        "webpack-dev-server": "^2.9.2",
        "webpack-manifest-plugin": "^1.3.2",
        "webpack-merge": "^4.1.0"
      },复制代码

      各种loader是必要的,因为webpack在打包的时候会把你项目里的非js文件转换出来然后打包在一起。我们常用的loader有css-loader,url-loader,这两个分别是解析css和图片的。然后其他的loader我们要看项目需求来按需选取,比如我这里因为是angular 1.x的项目,里面还有挺多的html模板,所以我这里用到了html-loader来解析html。
      其次是webpack——说句题外话,其实webpack一般都是用最新的,因为打包的环境跟所用的框架其实没有太多互相干扰的地方。我一开始想着用的1.x的webpack发现用起来不怎么方便,于是又改回最新的3.x。这也算是个人的一个小小心得吧。然后我们还用了webpack-dev-server。这个是在我们开发的时候用的服务器,可以热替换更新代码。很方便,至于怎么用我后面会详细讲。然后就是webpack-merge这个东西是用来合并webpack配置,这个是在vue项目里看到,感觉还挺好用,就也模仿着用了。最后就是各种插件,extract-text-webpack-plugin这个用来把css样式独立打包成一个css文件的插件,没有它的话,样式只会注入index.html做内联样式;html-webpack-plugin是用于把js注入到index.html里;webpack-manifest-plugin是用来生成网页的manifest文件的。
      然后是写启动webpack的命令行,也就是上面的:

    "scripts": {
        "build": "webpack --config ./build/webpack.prod.config.js",
        "dev": "set NODE_ENV=dev&& webpack-dev-server --config ./build/webpack.dev.config.js"
      },复制代码

    这样写的意思是,当你输入npm run + 你的命令名字就会让npm执行你对应命令的语句。比如输入npm run dev,相当于你执行了上面那条dev对应的set NODE_ENV=dev&& webpack-dev-server --config ./build/webpack.dev.config.js"这条语句。这里dev命令执行的是开发版本打包并生成开发的服务器;build命令执行的则是生产版本打包。在打包开发版本的时候,用的是webpack-dev-server,我们让它按照./build/webpack.dev.config.js里的配置(下文会提到)来执行。在打包生产环境,是直接运行webpack,让它按照./build/webpack.prod.config.js里的配置来执行。

      关于这份package.json里其他的配置有问题的可以在评论里提哈~~

    然后来写webpack的配置文件

    概述

      安装了webpack,我们要配置好,让它按照我们的期望来工作。
    一般我们都会用 webpack.config.js来命名webpack的配置文件,以免和其他配置文件搞混。但是由于我们一般都会分开开发环境和生产环境,而对于这个两个环境打包我们要求会有点不一样。开发环境我们希望它可以直接模仿生产环境放上服务器测试;
    然后又想它可以一有改动就会自动打包更新显示在页面,不用我们手动刷新浏览器;
    不希望它打包花的时间太长;如果出错会有相应的提示等等。而生产环境我们想尽量压缩文件大小,生成manifest文件等等。因此,我们就需要把开发打包和生产打包的配置分开来。这里我们就分开了 webpack.dev.config.jswebpack.prod.config.js两个文件。但是还是有些配置是两个文件都会用到的,本着复用的精神,所以我们还有一个 webapck.base.config.js来记录公共的配置。

    webpack基本结构

      webpack的配置主要分为几个部分:

    1. webpack打包文件的入口(entry)。
    2. webpack打包完文件后输出的出口(output)。
    3. webpack在打包文件时的模块配置(module)。
    4. webpack在打包文件时用到的插件(plugin)。

      这四个是webpack配置的基本部分,写好了这四个基本可以打包成功了。
    还有其他要用的配置后面会说到,其他配置没用到的可以看一下官方的文档(3.x的官网)/ (个人觉得翻译的比较好的中文文档)。接下来我们先来分析下开发环境和生成环境共用的部分配置。首先入口文件一般都是一样的吧?然后打包时模块配置也是一样的,因为你打包时的文件都是一样的,所以设置也是一样的。所以我们webpack.base.config.js是这样写的:

    var path = require('path');
    var root = path.resolve(__dirname, '../');
    
    module.exports = {
        entry: {
            'main': root + '\\app\\index.js',
            jquery:['jquery'],
            ionic:root+'\\app\\assets\\lib\\ionic\\release\\js\\ionic.bundle.min.js',
            datepicker:root+'\\app\\assets\\lib\\ionic-datepicker\\release\\ionic-datepicker.bundle.min.js',
            calendar_pk:root+'\\app\\assets\\lib\\calendar-pk\\release\\js\\calendar_pk.min.js'
        },
        module: {
            loaders: [
                {
                    test: /\.(png|jpe?g|gif|woff|svg|eot|ttf)(\?.*)?$/,
                    loader: 'url-loader',
                    query: {
                        limit: 10000,
                    }
                },
                {
                    test: /\.html$/,
                    loader: 'html-loader'
                }
    
            ]
        },
        resolve: {
            extensions: ['.js', '.json']
        }
    
    };复制代码

      入口(entry)文件其实不一定是只有一个,我这里就有多个。只要路径分开写正确就可以了。
      然后是模块(module)配置,webpack的思想是把工程所有的js都是模块,然后全部打包在一起。所以遇到一些非js会有麻烦。但是他们早就预料这种情况,做出了一些系列的loader(加载器)来把一些非js文件做成webpack能打包的东西。
    一般都会用到的是css-loader, url-loader。这两个分别用来解析项目里.css和图片字体之类的文件。上面说过,由于项目中会有较多的.html文件要引用,所以我们还用了 html-loader。我这里还有一个 resolve(解析)的配置,这个是用来js里引用文件的时候,不写后缀的话,webpack就会自动为其加上.js或.json的后缀,可以省一些写后缀的时间(✧◡✧)。

    开发打包配置

      我们的开发打包配置是这样的:

    var baseconf = require('./webpack.base.config');
    var merge = require('webpack-merge');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var webpack = require('webpack');
    var server = require('./configDevServer');
    var path = require('path');
    var root = path.resolve(__dirname, '../');
    
    var plugins = [
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV: JSON.stringify("development")
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery',
            'window.$': 'jquery'
        }),
        new webpack.optimize.CommonsChunkPlugin({
            name: 'vendor', // 这公共代码的chunk名为'commons'
            filename: '[name].bundle.js', // 生成后的文件名,虽说用了[name],但实际上就是'commons.bundle.js'了
            minChunks: 3, // 设定要有4个chunk(即4个页面)加载的js模块才会被纳入公共代码。这数目自己考虑吧,我认为3-5比较合适。
        }),
        new HtmlWebpackPlugin({
                filename: 'index.html',
                template: 'index.html',
                inject: true
        }),
        new webpack.HotModuleReplacementPlugin()
    ];
    baseconf.module.loaders.push(
        {
            test: /\.css$/,
            loader: ['style-loader','css-loader'],
        }
    );
    module.exports = merge(baseconf, {
        output: {
            path: root+"/dist",
            publicPath: "/",
            filename: "./js/[name].[chunkhash].js"
        },
        devtool: 'cheap-module-eval-source-map',
        devServer: server,
        plugins: plugins,
    });复制代码

      我们首先把基本的配置引进来。然后写插件(plugin),毕竟我们开发配置想实现的功能有部分需要插件来做。
    webpack.DefinePlugin是用来让webpack知道正在准备的是开发环境打包。某些框架会识别开发和生产环境,然后在我们开发的时候会给出相应的警告和提示,而在生产环境则会屏蔽这些内容。webpack.ProvidePlugin是当我们用到 jQuery之类的js库的时候,用到的相关符号都会自动进行引用,不会导致报错。webpack.optimize.CommonsChunkPlugin是用来提取我们代码里的公共用到的部分,避免代码重复打包,减少代码体积。webpack.HotModuleReplacementPlugin是用来启用我们的代码热替换功能,在我们改了代码之后开发服务器可以重新打包更新,浏览器自动刷新,把我们的改动显示在页面。HtmlWebpackPlugin是我们自己安装的插件,用来把生成的js自动插入到我们的html模板里面。
      写完了插件之后,我们还要写输出(output)。这里指定下输出文件夹和输出的js名字即可。然后是是开发工具(devtool)和开发服务器(dev-server),开发工具的意思是,webpack会根据打包的文件做出一个标识的map文件,如果代码出错的话,它会找出来,然后提示在什么地方。方便修改代码。开发服务器是一个建立在本地的服务器,上面就是你的项目。搭配热替换功能,开发会很方便。这里顺带简单介绍下,开发服务器配置 ./build/configDevServer.js

    const server={
        contentBase:'/dist/',
        host: 'localhost',//服务主机
        port: 8089,//端口
        inline: true, // 可以监控js变化
        hot: true, // 热启动
        compress: true,
        watchContentBase: true,
        proxy: {//设置代理服务器,用于调试接口
            '/api':{
                target:'http://www.baidu.com',
                pathRewrite:{"^/api": "/api"}//重写路径
            }
        }
    };
    module.exports= server;复制代码

      可以看上面的备注来理解对应的配置项的意思。
      上文我们装了个 webpack-merge这时就发挥作用了。正如它的名字一样,它会把两个webpack配置合并起来。然后输出。这样我们的开发环境配置写好了

    生产环境配置

      同样,先上配置:

    var baseconf = require('./webpack.base.config');
    var path = require('path');
    var root = path.resolve(__dirname, '../');
    var merge = require('webpack-merge');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var webpack=require('webpack');
    var ExtractTextPlugin = require('extract-text-webpack-plugin');
    var ManifestPlugin = require('webpack-manifest-plugin');
    var plugins = [
        new webpack.DefinePlugin({
            'process.env': {
                NODE_ENV:JSON.stringify("development")
            }
        }),
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false
            }
        }),
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'index.html',
            inject: true
        }),
        new ExtractTextPlugin({
            filename: './css/[name].css?[contenthash:8]',
            allChunks: true,
        }),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jQuery': 'jquery',
            'window.$': 'jquery',
        }),
        new webpack.optimize.CommonsChunkPlugin({
            name: 'commons', // 这公共代码的chunk名为'commons'
            filename: './js/[name].bundle.js', // 生成后的文件名
            minChunks: 3,
        }),
        new ManifestPlugin(path.join('dist', 'manifest.json'))
    ];
    baseconf.module.rules.push(
        { test: /\.css$/,
            loader: ['style-loader','css-loader'] }
    );
    module.exports=merge(baseconf,{
        output: {
        path: root+"/dist",
            publicPath: "./",
            filename: "./js/[name].[chunkhash].js"
    },
        devtool: false,
        plugins: plugins
    });复制代码

      重复的插件我们就不说了,我们说说几个上面没有的插件。 webpack.optimize.UglifyJsPlugin是用来压缩混淆js代码的。ExtractTextPlugin是我们另外安装的,用来把打包的css独立出来成一个css文件。使用这个插件的时候,css的loader要相应做一下设置,所以可以看到 css-loader我没有放到公共配置,里面而是分开了。ManifestPlugin也是另外安装的,用来生成manifest缓存文件,使网站可以减少对静态资源的重复请求。另外你可以发现这里devtool设成了false,没有设置devserver,因为不是生产所需要的,所以没有设置。

    来跑一遍吧!

    在你的入口的地方建立一个配置里的entry规定名字的js文件,就可以先跑一遍webpack。
    如果webpack没有报错,就说明你的配置基本是对的。

    接下来,我会就angular 1.x 用webpack打包打包遇到的坑来说一说,请看下一篇文章:

    基于webpack构建的angular 1.x工程(angular篇)

    想看详细代码,可以访问我的项目地址
    github.com/homerious/a…

    有什么问题或者不对的地方欢迎指出,谢谢阅读!

    本文原创,未经授权请勿转载。

    转载于:https://juejin.im/post/59fabdcb51882529452fc687

    展开全文
  • I-Jetty部署war包到安卓手机

    千次阅读 2016-03-17 21:32:41
    声明:直接Eclipse导出的war包,安卓手机是无法解析的,原因是安卓的java虚拟机是谷歌自己写的,安卓开发的人知道为什么,就不说明了。 (1) 把web工程的lib下的jar文件转换成安卓认识的dex文件 以下指令说明...

    罗嗦一下:最近在做一个把iJetty集成到安卓软件中的项目,今天经过4小时的折腾,到快绝望了才让我把这个问题给解决掉了,哎,记下,以免别人走我的老路,还有提醒大家,以后多关心下Log。。。


    1、制作安卓手机能识别的war包

    声明:直接用Eclipse导出的war包,安卓手机是无法解析的,原因是安卓用的java虚拟机是谷歌自己写的,做安卓开发的人都知道为什么,就不说明了。

    (1) 把web工程的lib下的jar文件转换成安卓认识的dex文件

    以下指令说明:把lib和classes的中与java有关的文件编译成dex并打包到D盘根目录下(dx.bat在android sdk的build-tools中有)

    dx.bat --dex --output=D:\classes.zip D:\WorkSpace\Test\WebRoot\WEB-INF\classes D:\WorkSpace\Test\WebRoot\WEB-INF\lib

    (2) 把classess.zip文件复制到web工程的lib文件夹下,并删除lib文件夹下所有的jar包,但是classes中的class文件要保留。

    (3) 把Web工程打包成war(打开cmd后,先cd到web工程的WebRoot下,如cd D:\Test\WebRoot),注意指令后面的英文句号,有用的!!!

    jar cvf Test.war .

    (4) 在WebRoot文件夹下会生成Test.war,把它复制放到到安卓的ijetty/webapps下,重启ijetty服务器后,有些手机就可以看到效果了。


    2、解决HTTP ERROR: 503 SERVICE_UNAVAILABLE

    这个问题百度、谷歌后,基本没人回答的出来,当然问的人也少,我也是最后看到了log之后才知道原因的,以下原因分析:

    先看log:

    Failed startup of context o.e.j.w.WebAppContext{/Test,[file:/data/data/org.mortbay.ijetty/cache/jetty-0.0.0.0-8080-Test.war-_Test-any-/webinf/, jar:file:/storage/emulated/0/jetty/webapps/Test.war!/]},file:/storage/emulated/0/jetty/webapps/Test.war
    java.io.IOException: Couldn't open jar:file:/storage/emulated/0/jetty/webapps/Test.war!/WEB-INF/web.xml
    	at org.apache.harmony.xml.ExpatParser.openUrl(ExpatParser.java:755)
    	at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:292)
    	at javax.xml.parsers.SAXParser.parse(SAXParser.java:390)
    	at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:199)
    	at org.eclipse.jetty.xml.XmlParser.parse(XmlParser.java:215)
    	at org.eclipse.jetty.webapp.Descriptor.parse(Descriptor.java:60)
    	at org.eclipse.jetty.webapp.WebDescriptor.parse(WebDescriptor.java:143)
    	at org.eclipse.jetty.webapp.MetaData.setWebXml(MetaData.java:165)
    	at org.eclipse.jetty.webapp.WebXmlConfiguration.preConfigure(WebXmlConfiguration.java:55)
    	at org.eclipse.jetty.webapp.WebAppContext.preConfigure(WebAppContext.java:417)
    	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:453)
    	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    	at org.mortbay.ijetty.deployer.AndroidWebAppDeployer.scan(AndroidWebAppDeployer.java:203)
    	at org.mortbay.ijetty.deployer.AndroidWebAppDeployer.doStart(AndroidWebAppDeployer.java:63)
    	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    	at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:63)
    	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53)
    	at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91)
    	at org.eclipse.jetty.server.Server.doStart(Server.java:263)
    	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    	at org.mortbay.ijetty.IJettyService.startJetty(IJettyService.java:704)
    	at org.mortbay.ijetty.IJettyService$JettyStarterThread.run(IJettyService.java:159)
    Caused by: java.util.zip.ZipException: Local File Header signature not found; was F0C75E71
    	at java.util.zip.ZipFile.throwZipException(ZipFile.java:427)
    	at java.util.zip.ZipFile.getInputStream(ZipFile.java:283)
    	at java.util.jar.JarFile.getInputStream(JarFile.java:389)
    	at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222)
    	at org.apache.harmony.xml.ExpatParser.openUrl(ExpatParser.java:753)
    	... 21 more

    上面说IO流出错,Test.war的WEB-INF目录下的web.xml文件无法打开,其实原因很简单,这里是因为程序没有读SD卡权限造成的,谷歌在安卓4.1后加入了读SD卡权限,刚好我使用的模拟器是4.4版本,而且刚好iJetty也没有加入读SD卡权限,所以会报错,所以加上读SD卡权限后,问题解决,完成!!!





    展开全文
  • 4.打完收工,作品完成好 了至此最简单蓝牙开关就做好了,可以躺在床上遥控在远处风扇了(好吧你们都用的是空调,当我没说!),定时关机(这个功能没,不过原理都一样,自由 发挥了),其他神马!感兴趣...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    用例只描述参与者和系统在交互过程中什么,并不描述怎么例图 关联关系 例图 泛化关系 例图 泛化关系 例图 例图 例图 用例用于什么情况? 不知道什么情况不用用例 如果没有用到用例,...
  • 软件工程-个人作业三

    2017-04-09 21:10:00
    我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票网站,互相联系用的微信、QQ,等等是软件,很值得分析。你为何成为它们用户?它们团队对了什么错了什么?如果你来...

    个人博客作业三:微软小娜APP的案例分析

        我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票的网站,互相联系用的微信、QQ,等等都是软件,都很值得分析。你为何成为它们的用户?它们的团队做对了什么,做错了什么?如果你来做,会做得更好么?

        通过各种案例分析,评测,辩论,总结,我们就能看到软件工程的原则在实践中的种种体现,学好软件工程,帮助我们在实践中做得更好。

    产品

       请下载 微软小娜-智能助手,win10,iOS或Android客户端都有!

    第一部分调研,评测

    (软件的bug,功能评测,黑箱测试, 第8章 用户调研, 12 章 软件的用户体验)

    1.    下载并使用,描述最简单直观的个人第一次上手体验。

           总的来说这个软件功能还是很全面的,打开软件页面加载慢,使用不便皆,注册步骤麻烦,软件识别麦克风不好用,在识别用户语言命令时容易出错,

    一下图片是微软小娜功能截图拼图。

     

     

    2.    按照《构建之法》13.1节描述的 bug 定义, 找出几个功能性的比较严重的 bug,至少2个。

              微软小娜的bug有win10 开始菜单和小娜打不开的bug,安卓是开放平台,很多app需要系统权限,就导致了一些APP和小娜的麦克风、语音功能受到冲突,就不能正常使用了

    3.    用专业的语言描述 (每个bug 不少于 40字),如有必要, 可以配图。

         bug(漏洞),原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。

    微软小娜的bug有win10 开始菜单和小娜打不开的bug,安卓是开放平台,很多app需要系统权限,就导致了一些APP和小娜的麦克风、语音功能受到冲突,就不能正常使用了

    4.    相信每个同学的朋友中一定有人需要用这样的软件, 选择一个朋友(用户)进行采访,并加以记载。

    我:你认为微软小娜对你的作用大吗?

    a:微软小娜使用很方便,作用很大,功能很齐全。

    我:你认为它有什么不足之处吗?

    a:个人觉得软件的反应速度不是很好,还有就是识别用户的需求不是很准确。希望继续改进。

    5.    提示: 采访提要

           采访是想要看看用户对微软小娜软件的使用满意程度和意见方便改进。

    5.1. 介绍采访对象的背景和需求(他们为何要使用该软件)

          微软小娜的事件卡片和日程提醒还是很方便的,因为它能调用手机中其它软件的数据,比如说,我新建一个日程:到超市提醒我买牙膏,当我到超市时就会提醒我。

    5.2. 让采访对象使用10 – 30 分钟该APP的功能 (请上传照片证明用户的确正在使用, 远程采访的同学请让别人帮忙照相)

    5.3. 描述用户使用这个产品的过程,用户的问题解决了么?软件在数据量/界面/功能/准确度上各有什么优缺点?用户体验方面有问题么?

    5.4. 用户对产品有什么改进意见?

           这款软件已经做得很好了,顶多把识别用户语音方面该进一下。

    5.5. 结论:经过这么多工作,你一定有充分的理由给这个软件下一个评价:

    •     非常不推荐

    •     不推荐

    •     一般

    •     好,不错

    •     非常推荐

      个人觉得这个软件好,不错。

    第二部分分析

    (参考《构建之法》 8.6 节 对工作的估计, 和14.1 节 软件工程的质量)

    1.    使用此软件的所有功能,估计这个项目做到这个程度大约需要多少时间 (团队人数6 人左右, 计算机大学毕业生, 并有专业UI 支持)。

    如果是做成一个类似于小娜的软件,在专业UI支持的情况下,大约八周的时间。

    2.    分析这个软件目前的优劣 (和类似软件相比,至少对比2款软件), 推理出这个软件团队在软件工程方面可以提高的重要方面 (具体建议)。要求把对比的结果列出一个表格,对比每个软件各自的优点和缺点。

     

    3.    [附加题] 根据理解和体验,画出整个软件所有功能逻辑框图,根据重要度标识出各模块的重要度、完成度、出发点及效果;

    4.    [附加题] 针对不同的维度评分,对用户体验方面、UI界面美观度、核心功能,分别打分(能给出更详细的评分更优)。

    第三部分建议和规划

    (参考《构建之法》第8章功能的定位和优先级;第9章项目经理)

    1.    如果你是项目经理,如何提高从而在竞争中胜出?

     加强应用语音功能

    2.    目前市场上有什么样的产品了?

    安卓的语音助手和苹果的Siri

    3.    你要设计什么样的功能?

    可以不用手指全程使用语音操作手机。

    4.    为何要做这个功能,而不是其他功能?

    受蓝牙耳机的启发,在一些时候,比如开车、跑步等时候不方便操作手机,而设定固定的开始命令和结束命令可以全程使用语音操作手机。

    5.    为什么用户会用你的产品/功能?

    因为我的app使用更便捷,全面。

    6.    你的创新在哪里? 请使用 NABCD 分析

     

    ( http://www.cnblogs.com/xinz/archive/2010/12/01/1893323.html ).

    7.    如果你来领导这个团队,会有什么不一样?

    应该会更适用于大学生和上班族。

    8.    如果你的团队有5个人, 4个月的时间,你作为项目经理,应该如何配置角色(开发,测试,美工等等)?

    9.    描述你的团队在12 周期间每周都要做什么,才能在第12周如期发布软件,大小里程碑绩点设定.

    博文要求

       通过分析该APP,结合阅读《构建之法》,写一篇随笔,包含上述三个环节的所有要求。

    本次作业分析得好的同学,可以获得微软产品经理的反馈,以及微软公司的礼物,同学们加油啊!

    参考链接

    http://www.cnblogs.com/schaepher/p/6535800.html

     

    转载于:https://www.cnblogs.com/yf-140201220/p/6686395.html

    展开全文
  • 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票网站,互相联系用的微信、QQ,等等是软件,很值得分析。你为何成为它们用户?它们团队对了什么错了什么?如果你来,...
  • 1、查看手机使用记录如果你的手机借给了他人,或者想查看自己男/女朋友用用是搜及了些什么?使用了哪些应用?只要在拨号键盘中输入「*#*#6130#*#*」,即可查看手机的统计数据。2、检测手机真假不论...
  • 给专家准备笔记本是Lenovo笔记本,昭阳E390,这个本子好不好先不说了,我就怀疑为什么每个本子带了一个正版金山毒霸?和Lenovo工程师聊天,才知道Lenovo已经在KingSoft有了50%股份,一家人哦,当然...
  • 1、制作安卓手机能识别的war包声明:直接Eclipse导出的war包,安卓手机是无法解析的,原因是安卓的java虚拟机是谷歌自己写的,安卓开发的人知道为什么,就不说明了。(1) 把web工程的lib下的...
  • 另外xmlparser类在手机上运行完美,在2.3.3模拟器上就没法拿到更新时间也就是xml文件注释,不知道为什么。 明明其他信息解析起来没有问题。 之后学了选项卡,把下半屏上,用来显示那些温馨提示。 ...
  • 问题: 师兄,当时你们做的项目是什么,有多少用户, 现在还有人吗? 李权师兄: 当时我们项目名是约跑APP,当时用户有8人。在用户的手机上测试通过,能让用户找到一起跑步小伙伴。现在已经没有人了。 ...
  • 什么红米发布会开完,很多人在揪着红米K30 Pro不放呢;先是60Hz刷新率被抓着不放,一遍一遍吐槽;接着又是跌摔测试中被人发现手机方面、位置和友商不同;还有就是低配版LPDDR4x+UFS3.0,又被吐槽一遍...
  • 弹窗方式为JOptionPane类中的showXXXX()方法,JFrame、jswing中等弹窗都用了,但是都不行,各位还有什么高招指导一下吧,万分感谢。 问题很着急,各位朋友懂不懂的都可以发表一下看法,没有多少积分给大家,很抱歉...
  • 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票网站,互相联系用的微信、QQ,等等是软件,很值得分析。你为何成为它们用户?它们团队对了什么错了什么?如果你来...
  • 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票网站,互相联系用的微信、QQ,等等是软件,很值得分析。你为何成为它们用户?它们团队对了什么错了什么?如果你来,...
  • 我们生活中很多时候要和软件打交道,大家上课开小差时候玩的手机游戏,买火车票网站,互相联系用的微信、QQ,等等是软件,很值得分析。你为何成为它们用户?它们团队对了什么错了什么?如果你来,...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 143
精华内容 57
关键字:

做工程的都用什么手机