项目中需要生成PDF和Word文件的报告,文件中包含图片和表格。基于Java的解决方案有Freemarker模板引擎,是通过XML文件将填入的内容放上\${}占位符。这种方式对于简单的文本是没问题,但如果占位符中有字符跟\${}冲突,就比较难处理了。

iReport是一款可视化报表设计工具,看软件界面跟Qt的风格有几分相似,内置丰富的图表,能够创建复杂的报表。相比XML模板的方式,更加灵活和稳定。

  • 主界面

本文以一个实际的导出PDF报告案例来讲解。

阅读全文 »

家里的iMac是2013年买的,曾记得当年是自己开发的一款android程序在中国移动APP大赛上取得前十,这台imac就是用这笔奖金买的。小小的回忆下,虽然这款app已经没有接着开发了,想当初也是投入了满腔的热血加入移动开发的大营^_^。

如今iMac升级了好几代,但硬盘居然还是传统的机械硬盘,当然也有FusionDrive和SSD,但需要加钱。
最新的imac除了显示器升级到视网膜屏外,其它的外观基本没什么变化,自家的老款imac仍然可以来装装*,除了运行速度越来越慢~~~

开机启动要个3-5分钟,打开chrome,docker上的chrome图标要跳个30s左右才能完全把chrome打开,体验速度已经到了无法忍受的地步了!
用DiskSpeedTest测试硬盘的读写速度:

阅读全文 »

在mac和window测试环境下调试均无问题,但部署到centos下生成报告时报如下错误:

1
2
11:07:19.093 ERROR c.d.f.report.controller.ProductDetailController - 生成报告失败,
失败原因:Font 'STZhongsong' is not available to the JVM. See the Javadoc for more details.

按照错误提示,把STZHONGS.ttf字体复制到centos的fonts中,按照如何给CentOS安装字体库中的方法,

1
2
3
4
5
mkfontscale

mkfontdir

fc-cache -fv

执行完成后,还是不行。

阅读全文 »

mac版 eclipse 只能run不能debug的解决方案

mac:macOS Sierra 10.12.2
eclipse:Version: Neon.1a Release (4.6.1)

debug时进度一直停在93%,然后超时报错:

1
2
3
4
ERROR: transport error 202: gethostbyname: unknown host
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

分析错误提示,是找不到主机host,google一下,在stackoverflow找到了解决方案,在hosts中加入

1
127.0.0.1	localhost

阅读全文 »

制作分布图类似密度图,在python中利用pandas来提取分布数据是比较方便的。主要用到pandas的cut和groupby等函数。

第一步,从数据库中提取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas
from sqlalchemy import create_engine
host_mysql_test = '127.0.0.1'
port_mysql_test = 3306
user_mysql_test = 'admin'
pwd_mysql_test = '1234'
db_name_mysql_test = 'mydb'
engine_hq = create_engine('mysql+mysqldb://%s:%s@%s:%d/%s' % (user_mysql_test,
pwd_mysql_test,
host_mysql_test,
port_mysql_test,
'hq_db'), connect_args={'charset': 'utf8'})

sql = "SELECT * FROM fund_data where quarter>=8 order by yanzhi desc"
df = pd.read_sql(sql, engine)
#将yanzhi数据转换为百分比
df['yanzhi'] = df['yanzhi'].apply(lambda x: x * 100)

第二步,面元划分

阅读全文 »

scrapy爬虫写好后,需要用命令行运行,如果能在网页上操作就比较方便。scrapyd部署就是为了解决这个问题,能够在网页端查看正在执行的任务,也能新建爬虫任务,和终止爬虫任务,功能比较强大。

一、安装

1,安装scrapyd

1
pip install scrapyd

2, 安装 scrapyd-deploy

1
pip install scrapyd-client

windows系统,在c:\python27\Scripts下生成的是scrapyd-deploy,无法直接在命令行里运行scrapd-deploy。
解决办法:
在c:\python27\Scripts下新建一个scrapyd-deploy.bat,文件内容如下:

1
2
@echo off
C:\Python27\python C:\Python27\Scripts\scrapyd-deploy %*

添加环境变量:C:\Python27\Scripts;

阅读全文 »

IOS开发中需要为创建的数据保存到网络后台长久存储,刚开始想到的是直接连接mysql,但要在ios中安装mysql的控件,实在是麻烦。于是定义一个restful接口,通过http请求的方式来上传和获取数据,是一种比较方便的方式。
本文是基于Django框架,实现以下几个功能:

  • Model和ModelForm创建表单
  • POST上传图片

一、建立Model与mysql连接

1,定义model

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# models.py

from django.db import models
from django.utils.timezone import now

# Create your models here.
class CureData(models.Model):
STATUS_SIZES = (
(0, '进行中'),
(1, '已完成'),
)

name = models.CharField('名称', max_length=50)
cureDuration = models.IntegerField('时长')
create_at = models.DateTimeField("日期", default=now())
note = models.CharField('备注', max_length=200, blank=True)
image = models.ImageField('图片', upload_to='photos', blank=True)
operator = models.CharField('操作者', max_length=50, blank=True)
status = models.IntegerField('状态', default=0, choices=STATUS_SIZES) # 0,进行中; 1,已完成

class Meta:
ordering = ['create_at']

def __unicode__(self):
return self.name
阅读全文 »

Scrapy适合做全量爬取,但是,我们不是一次抓取完就完事了。很多情况,我们需要持续的跟进抓取的站点,增量抓取是最需要的。
Scrapy与Redis配合,在写入数据库之前,做唯一性过滤,实现增量爬取。


一、官方的去重Pipeline

官方文档中有一个去重的过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
from scrapy.exceptions import DropItem

class DuplicatesPipeline(object):

def __init__(self):
self.ids_seen = set()

def process_item(self, item, spider):
if item['id'] in self.ids_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.ids_seen.add(item['id'])
return item

官方的这个过滤器的缺陷是只能确保单次抓取不间断的情况下去重,因为其数据是保存在内存中的,当一个爬虫任务跑完后程序结束,内存就清理掉了。再次运行时就失效了。

二、基于Redis的去重Pipeline

阅读全文 »

一年多没接触xcode了,这一年主要用python做开发,刹一接触xcode代码,还是有点陌生的感觉。在网上闲逛了一通,发现网上的ios教程用swift编写的比oc的多多了。看来苹果的swift推广的比较好。我偶尔写写简单的app,objective-c用过一段时间,这次还是用oc,swift等有时间了好好研究一下。
前段时间有朋友让做一个ipad程序,用webview封装一个网站,实现一个独立的app应用。
功能虽然简单,实现起来发现ios开发的好些功能都有涉及,丢了一年的ios开发中的概念捡起来不易,于是记录下来,以免后面重复造轮子时又忘了。

主要功能介绍:

  • 自适应iphone和ipad
  • 屏幕翻转自适应拉伸
  • 自定义导航栏返回按钮
  • 网页加载进度条显示
  • 主屏幕左滑后退
阅读全文 »

一、简介

G2是阿里巴巴内部开放的数据可视化工具,提供丰富的图表类型,并且简单易上手,有比较完善的示例代码。其生成的图表简单漂亮,而且有JS互动显示,比较适合报告和文章插图。G2的数据来源是json格式数据。

G2绘制的图形

python的pandas库比较擅长对数据处理和分析,其DataFrame生成json也很方便。pandas自身集成了matplotlib的绘图功能,但是绘制的图形没有G2美观。

阅读全文 »