2018年3月31日星期六

开源美图 2018 04 01


Linuxeden 开源社区 --

The post 开源美图 2018 04 01 appeared first on Linuxeden开源社区.

https://ift.tt/2Gl9Jim

DataGrip 2018.1 首个候选版发布,包含多项修复


Linuxeden 开源社区 --DataGrip
DataGrip

DataGrip 2018.1 首个候选版发布了,此版本做了多项修复:

  • DBE-6115: 使用水平分割时,从编辑器中滚动。
  • DBE-3548: PostgreSQL 中的序列起始号码是正确的。
  • DBE-6104: 在 H2 中删除多个列。
  • DBE-5081: 支持 REST 客户端插件。
  • DBE-3260: 为数据源的 SSH 配置设置了默认值。

详情见 发布公告下载地址

转自 https://ift.tt/2pQu3ht

The post DataGrip 2018.1 首个候选版发布,包含多项修复 appeared first on Linuxeden开源社区.

https://ift.tt/2Ja5sML

操作系统兼容层 Wine 3.5 开发版发布,支持 RSA 等密钥


Linuxeden 开源社区 --Wine
Wine

Wine 3.5 发布了。

更新:

  • 更多的 Vulkan 支持,包括 vulkan-1 加载。
  • 支持 RSA 和 ECDSA 密钥。
  • 改进 manifest 文件解析器。
  • 在文件对话框中支持 Places 工具栏。
  • 修复多处 bug。

详情见发布公告:https://www.winehq.org/announce/3.5
下载地址:https://wiki.winehq.org/Download

转自 https://ift.tt/2pUVru0

The post 操作系统兼容层 Wine 3.5 开发版发布,支持 RSA 等密钥 appeared first on Linuxeden开源社区.

https://ift.tt/2E9G6e9

Node.js 多 SQL 语言 ORM Sequelize v4.37.5 发布


Linuxeden 开源社区 --Sequelize

Sequelize

Node.js 的多 SQL 语言 ORM Sequelize v4.37.5 发布。

下载地址:

Bug 修复:

  • query-generator: 1-to-many join in subQuery filter missing where clause (#9228) (#9247) (3b623cb)

详情见 发布公告

Sequelize 是一个 Node.js 的方便使用的多 SQL 语言 ORM。

转自 https://ift.tt/2J97wnT

The post Node.js 多 SQL 语言 ORM Sequelize v4.37.5 发布 appeared first on Linuxeden开源社区.

https://ift.tt/2J7N1Is

CoffeeScript 2.2.4 支持 ES2018 正则表达式 dotall 标志


Linuxeden 开源社区 --CoffeeScript
CoffeeScript

CoffeeScript 2.2.4 (#5025) 发布。

下载地址

更新

  • 修复#4877:指数运算符(#4881)
  • 支持 ES2018 正则表达式 dotall 标志

转自 https://ift.tt/2pTwHmG

The post CoffeeScript 2.2.4 支持 ES2018 正则表达式 dotall 标志 appeared first on Linuxeden开源社区.

https://ift.tt/2pUjSZl

CoffeeScript 2.2.4 支持 ES2018 正则表达式 dotall 标志


Linuxeden 开源社区 --
CoffeeScript

CoffeeScript 2.2.4 (#5025) 发布。

下载地址

更新

  • 修复#4877:指数运算符(#4881)
  • 支持 ES2018 正则表达式 dotall 标志

转自 https://ift.tt/2pTwHmG

The post CoffeeScript 2.2.4 支持 ES2018 正则表达式 dotall 标志 appeared first on Linuxeden开源社区.

https://ift.tt/2GrPEDh

Aurelia FrameWork 1.2.0 发布,JavaScript 客户端框架


Linuxeden 开源社区 --Aurelia
Aurelia

下一代 JavaScript 客户端框架 aurelia 的 framework 模块更新到 1.2.0,在 developmentLogging() 中支持可选日志级别参数。

下载地址

aurelia-framework 1.2.0

特性

  • 日志:在 developmentLogging() 中支持可选日志级别参数。 (7962912)

发布公告

转自 https://ift.tt/2pXfyaH

The post Aurelia FrameWork 1.2.0 发布,JavaScript 客户端框架 appeared first on Linuxeden开源社区.

https://ift.tt/2Gpnbhd

React 服务器渲染框架 next.js 6.0.0-canary.1 发布


Linuxeden 开源社区 --Next.js
Next.js

React 应用服务器渲染框架 next.js 6.0.0-canary.1 发布,此次更新新增多个 example 。

下载地址

补丁

  • 在 custom-server-typescript 示例修复中升级 @ zeit / next-typescript: #4071069f45d
  • 在 with-typecript 示例中升级 @ zeit / next-typescript: 69ca73c
  • 更新 standard.js: #4064
  • 更新示例 with-apollo: #4067
  • 新示例 with-now-env: #4073
  • 添加关于 getConfig 的说明: cfe748d
  • 新增 with-google-analytics 示例: #4036
  • 添加缺失的 url 工具: #4078
  • 修复 readme 中的错别字:#4083
  • 在 error 中使用 printAndExit: #4086
  • 重写 with-apollo-auth:#4070

详情见 发布公告

转自 https://ift.tt/2Gp5eDF

The post React 服务器渲染框架 next.js 6.0.0-canary.1 发布 appeared first on Linuxeden开源社区.

https://ift.tt/2pSIVvU

JeeSite 4.0.1 发布,企业级快速开发平台


Linuxeden 开源社区 --

新增

  • 新增:国际化登录相关和错误页面信息(中文、英文)
  • 新增:数据表格实例,多表头、行分组、合计行、小计行、编辑表格,实例
  • 新增:表单组件实例,栅格布局(一列、两列、三列、四列),组件应用实例
  • 新增:日志查询,表增加执行时间记录字段,分析页面的执行效能
  • 新增:CookieUtils.getCookie() 增加 path 参数
  • 新增:支持 Oracle、SqlServer、PostgreSQL 数据库
  • 新增:zTree 增加扩展方法 expandNodeByLevel 方便根据层级展开节点
  • 新增:接口 API,获取用户权限信息:/a/authInfo;获取用户菜单信息:/a/menuTree

修正

  • 修正:DataGrid 冻结行的时候超连接未绑定 btnList 事件问题
  • 修正:Excel 导入导出中的 DictUtils 反射方法参数顺序不对问题 #IINDU

优化

  • 优化:Spring Boot 1.5.9 升级 1.5.10
  • 优化:错误页面优化、升级 beetl 2.7.26
  • 优化:手机端 API 接口测试优化,支持验证码登录
  • 优化:解压 war 包后可直接执行 startup.bat 运行项目
  • 优化:一些体验和性能优化

了解更多:

转自 https://ift.tt/2GoH2Bl

The post JeeSite 4.0.1 发布,企业级快速开发平台 appeared first on Linuxeden开源社区.

https://ift.tt/2Iiuc42

每日文章精选 2018 03 31


深入浅出设计模式——从球赛中悟代理模式


Linuxeden 开源社区 --
摘要: 代理模式提供了通过代理对象访问目标对象的访问方式。

一、代理模式概念

所谓代理模式,看名字大家就知道是通过代理类来间接的访问目标对象。

在足球比赛中一个比较形象的反映就是:主教练把队长(或其他队员,这里就指定为队长吧)叫到场边告诉他:叫 XXX 参与防守或叫 XXX 压上进攻。这时:队长就是代理类,而 XXX 就是主教练想要访问的目标对象。下面就基于以上场景来理解代理模式。

二、使用场景

在一个对象不适合或者不能直接引用另一个对象时,我们可以使用代理模式来创建代理类在客户端和目标对象之间起到中介的作用。

三、结构

代理模式由三个部分组成:

1. 接口(Action):代理类与目标对象共同实现同一个接口。

2. 代理类(Captain):由他来代理向两个目标对象传递指令。

3. 目标对象(Player):具体执行命令的对象。

四、实现

开始上干货了。

1. 定义接口

public interface Action {

    void attack();  //进攻方法 

    void control(); //控制球权方法 

    void defend(); //防守方法 

}

接口中定义了三个球员的行动:进攻,控制和防守。

2. 定义实际访问对象

public class PlayerA implements Action {

    @Override
    public void attack() {
        System.out.println("playerA 开始进攻");
    }

    @Override
    public void control() {
        System.out.println("playerA 控制球权");
    }

    @Override
    public void defend() {
        System.out.println("playerA 参与防守");
    }

}
public class PlayerB implements Action {

    @Override
    public void attack() {
        System.out.println("playerB 开始进攻");
    }

    @Override
    public void control() {
        System.out.println("playerB 控制球权");
    }

    @Override
    public void defend() {
        System.out.println("playerB 参与防守");
    }

}

这里我们定义了两个访问对象,球员 A 和球员 B,他们都实现了 Action 接口,并对接口方法做了重写。

3. 定义代理类

public class Captain implements Action {

    private Action action;

    Captain(Action action) {
        this.action = action;
    }


    @Override
    public void attack() {
        System.out.println("教练下命令了,叫你进攻。");
        action.attack();
    }

    @Override
    public void control() {
        System.out.println("教练下命令了,叫你控制球权。");
        action.control();
    }

    @Override
    public void defend() {
        System.out.println("教练下命令了,叫你参与防守。");
        action.defend();
    }
}

队长是我们的代理人,他也实现了 Action 接口,并且提供了一个构造方法,传入 Action 并将其赋值到成员变量。他所要实行的 Action 方法实际是通过成员变量 action 来实现的。

4. 外部访问对象

public class Coach {

    public static void main(String args[]) {

        PlayerB playerB = new PlayerB();
        PlayerA playerA = new PlayerA();
        
        //队长,你让 B 开始进攻 
        Captain captain = new Captain(playerB);
        captain.attack();
        
        //队长,你让 A 参与防守 
        captain = new Captain(playerA);
        captain.defend();
    }

}

好了,现在教练要开始下命令了。先看一下执行结果:

可以看出我们访问的方法都来自 captian,但是实际执行这些方法都确实球员 A 和球员 B,catpian 很好的扮演了传话筒的角色,并且我们还可以看出 caption 在原方法的基础上还做了一些添加。

这就是最简单的静态代理,这时候有人会有疑问了,如果传话的不是队长而是助理教练怎么办?助理教练又不具备 Action 三个方法,没有实现 Action 接口的话该怎么做。那么我们就需要要用到动态代理了。

五、动态代理

动态代理的特点就是代理类不需要实现接口,利用反射来动态的在内存中构建访问对象。JDK 中的 Proxy 为我们提供了生成代理对象的 API。球员 A,球员 B 和 Action 不做任何改变,下面我们直接开始制作新的代理类

public class Assistant<T> {

    //维护目标对象的 Class
    private Class<? extends T> tClass;
    public Assistant(Class<? extends T> tClass) {
        this.tClass=tClass;
    }

    //给目标对象生成代理对象 
    @SuppressWarnings("unchecked")
    public T getProxyInstance(){
        return  (T)Proxy.newProxyInstance(
                tClass.getClassLoader(),
                tClass.getInterfaces(),
                (proxy, method, args) -> {
                    System.out.println("开始传达指令");
                    //执行目标对象方法 
                    return method.invoke(tClass.newInstance(), args);
                }
        );
    }
    
}

现在代理者变成了助理,他没法在场上的行动所有没有实现 Action 方法,在构造方法中传入一个目标对象的 Class,然后通过 Proxy 的 newProxyInstance 方法动态代理生成目标对象。

好了,现在教练要下达指令了。

public class Coach {

    public static void main(String args[]) {
        //助理,准备给 A 球员下达指令。
        Assistant<Action> actionAssistant = new Assistant<>(PlayerA.class);
        Action action = actionAssistant.getProxyInstance();

        //让 A 球员进攻 
        action.attack();
    }
}

可以看出,我们给 Assistant 了一个目标对象的 Class 然后通过 getProxyInstance 拿到目标对象实现的接口,通过接口得到想要的操作。我们来看一下结果。

代理成功,动态代理要注意的一点是,目标对象必须要实现一个接口,否则动态代理无效。

六、优势

前文我们说到,在一个对象不适合或者不能直接引用另一个对象时我们可以通过代理模式建立一个中介类来将两个对象联系起来,并且对目标对象起到了保护作用。我们还可以通过代理模式对原有方法进行加工具有很好的扩展性。

七、局限

由于在客户端和真实对象之间增加了代理对象,可能导致访问速度变慢。代理模式实现起来比直接访问目标对象复杂,增加工作量。

当然,还是那句话:世界上没有十全十美的模式,每个设计模式都有它适用的地方,只要我们的使用方式得当,那么装饰者模式可以帮助我们写出漂亮优雅的代码。

转自 https://ift.tt/2GHmG5G

 

The post 深入浅出设计模式——从球赛中悟代理模式 appeared first on Linuxeden开源社区.

https://ift.tt/2pWushp

你没听过的 10 个免费的 Linux 生产力应用程序


Linuxeden 开源社区 --

高效率的应用程序确实可以让你工作变得更轻松。如果你是一位 Linux 用户,这 10 个不太知名的 Linux 桌面应用程序可以帮助到你。事实上,Linux 用户可能已经听说过这个列表上的所有应用,但对于那些只用过主流应用的人来说,应该是不知道这些应用的。

1. Tomboy/Gnote

Tomboy 是一个简单的便签应用。它不仅仅适用于 Linux,你也可以在 Unix、Windows 和 macOS 上获得它。Tomboy 很容易使用——你写一个便条,选择是否让它粘贴在你的桌面上,当你完成它时删除它。

2. MyNotex

如果你想要一个更多功能的便签,但是仍喜欢一个小而简单的应用程序,而不是一个巨大的套件,请看看 MyNotex。除了简单的笔记和检索之外,它还带有一些不错的功能,例如格式化、键盘快捷键和附件等等。你也可以将其用作图片管理器。

3. Trojitá

尽管你可以没有桌面电子邮件客户端,但如果你想要一个的话,在几十个的桌面电子邮件客户端里,请尝试下 Trojita。这有利于生产力,因为它是一个快速而轻量级的电子邮件客户端,但它提供了一个好的电子邮件客户端所必须具备的所有功能(以及更多)。

4. Kontact

个人信息管理器(PIM)是一款出色的生产力工具。我的个人喜好是 Kontact。尽管它已经有几年没有更新,但它仍然是一个非常有用的 PIM 工具,用于管理电子邮件、地址簿、日历、任务、新闻源等。Kontact 是一个 KDE 原生程序,但你也可以在其他桌面上使用它。

5. Osmo

Osmo 是一款更先进的应用,包括日历、任务、联系人和便签功能。它还附带一些额外的功能,比如加密私有数据备份和地图上的地理位置,以及对便签、任务、联系人等的强大搜索功能。

6. Catfish

没有好的搜索工具就没有高生产力。Catfish 是一个必须尝试的搜索工具。它是一个 GTK+ 工具,非常快速,轻量级。Catfish 会利用 Zeitgeist 的自动完成功能,你还可以按日期和类型过滤搜索结果。

7. KOrganizer

KOrganizer 是我上面提到的 Kontact 应用程序的日历和计划组件。如果你不需要完整的 PIM 应用程序,只需要日历和日程安排,则可以使用 KOrganizer。KOrganizer 提供快速的待办事项和快速事件条目,以及事件和待办事项的附件。

8. Evolution

如果你不是 KDE 应用程序的粉丝,但你仍然需要一个好的 PIM,那么试试 GNOME 的 Evolution。Evolution 并不是一个你从没听过的少见的应用程序,但因为它有用,所以它出现在这个列表中。也许你已经听说过 Evolution 是一个电子邮件客户端,但它远不止于此——你可以用它来管理日历、邮件、地址簿和任务。

9. Freeplane

我不知道你们中的大多数是否每天都使用思维导图软件,但是如果你使用,请选择 Freeplane。这是一款免费的思维导图和知识管理软件,可用于商业或娱乐。你可以创建笔记,将其排列在云图或图表中,使用日历和提醒设置任务等。

10. Calligra Flow

最后,如果你需要流程图和图表工具,请尝试 Calligra Flow。你可以将其视为开放源代码的 Microsoft Visio 替代品,但 Calligra Flow 不提供 Viso 提供的所有特性。不过,你可以使用它来创建网络图、组织结构图、流程图等等。

生产力工具不仅可以加快工作速度,还可以让你更有条理。我敢打赌,几乎没有人不使用某种形式的生产力工具。尝试这里列出的应用程序可以使你的工作效率更高,还能让你的生活至少轻松一些。


via: https://www.maketecheasier.com/free-linux-productivity-apps-you-havent-heard-of/

作者:Ada Ivanova 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux 中国 荣誉推出

The post 你没听过的 10 个免费的 Linux 生产力应用程序 appeared first on Linuxeden开源社区.

https://ift.tt/2pSxTGD

Element 2.3.2 发布,修复 Autocomplete 报错问题


Linuxeden 开源社区 --Element
Element

基于 Vue 2.0 的桌面端组件库 Element 2.3.2 发布,修复 Autocomplete 报错的问题。

下载地址:

更新:

  • 修复 Autocomplete 报错的问题,#10442

详情见 发布公告

转自 https://ift.tt/2pRUcfH

The post Element 2.3.2 发布,修复 Autocomplete 报错问题 appeared first on Linuxeden开源社区.

https://ift.tt/2H0cLFM

开源美图 2018 03 31


Linuxeden 开源社区 --

The post 开源美图 2018 03 31 appeared first on Linuxeden开源社区.

https://ift.tt/2uFjTF0

GNOME Shell 的内存泄露问题正在修复中,原因竟是……


Linuxeden 开源社区 --

上周我们 报道 过 GNOME Shell 被发现存在内存泄露的问题,现在官方开发团队已确认导致这个问题的原因 —— 忘记进行垃圾回收……GNOME 称目前正在修复该问题。

“触发垃圾回收能够将 GNOME Shell 使用的内存量减少到正常水平”

GNOME 开发者花了大约一周的时间来定位问题的根源,不过谢天谢地,内存泄漏的原因(看起来)已经确定。

GNOME 开发者 Georges Basile Stavracas 在仔细研究他在 GitLab 上关于 bug 的测试、检查和调查结果的过程中,似乎发现了导致这个 bug 的原因,“……有些问题伴随着垃圾回收器一起出现。”

Georges Basile Stavracas 表示,在他放弃寻找内存泄漏原因的所有希望之后,发现了一个非常有趣的行为,并且可以重现这个过程。他推断只有一系列相互依赖的对象的根对象被回收后,才能最终确定它的子对象/依赖对象会被标记为 GC 状态。

通过运行 GJS(GNOME 的 JavaScript 绑定)的垃圾回收器,Stavracas 称能够减少大约 250MB 的内存使用量(GNOME Shell 在启动时的消耗)。

不过目前关于这个 bug 的补丁尚未发布,依旧处于修复中的状态。所以不能确定下个月发布的 18.04 LTS 是否包含这个 bug 的修复,如果没有,只能期待后续的更新。

而 Ubuntu 17.10 和 Ubuntu 18.04 LTS 在 Launchpad 上关于 GNOME Shell 的内存泄露问题已被标记为“关键”和“高”优先级级别,这表明 Ubuntu 对这个问题足够关心,将会及时提供修补建议。

原文: omgubuntu 编译:开源中国    

转自 https://ift.tt/2GJRWRk

The post GNOME Shell 的内存泄露问题正在修复中,原因竟是…… appeared first on Linuxeden开源社区.

https://ift.tt/2pTvtHb