码迷,mamicode.com
首页 > 其他好文 > 详细

我们团队如何构建软件

时间:2014-12-18 15:21:25      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   io   使用   sp   on   文件   

  本文探讨的主要是互联网软体的构建,虽然文中提到的技术也可以用在传统脱机环境。

  我们都知道,在拥有互联网的情况下,构建软体最让人向往的方式应该是像web站点一样,我写了什么,用户不需要升级神马的,在浏览器刷新一下就能看到了,我们暂且称这种软体构建方式为web构建方式。他最大的特点有前后端分离,动态加载,即时交付(这包括软体本身和新的内容的分发),可控,维护方便。

  反观传统的软体构建方式,耗时耗力,而且基本都要自带精密的升级模块,bug报告模块,但这种软体提供的特性目前来讲是web方式构建的软体所没有的。原生的ui,更精良的用户体验,某些地方保持高度机密和性能。

  如果能结合两者的利处,相信是很好的。很多项目或者团队也做过这一方面的努力,就我所知的有道有个什么hex,包括qt自家的webengine。。。

  贴一张mac版的有道词典截图,windows版的不想安装,更不想使用,就不截图了

bubuko.com,布布扣

  从我个人的审美角度来讲,原生ui能给我更亲切更舒适的体验,而基于hex的windows版的有道词典,说实话,让我有点反感,感觉不伦不类。

   综上所述,我们发现当前大家几乎都是想依靠web来模拟native,即所谓的hybrid,将部分web无法表达的交给native。但如果我们反过来想想问题,native比web差的只是方便,而web则是不能,那我们何不补齐native相对于web差的那一部分。当然我们主要不是探讨native和web(htmlx)哪个更适合做ui,我倾向native,native的资源更加丰富,所以我们团队的解决方案是基于native补齐web构建方式的优点。

  我们选择了python作为我们的胶水语言,核心部分则是c和c++,但真的只是很少很少的一点核心部分,如果不是为了保密和性能的需要,可能我们都不会用c/c++。毕竟python带来的效率的提升真的很可观。而且它和c天成的交互能力实在让人印象深刻。

  我们将python解释器内嵌在一个c编写的很小的引导程序当中,这个c的引导程序只有一个功能,能够加载我们托管在http站点(或者其他比如ftp站点,任何可托管内容的地方)处的py脚本。我们约定这个脚本叫boot.py(或者pye,这是因为它可以支持加载加密压缩过的py脚本),这个引导程序启动boot模块里面的start函数,一个示例的boot.py会是这样。

__author__ = 'shawhen'

from PyQt5.QtWidgets import *


def start(*args):
    from . import main_window as m_main_window

    app = QApplication([])

    main_window = m_main_window.MainWindow()
    main_window.show()

    app.exec()
(实际上在我们的生产服务器上它是boot.pye文件,内容看起来是这样的:

0
?蘂8堰捋? 蔯=蘩q-?淅塯&Htk-v??搖:2E榁冖觻檾绅潎弾[EQoL??^己?=砚}詅瀳dLJ璡>=祢紆?窦聱<傫娓靿爒?镶?鷴皀*E
鱟Ag塼L?2埮鰊?c?玭 淫!硲W母pmk
屆OA硶7洒?衉<舺绫k鐖&偸礎讳相G!閑;洠Jf7吐M,跒Q濗S?

)

在引导程序里面,也只是很少的一些代码:

#include <python_importer_loader.h>

#include <stdio.h>
#include <stdlib.h>


int main(int argc,char** argv)
{
    char whats_wrong[4096] = {0};
    int exit_code = 0;

    python_importer_init(__WEB_IMPORTER__ | __LOCAL_IMPORTER__, 3004002);
    python_importer_enable_crypto(1, "your password here", strlen("your password here"));
    python_importer_register_domain("your.domain.here", "http");
    python_importer_load("your.domain.here.boot", argc, argv, whats_wrong);

    exit_code = python_importer_exit();

    return (exit_code);
}

  是的,我们依靠Qt的Python绑定版PyQt作为ui库,这会使得我们使用Python构建出native的应用。和传统python程序不同的地方就在于这些脚本像web站点一样,托管在远程服务器上。我们不需要主动去更新用户的xx文件,将新的脚本放在服务器上就好了。使用这个程序,就像浏览一个web站点一样,但用户获得的体验是完全的native。甚至于我可以随意加载系统动态链接库,实现一个系统刚刚发布的新的api,而这些在现有的web中是几乎不可能的。

  当然,即使没有这个c的引导程序,我们也一样可以获得这种魔法,我们将这个c的引导程序和它真正做的事情托管在github的这里:https://github.com/shawhen/pywebimporter

  当然,还有更多的事情等待我们去做,这只是一个开始。

我们团队如何构建软件

标签:style   blog   http   ar   io   使用   sp   on   文件   

原文地址:http://blog.csdn.net/yuxiaohen/article/details/42003877

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!