add project_match

This commit is contained in:
zhanyun 2015-12-01 10:37:18 +08:00
parent 50de54b7e7
commit 41ffbe8b74
86 changed files with 289444 additions and 953 deletions

7
.gitignore vendored
View File

@ -99,4 +99,9 @@
/webmagic-t/webmagic-t/.classpath
/webmagic-t/webmagic-t/log
/webmagic-t/webmagic-t/target
/webmagic-t/webmagic-t/.settings/
/webmagic-t/webmagic-t/.settings/
/project_match/target/
/project_match/log/*
/project_match/.settings/
/project_match/.classpath

23
project_match/.project Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>EDBD</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.GatherProjects apache_projects_to_gather_projects >>log/apache_projects_to_gather_projects.log 2>&1 &

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.GatherProjects freecode_projects_to_gather_projects >>log/freecode_projects_to_gather_projects.log 2>&1 &

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.GatherProjects openhub_projects_to_gather_projects >>log/openhub_projects_to_gather_projects.log 2>&1 &

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.GatherProjects oschina_projects_to_gather_projects >>log/oschina_projects_to_gather_projects.log 2>&1 &

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword_1.dic;code_keywords.dic;stopword.dic</entry>
</properties>

View File

@ -0,0 +1,2 @@
配置文件和main2012, quantitifier要在ik文件夹下
停用词要在src文件夹下

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.ossean"/>
</beans>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!--SourceData -->
<bean id="dataSourceOne" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://192.168.80.104:3306/extract_result?characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true" />
<property name="username" value="influx" />
<property name="password" value="influx1234" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true"/>
</bean>
<bean id="sqlSessionFactoryOne" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceOne" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ossean.databaseSource" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryOne"></property>
</bean>
<!--DestData -->
<bean id="dataSourceTwo" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://192.168.80.130:3306/ossean_production?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true" />
<property name="username" value="trustie" />
<property name="password" value="1234" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true"/>
</bean>
<bean id="sqlSessionFactoryTwo" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceTwo" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ossean.databaseDest" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryTwo"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceOne" />
</bean>
</beans>

View File

@ -0,0 +1,697 @@
private
protected
public
abstract
class
extends
final
implements
interface
native
new
static
strictfp
synchronized
transient
volatile
break
continue
return
do
while
if
else
for
instanceof
switch
case
defult
catch
finally
throw
throws
try
import
package
boolean
byte
char
double
float
int
long
short
null
true
false
super
this
void
form
do
sourceforge
com
cn
www
http
js
script
a
test
error
exception
about
website
able
abstract
console
sql
windows
exe
txt
doc
xls
local
net
web
server
from
using
error
can
date
file
xml
can
system
url
value
create
text
set
get
list
table
select
distinct
object
open
close
clear
all
time
have
org
main
start
end
version
private
public
index
api
method
source
root
content
write
read
view
one
page
run
log
win
bin
first
next
src
app
request
println
namespace
printf
button
title
local
define
lib
make
files
help
article
bool
boolean
config
load
args
date
thread
cpu
more
document
util
info
home
style
body
print
hello
world
find
left
std
debug
etc
like
top
now
map
context
other
post
format
client
encoding
session
program
datebase
control
language
base
process
want
values
used
status
project
color
array
loaclhost
please
click
integer
example
archive
response
command
event
param
what
core
build
link
display
copy
stdio
release
mode
after
check
cpp
c
port
target
should
library
lib
tcp
udp
state
sum
free
last
connect
configuration
none
download
software
buffer
query
bit
temp
word
block
two
send
device
layout
sdk
cache
alert
see
change
work
kernel
filter
handel
save
tools
min
count
header
level
framework
sys
email
push
pull
heap
stack
user
must
demo
just
serach
res
tmp
down
option
img
network
model
stop
problem
position
node
space
login
font
todo
background
resource
mac
bytes
ios
empty
note
self
tag
column
studio
red
done
baidu
sleep
convert
global
field
reference
way
settings
simple
ctrl
wait
meta
edit
runtime
store
equals
services
bean
ftp
exec
non
enter
lock
admin
configure
png
jpg
abc
loop
vector
setup
mail
flag
machine
sample
share
image
ref
join
where
parameter
users
contain
know
template
class
math
pdf
parse
timeout
cat
through
basic
invoke
resources
media
uri
paltform
err
sudo
range
menu
mapping
tables
master
memset
reset
environment
pop
commit
report
task
active
domain
good
step
setting
day
hash
move
collections
phone
engine
callback
datetime
objects
mobile
profile
always
storage
alt
trim
applications
via
design
nothing
makefile
clean
small
solution
custom
people
projects
family
attributes
enum
own
works
messages
low
signal
browser
give
aaa
event
assert
look
company
person
either
case
desktop
touch
book
unit
docs
params
dump
pool
feature
hashmap
seconds
owner
goto
keys
editor
env
month
year
loading
changes
black
fetch
guide
enterprise
multi
foundation
reflect
unique
upload
play
idea
exist
elements
account
numbers
examples
plain
solid
game
hide
apps
symbol
layer
least
weight
beta
jpeg
attr
refresh
apply
focus
fun
cfg
threads
receive
recieved
easy
hard
mode
logs
password
passwd
packages
ignore
scripts
cell
later
plus
his
pub
going
logging
channel
think
serial
things
loader
player
libs
team
backup
conector
side
utf8
speed
doing
price
timestamp
repository
init
HelloWorld
tesing
scan
components
speed
unlock
products
mid
said
token
optional
today
rest
pack
coding
contain
points
days
safe
typeof
community
others
manual
sets
closed
fine
groups
specify
sources
workder
problems
perform
servers
articles
skip
blocks
connections
related
notify
onload
known
assembly
useful
monitor
thing
forum
come
notification
rules
developers
cross
notice
soft
progress
fork
hosts
logger
role
everything
future
references
jni
locale
follow
words
updates
necessary
writer
mouse
sign
repoter
containing
route
analysis
four
comments
programs
maps
turn
versions
drive
parser
track
money
utils
reload
decimal
resume
behavior
hand
board
light
regex
terminal
reduce
requests
fff
0xfffff
strong
edge
schedule
pair
swf
tom
dependency
rule
escape
hook
temporary
issues
exchange
review
various
life
friend
face
complex
readme
prop
expert
extend
often
automatic
capture
difference
scheme
develop
together
steps
reply
beginning
understand
identified
wall
along
market
minute
hour
university
plan
templates
codes
ccc
diff
ppt
study
abcd
lost
choice
explain
likely
guid
taken
period
FAQ
symbols
thus
tips
compute
school
languages
describe
resolution
deal
detect
yellow
hope
visit
xyz
iii
dog
jump
knowledge
publish
inserted
levels
chip
preference
done
adjust
earth
expressions
house
central
rich
chat
sessions
deep
when
where
how
who
仅供参考

View File

@ -0,0 +1,5 @@
sql server
web server
http server
linux kernel
face++

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">freecode_projects</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">deal_name,projectTitle,description,last_update_time,registered_time,followers_num,url,MD5(url),null,implementation,tags,null,null,null,null,visit_num,category,crawled_time,history,"FreeCode",license,operateSystem</entry>
<!-- <entry key="targetFields">url,crawled_time,tags,license,name,description,language,platform,source,registered_time,urlMD5</entry> -->
<entry key="targetFields">deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> AND projectTitle is not null AND description IS NOT NULL and projectTitle != '' and description != ''</entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="threshold" value="info" />
<param name="BufferSize" value="512" />
<param name="From" value="gcm365111@126.com" />
<param name="SMTPHost" value="SMTP.126.com" />
<param name="Subject" value="this is test" />
<param name="SMTPUsername" value="gcm365111@126.com" />
<param name="SMTPPassword" value="03023651gcm" />
<param name="to" value="gcm3651@126.com" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./log/info.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<root>
<level value="info" />
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
</log4j:configuration>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
</dataSource>
</environment>
</environments>
</configuration>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">openhub_project</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">null,name,description,last_update_time,firstCommitTime,followers_num,Url,MD5(Url),null,null,tags,contributorNum,null,null,null,null,null,null,null,"OpenHub",license,null</entry>
<entry key="targetFields">deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and name is not null and description is not null and name != '' and description != '' and codeLocation not like '%add a code location%' </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">oschina_project</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">deal_name,name,description,last_update_time,IncludedTime,followers_num,url,MD5(Url),pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,"OSChina",license,projectOS</entry>
<!-- <entry key="targetFields">url,crawled_time,tags,license,name,description,language,platform,source,registered_time,urlMD5</entry> -->
<entry key="targetFields">deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and projectTitle is not null and description is not null and projectTitle != '' and description != '' </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,316 @@
丈
世纪
位数
像素
克拉
公亩
公克
公分
公升
公尺
公担
公斤
公里
公顷
分钟
分米
加仑
千克
千米
厘米
周年
小时
平方
平方公尺
平方公里
平方分米
平方厘米
平方码
平方米
平方英寸
平方英尺
平方英里
平米
年代
年级
月份
毫升
毫米
毫克
海里
点钟
盎司
秒钟
立方公尺
立方分米
立方厘米
立方码
立方米
立方英寸
立方英尺
英亩
英寸
英尺
英里
阶段

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">sourceforge_project</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">null,name,description,last_update_time,registered_time,null,url,MD5(url),pageMd5,programmingLanguage,null,null,null,null,download_num,null,category,null,history,"SourceForge",license,platform</entry>
<entry key="targetFields">deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and name is not null and description is not null and name != '' and description != '' and (download_num>0 or stars>0) </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,36 @@
a
an
and
are
as
at
be
but
by
for
if
in
into
is
it
no
not
of
on
or
such
that
the
their
then
there
these
they
this
to
was
will
with
一个

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.GatherProjects sourceforge_projects_to_gather_projects >>log/sourceforge_projects_to_gather_projects.log 2>&1 &

View File

@ -0,0 +1,7 @@
#!/bin/bash
sh bin/openhub_projects_to_gather_projects.sh
sh bin/sourceforge_projects_to_gather_projects.sh
sh bin/freecode_projects_to_gather_projects.sh
sh bin/oschina_projects_to_gather_projects.sh

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.MergeProjects >>log/merge_projects.log 2>&1 &

View File

@ -0,0 +1,20 @@
#!/bin/bash
find ./target/classes -name "*.properties"|xargs rm -f
find ./target/classes -name "*.xml"|xargs rm -f
find ./target/classes -name "*.dic"|xargs rm -f
#export CLASSPATH=$CURR_DIR/lib:$CURR_DIR:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
tmp='./target/classes':$tmp
tmp='./target/EDBD-0.0.1-SNAPSHOT-jar-with-dependencies-without-resources/*':$tmp
tmp='./bin/resources':$tmp
CLASSPATH=$tmp:$CLASSPATH
echo $CLASSPATH
JVM_ARGS="-Xmn98m -Xmx512m -Xms512m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=2"
#echo JVM_ARGS=$JVM_ARGS
#ulimit -n 400000
#echo "" > nohup.out
java $JVM_ARGS -classpath $CLASSPATH com.ossean.TransferProjects >>log/transfer_projects.log 2>&1 &

View File

@ -0,0 +1,7 @@
oschina_project projectShortName null projectDesc
freecode_projects project_title tag project_des
openhub_project name tags description
sourceforge_project name null desc
apache project_name null project_descriprion
gna project_name null project_description
softpedia project_name tag project_description

View File

@ -0,0 +1,8 @@
is
was
are
am
were

View File

@ -0,0 +1,2 @@
and
or

View File

@ -0,0 +1,2 @@
The
the

View File

@ -0,0 +1,4 @@
known as
regarded as
called
named

View File

@ -0,0 +1,28 @@
project
application
app
apk
system
program
code
platform
software
tool
toolbox
plugin
website
lib
library
function
api
项目
应用
系统
平台
软件
代码
工具
插件
网站
函数

View File

@ -0,0 +1,31 @@
This
It
What
These
We
They
Here
There
I
You
He
She
That
Those
这个
那个
这些
那些
它们
你们
我们
他们
她们

View File

@ -0,0 +1,881 @@
=============================================================================================================
gThumb gThumb image viewer and browser 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: gThumb is an image viewer written for the GNOME environment. It lets you browse your hard disk, showing you thumbnails of image files. It also lets you view single files (including GIF animations), organize images in catalogs, print images, view slideshows, set your desktop background, and more. gThumb also supports Nautilus thumbnails.
----------------------------------------------------------------------------------------------------------------
OpenHub: gThumb is an image viewer written for the GNOME environment. It lets you browse your hard disk, showing you thumbnails of image files. It also lets you view single files (including GIF animations), organize images in catalogs, print images, view slideshows, set your desktop background, and more. gThumb also supports Nautilus thumbnails.
SourceForge: Image viewer and browser for the GNOME environment gThumb image viewer and browser Web Site
=============================================================================================================
JGame JGame - a Java engine for 2D games 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: JGame is a 2D game engine that makes multi-platform development easier. It runs on the Java JRE 1.3+ platform with optional OpenGL (JOGL) enhancements, the J2ME (MIDP2.0/CLDC1.1) mobile platform, and the Android (2.1+) platform. JGame features sprites with automatic animation and collision detection, a tile-based background with easy sprite-tile interaction facilities, automatic scaling, sound, game state, persistent storage, and game options. The engine provides an enhanced graphics API with a fallback to simpler and more efficient graphics on J2ME and plain JRE. A patched version of the JBox2D physics engine that runs on all platforms is included.
----------------------------------------------------------------------------------------------------------------
SourceForge: JGame is a small multiplatform 2D game engine. It runs on the Java JRE 1.3+ platform, the J2ME (MIDP2.0/CLDC1.1) mobile platform, and the Android (2.1+) platform. It provides a very high-level framework for "classic" type arcade games. JGame - a Java engine for 2D games Web Site
=============================================================================================================
NagiosQL NagiosQL - Nagios configuration tool 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: NagiosQL is a web based administration tool for Nagios. It helps you to build easy a complex configuration with all options, manage them and use them. NagiosQL needs a webserver with php, MySQL and file access to the Nagios configuration files.
----------------------------------------------------------------------------------------------------------------
SourceForge: NagiosQL is a professional, web based configuration tool for Nagios 2.x/3.x and other Nagios based monitoring tools. It is designed for large enterprise requirements as well as small environments. Any Nagios functionalities are supported.
=============================================================================================================
Listen Listen Music Player 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Listen is a mailing list management application for Plone that allows for easy creation of mailing lists through the Plone interface, forum-like posting and viewing of archives, and a choice of list types.
----------------------------------------------------------------------------------------------------------------
OpenHub: Listen is an audio player written in Python. Thanks to it, you can easily organize your music collections.
=============================================================================================================
bison GNU Bison 1
-----------------------------------------------------------------------------------------------------------------
OSChina: GNU bison是一个自由软件用于自动生成语法分析器程序实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新近版本中Bison增加了对GLR语法分析算法的支持。 GNU bison基本兼容Yacc并做了一些改进。它一般与flex一起使用。
FreeCode: Bison is a parser generator in the style of yacc(1). It should be upwardly compatible with input files designed for yacc.
----------------------------------------------------------------------------------------------------------------
OpenHub: Bison is a general-purpose parser generator that converts an annotated context-free grammar into an LALR(1) or GLR parser for that grammar. Once you are proficient with Bison, you can use it to develop a wide range of language parsers, from those used in simple desk calculators to complex programming languages.
=============================================================================================================
Komport Komport2 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Komport is a KDE program which allows the user to communicate over a serial port while providing VT100 terminal emulation.
----------------------------------------------------------------------------------------------------------------
SourceForge: Komport is an serial port communications and vt102 terminal emulator for Qt. Aim of the project is to provide an alternative to minicom with an Qt style user interface. komport2 Web Site
FreeCode: Komport2 is a serial port communications and VT102 terminal emulator. It has an easy-to-use GUI.
=============================================================================================================
IDL2Matlab IDL2Matlab: IDL to Matlab/Scilab 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: IDL2Matlab is a program for automatically translating a program from IDL into Matlab and Scilab. IDL and Matlab are two major numerical languages for scientists. Scilab is a free Matlab-like language. Many IDL programs have been developed in large facilities studying astrophysics, geology, medicine, and particle and nuclear physics. On the other hand, Matlab is widely used in smaller laboratories, such as universities and national scientific agencies. This program is designed to extend the portability of such IDL programs.
----------------------------------------------------------------------------------------------------------------
SourceForge: IDL2Matlab is an Automatic translation tool from an IDL program into Matlab and Scilab code. We do not guaranty a 100% conversion efficiency. IDL2Matlab: IDL to Matlab/Scilab Web Site
=============================================================================================================
Plone Plone CMS 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Plone is a ready-to-run content management system that is built on Python. Plone is easy, flexible, and gives you a system for web content that is ideal for projects, communities, websites and intranets.
----------------------------------------------------------------------------------------------------------------
OSChina: Plone的是一个现成的经营内容管理系统在强大和自由的Zope应用服务器上。 Plone的是易于安装非常灵活并提供了一个用于管理网页内容项目适合团体社区网站互联网和局域网使用。 Plone is easy to install. You can install Plone with a a click and run installer, and have a content management system running on your computer in just a few minutes. Plone is easy to use. The Plone Team includes usability experts who have made Plone easy and attractive for content managers to add, update, and mantain content. Plone is international. The Plone interface has more than 35 translations, and tools exist for managing multilingual content. Plone is standard. Plone carefully follows standards for usability and accessibility. Plone pages are compliant with US Section 508, and the W3C's AAA rating for accessibility. Plone is Open Source. Plone is licensed under the GNU General Public License, the same license used by Linux. This gives you the right to use Plone without a license fee, and to improve upon the product. Plone is supported. There are close to a hundred developers in the Plone Development Team around the world, and a multitude of companies that specialize in Plone development and support. Plone is extensible. There is a multitude of add-on products for Plone to add new features and content types. In addition, Plone can be scripted using web standard solutions and Open Source languages. Plone is technology neutral. Plone can interoperate with most relational database systems, open source and commercial, and runs on a vast array of platforms, including Linux, Windows, Mac OS X, Solaris and BSD.
FreeCode: Plone is a content management system that is simple to set up, maintain, and modify. It is designed to be a corporate-ready content management system. It is ideal as an intranet and extranet server, as a document/Web publishing system, and as a groupware tool for collaboration between separately located entities. It aims to be a proper content management and publishing system, sharing the same qualities as Teamsite, Livelink, and Documentum.
=============================================================================================================
Tcl (CPAN) Tcl 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: The Tcl extension provides a small but complete interface into libtcl and any other Tcl-based library for Perl programmers. It lets you create Tcl interpreters (as Perl 5 objects), bind in commands to them (either Perl subroutines or C functions dynamically loaded with the DynaLoader extension), and execute Tcl code in those interpreters.
----------------------------------------------------------------------------------------------------------------
SourceForge: Tool Command Language (Tcl) is an interpreted language and very portable interpreter for that language. Tcl is embeddable and extensible, and has been widely used since its creation in 1988 by John Ousterhout. Bug reports to http://core.tcl.tk/tcl/ Follow code development at http://core.tcl.tk/tcl/ Tcl Web Site
OSChina: Tcl最早称为“工具命令语言”"Tool Command Language"但是目前已经不是这个含义不过我们仍然称呼它为TCL是一种 脚本语言。由John Ousterhout创建。 TCL很好学功能很强大。TCL经常被用于快速原型开发脚本编程GUI和测试等方面。TCL念作“踢叩”(tickle)。Tcl的特性包括 任何东西都是一条命令包括语法结构for,if等。 任何事物都可以重新定义和重载。 所有的数据类型都可以看作字符串。 语法规则相当简单。 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。 动态的域定义。 很容易用C, C++或者Java扩展。 解释语言,代码能够动态的改变。 完全的Unicode支持。 平台无关。Win32UNIXMac 上都可以跑。 和Windows的GUI紧密集成。Tk 代码紧凑,易于维护。 TCL本身在 8.6 以后提供面向对象的支持。因为语言本身很容易扩展到支持面向对象所以在8.6之前存在许多C语言扩展提供面向对象能力包括XOTcl, Incr Tcl 等。另外SNIT扩展本身就是用TCL写的。 使用最广泛的TCL扩展是TK。 TK提供了各种OS平台下的图形用户界面GUI。连强大的Python语言都不单独提供自己的GUI而是提供接口适配到TK上。 另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力例如passwd, ftp, telnet等命令驱动的外壳. Tcl 支援扩充套件,这些扩充套件提供了额外的功能(像是 GUI自动化数据库存取等。 下面是一些 Tcl 扩充套件的列表: tclodbc mk4tcl sqlite Pgtcl, pgintcl mysqltcl, msqltcl AdabasTcl FBSQL ibtcl Oratcl Sybtcl db2tcl 示例代码: #!/bin/sh # next line restarts using tclsh in path \ exec tclsh $0 ${1+"$@"} # echo server that can handle multiple # simultaneous connections. proc newConnection { sock addr port } { # client connections will be handled in # line-buffered, non-blocking mode fconfigure $sock -blocking no -buffering line # call handleData when socket is readable fileevent $sock readable [ list handleData $sock ] } proc handleData { sock } { puts $sock [ gets $sock ] if { [ eof $sock ] } { close $sock } } # handle all connections to port given # as argument when server was invoked # by calling newConnection set port [ lindex $argv 0 ] socket -server newConnection $port # enter the event loop by waiting # on a dummy variable that is otherwise # unused. vwait forever
=============================================================================================================
Tellmatic tellmatic - the newslettermachine 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: "Tellmatic - the newsletter machine" is a PHP based newsletter script to create, manage and send personalized newsletters or massmails. It uses WYSIWYG and has a form editor. Recipients and newsletter are stored in unlimited groups. It handles bouncemails and failed adresses automagical.
FreeCode: Tellmatic is a tool to manage and create newsletters for personalized mailing or mass mailing. Addresses and newsletters are stored in groups to handle different user groups and thousands of addresses at a time. SMTP is used for sending the newsletter to your subscribers to make sure you get all error and bounce messages. Bounces can be handled automagically via a small bounce-management module with POP3 access. It also has a small form-editor and statistics. You can import and export your addresses in CSV format.
----------------------------------------------------------------------------------------------------------------
SourceForge: tellmatic is a php and mysql based newsletter script to create, manage and send personalized newsletters or mass mails. uses wysiwyg and has a form editor. adresses and newsletter are stored in unlimited groups. handle bouncemails and failed adresses tellmatic - the newslettermachine Web Site
=============================================================================================================
tk10 TK-10 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: tk10 is open source, multi-platform software for configuring the ICOM IC-R10 portable receiver. It lets you read a memory image from the receiver or a file, view and change settings using a graphical interface, and sort memory channels by frequency or by label. Users can import and export memory channel data from CSV files. tk10 can then write the image from the computer back to the radio.
----------------------------------------------------------------------------------------------------------------
FreeCode: TK10 is a GUI for the Bottlerocket program. It provides a graphical interface for controlling X10 modules that come with the X10 Firecracker kit. TK10 is designed to mimic the look and functionality of the HR12A controller unit that comes with the X10 Firecracker kit. If you are familiar with the HR12A, then you will find TK10 very easy to use. The on/off/dim buttons, device letter dial, and device number range switch work just like in the HR12A, and you can also edit the device labels.
=============================================================================================================
Tapioca Tapioca VoIP 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Tapioca is designed to provide an extremely thin layer on top of existing, albeit obscure, portions of the standard Java class library in order to provide an IoC container.
----------------------------------------------------------------------------------------------------------------
FreeCode: Tapioca is a framework for Voice over IP (VoIP) and IM applications. Its main goal is to provide an easy way to develop and use VoIP/IM services in any kind of application. It provides a pluggable interface for different protocols, such as SIP/XMPP.
=============================================================================================================
Eclipse Eclipse Project 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: Eclipse is a software development environment for many popular languages that includes an integrated development environment (IDE) and an extensible plug-in system. Eclipse can be used to develop Java by default, and has plugins to support: Ada, C, C++, COBOL, Perl, PHP, Python, R, Ruby (including Ruby on Rails framework), Scala, Clojure, Groovy and Scheme. Eclipse Web Site
OSChina: Eclipse是著名的跨平台的自由集成开发环境IDE。最初主要用来Java语言开发但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。 Eclipse的本身只是一个框架平台但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境2001年11月贡献给开源社区现在它由非营利软件供应商联盟Eclipse基金会Eclipse Foundation管理。 2003年Eclipse 3.0选择OSGi服务平台规范为运行时架构。 2007年6月稳定版3.3发布。2008年6月发布代号为Ganymede的3.4版。 Eclipse的基础是富客户机平台Rich Client Platform, 即RCP。RCP包括下列组件 核心平台(启动Eclipse运行插件 OSGi标准集束框架 SWT可移植构件工具包 JFace文件缓冲文本处理文本编辑器 Eclipse工作台即Workbench 包含视图views、编辑器editors、视角perspectives、和向导wizards Eclipse采用的技术是IBM公司开发的SWT这是一种基于Java的窗口组件类似Java本身提供的AWT和Swing窗口组件不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse的用户界面还使用了GUI中间层JFace从而简化了基于SWT的应用程序的构建。 Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上Eclipse使用插件来提供所有的附加功能例如支持Java以外的其他语 言。 已有的分离的插件已经能够支持C/C++CDT、Perl、RubyPython、telnet和数据库开发。插件架构能够支持将任意的扩展加入到 现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。 Eclipse的设计思想是一切皆插件。Eclipse核心很小其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括图形API (SWT/Jface) Java开发环境插件(JDT ),插件开发环境(PDE)等。 Eclipse由各种不同的计划组成。以下列出了部分计划。 Eclipse计划本身包括Eclipse平台Eclipse富客户端平台RCP和Java开发工具JDT。 Eclipse测试和性能工具平台TPTP提供一个允许软件开发者构建诸如测试调试、概况分析、基准评测等测试和性能工具的平台。 Eclipse Web工具平台计划 WTP用Java企业版Web应用程序开发工具来扩展Eclipse平台。它由以下部分组成HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和WSDL的 源代码编辑器XSD和WSDL的图形界面编辑器Java企业版的“项目性质”project nature、建构器builder和模型model与一个Java企业版的导航navigator一个Web服务Web service向导和浏览器还有一个WS-I测试工具最后是数据库访问查询的工具与模型。 Eclipse商业智能和报表工具计划BIRT提供Web应用程序特别是基于Java企业版的的报表开发工具。 Eclipse可视化界面编辑器计划VEP一个Eclipse下创建图形用户界面代码生成器的框架。 Eclipse建模框架EMF依据使用XMI描述的建模规格生成结构化数据模型的工具和其他应用程序的代码。 图形化编辑器框架GEF能让开发者采用一个现成的应用程序模型来轻松地创建富图形化编辑器。 UML2Eclipse平台下的一个UML 2.0元模型的实现,用以支持建模工具的开发。 AspectJ一种针对Java的面向侧面语言扩展。 Eclipse通讯框架ECF专注于在Eclipse平台上创建通讯应用程序的工作。 Eclipse数据工具平台计划DTP Eclipse设备驱动软件开发计划DSDP C/C++开发工具计划CDT努力为Eclipse平台提供一个全功能C和C++的集成开发环境IDE它使用GCC作为编译器。 Eclipse平台COBOL集成开发环境子计划COBOL将构建一个Eclipse平台上的全功能COBOL集成开发环境。 并行工具平台PTP将开发一个对并行计算机架构下的一组工具进行集成的平行工具平台而且这个平台是可移植的可伸缩的并基于标准的。 嵌入式富客户端平台eRCP计划将Eclipse富客户端平台扩展到嵌入式设备上。这个平台主要是一个富客户端平台RCP组件子集的集合。它能让桌面环境下的应用程序模型能够大致同样地能运用在嵌入式设备上。
----------------------------------------------------------------------------------------------------------------
FreeCode: Eclipse is a kind of universal tool platform - an open extensible IDE for anything and nothing in particular. The real value of Eclipse comes from tool plug-ins that "teach" Eclipse how to work with things - java files, web content, graphics, video, etc. Eclipse allows you to independently develop tools that integrate with other people's tools seamlessly.
=============================================================================================================
SQLite pysqlite 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine. Implements most of SQL92 and ACID (atomic, consistent, isolated, and durable) transactions; no setup or administration needed.
OSChina: SQLite是遵守ACID的关联式数据库管理系统它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。 不像常见的客户-服务器范例SQLite引擎不是个程序与之通信的独立进程而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。 特征 库实现了多数的SQL-92标准包括事务就是代表原子性、一致性、隔离性和持久性的ACID触发器和多数的复杂查询。不进行类型检查。你可以把字符串插入到整数列中。例如某些用户发现这是使数据库更加有用的创新特别是与无类型的脚本语言一起使用的时候。其他用户认为这是主要的缺点。 多个进程或线程可以访问同一个数据而没有问题。可以并行的满足多个读访问。只有在其他访问当前不被服务的时候才能满足写访问;否则写访问失败并带有一个错误代码(也可以在可配置的超时过期之后自动的重试)。 提供了叫做sqlite的一个独立程序用来查询和管理SQLite数据库文件。 它也充当写使用SQLite库的应用的一个例子。 语言绑定 可以从C/C++程序中使用这个库还可以获得对Tcl和一些其他脚本语言的绑定。 在CPAN的DBD::SQLite上有一个Perl的DBI/DBD模块它不是到SQLite的接口而是包括整个SQLite数据库引擎在其中并不需要任何额外的软件。 还有一个Python模块叫做PySQLite。 PHP从PHP5.0开始包含了SQLite但是自5.1版之后开始成为一个延伸函式库。SQLite能与PHP4一起工作但不包含在其中。 Rails2.0.3将缺省的数据库配置改为了SQLite 3 SQLite管理客户端 SQLite亦可以作为桌面数据库使用以下为第三方SQLite的GUI软件。例如 SQLiteMan使用QT开发的一个SQLite客户端支持多语言、跨平台。SQLiteMan SQLite Manager, 以 火狐浏览器的扩展形式提供的SQLite客户端。 SQLite Database Browser, a graphical client to access SQLite databases SqlPro SQL Client, another graphical client to work with SQLite databases 在线文档http://www.ostools.net/apidocs/apidoc?api=sqlite
FreeCode: SQLite is a small, fast, embeddable SQL database engine that supports most of SQL92, including transactions with atomic commit and rollback, subqueries, compound queries, triggers, and views. A complete database is stored in a single cross-platform disk file. The native C/C++ API is simple and easy to use. Bindings for other languages are also available.
----------------------------------------------------------------------------------------------------------------
OpenHub: pysqlite is a Python DB-API 2.0 interface for the SQLite embedded relational database engine.
FreeCode: SQLite is a powerful embedded relational database engine. pysqlite makes it available to Python developers via the Database API 2.0.
=============================================================================================================
vomit Video Management System 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: The vomit utility converts a Cisco IP phone conversation into a wav file that can be played with ordinary sound players. The phone conversation can either be played directly from the network or from a tcpdump output file. Vomit is also capable of inserting wavfiles into ongoing telephone conversations. It can be used as a network debugging tool, a speaker phone, etc.
----------------------------------------------------------------------------------------------------------------
FreeCode: Vomit is a Web-based management system for video stores. While the administrator can manage the stock, customer details and orders, customers can view the available content over the net.
=============================================================================================================
Journal Journal for the Web 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Journal is software for developing and publishing journals on the Web. It combines Java, Spring 3, Lucene, and Ehcache into an elegant solution for Web content management. The presentation is modern and CSS-based, and uses a responsive approach to layout. Resize your browser window and watch the layout adapt.
----------------------------------------------------------------------------------------------------------------
FreeCode: Journal is a Perl/CGI script that allows the user to keep a regular log of his/her thoughts. The interface is easy to understand, with only a few buttons to utilize. This journal is fast and able to be viewed and used by both text and graphical browsers. Drawbacks as of now are that it works better if Apache is running (but can be changed if the user can read Perl), and there is no installer. The pieces need to be hand placed (optimal placement in the README.txt), and there is not a Win32 port yet.
=============================================================================================================
MetroForm Project (.NET) Lucene.Net 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: 1.3 COMING SOON! Includes: Updated settings Improved all animations (using Transitions Library) Added new default theme Changed resize control Native maximise behaviour Added MetroButton (BETA) Form title is now automatically uppercase Currently Supported: WinForms Available Languages: Visual Basic.NET This is a simple Visual Studio template which has a pre-built Metro interface. Currently, there is only a VB version; however, a C# version will be introduced very soon, so stay posted! Likewise, a WPF version will be available in future. Because the project is new, documentation is still being created for the wiki, so please remain patient if you have any issues. To install, simply move the archive to Visual Studio 2010 > Templates > Project Templates > Visual Basic, and the project should then be available from the Visual Studio 'New Project' window. MetroForm Project (.NET) Web Site
----------------------------------------------------------------------------------------------------------------
OpenHub: Lucene.Net is a source code, class-per-class, API-per-API and algorithmatic port of the Java Lucene search engine to the C# and .NET platform utilizing Microsoft .NET Framework.
OSChina: .Net 是 .NET 版的 。 .Net 命名空间分析 .Net.Documents 这个命名空间提供了一些为封装要索引的文档所需要的类,比如 Document, Field。这样每一个文档最终被封装成了一个 Document 对象。 .Net.Analysis 这个命名空间主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。 .Net.Index 这个命名空间提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类IndexWriter 和 IndexReader其中 IndexWriter 是用来创建索引并添加文档到索引中的IndexReader 是用来删除索引中的文档的。 .Net.Search 这个命名空间提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法Hits 用来保存搜索得到的结果。
=============================================================================================================
L2J L2J Server 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: Alternative Lineage 2 Game Server written in Java. L2J Web Site
OSChina: L2J是一个开源的采用纯Java开发的天堂Ⅱ(Lineage2)游戏服务器。
FreeCode: L2J is an alternate game server for Lineage2. The L2 protocol is reimplemented in the server, so you can play with this server without any modifications to the client (except changing the server IP address). The latest USA live client version is always supported, so don't expect this server to work with the PTS/Korean client.
----------------------------------------------------------------------------------------------------------------
OpenHub: L2J is a server application that emulates a Lineage II (a MMORPG) server. Players can play on a L2J server using the original Lineage II client. It was built from scratch in Java.
=============================================================================================================
bdb Berkeley DB 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: bdb is a bibliography database with a flexible Web-based interface. One can easily add items to the database, search for information in the database, and generate reports.
----------------------------------------------------------------------------------------------------------------
OpenHub: Berkeley DB (BDB) is a high-performance, embedded database library with bindings in C, C++, Java, Perl, Python, Tcl, Smalltalk and many other programming languages. BDB stores arbitrary key/data pairs as byte arrays, and supports multiple data items for a single key. BDB can support thousands of simultaneous threads of control or concurrent processes manipulating databases as large as 256 terabytes, on a wide variety of systems including most UNIX-like and Windows systems as well as real-time operating systems.
OSChina: Berkeley DB是历史悠久的嵌入式数据库系统主要应用在UNIX/LINUX操作系统上其设计思想是简单、小巧、可靠、高性能。 Berkeley DB 中国讨论区入口http://www.berkeleydb.net/
FreeCode: Berkeley DB (libdb) is a programmatic toolkit that provides embedded database support for both traditional and client/server applications. It includes b+tree, queue, extended linear hashing, fixed, and variable-length record access methods, transactions, locking, logging, shared memory caching, database recovery, and replication for highly available systems. DB supports C, C++, C#, Java, PHP, and Perl APIs. It supports key-value pair (NoSQL), SQL, and Java Object formatted data. It is available for a wide variety of Unix platforms as well as QNX, Android, Mac OS X, and several varieties of Windows.
=============================================================================================================
Atlantis Atlantis Installer 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Atlantis is a native Web browser for the GNOME desktop.
----------------------------------------------------------------------------------------------------------------
FreeCode: Atlantis is an installer developers can use to install software on users' computers on multiple platforms. It was designed for installing PHP-GTK2 applications as an alternative to PEAR, but will theoretically work for anything.
=============================================================================================================
CDT (Eclipse) Eclipse 2D Game Engine 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: The CDT is Eclipse's C/C++ Development Tooling project. It is a world class C/C++ IDE that also serves as a platform for others to provide value added tooling for C/C++ developers.
----------------------------------------------------------------------------------------------------------------
FreeCode: Eclipse is a set of C++ classes designed to give beginner developers a head start in developing their first games as well as more experienced developers who don't want to have to write code for mundane tasks like fonts, sprites, and image loading. It provides bitmap fonts, window management, audio capabilities, image loading, error logging, and zip file support.
=============================================================================================================
Logwatcher Graysky Plugins for Eclipse 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Log watcher is a PHP class that polls log files and takes newly added lines to send them to a given watcher email address. Although this class can be used to poll any type of log files, it was developed with the intention to overcome a limitation of the PHP error trapping system that is not able to capture certain types of errors during script execution, like script parsing errors or form file uploading failures. It is meant to be used from cron-like task schedulers to poll log files regularly. The email notification message can be composed from text templates. The message delivery function can be replaced by custom functions like the urgent mail function that can be faster for delivering critical messages.
----------------------------------------------------------------------------------------------------------------
SourceForge: LogWatcher is a tool to monitor any log file from an Eclipse view. Graysky Plugins for Eclipse Web Site
=============================================================================================================
Golly The Golly Game of Life Simulator 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Golly 是一个跨平台的用于探索生命游戏和细胞自动机的应用。功能包括有界和无界的宇宙快速生成算法Perl / Python的脚本一个最先进的模式集合。
----------------------------------------------------------------------------------------------------------------
FreeCode: Golly is a new implementation of John Conway's Game of Life for the Mac, PC, and X11, with an unbounded universe capable of running patterns faster and further than ever before.
=============================================================================================================
Rec Reverse Engineering Compiler 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Rec is a small app written in Perl to keep track of recipes.
----------------------------------------------------------------------------------------------------------------
FreeCode: REC is a portable reverse engineering compiler, or decompiler. It reads an executable file and attempts to produce a C-like representation of the code and data used to build it. It can decompile 386, 68k, PowerPC, and MIPS R3000 programs. It recognizes the following file formats: ELF (System V Rel. 4, e.g. Linux, Solaris, etc.), COFF (System V Rel. 3.x, e.g. SCO), PE (Win32 .EXE and .DLL for Microsoft Windows 95 and NT), AOUT (BSD derivatives, e.g. SunOS 4.x), Playstation PS-X (MIPS target only), and raw binary data (via .cmd files).
=============================================================================================================
jack-keyboard Virtual keyboard for JACK MIDI 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: jack-keyboard is a virtual MIDI keyboard - a program that allows you to send JACK MIDI events (play ;-) using your PC keyboard. It's BSD-licensed. User interface is GTK-based.
----------------------------------------------------------------------------------------------------------------
SourceForge: jack-keyboard is a virtual MIDI keyboard - a program that allows you to send JACK MIDI events (play ;-) using your PC keyboard. It's BSD-licensed. User interface is GTK-based. Virtual keyboard for JACK MIDI Web Site
=============================================================================================================
bfr Batch File Rename 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: bfr maintains a buffer of data collected from stdin, emitting the data to stdout. It will both read and write at the speed each stream can handle, and allows you to set thresholds of when to start outputting and inputting again (after reaching a full buffer), the size of the buffer, as well as monitor content/throughput with an optional progress-bar. It also includes bfp, a variant especially written to play audio data using /dev/dsp.
----------------------------------------------------------------------------------------------------------------
FreeCode: Batch File Rename (BFR) is a PHP library to rename sets of files and folders with many advanced options.
=============================================================================================================
pulse pulse-java 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Pulse is a continuous integration server (or build server) designed to be easy to use while offering powerful features. It regularly checks your source code out from your SCM, builds your projects, and notifies you of the results. Key features include simple setup and administration using an AJAX-powered Web UI, adaptability to existing environments, distributed building, personal builds (test using Pulse before committing), and individual developer dashboards and notification preferences.
----------------------------------------------------------------------------------------------------------------
FreeCode: Pulse is a Web application framework and portal solution that provides easy-to-use, extensible patterns for creating browser based applications, Web sites, and portals. It delivers a set of out-of-the-box components, such as CMS, shopping, and user management.
=============================================================================================================
Pencil (drawing/animation) Pencil2D 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics.
----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics. Pencil is free and open source.
=============================================================================================================
Pencil Pencil2D
-----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is a log-message-compiler for java. The main goal of the "Pencil" project is to provide a mechanism to make logging simple, secure and abstract. To achieve this result, "Pencil" uses its own expression language developed with the ANTLR parser-generator.
SourceForge: Pencil is a cross-platform open-source 2D animation software. Its first aim is to make traditional animations (cel, cartoons, etc). It features bitmap and vector drawing tools, layers, cameras. Animations made with Pencil can be exported as QuickTime. Pencil Web Site
OSChina: Pencil 是一款开源的原型图绘制工具手绘风格的就像自己在纸上画的那样。Pencil 还可以用来绘制各种架构图和流程图,同时还提供 Firefox 的插件(点击这里安装)。
----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics. Pencil is free and open source.
=============================================================================================================
Fat-Free Fat-Free Framework
-----------------------------------------------------------------------------------------------------------------
OSChina: 全栈式Php 5.3微型框架,  自带auth, orm(sql/mongodb),  验证码图表feed, smtp等一系列功能
----------------------------------------------------------------------------------------------------------------
OpenHub: FAT-FREE is a powerful yet lightweight PHP 5.3+ Web development framework designed to help you build dynamic and robust applications - fast!
SourceForge: FAT-FREE is a powerful and lightweight PHP 5.3+ Web application framework designed to help you build dynamic and robust Web sites - fast! Unlike other PHP frameworks, Fat-Free aims to be usable - not usual. Fat-Free Framework Web Site
=============================================================================================================
GNU Autoconf Archive GNU Autoconf Macro Archive
-----------------------------------------------------------------------------------------------------------------
OpenHub: The GNU Autoconf Archive is a collection of more than 450 macros for GNU Autoconf that have been contributed as free software by friendly supporters of the cause from all over the Internet. Every single one of those macros can be re-used without imposing any restrictions whatsoever on the licensing of the generated configure script. In particular, it is possible to use all those macros in configure scripts that are meant for non-free software.
----------------------------------------------------------------------------------------------------------------
FreeCode: The GNU Autoconf Archive is a collection of more than 450 macros for GNU Autoconf. They can be re-used without imposing any restrictions on the licensing of the generated configure script. In particular, it is possible to use them in configure scripts that are meant for non-free software.
=============================================================================================================
Image Tools Union D Image Tools
-----------------------------------------------------------------------------------------------------------------
SourceForge: Image Tools is a screen capture, file sharing and image processing tool. It features multi-threaded batch image resizing, conversion, cropping, flipping/rotating, watermarks, decolorizing (grayscale, negative, sepia), and optimizing. The BMP, GIF, TIFF, JPEG, PNG, and EMF image types are supported. It is compatible with Linux MONO (only for GNOME and Xfce). Multicore processing is supported to increase performance. The quality for output when optimizing is variable. Color channels can be filtered. An internal benchmarking tool is available. Indexed pixel format images can be processed. You can process your images, publish pieces of your screens, files and send links to everyone you want to share it. Image Tools Web Site
FreeCode: Image Tools is a desktop application to capture the display as an image or open an existing image file, crop and annotate it if necessary, and save the image. It features line and text annotation and undo/redo.
----------------------------------------------------------------------------------------------------------------
FreeCode: Image Tools is a screen capture and file sharing tool. It features multi-threaded batch image resizing, conversion, cropping, flipping/rotating, watermarks, decolorizing (grayscale, negative, sepia), and optimizing. The BMP, GIF, TIFF, JPEG, PNG, and EMF image types are supported. It is compatible with MONO (only for GNOME). Multicore processing is supported to increase performance. The quality for output when optimizing is variable. Color channels can be filtered. An internal benchmarking tool is available. Indexed pixel format images can be processed.
=============================================================================================================
Jetty Jetty - Java based HTTP / Servlet / SPDY / WebSocket Server
-----------------------------------------------------------------------------------------------------------------
OSChina: Jetty 是一个开源的servlet容器它为基于Java的web内容例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象可以迅速为一些独立运行stand-alone的Java应用提供网络和web连接。 Javadoc:http://tool.oschina.net/apidocs/apidoc?api=jetty8.1.5
FreeCode: Jetty is an Open Source HTTP Servlet Server written in Java. It is a full featured HTTP/1.1 server and a Servlet container. It is designed to be small, fast, embeddable and extensible. It supports HTTP/1.1, servlets 2.3, and JSP 1.2.
----------------------------------------------------------------------------------------------------------------
OpenHub: Jetty is an Open Source HTTP Servlet Server written in Java. It is a full featured HTTP/1.1 server and a Servlet container. It is designed to be small, fast, embeddable and extensible. It supports HTTP/1.1, servlet, SPDY, websockets, and JSP.
=============================================================================================================
BIRT Bulk Image Resizing Thing
-----------------------------------------------------------------------------------------------------------------
OSChina: BIRT是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。
----------------------------------------------------------------------------------------------------------------
FreeCode: BIRT is a simple application that allows a large number of images to be resized in one go. It was created in order to facilitate the maintenance of an online photo album where each hi-res photo needs a low-res copy and a thumbnail.
=============================================================================================================
Tonic Tonic Chess
-----------------------------------------------------------------------------------------------------------------
FreeCode: Tonic is a "less is more", RESTful Web application development and Web site management PHP script designed to do things "the right way", where resources are king and the framework gets out of the way and leaves the developer to get on with it.
----------------------------------------------------------------------------------------------------------------
FreeCode: Tonic is a graphical interface for playing online chess. It is based on Jin.
=============================================================================================================
Sam Horde Sam
-----------------------------------------------------------------------------------------------------------------
FreeCode: Sam is a Morse code trainer. It is a bash script that runs in a terminal. It beeps and boops out the command-line arguments in Morse code. If there are no command-line arguments, then it beeps and boops the Usage message. Simple, no? But the gimmick is that it prints out the text to the terminal, and the cursor below the text keeps track of which letter is being sounded.
----------------------------------------------------------------------------------------------------------------
FreeCode: Sam is the Horde anti-spam, anti-virus module. It allows users to change their specific anti-spam and anti-virus rules for SpamAssassin or amavisd-new, given a general subset of the overall features that are available.
=============================================================================================================
Deluge deluge-torrent
-----------------------------------------------------------------------------------------------------------------
OpenHub: Deluge is a full-featured BitTorrent client for Linux, OS X, Unix and Windows. It uses libtorrent in its backend and features multiple user-interfaces including: GTK+, web and console. It has been designed using the client server model with a daemon process that handles all the bittorrent activity. The Deluge daemon is able to run on headless machines with the user-interfaces being able to connect remotely from any platform.
----------------------------------------------------------------------------------------------------------------
FreeCode: Deluge is a full-featured BitTorrent client. It features a rich plugin collection and was created with the intention of being lightweight and unobtrusive. It works well under any desktop environment.
=============================================================================================================
LAME LAME (Lame Ain't an MP3 Encoder)
-----------------------------------------------------------------------------------------------------------------
FreeCode: LAME (LAME Ain't an MP3 Encoder) is a research project for learning about and improving MP3 encoding technology. LAME includes an MP3 encoding library, a simple frontend application, and other tools for sound analysis, as well as convenience tools. Please note that any commercial use (including distributing the LAME encoding engine in a free encoder) may require a patent license from Thomson Multimedia.
----------------------------------------------------------------------------------------------------------------
OpenHub: LAME (LAME Ain't an MP3 Encoder) is a research project for learning about and improving MP3 encoding technology. LAME includes an MP3 encoding library, simple frontend application, a much-improved psycho-acoustic model (GPSYCHO), and a graphical frame analyzer (MP3x). Please note that any commercial use (including distributing the LAME encoding engine in a free encoder) may require a patent license from Thomson Multimedia.
=============================================================================================================
HyperSQL Database Engine (HSQLDB) hsqldb Database Engine
-----------------------------------------------------------------------------------------------------------------
SourceForge: HSQLDB is a relational database engine written in Java, with a JDBC driver, conforming to ANSI SQL:2008. A small, fast, multithreaded engine and server with memory and disk tables, LOBs, transaction isolation, multiversion concurrency and ACID. HyperSQL Database Engine (HSQLDB) Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: HSQLDB (HyperSQL DataBase) is an SQL relational database engine written in Java. It supports nearly full ANSI-92 SQL and SQL:2008 enhancements. It is a small, fast multithreaded, and transactional database engine which offers in-memory and disk-based tables and supports embedded and server modes.
=============================================================================================================
PAR Perl Archive Toolkit
-----------------------------------------------------------------------------------------------------------------
OpenHub: The Perl Archive (PAR) Toolkit helps create single-file bundles of Perl code, analogous to Java's JAR files. PAR can optionally create standalone executables that bundle the entire Perl interpreter to enable deployment to machines that lack Perl.
----------------------------------------------------------------------------------------------------------------
FreeCode: PAR is a cross-platform packaging and deployment tool, dubbed as a cross between Java's JAR and Perl2EXE/PerlApp. It can turn your Perl programs into ready-to-run executables, build and use PAR files into @INC to avoid version conflicts, turn CPAN module distributions into PAR distributions, or install/uninstall/sign/verify PAR distributions.
=============================================================================================================
CVS CVS: Concurrent Versions System
-----------------------------------------------------------------------------------------------------------------
OSChina: CVSConcurrent Versions System老牌的版本控制系统它是基于客户端/服务器的行为使得其可容纳多用户构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件特别是程序的源代码时的首选。
FreeCode: CVS is a version control system, which allows you to keep old versions of files (usually source code), keep a log of who, when, and why changes occurred, etc., like RCS or SCCS. Unlike the simpler systems, CVS does not just operate on one file at a time or one directory at a time, but operates on hierarchical collections of directories consisting of version controlled files. CVS helps to manage releases and to control the concurrent editing of source files among multiple authors. CVS allows triggers to enable/log/control various operations and works well over a wide area network.
----------------------------------------------------------------------------------------------------------------
OpenHub: CVS is a version control system, an important component of Source Configuration Management (SCM).
=============================================================================================================
PHPki PHPki Digital Certificate Authority
-----------------------------------------------------------------------------------------------------------------
FreeCode: PHPki is a Web application for managing a multi-agency PKI for HIPAA compliance. With it, you may create and centrally manage X.509 certificates for use with S/MIME enabled e-mail clients, SSL servers, and VPN applications.
----------------------------------------------------------------------------------------------------------------
SourceForge: PHPki is an Open Source Web application for managing a multi-agency PKI for HIPAA compliance. With it, you may create and centrally manage X.509 certificates for use with S/MIME enabled e-mail clients, SSL servers, and VPN applications. PHPki Digital Certificate Authority Web Site
=============================================================================================================
Solar The SOLAR Operating System
-----------------------------------------------------------------------------------------------------------------
OpenHub: Solar is a "simple object library and application repository" for PHP5. That is, Solar is a combined class library, component suite, and application development framework.
----------------------------------------------------------------------------------------------------------------
FreeCode: SOLAR is a realtime, fast operating system that is written entirely in assembler.
=============================================================================================================
Archivist Archivist NDCA
-----------------------------------------------------------------------------------------------------------------
SourceForge: Archivist is a program for "Magic the Gathering". Archivist allows you to create Magic Decks for Mindless Automaton and Apprentice. You can manage your private card collection and multiple decks. Rich analysis tools help you to improve your deck. Archivist 2 is the latest version build for Windows Systems using the .NET Framework. Download as archive or self extracting archive. No installation required! Archivist Web Site
FreeCode: Archivist is a command-line program and C# library that provides standard archiving and compression utilities.
----------------------------------------------------------------------------------------------------------------
FreeCode: Archivist is a network device configuration archiving and versioning program. It uses Subversion as its revision control system. Its multithreaded design makes it quite fast and thus suitable for operation on large networks with thousands of network devices. It supports Cisco IOS, Cisco CatOS, Juniper JUNOS, and Brocade/Foundry MLX series, but it can be easily extended to support any SSH or telnet-based network device by creating your own config download and post-processing scripts.
=============================================================================================================
IPc Isotopic Pattern Calculator
-----------------------------------------------------------------------------------------------------------------
SourceForge: IPc (IP checker) is just a simple tool to find out what your Public IP address is. It is under the form of (Non annoying) Taskbar Icon. IPc Web Site
----------------------------------------------------------------------------------------------------------------
SourceForge: The ISOTOPIC PATTERN CALCULATOR is a small linux tool for mass spectrometry. It calculates the isotopic distribution for a given chemical formula or peptide sequence. GIPS is a GUI Version of the Isotopic Pattern Calculator. Isotopic Pattern Calculator Web Site
FreeCode: IPC (Isotopic Pattern Calculator) is a tool for mass spectrometry that calculates the isotopic distribution of a given chemical formula or peptide sequence. It uses gnuplot to visualize the results.
=============================================================================================================
squint squint screen
-----------------------------------------------------------------------------------------------------------------
FreeCode: squint is a Squid proxy log analyzer that generates a detailed report of who is spending the most time and resources browsing the Internet. The top offenders in terms of data transfer, number of files transferred, and on-line time are reported.
----------------------------------------------------------------------------------------------------------------
FreeCode: squint is command that duplicates the output of a monitor into an X11 window. It is designed to allow you to display a presentation (or any other kind of demonstration) on multiple monitors at the same time without cloning the entire screen.
=============================================================================================================
openQRM openQRM - Cloud Computing Platform
-----------------------------------------------------------------------------------------------------------------
OpenHub: openQRM is a web-based open source datacenter management and hybrid cloud computing platform that integrates flexibly with existing components in enterprise data centers. openQRM abstracts Virtualization and supports the following virtualization technologies: KVM, XEN, Citrix XenServer, VMWare ESX, LXC, OpenVZ. Additionally the Hybrid Cloud Connector in openQRM supports a range of private or public cloud providers to extend your infrastructure on demand via Amazon AWS, Eucalyptus or OpenStack.
FreeCode: openQRM is a data-center management and cloud computing platform. Its fully pluggable architecture focuses on automatic, rapid, and appliance-based deployment, monitoring, high-availability, cloud computing, and especially on supporting multiple virtualization technologies. openQRM is a single-management console for a complete IT infrastructure and provides a well-defined API which can be used to integrate third-party tools as additional plugins.
----------------------------------------------------------------------------------------------------------------
SourceForge: openQRM is a web-based open source datacenter management and hybrid cloud computing platform that integrates flexibly with existing components in enterprise data centers. openQRM abstracts Virtualization and supports the following virtualization technologies: KVM, XEN, Citrix XenServer, VMWare ESX, LXC, OpenVZ. The Hybrid Cloud Connector in openQRM supports a range of private or public cloud providers to extend your infrastructure on demand via Amazon AWS, Eucalyptus or OpenStack. openQRM automates provisioning, virtualization, storage and configuration management, and it takes care of high-availability. A self-service cloud portal with integrated billing system enables end-users to request new servers and application stacks on-demand.
=============================================================================================================
Keyboard Solo on the Keyboard
-----------------------------------------------------------------------------------------------------------------
FreeCode: Keyboard is an object that can show an on-screen keyboard to emulate letter key typing. It can display a keyboard on the page with buttons for letters. The user can click on the letter buttons, and the object pastes the letters on the currently active form input. It supports switching between many types of keyboard maps.
----------------------------------------------------------------------------------------------------------------
FreeCode: Solo on the Keyboard is an authorized touch typing tutorial which guarantees solid typing skills in 30 hours of enjoyable yet responsible work. The course is available for QWERTY (US and UK) and Dvorak keyboard layouts as well as Italian and Russian touch typing courses. This course is the fruit of detailed experimental research done by Dr. Vladimir Shahidzhanjan, a psychologist and a journalist.
=============================================================================================================
GPS Manager gpsman
-----------------------------------------------------------------------------------------------------------------
FreeCode: GPS Manager is a GUI for organizing GPS data such as waypoints, tracks, and routes. It is able to download data from many different GPS units, providing off-unit storage for as much data as your computer can hold and higher level organization and analysis tools than most GPS units provide.
----------------------------------------------------------------------------------------------------------------
SourceForge: GPS Manager (GPSMan) is a graphical manager of GPS data that makes possible the preparation, inspection and edition of GPS data in a friendly environment. GPSMan can also be used in command mode (with no graphical interface) gpsman Web Site
FreeCode: GPSMan (GPS Manager) is a graphical manager of GPS data that makes possible the preparation, inspection, and edition of GPS data in a friendly environment. It supports communication with both Garmin, Lowrance, and Magellan receivers, and real-time support for any receiver using NMEA-0183. It can also be used in command-line mode.
=============================================================================================================
Swing The Swing Traffic Generator
-----------------------------------------------------------------------------------------------------------------
OSChina: Swing 是一个为Java设计的GUI工具包。 Swing 是 JAVA基础类 的一部分。 Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。 SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成所以同Java本身一样可以跨平台运行这 一点不像AWT。 它们是JFC的一部分。 它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台 上使用JAVA支持的任意面板。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。 Swing程序外观 示例代码: import javax.swing.*;        
public class HelloWorldSwing {
    /**
     * 创建并显示GUI。 出于线程安全的考虑
     * 这个方法在事件调用线程中调用。
     */
    private static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
----------------------------------------------------------------------------------------------------------------
FreeCode: Swing is a closed-loop, network-responsive traffic generator. It accurately reproduces packet interactions (at multiple timescales) using a simple structural model, starting from observed traffic on a link.
=============================================================================================================
Neo4j Neo4j.rb
-----------------------------------------------------------------------------------------------------------------
OSChina: Neo是一个网络——面向网络的数据库——也就是说它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎但是它将结构化数据存储在网络上而不是表中。网络从数学角度叫做图是一个灵活的数据结构可以应用更加敏捷和快速的开发模式。 你可以把Neo看作是一个高性能的图引擎该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
FreeCode: Neo4j is a graph database, a fully transactional database that stores data structured as graphs. A graph is a flexible data structure that allows for a more agile and rapid style of development. You can think of Neo4j as a high-performance graph engine with all the features of a mature and robust database. The programmer works with an object-oriented, flexible network structure rather than with strict and static tables, yet enjoys all the benefits of a fully transactional, enterprise-strength database. The community edition is GPLv3 licensed, while the advanced and enterprise editions are AGPLv3 licensed.
----------------------------------------------------------------------------------------------------------------
OpenHub: Neo4j is a graph database for JRuby. It supports: transactions, querying/indexing, traversal of relationships, mapping of ruby objects to a graph. It uses the java libs neo4j and lucene.
=============================================================================================================
ECM Eve Corp. Management
-----------------------------------------------------------------------------------------------------------------
FreeCode: ECM is demo software for planetary-scale terrain rendering. It implements Ellipsoidal Cube Maps (ECMs), as described in M. Lambers and A. Kolb, Ellipsoidal Cube Maps for Accurate Rendering of Planetary-Scale Terrain Data, Proc. Pacific Graphics (Short Papers), Sep. 2012. It consists of three parts: libecmdb, which implements the basic model and projection; ecmdb, which builds ECM databases from remote sensing data; and ecmview, which renders ECM databases interactively.
----------------------------------------------------------------------------------------------------------------
OpenHub: ECM is a management and decision-making helper-application for the game EVE Online.
=============================================================================================================
Z-Push Z-Push - Synchronizing mobile devices
-----------------------------------------------------------------------------------------------------------------
OSChina: Z-Push是ActiveSync推送协议的一种开源实现方案其构建在PHP基础之上。通过Z-Push可以实现将各种PHP应用转化成为支持同步的ActiveSync兼容应用 Z-Push的结构如下图所示:
FreeCode: Z-push is an implementation of the ActiveSync protocol, which is used 'over-the-air' for multi-platform ActiveSync devices including Windows Mobile, Ericsson, and Nokia phones. It allows any e-mail or groupware system using Maildir to be connected and synced with these devices.
----------------------------------------------------------------------------------------------------------------
OpenHub: Z-Push is an opensource implementation of the ActiveSync protocol, which is used 'over-the-air' for multi platform ActiveSync devices, including Android, iPhone and Windows 7. With Z-Push any groupware can be connected and synced with these devices.
SourceForge: Z-Push is an implementation of the ActiveSync protocol, which is used 'over-the-air' for multi platform ActiveSync devices, including Windows Mobile, Ericsson and Nokia phones. With Z-Push any groupware can be connected and synced with these devices. Z-Push - Synchronizing mobile devices Web Site
=============================================================================================================
CDT CDT (Eclipse)
-----------------------------------------------------------------------------------------------------------------
OSChina: Eclipse CDT 是 Eclipse 插件,它将把 Eclipse 转换为功能强大的 C/C++ IDE。它被设计为将 Java 开发人员喜爱的许多 Eclipse 优秀功能提供给 C/C++ 开发人员,例如项目管理、集成调试、类向导、自动构建、语法着色和代码完成。当 Eclipse 被用作 Java IDE 时,它将利用 JDK 并与之集成。同样地CDT 将利用标准的 C/C++ 工具并与之集成,例如 g++、make 和 GDB。这使得 CDT 在 Linux 中变得非常流行,这些工具都可在 Linux 中使用并用于大多数 C++ 开发。可以在 Windows 上设置 CDT 以使用相同的工具。目前还在努力将 CDT 与 Microsoft 的 C++ 工具结合使用,以使 CDT 对 Windows C++ 开发人员更有吸引力。
----------------------------------------------------------------------------------------------------------------
OpenHub: The CDT is Eclipse's C/C++ Development Tooling project. It is a world class C/C++ IDE that also serves as a platform for others to provide value added tooling for C/C++ developers.
=============================================================================================================
Burp burp backup and restore program
-----------------------------------------------------------------------------------------------------------------
FreeCode: Burp is a program that backs up and restores data. It uses librsync in order to save on the amount of space that is used by each backup. It also uses VSS (Volume Shadow Copy Service) to make snapshots when backing up Windows computers.
----------------------------------------------------------------------------------------------------------------
SourceForge: Burp is a backup and restore program. It uses librsync in order to save on the amount of space that is used by each backup. It also uses VSS (Volume Shadow Copy Service) to make snapshots when backing up Windows computers. burp backup and restore program Web Site
=============================================================================================================
gSOAP Toolkit gSOAP
-----------------------------------------------------------------------------------------------------------------
SourceForge: The gSOAP toolkit is an extensive suite of portable C and C++ software to develop XML Web services with powerful type-safe XML data bindings. Easy-to-use XML auto-serialization allows you to directly integrate XML data in C and C++ (C++11 compatible) applications. Includes WSDL/XSD schema binding and auto-coding tools, stub/skeleton compiler, Web servers (with SSL), integrated XML processing with schema validation, fast MIME/MTOM streaming, SOAP and REST, WS-* protocols (WS-Security, WS-Policy, etc), XML-RPC and JSON serialization.
----------------------------------------------------------------------------------------------------------------
OpenHub: The gSOAP toolkit is a cross-platform development toolkit for C and C++ XML Web services (SOAP1.1/1.2; WSDL1.1/2.0) and general XML data bindings. The toolkit offers a seamless XML databinding for C and C++. Auto-serializes C/C++ data in XML. Includes SOAP/XML engine, Web server, stub/skeleton and serialization code generator, WSDL/XSD tools, XML-RPC, JSON, UDDI, and more.
OSChina: gSOAP一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码XML数据绑定对SOAP Web服务和其他应用形成高效的具体架构解析器它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。此外使用XML数据绑定大大简化了XML自动映射。应用开发人员不再需要调整应用程序逻辑的具体库和XML为中心的数据如 交涉DOM。 功能和特点 可移植性gSOAP支持大多 数平台包括嵌入式系统和小系统例如嵌入式SymbianPalm。可移植性测试Windows98XPVistaLinuxUnix 系统Mac OS XSolarisHP-UXAIXFreeBSDTRU64IrixQNXVxWorks。 稳定性该软件已经成熟。自2001年以来经过几年的发展和试验。许多工业项目和产品都在使用该软件。 广泛的用户群自2003年以来超过150000次下载成千上万许可证/支持协议的公司其中包括一些财富100强企业。 所有功能于一身的软件包:独立第三方工具和库确保可靠的运行执行。 开源:可选择自由和商业许可。 C和C++的支持支持纯粹的ANSI C和混合的C/C++应用开发。 综合XML数据绑定 gSOAP是唯一的SOAP/XML工具包支持一个纯粹的本地的C/C++数据绑定到XML。该工具包是以自动序列指针为基础的数据结构。 行业标准协议: SOAP 1.1/1.2  WSDL 1.1v2和UDDI 。支持XML架构原始XSD结构类型等等。 传 输HTTP/S, TCP, UDP, MIME (SwA), DIME (streaming), MTOM (streaming), HTTP1.0/1.1, IPv4, IPv6, RSS, XML-RPC, WS-Addressing, WS-Enumeration等 安全HTTPS和WS安全性认证令牌数字签名。 速度架构特定的编译器生成的代码速度快。基准测试表明速度优于最快的XML解析器。 占用内存小:客户端应用程序总运行内存占用很小。内存管理使用垃圾收集,可以自动清理。 许多例子软件包包括许多代码范例其中包括独立的HTTP/1.1和HTTPS安全的Web服务器。 Web服务器整合包括Apache_mod, IIS, WinInet, CGI, FastCGI。
=============================================================================================================
StumpWM The Stump Window Manager
-----------------------------------------------------------------------------------------------------------------
OpenHub: Stumpwm is a tiling window manager written entirely in Common Lisp. It attempts to be highly customizable while relying entirely on the keyboard for input.
----------------------------------------------------------------------------------------------------------------
FreeCode: Stumpwm is a tiling, keyboard driven X11 window manager written entirely in Common Lisp. While it is minimalistic in appearance, its full customizability, event hooks, and 100% pure Lisp implementation make it startlingly powerful.
=============================================================================================================
sos Son of Service
-----------------------------------------------------------------------------------------------------------------
OpenHub: This set of tools is designed to provide information to support organizations in an extensible manner, allowing third parties, package maintainers, and anyone else to provide plugins that will collect, analyze, and report information that is useful for supporting software packages.
----------------------------------------------------------------------------------------------------------------
SourceForge: Son of Service (SOS) is a multiuser volunteer management database for non-profits. Useful for keeping track of work history, comments, reminders, skills, availability, and relationships, SOS requires PHP, a RDBMS, and a HTML 4.0 browser. Son of Service Web Site
FreeCode: Son of Service is a Web-based, multi-user volunteer management database for non-profits, schools, clubs, etc. It requires PHP and an arbitrary database (because it uses ADOdb abstraction). It supports a variety of software and hardware, including low-end systems.
=============================================================================================================
Monkey Monkey HTTP Server
-----------------------------------------------------------------------------------------------------------------
OSChina: Blitz Research发布了其最新的游戏程序语言“Monkey”Monkey能够降低在编写多平台游戏时的重复劳动同时带来灵活的高等级语言并可接入每个平台的本地SDK。 使用Monkey语言所编写的游戏能够进行转换并在iPhoneiPadAndroidFlashHTML 5微软 XNA面向Xbox 360PC 或Windows Phone 7或 OpenGL平台上运行。 开发者通过一次点击便能将Monkey游戏转移到目标平添的SDK中并在多个在线市场和应用商店上传他们的游戏潜在的扩大了销售范围并极大的降低了开发成本。 免费版Monkey允许任何人使用它来创建非商业HTML5应用。商业版本包含一个2D游戏模块支持所有平台其授权价格为120美元详情请参看。 “创建跨平台游戏需要大量乏味的工作和综合知识,你必须得重新学习每个平台的开发技术。这是个非常枯燥乏味又艰难的工作,并阻碍的最重要的东西 制作一款真正有趣的游戏的创意过程。Monkey将麻烦的事情赶走同时给开发者一个灵活高性能的语言” Blitz Research CEO Mark Sibly说。 开发者仅需要在每个目标平台上安装SDK随后Monkey将负责进行编写架构和运行。Monkey语言本身是一个高等级程序语言着重于可读性面向对象的功能以及一个流线型的指令设置同所有目标平台兼容。 Monkey是最新的来自语游戏语言开发商Blitz Research的长线游戏编程工具。
----------------------------------------------------------------------------------------------------------------
OpenHub: Monkey is a Fast and Lightweight Web server written in C for Linux platform. This is an open source project based on the HTTP/1.1 protocol.
=============================================================================================================
STK phpBB Support Toolkit
-----------------------------------------------------------------------------------------------------------------
SourceForge: The STK is a (not so) Small Toolbox for Kriging. Its primary focus in on the interpolation / regression technique known as kriging, which is very closely related to Splines and Radial Basis Functions, and can be interpreted as a non-parametric Bayesian method using a Gaussian Process (GP) prior. The STK also provides tools for the sequential and non-sequential design of experiments. Even though it is, currently, mostly geared towards the Design and Analysis of Computer Experiments (DACE), the STK can be useful for other applications areas (such as Geostatistics, Machine Learning, Non-parametric Regression, etc.). STK Web Site
----------------------------------------------------------------------------------------------------------------
OpenHub: The Support Toolkit (STK) was developed by the phpBB.com Support Team in cooperation with EXreaction. The STK provides a second "Administration Control Panel" that can be used to recover various part of a corrupted phpBB 3.0.x installation or to solve commonly encountered problems with the software.
=============================================================================================================
Lan Core Lan Core :: Thin Client Server and OS
-----------------------------------------------------------------------------------------------------------------
FreeCode: Lan Core is software that lets you build a thin client network on a Windows operating system. It was originally designed to work in a server or workstation with Windows XP Professional and using the native remote desktop protocol or RDP. To this end, the Lan Core package includes: (1) the Preboot Execution Environment or PXE service, a server application used to boot the thin clients (also referred as terminals or clients) in a local area network; (2) the thin client operating system (Thin OS), an embedded system based on Linux; and (3) an interface application used to manage the PXE service and thin clients. The thin clients' boot is done through a local area network (LAN), and it is based on the Preboot Execution Environment (PXE) protocol. In order to do it, Lan Core also provides two additional services: a DHCP server and a Trivial FTP server for Windows, used to assign IP addresses and transfer boot files, respectively.
----------------------------------------------------------------------------------------------------------------
SourceForge: Lan Core is a free & open source software that lets you to build a thin client network on a Windows operating system. It was originally designed to work in a server or workstation with Windows XP Professional using the native remote desktop protocol. Lan Core :: Thin Client Server and OS Web Site
=============================================================================================================
JFunc JFunc JUnit Functional Testing Extension
-----------------------------------------------------------------------------------------------------------------
FreeCode: JFunc is an extension to the JUnit testing framework to make it easier for use with functional tests. Functional testing (also called integration testing) significantly differs from unit testing in a number of respects. Part of this project is dedicated towards putting together code to address these differences; the other part is putting together methodologies for functional testing.
----------------------------------------------------------------------------------------------------------------
SourceForge: JFunc is a JUnit extension designed to address issues of functional testing (also known as systems/integration/scenario testing) concerning not only the differences in code, but also the differences in methodology. JFunc JUnit Functional Testing Extension Web Site
=============================================================================================================
Network UPS Tools NUT - Network UPS Tools
-----------------------------------------------------------------------------------------------------------------
FreeCode: Network UPS Tools (also known as NUT) is an extremely powerful and versatile client/server based approach to UPS monitoring. Products from a wide range of vendors (APC, Belkin, Best Power, MGE, Tripp-Lite, etc.) are supported. A shared UPS can be monitored by one host, notifcations being sent to the other hosts via authenticated TCP connections. A Web interface is available, as is a Windows client.
----------------------------------------------------------------------------------------------------------------
OpenHub: The primary goal of the Network UPS Tools (NUT) project is to provide support for Power Devices, such as Uninterruptible Power Supplies, Power Distribution Units and Solar Controllers.
=============================================================================================================
ISIS Interactive Spectral Interpretation System
-----------------------------------------------------------------------------------------------------------------
SourceForge: The Malete database core is the new basis of OpenIsis, which has its roots in the UNESCO CDS/ISIS database. Traditionaly used in libraries; now a general purpose highspeed database. ISIS Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: The Interactive Spectral Interpretation System (ISIS) is designed to facilitate the interpretation and analysis of high resolution X-ray spectra. It is being developed as a programmable, interactive tool for studying the physics of X-ray spectrum formation, supporting measurement and identification of spectral features and interaction with a database of atomic structure parameters and plasma emission models.
=============================================================================================================
Vim GVim
-----------------------------------------------------------------------------------------------------------------
OpenHub: Vim is an advanced text editor that seeks to provide the power of the de-facto Unix editor 'Vi', with a more complete feature set. It's useful whether you're already using vi or using a different editor.
OSChina: Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 主要功能 根据设定可以和原始vi完全兼容 多缓冲编辑 任意个数的分割窗口(横,竖) 具备列表和字典功能的脚本语言 可以在脚本中调用 Perl, Ruby, Python, Tcl, MzScheme 单词缩写功能 动态单词补完 多次撤销和重做 对应400种以上文本文件的语法高亮 C/C++, Perl, Java, Ruby, Python 等40种以上语言的自动缩排 利用ctags的标签中跳转 崩溃后文件恢复 光标位置和打开的缓冲状态的保存 复原session功能 可以对两个文件进行差分同步功能的diff模式 远程文件编辑 Omni补完上下文相关的补完
FreeCode: Vim is an almost fully-compatible version of the Unix editor Vi. Many new features have been added including multi-level undo, syntax highlighting, commandline history, online help, filename completion, and block operations. It is descended from the vi clone "stevie" and runs on many systems, including Unix, MS Windows, OS/2, Macintosh, VMS, and Amiga.
----------------------------------------------------------------------------------------------------------------
OSChina: Vim是Linux上的著名的文本编辑器他是早年的Vi编辑器的加强版。这个GVim是windows版的并且有了标准的windows风格的图形界 面所以叫g(graphical)Vim。这是一个国际版本会根据安装的平台自动选择相应语言包支持中文及其各种编码连界面也是中文的请放心使 用。这个极具Unix特色和风格(simple is the best)的编辑器相信会给您带来不同的感受。
=============================================================================================================
SlackPkg slackpkg+
-----------------------------------------------------------------------------------------------------------------
FreeCode: Slackpkg is an automated package-management tool for Slackware Linux. It can do tasks such as automatic downloading and installing or upgrading, browse the MANIFEST.gz (Slackware package-contents guide), and more. Dependencies are not automatically handled. It is not a replacement for pkgtool, but a valuable add-on.
----------------------------------------------------------------------------------------------------------------
SourceForge: Slackpkg is a good package manager for slackware that help the user to keep updated its installation. The Slackpkg+ project is a simple plugin that allow the user to add third-party repositories to slackpkg so to use a single tool for keep update the slackware installation and to install non-official packages. Like slackpkg, slackpkg+ leave unchanged the slackware philosophy becouse the user take full control of installation process. Slackpkg+ also allow to install and keep updated the alienbob's compat32 libraries so to have a multilib system without download and install it manually. Slackpkg+ is NOT a new tool with new commands. The user can continue to use the standard slackpkg command line: # slackpkg update gpg # slackpkg update # slackpkg install openjdk # slackpkg upgrade-all etc.. slackpkg+ Web Site
=============================================================================================================
Hermes Horde Hermes
-----------------------------------------------------------------------------------------------------------------
SourceForge: Hermes provides a Swing GUI to access JMS queues and topics for common tasks such as sending messages, removing messages and copying messages between queues and topics. Hermes Web Site
FreeCode: HERMES is a Web application framework designed to help provide a rapid application development framework for business tools with an initial focus of CRM (application included). It provides an integrated and flexible approach to business tools, and allows for database abstraction, library models, user rights management, and other critical areas.
----------------------------------------------------------------------------------------------------------------
FreeCode: Hermes is a Horde time-tracking application. It ties into address books (to retrieve clients) and task lists, bug trackers, etc. (to retrieve cost objects). It comes with a stop watch, search and reporting capabilities, a Mac OS X Dashboard widget, and an invoice interface.
=============================================================================================================
SWTBot Eclipse SWTBot - SWT/Eclipse functional testing
-----------------------------------------------------------------------------------------------------------------
FreeCode: SWTBot is a Java-based functional testing tool for testing SWT and Eclipse based applications. It provides APIs that are simple to read and write and hide the complexities involved with SWT and Eclipse. This makes it suitable for functional testing by everyone. A set of assertions that are useful for SWT are provided, and you can also use your own assertion framework. A recorder and driver are provided for recording and playing back tests along with Ant tasks so that you can run your builds from within CruiseControl or other CI tools.
----------------------------------------------------------------------------------------------------------------
OpenHub: SWTBot is an automation and testing tool for SWT/RCP applications, with the facility to record and playback scripts. Features will include, text based scripts, ant support for playback of test suites, reporting, and multi threaded playback.
=============================================================================================================
Dexter Dexter-XSL
-----------------------------------------------------------------------------------------------------------------
SourceForge: Dexter is an Open Source Tool for the Automation Industry that provides the user with a friendly graphic interface for simulating both MODBUS and DNP3 slaves, over multiple serial and TCP/IP connections. Dexter Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: Dexter is a tool that allows users to define extended attributes which can be associated with descriptors and editors. These attributes can be embedded into any well-formed XML document. The resulting embellished document, the 'source', is then input to the dexter engine. This will generate one or more XSLT stylesheets describing the input document interpolating editor modifications and any instructions specified by the descriptors. As dexter's operations are specified exclusively with extended attributes, all but the most unforgiving of XML content viewers will continue to see the decorated source exactly as the designer saw it before.
=============================================================================================================
eViacam Enable Viacam
-----------------------------------------------------------------------------------------------------------------
SourceForge: Mouse replacement software that moves the pointer as you move your head. It works on standard PCs equipped with a web camera. No additional hardware is required. Based on the award winning Facial Mouse software. For Linux and Windows systems. eViacam Web Site Follow @creasoftware
----------------------------------------------------------------------------------------------------------------
FreeCode: Enable Viacam (eViacam) is a mouse replacement software that moves the pointer as you move your head. It works on standard PCs equipped with a Web camera. No additional hardware is required. It is based on the award winning Facial Mouse software.
=============================================================================================================
poMMo poMMo - The post modern Mass Mailer
-----------------------------------------------------------------------------------------------------------------
OpenHub: poMMo is versatile mass mailing software. It can be used to add a mailing list to your Web site or to organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives.
FreeCode: poMMo is versatile mass mailing software. It can be used to add a mailing list to your Web site or to organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives.
----------------------------------------------------------------------------------------------------------------
SourceForge: poMMo is versatile Mass Mailing software. Add a mailing list to your website, or organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives. poMMo - The post modern Mass Mailer Web Site
=============================================================================================================
Big Brother BB Webcam Viewer
-----------------------------------------------------------------------------------------------------------------
FreeCode: Big Brother is a combination of monitoring methods. Unlike SNMP where information is just collected and devices polled, Big Brother is designed in such a way that each local system broadcasts its own information to a central location. Simultaneously, Big Brother also polls all networked systems from a central location. This creates a highly efficient and redundant method for proactive network monitoring.
----------------------------------------------------------------------------------------------------------------
FreeCode: BB (Big Brother) is a small and simple webcam and security camera viewer that, given the URL of an image and a refresh rate, will display the latest image on the desktop. Images can be displayed in a normal window, always-on-top, or below everything else.
=============================================================================================================
isk-daemon (imgSeek) imgSeek - Intelligent image database
-----------------------------------------------------------------------------------------------------------------
OpenHub: isk-daemon is an open source standalone server or library capable of adding content-based (visual) image searching to any image related website or software. Also known as "imgSeek - Intelligent image database"
----------------------------------------------------------------------------------------------------------------
SourceForge: imgSeek is a photo collection manager and viewer with content-based search and many other features. The query is expressed either as a rough sketch painted by the user or as another image you supply (or an image in your collection). imgSeek - Intelligent image database Web Site
=============================================================================================================
Foswiki JumpBox for the Foswiki Wiki System
-----------------------------------------------------------------------------------------------------------------
OpenHub: Foswiki is the next generation of enterprise collaboration suites. With Foswiki, you don't have to be a programmer to collect, store, and re-use enterprise information: everyday users have the power to easily create Web 2.0 applications such as mashups and social interaction tools.
SourceForge: Foswiki is an Enterprise wiki, typically used to run a collaboration platform, knowledge base or document management system. Users can create wiki applications using the Topic Markup Language, and developers can extend its functionality with plugins. Foswiki stands for "Free and Open Source" wiki to emphasize its commitment to Open Source software.
----------------------------------------------------------------------------------------------------------------
FreeCode: Foswiki is a wiki system that is notable for its approachability for non-technical users and its ability to store content in a structured fashion. Running JumpBox for the Foswiki Wiki System allows you to be up and running with this software in minutes on any operating system. It carries other benefits such as portability across computing environments, a Web-based admin console to simplify administration, and a built-in automated backup system to protect your work. Once you've deployed one JumpBox, you'll be able to deploy any of over 50 open source applications regardless of the underlying technologies utilized.
=============================================================================================================
STAF Software Testing Automation Framework
-----------------------------------------------------------------------------------------------------------------
OSChina: STAF (SW Test Automation Framework) 是一个自动化测试框架用以提升测试用例和测试环境的可重用性以及自动化的程度。STAF 为测试人员提供了一个端到端的自动化测试解决方案。
----------------------------------------------------------------------------------------------------------------
FreeCode: STAF (Software Testing Automation Framework) is a framework designed to improve the level of reuse and automation in test cases and test environments. Its goal is to provide a complete end-to-end automation solution for testers.
=============================================================================================================
Query Object Framework QOF Generator
-----------------------------------------------------------------------------------------------------------------
FreeCode: QOF (Query Object Framework), provides a set of C Language utilities for performing generic structured complex queries on a set of data held by a set of C/C++ objects. This framework is unique in that it does not require SQL or any database at all to perform the query. Thus, it allows programmers to add query support to their applications without having to hook into an SQL database.
----------------------------------------------------------------------------------------------------------------
FreeCode: Generating new objects for the Query Object Framework is repetitive, tedious, and time consuming. Qof Generator automates this process in PHP to build a working test program linked against QOF. Objects are created from an HTML form using a temporary MySQL cache and exported with Makefile, ./autogen.sh, ChangeLog, README, C source code, and doxygen mark-up comments in a tarball built by the PHP code.
=============================================================================================================
linda PyLinda
-----------------------------------------------------------------------------------------------------------------
FreeCode: linda is a simple library implementation of the Linda parallel programming system (http://www.cs.yale.edu/Linda/linda.html). To write a parallel program with linda, you have to know only 6 functions: spawn, out, in, inp, rd, and rdp. linda was originally written by Wong Weng Fai. It has been improved by making it a real library by using GNU autotools, by adding timeout functions, and by using glib/gthread.
----------------------------------------------------------------------------------------------------------------
FreeCode: Linda is a widely studied distributed computing environment, centered around the notion of a tuple space. A tuple space is a bag (also called a multi-set) of tuples. A tuple is an ordered, typed chunk of data. Tuple spaces exist independently of processes in the system, and the data placed into a tuple space also exist independently. PyLinda is a simple implementation of a Linda system, but it also includes several of the more recently proposed extensions to Linda in the form of multiple tuple spaces, garbage collection, sane non-blocking primitives and bulk tuple operations.
=============================================================================================================
Nutch Apache Nutch
-----------------------------------------------------------------------------------------------------------------
OSChina: Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Nutch的创始人是Doug Cutting他同时也是Lucene、Hadoop和Avro开源项目的创始人。 Nutch诞生于2002年8月是Apache旗下的一个用Java实现的开源搜索引擎项目自Nutch1.2版本之后Nutch已经从搜索引擎演化为网络爬虫接着Nutch进一步演化为两大分支版本1.X和2.X这两大分支最大的区别在于2.X对底层的数据存储进行了抽象以支持各种底层存储技术。 在Nutch的进化过程中产生了Hadoop、Tika、Gora和Crawler Commons四个Java开源项目。如今这四个项目都发展迅速极其火爆尤其是Hadoop其已成为大规模数据处理的事实上的标准。Tika使用多种现有的开源内容解析项目来实现从多种格式的文件中提取元数据和结构化文本Gora支持把大数据持久化到多种存储实现Crawler Commons是一个通用的网络爬虫组件。 Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到: 每个月取几十亿网页 为这些网页维护一个索引 对索引文件进行每秒上千次的搜索 提供高质量的搜索结果 以最小的成本运作 在线Javadochttp://tool.oschina.net/apidocs/apidoc?api=nutch2.0
----------------------------------------------------------------------------------------------------------------
OpenHub: Nutch is a search engine based on Apache Lucene.,
FreeCode: Nutch is highly scalable Web searching software which builds on top of Apache Hadoop and Lucene Java. Key features include a Web crawler, indexer, crawl management tools, parsers for HTML, PDF, DOC, and several other document formats, and an expandable architecture that allows you to plug in additional functionality such as document parsers, custom scoring algorithms, custom content parsers, protocols, and more.
=============================================================================================================
CouchPotato Couch Potato App
-----------------------------------------------------------------------------------------------------------------
FreeCode: CouchPotato is a media center application. It can play movies (in any format QuickTime can play) and it works with all infrared remote controls supported by the IRTrans universal IR receiver. CouchPotato is extendable by plugins. Plugin classes include applications (DVD player, music player, etc.), skins, and more.
----------------------------------------------------------------------------------------------------------------
OpenHub: CouchPotato (CP) is an automatic NZB downloader. You can keep a "movies I want"-list and it will search for NZBs & Torrents of these movies every X minutes. Once a movie is found, it will send it to SABnzbd or download the nzb/torrent to the provided folder.
=============================================================================================================
Perl Wolf Software WolfChat (Perl)
-----------------------------------------------------------------------------------------------------------------
OpenHub: Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development, network programming, GUI development, and more. Its major features include support for multiple programming paradigms (procedural, object-oriented, and functional styles), automatic memory management, built-in support for text processing, and a large collection of third-party modules.
OSChina: Perl是一种脚本语言。 最初的设计者为拉里·沃尔Larry Wall它於1987年12月18日發表。Perl借取了C、sed、awk、shell scripting 以及很多其他程式語言的特性。其中最重要的特性是他内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN。 Perl原名pearl但是在這個語言官方發表前拉里·沃尔發現已經有個程式語言“pearl”便將這個程式語言的名字改成Perl。对于Perl 这四个字母有一些解釋包括充滿幽默感的“Pathologically Eclectic Rubbish Lister”。“Practical Extraction and Report Language”曾經出現在很多有關Perl的資料裏包括官方的主頁。不过事实上这个长名字是后来凑出来的。它的名字第一個字母大写Perl時就 指這個程式語言無大写字母perl時就指它的直譯器。將Perl寫成“PERL”是不適當的因為它並非一個縮寫字。 Perl 语言的中心思想可以集成为一句话「TMTOWTDI」 There's More Than One Way To Do It.(不只一种方法來做这件事。) Perl 的作者 Larry Wall 建议可以把这个缩写词念成「Tim Toady」。 另一个 Perl 程序员常常想起的 Perl 俗语是: Easy things should be easy, and hard things should be possible. Perl駱駝是歐萊禮媒體O'Reilly Media設計給Perl程式語言的圖標。牠也是一種駭客的象徵出現在某些T-shirt和其他衣服標籤上。 歐萊禮擁有此圖像之商標,並且宣稱,唯有在捍衛「符號之完整性」時,才會行使其法律上的權力。歐萊禮允許此商標在非商業目的之前提下被使用,並同時供了 Programming Republic of Perl 的圖像以及 Powered by Perl 的按鈕圖。然而,駱駝其實從未被考慮成為 Perl 的官方識別符號,真要說有的話,其識別符號其實是洋蔥。 为了实现这样的目标,并且又因为 Larry Wall 本人也是一个语言学家他设计Perl语言时使用了很多语言学的思维。相比 C、Pascal 这样的“高级”语言而言Perl语言直接提供泛型變數、动态数组、Hash表等更加便捷的编程元素。Perl 具有动态语言的 强大灵活的特性并且还从C/C++、Basic、Pascal 等语言中分别借鉴了语法规则,从而提供了许多冗餘语法。使得程序员可以忽略计算机内部資料存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将 思考中心放在所需要的程序逻辑上。就这一点而言,很多 Perl 程序员认为目前只有 Perl、Python等泛型语言才能称为“高级”语言而 C、Pascal 甚至 C++ 这些只能称为“中高级”语言而已。可以说在统一變數类型和掩盖运算细节方面Perl 做得比 Python 更为出色。 由于从其他语言大量借鉴了语法,使得从其他编程语言转到 Perl 语言的程序员可以迅速上手写程序并完成任务,这使得 Perl语言是一门容易用的语言。但问题是这样写出来的“类xx语言”的 Perl 程序对不熟悉这种语言的程序员却如同天书,这使得 Perl 语言易写不易读。 也正是因为 Perl 的灵活性和“过度”的冗余语法,也因此获得了 write-only 的“美誉”,因为许多 Perl 程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍。 但 Perl 同样可以将代码书写得像 Python 或 Ruby 等语言一样优雅。
FreeCode: Perl is a high-level, general-purpose programming language that makes easy things easy and hard things possible. It is optimized for scanning arbitrary text files and system administration. It has built-in extended regular expression matching and replacement, a dataflow mechanism to improve security with setuid scripts and is extensible via modules that can interface to C libraries.
----------------------------------------------------------------------------------------------------------------
FreeCode: WolfChat (Perl) is a simple implementation of WolfChat. It was written purely as a challenge and demonstration of Perl socket code.
=============================================================================================================
Dolphin (KDE) Dolphin-emu
-----------------------------------------------------------------------------------------------------------------
OpenHub: Dolphin is a file manager for KDE focusing on usability. The main features of Dolphin are: * Navigation bar for URLs, which allows to navigate quickly through the file hierarchy. * View properties are remembered for each folder. * Split of views is supported. * Network transparency. * Undo functionality. * Renaming of a variable number of selected items in one step.
----------------------------------------------------------------------------------------------------------------
OpenHub: Dolphin is a Gamecube and Wii emulator with built in tools for managing gamecube, wii, and wiiware games and saves. There is also support for action replay and gecko cheat code systems, and a full debugger.
FreeCode: Dolphin is a Nintendo GameCube, Wii, and Triforce emulator for Microsoft Windows, Linux, and Mac OS X (on Intel-based machines), it is the first emulator to successfully run commercial GameCube and Wii games, and is still the only emulator capable of running commercial Wii games.
=============================================================================================================
QuteCom QuteCom (formerly WengoPhone)
-----------------------------------------------------------------------------------------------------------------
SourceForge: QuteCom (previously called OpenWengo) is a SIP-compliant voice-over-IP client that allows you to speak to other users of SIP-compliant softphones at no cost. It also allows users to call landlines and cell phones, send SMS text, and make video calls, and is compatible with any SIP provider. QuteCom Web Site
FreeCode: QuteCom (formerly WengoPhone) is a multi-platform VoIP client. The GUI is Qt-based, and the Video-over-IP engine is based on the eXosip, oSIP, oRTP, ffmpeg, and libgaim projects. The eXosip module is extended by a phApi module, which implements a high-level, easy-to-use call control API. It supports PC-to-PC voice, video, and chat. One can use a standard SIP service provider such as Wengo to be assigned an incoming number, make calls to PSTN/cell phones, get voice mail, and more. In addition to SIP/SIMPLE QuteCom provides IM functionality using libgaim, so it is compatible with all protocols supported by libgaim.
----------------------------------------------------------------------------------------------------------------
OpenHub: QuteCom is the new name for the open source softphone previously known as WengoPhone, a standards-based softphone and multi-protocol IM client.
=============================================================================================================
V8 Google V8 JavaScript Engine
-----------------------------------------------------------------------------------------------------------------
OSChina: V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。
----------------------------------------------------------------------------------------------------------------
OpenHub: V8 is Google's open source JavaScript engine.
=============================================================================================================
Jitsi Jitsi (previously SIP Communicator)
-----------------------------------------------------------------------------------------------------------------
FreeCode: Jitsi (formerly SIP Communicator) is an audio/video and chat communicator that supports protocols such as SIP, XMPP/Jabber, AIM/ICQ, Windows Live, Yahoo!, Bonjour, and many other useful features. It is currently the most feature rich Internet Communicator, and is the only one to provide encrypted audio/video calls, desktop streaming and sharing, and chat on Windows, Mac OS X, and Linux with both the SIP and XMPP protocols.
----------------------------------------------------------------------------------------------------------------
OpenHub: Jitsi (previously SIP Communicator) is a cross-platform VOIP, videoconference, desktop sharing and chat client.
=============================================================================================================
Qubit QuBit library
-----------------------------------------------------------------------------------------------------------------
FreeCode: Qubit (Qmail Ultimate Backend Integration Tool) is a fully Web-based qmail server configuration and administration suite. It is based on the qmailrules qmail server installation style. It has the same features as other similar tools (like vqadmin and qmailadmin), and it also gives you full control to administer your server with all sorts of features and applications.
----------------------------------------------------------------------------------------------------------------
FreeCode: QuBit is a library to support quantum superpositions in C++. This allows each variable of the CQuBit type to hold a number of different values at the same time. Normal mathematical operations can be performed on a QuBit, but they affect every value in the QuBit, at the same time. Binary operations on two QuBits cause a result based on every possible outcome.
=============================================================================================================
Spring Spring RTS Engine
-----------------------------------------------------------------------------------------------------------------
OSChina: Spring Framework 是一个开源的Java/Java EE全功能栈full-stack的应用程序框架以Apache许可证形式发布也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and DevelopmentISBN 0-7645-4385-7一书中的代码最初由 Rod Johnson 和 Juergen Hoeller等开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。 Spring 中包含的关键特性: 强大的基于 JavaBeans 的采用控制翻转Inversion of ControlIoC原则的配置管理使得应用程序的组建更加快捷简易。 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂。 数据库事务的一般化抽象层,允许宣告式(Declarative)事务管理器,简化事务的划分使之与底层无关。 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。 JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时你无需再写出另一个 '终止' (finally) 模块. 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致. 以资源容器DAO 实现和事务策略等形式与 HibernateJDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持, 解决了许多典型的Hibernate集成问题. 所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范. 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSPFreeMarkerVelocityTilesiText 以及 POI。值得注意的是Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 StrutsWebWork或 Tapestry。 提供诸如事务管理等服务的面向方面编程框架。 在设计应用程序Model时MVC 模式例如Struts通常难于给出一个简洁明了的框架结构。Spring却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的 JDBC 抽象层重新设计那些复杂的框架结构。 在线Javadochttp://tool.oschina.net/apidocs/apidoc?api=Spring-3.1.1
FreeCode: Spring is a lightweight Java/J2EE application framework based on code published in "Expert One-on-One J2EE Design and Development" by Rod Johnson. It includes powerful JavaBeans-based configuration management applying Inversion-of-Control principles, a generic abstraction layer for transaction management allowing for pluggable transaction managers, a JDBC abstraction layer, integration with Hibernate, JDO, Apache OJB, and iBATIS SQL Maps, AOP functionality, and a flexible MVC Web application framework with multiple view technologies. There is also a .NET port available.
----------------------------------------------------------------------------------------------------------------
OpenHub: Spring is a versatile 3D RTS game engine. Using extensively Lua for scripting game-specific code to make nearly every aspect of the engine customizable, from GUI, to unit AI, to pathfinding.
SourceForge: Spring is a versatile 3D RTS game engine. Using extensively Lua for scripting game-specific code to make nearly every aspect of the engine customizable, from GUI, to unit AI, to pathfinding. Spring RTS Engine Web Site
=============================================================================================================
termite (terminal) Xfce Terminal
-----------------------------------------------------------------------------------------------------------------
OpenHub: A keyboard-centric VTE-based terminal, aimed at use within a window manager with tiling and/or tabbing support.
----------------------------------------------------------------------------------------------------------------
OpenHub: Terminal is a modern terminal emulator for the Unix/Linux desktop - primarily for the Xfce desktop environment. It is a lightweight emulator based on the VTE widget, easy to use and provides an optional drop-down window (game-console style).
=============================================================================================================
ORFEO Toolbox OTB
-----------------------------------------------------------------------------------------------------------------
FreeCode: Orfeo Toolbox (OTB) is a high resolution remote sensing image processing library. It contains a set of algorithmic components which allow the user to capitalize on methodological know how, and therefore use an incremental approach to profit from the results of methodological research. OTB is made of a set of basic elements (a C++ class API) and utilities (independent programs built upon the base API).
----------------------------------------------------------------------------------------------------------------
OpenHub: ORFEO Toolbox (OTB) is distributed as an open source library of image processing algorithms. OTB is based on the medical image processing library ITK and offers particular functionalities for remote sensing image processing in general and for high spatial resolution images in particular. OTB is distributed under a free software licence CeCILL (similar to GPL) to encourage contribution from users and to promote reproducible research. The library is intensively tested on several platforms as Linux, Unix and Windows. Most functionnalies are also adapted to process huge images using streaming and multithreading as often as possible.
SourceForge: The Orfeo Toolbox is a C++ library for high resolution remote sensing image processing. It is developped by CNES in the frame of the ORFEO program. More information is available at www.orfeo-toolbox.org It is based on the medical image processing library ITK and offers particular functionalities for remote sensing image processing in general and for high spatial resolution images in particular. Targeted algorithms for high resolution optical images (SPOT, Quickbird, Worldview, Landsat, Ikonos), hyperspectral sensors (Hyperion) or SAR (TerraSarX, ERS, Palsar) are available. Orfeo ToolBox has three main access depending on the category of user: write processing chains in C++ using existing filters or creating new ones, use the OTB applications, which is a plugin-based framework allowing to extend high-level processing chains from various environment ( command-line, QT, QGis, Python....) or use Monteverdi, a software for everyday life image manipulation and analysis. OTB Web Site Follow @orfeotoolbox
=============================================================================================================
ThinWire ThinWire Ajax RIA Framework
-----------------------------------------------------------------------------------------------------------------
FreeCode: ThinWire is a development framework that allows you to easily build applications for the Web that have responsive, expressive, and interactive user interfaces without the complexity of the alternatives. While virtually any Web application can be built with ThinWire, it especially excels at enterprise applications, with its highly interactive and rich user interface components. Using ThinWire to handle the view-layer of your Java EE (J2EE) application can provide better user experience and with shorter development time.
----------------------------------------------------------------------------------------------------------------
OpenHub: ThinWire is an LGPL open source, free for commercial use, development framework that allows you to easily build applications for the web that have responsive, expressive & interactive user interfaces without the complexity of the alternatives. While virtually any web application can be built with ThinWire, when it comes to enterprise applications, the framework excels with its highly interactive and rich user interface components. Use ThinWire to handle the view-layer of your Java EE (J2EE) application and you'll be able to provide an unparalleled user experience, while at the same time completing your project faster than ever.
SourceForge: ThinWire is an Ajax RIA framework for building zero footprint Ajax browser applications that feel like desktop GUI applications. Program Ajax on the server, using an event driven GUI model that reconnects program logic. All Major Ajax Browsers Supported! ThinWire Ajax RIA Framework Web Site
=============================================================================================================
TWIG PHP Twig
-----------------------------------------------------------------------------------------------------------------
OpenHub: TWIG is a Web-based groupware suite written in PHP. Its features include IMAP and POP3 email, Usenet newsgroups, contact management, scheduling, shared notes, bookmarks and todo lists, meeting announcements, a file manager, a facility reservation tracker, a helpdesk system and a wiki-style intranet content management system. Information in any feature can be shared among users with group oriented access controls. TWIG is accessible, cross-platform, fast and browser-independent. TWIG is fully internationalized and translated into 22 languages.
OSChina: Twig是一个灵活快速安全的PHP模板语言。它将模板编译成经过优化的原始PHP代码。Twig拥有一个Sandbox模型来检测不可信的模板代码。Twig由一个灵活的词法分析器和语法分析器组成可以让开发人员定义自己的标签过滤器并创建自己的DSL。 示例模板: {% extends "layout.html" %} {% block content %}   Content of the page... {% endblock %}
FreeCode: TWIG is a Web-based groupware suite written in PHP, compatible with both PHP3 and PHP4. Its features include IMAP and POP3 email, Usenet newsgroups, contact management, scheduling, shared notes and bookmarks, a todo list, and meeting announcements. Any piece of information can be shared with others via group oriented access controls. By using only plain HTML, it is a simple, cross-platform, fast, and browser-independent way to access or share almost any kind of information, without the complexity or costs of other intranet/groupware packages. It is fully internationalized, with 24 translations.
----------------------------------------------------------------------------------------------------------------
OpenHub: Twig is a template language for PHP, released under the new BSD license (code and documentation).
=============================================================================================================
Prometheus Simply GNUstep (Prometheus)
-----------------------------------------------------------------------------------------------------------------
FreeCode: Prometheus is a strategical game for 10 to 20 players which is played by email. This package contains a C++ program which is needed for hosting the game, a player's manual, and a set of images you need in the HTML-game printouts.
----------------------------------------------------------------------------------------------------------------
FreeCode: Simply GNUstep (Prometheus) is a Linux/GNU distribution aimed at providing a OpenStep feeling right from the initial bootup. To enhance ease of use, this distribution is more stripped down than most. It is based upon its own source tree, not on any other Linux distribution.
=============================================================================================================
Chemistry Development Kit The Chemistry Development Kit
-----------------------------------------------------------------------------------------------------------------
FreeCode: The Chemistry Development Kit (CDK) is a library of Java classes for chemo-, bioinformatics, computational chemistry, and chemometrics. It provides important algorithms like substructure search, SMILES, Gasteiger charges, QSAR descriptor calculation, 3D structure generation, 2D layout and rendering, many IO formats, atom typing, and more.
----------------------------------------------------------------------------------------------------------------
OpenHub: The Chemistry Development Kit (CDK) is a library of Java classes for chemo-, bioinformatics, computational chemistry, and chemometrics. It provides important algorithms like substructure search, SMILES, Gasteiger charges, QSAR descriptor calculation, 3D structure generation, 2D layout and rendering, many IO formats, atom typing, and more.
=============================================================================================================
Gunther Gunther - PHP Website Builder
-----------------------------------------------------------------------------------------------------------------
FreeCode: Gunther allows the owner to create, manage, and easily maintain his or her Web site using a simple wiki-style syntax in a secure, Web-based environment. It avoids the bloat and complexity of other Content Management Systems, stores pages as flat files, and uses Smarty for template processing. Its features include per-page template preferences, automatic thumbnail creation, image gallery generation, table generation, and a clean and elegant default page template.
----------------------------------------------------------------------------------------------------------------
SourceForge: Gunther is an elegant, accessible, web-based tool (written in PHP) for those who want to build small to medium sized websites. It is also aimed at those building sites for other non-technical users to maintain. Zero configuration required. Gunther - PHP Website Builder Web Site
=============================================================================================================
armadillo Armadillo C++ Library
-----------------------------------------------------------------------------------------------------------------
FreeCode: Armadillo is an isometric view shooter game with Armadillo Man as the hero.
----------------------------------------------------------------------------------------------------------------
OpenHub: Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS libraries.
FreeCode: Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. The API is deliberately similar to Matlab's. Integer, floating point, and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS numerics libraries. A delayed evaluation approach, based on template meta-programming, is used (during compile time) to combine several operations into one and reduce or eliminate the need for temporaries.
=============================================================================================================
OpenGTS Open GPS Tracking System
-----------------------------------------------------------------------------------------------------------------
OSChina: OpenGTS(Open sourced GPS Tracking System)提供一个基础框架用于创建属于你的基于Web的GPS跟踪系统。它当前使用Google Maps来mapping。并能够通过插件增加对各种GPS跟踪设备的支持。
FreeCode: OpenGTS (Open Source GPS Tracking System) is a full featured Web-based GPS tracking system for fleets of vehicles. It supports OpenLayers and other map providers, detail/summary reporting, and various GPS tracking devices.
----------------------------------------------------------------------------------------------------------------
SourceForge: OpenGTS (Open Source GPS Tracking System) is a full featured web-based GPS tracking system for your fleet of vehicles. It supports OpenLayers and other map providers, detail/summary Reporting, and various GPS tracking devices. Open GPS Tracking System Web Site
=============================================================================================================
RapidMiner RapidMiner (YALE)
-----------------------------------------------------------------------------------------------------------------
OSChina: RapidMiner是世界领先的数据挖掘解决方案在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛包括各种数据艺术能简化数据挖掘过程的设计和评价。 功能和特点 免费提供数据挖掘技术和库 100%用Java代码可运行在操作系统 数据挖掘过程简单,强大和直观 内部XML保证了标准化的格式来表示交换数据挖掘过程 可以用简单脚本语言自动进行大规模进程 多层次的数据视图,确保有效和透明的数据 图形用户界面的互动原型 命令行(批处理模式)自动大规模应用 Java API应用编程接口 简单的插件和推广机制 强大的可视化引擎,许多尖端的高维数据的可视化建模 400多个数据挖掘运营商支持 耶鲁大学已成功地应用在许多不同的应用领域,包括文本挖掘,多媒体挖掘,功能设计,数据流挖掘,集成开发的方法和分布式数据挖掘
----------------------------------------------------------------------------------------------------------------
FreeCode: RapidMiner (formerly YALE) is a flexible Java environment for knowledge discovery in databases, machine learning, and data mining. Many nestable learning and preprocessing operators (including Weka) are provided. It features an XML-based graphical user interface, a plugin mechanism, and high-dimensional plotting, and provides an easy-to-use extension mechanism that makes it possible to integrate new operators and adapt the system to your personal requirements. A command line version is also included.
=============================================================================================================
is_email() Blender-boot
-----------------------------------------------------------------------------------------------------------------
OpenHub: Checks an email address against the followings RFCs:
FreeCode: is_email() is a PHP function that checks the validity of an email address. It tests whether the given address conforms to the followings RFCs: 5321, 5322, 4291, 2821, 2822, 3696, and 1123 (section 2.1).
----------------------------------------------------------------------------------------------------------------
SourceForge: Live session login user: live password:(no password) Blender-boot is designed to be a dual boot Linux distro. It boots straight into a light enviroment with Blender already open. Its has Dropbox and UbuntuOne for saving your files to open easily in your main operating system. It has Blender 2.62, Gimp 2.8(with single window mode), Guake terminal, Chromium browser and more. Its based on Ubuntu for ease of use and the Software Center has been left in, for installing more applications if you want to. Its a distraction free resource light distro designed with Blender in mind and fast rendering, I hope you enjoy it. Lots of how to`s will be on blenderboot.com soon. Blender-boot Web Site
=============================================================================================================
eLML eLML - eLesson Markup Language
-----------------------------------------------------------------------------------------------------------------
FreeCode: The eLesson Markup Language (eLML) is an XML framework for creating structured eLessons using XML. For easier lesson authoring, the Web-based WYSIWYG Firedocs eLML Editor is available, and to create eLML template layouts without any XSLT knowledge, you can use the Template Builder.
----------------------------------------------------------------------------------------------------------------
SourceForge: eLML (eLesson Markup Language) is an XML framework for creating structured eLessons based on a pedagogical model. eLML consists of an XMLSchema and XSLT files to create XHTML, PDF, LaTeX, IMS CP and SCORM versions, standards supported by most LMS. eLML - eLesson Markup Language Web Site
=============================================================================================================
Kate (KDE) libkate
-----------------------------------------------------------------------------------------------------------------
OpenHub: KDE Advanced Text Editor,
----------------------------------------------------------------------------------------------------------------
FreeCode: Kate is a codec for karaoke and text encapsulation for Ogg. Most of the time, this would be multiplexed with audio/video to carry subtitles, song lyrics (with or without karaoke data), etc, but it doesn't have to be. Moreover, the motion feature gives Kate a powerful means to describe arbitrary curves, so hand drawing of shapes can be achieved. This was originally meant for karaoke use, but can be used for any purpose. Motions can be attached to various semantics, like position or color, so scrolling or fading text can be defined.
=============================================================================================================
Ranquel Ranquel webserver
-----------------------------------------------------------------------------------------------------------------
FreeCode: Ranquel is a small Web server written in Perl. It serves static files and CGI applications (via GET and POST methods). It is designed to be highly portable and doesn't need any extra Perl modules or libraries, and is based on DNHTTPD but remains small and fast by not providing any "advanced" feature such as SSL support, virtual hosts, SSI, etc.
----------------------------------------------------------------------------------------------------------------
SourceForge: Ranquel is a lightweight http server written in Perl that can serve static files and execute CGI applications. Originally based on DNHTTPD, the main goal is to make a simple, portable and minimum webserver (no extra Perl modules, no SSI, no SSL). Ranquel webserver Web Site

View File

@ -0,0 +1,881 @@
=============================================================================================================
gThumb gThumb image viewer and browser 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: gThumb is an image viewer written for the GNOME environment. It lets you browse your hard disk, showing you thumbnails of image files. It also lets you view single files (including GIF animations), organize images in catalogs, print images, view slideshows, set your desktop background, and more. gThumb also supports Nautilus thumbnails.
----------------------------------------------------------------------------------------------------------------
OpenHub: gThumb is an image viewer written for the GNOME environment. It lets you browse your hard disk, showing you thumbnails of image files. It also lets you view single files (including GIF animations), organize images in catalogs, print images, view slideshows, set your desktop background, and more. gThumb also supports Nautilus thumbnails.
SourceForge: Image viewer and browser for the GNOME environment gThumb image viewer and browser Web Site
=============================================================================================================
JGame JGame - a Java engine for 2D games 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: JGame is a 2D game engine that makes multi-platform development easier. It runs on the Java JRE 1.3+ platform with optional OpenGL (JOGL) enhancements, the J2ME (MIDP2.0/CLDC1.1) mobile platform, and the Android (2.1+) platform. JGame features sprites with automatic animation and collision detection, a tile-based background with easy sprite-tile interaction facilities, automatic scaling, sound, game state, persistent storage, and game options. The engine provides an enhanced graphics API with a fallback to simpler and more efficient graphics on J2ME and plain JRE. A patched version of the JBox2D physics engine that runs on all platforms is included.
----------------------------------------------------------------------------------------------------------------
SourceForge: JGame is a small multiplatform 2D game engine. It runs on the Java JRE 1.3+ platform, the J2ME (MIDP2.0/CLDC1.1) mobile platform, and the Android (2.1+) platform. It provides a very high-level framework for "classic" type arcade games. JGame - a Java engine for 2D games Web Site
=============================================================================================================
NagiosQL NagiosQL - Nagios configuration tool 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: NagiosQL is a web based administration tool for Nagios. It helps you to build easy a complex configuration with all options, manage them and use them. NagiosQL needs a webserver with php, MySQL and file access to the Nagios configuration files.
----------------------------------------------------------------------------------------------------------------
SourceForge: NagiosQL is a professional, web based configuration tool for Nagios 2.x/3.x and other Nagios based monitoring tools. It is designed for large enterprise requirements as well as small environments. Any Nagios functionalities are supported.
=============================================================================================================
Listen Listen Music Player 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Listen is a mailing list management application for Plone that allows for easy creation of mailing lists through the Plone interface, forum-like posting and viewing of archives, and a choice of list types.
----------------------------------------------------------------------------------------------------------------
OpenHub: Listen is an audio player written in Python. Thanks to it, you can easily organize your music collections.
=============================================================================================================
bison GNU Bison 1
-----------------------------------------------------------------------------------------------------------------
OSChina: GNU bison是一个自由软件用于自动生成语法分析器程序实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新近版本中Bison增加了对GLR语法分析算法的支持。 GNU bison基本兼容Yacc并做了一些改进。它一般与flex一起使用。
FreeCode: Bison is a parser generator in the style of yacc(1). It should be upwardly compatible with input files designed for yacc.
----------------------------------------------------------------------------------------------------------------
OpenHub: Bison is a general-purpose parser generator that converts an annotated context-free grammar into an LALR(1) or GLR parser for that grammar. Once you are proficient with Bison, you can use it to develop a wide range of language parsers, from those used in simple desk calculators to complex programming languages.
=============================================================================================================
Komport Komport2 10
-----------------------------------------------------------------------------------------------------------------
FreeCode: Komport is a KDE program which allows the user to communicate over a serial port while providing VT100 terminal emulation.
----------------------------------------------------------------------------------------------------------------
SourceForge: Komport is an serial port communications and vt102 terminal emulator for Qt. Aim of the project is to provide an alternative to minicom with an Qt style user interface. komport2 Web Site
FreeCode: Komport2 is a serial port communications and VT102 terminal emulator. It has an easy-to-use GUI.
=============================================================================================================
IDL2Matlab IDL2Matlab: IDL to Matlab/Scilab 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: IDL2Matlab is a program for automatically translating a program from IDL into Matlab and Scilab. IDL and Matlab are two major numerical languages for scientists. Scilab is a free Matlab-like language. Many IDL programs have been developed in large facilities studying astrophysics, geology, medicine, and particle and nuclear physics. On the other hand, Matlab is widely used in smaller laboratories, such as universities and national scientific agencies. This program is designed to extend the portability of such IDL programs.
----------------------------------------------------------------------------------------------------------------
SourceForge: IDL2Matlab is an Automatic translation tool from an IDL program into Matlab and Scilab code. We do not guaranty a 100% conversion efficiency. IDL2Matlab: IDL to Matlab/Scilab Web Site
=============================================================================================================
Plone Plone CMS 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Plone is a ready-to-run content management system that is built on Python. Plone is easy, flexible, and gives you a system for web content that is ideal for projects, communities, websites and intranets.
----------------------------------------------------------------------------------------------------------------
OSChina: Plone的是一个现成的经营内容管理系统在强大和自由的Zope应用服务器上。 Plone的是易于安装非常灵活并提供了一个用于管理网页内容项目适合团体社区网站互联网和局域网使用。 Plone is easy to install. You can install Plone with a a click and run installer, and have a content management system running on your computer in just a few minutes. Plone is easy to use. The Plone Team includes usability experts who have made Plone easy and attractive for content managers to add, update, and mantain content. Plone is international. The Plone interface has more than 35 translations, and tools exist for managing multilingual content. Plone is standard. Plone carefully follows standards for usability and accessibility. Plone pages are compliant with US Section 508, and the W3C's AAA rating for accessibility. Plone is Open Source. Plone is licensed under the GNU General Public License, the same license used by Linux. This gives you the right to use Plone without a license fee, and to improve upon the product. Plone is supported. There are close to a hundred developers in the Plone Development Team around the world, and a multitude of companies that specialize in Plone development and support. Plone is extensible. There is a multitude of add-on products for Plone to add new features and content types. In addition, Plone can be scripted using web standard solutions and Open Source languages. Plone is technology neutral. Plone can interoperate with most relational database systems, open source and commercial, and runs on a vast array of platforms, including Linux, Windows, Mac OS X, Solaris and BSD.
FreeCode: Plone is a content management system that is simple to set up, maintain, and modify. It is designed to be a corporate-ready content management system. It is ideal as an intranet and extranet server, as a document/Web publishing system, and as a groupware tool for collaboration between separately located entities. It aims to be a proper content management and publishing system, sharing the same qualities as Teamsite, Livelink, and Documentum.
=============================================================================================================
Tcl (CPAN) Tcl 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: The Tcl extension provides a small but complete interface into libtcl and any other Tcl-based library for Perl programmers. It lets you create Tcl interpreters (as Perl 5 objects), bind in commands to them (either Perl subroutines or C functions dynamically loaded with the DynaLoader extension), and execute Tcl code in those interpreters.
----------------------------------------------------------------------------------------------------------------
SourceForge: Tool Command Language (Tcl) is an interpreted language and very portable interpreter for that language. Tcl is embeddable and extensible, and has been widely used since its creation in 1988 by John Ousterhout. Bug reports to http://core.tcl.tk/tcl/ Follow code development at http://core.tcl.tk/tcl/ Tcl Web Site
OSChina: Tcl最早称为“工具命令语言”"Tool Command Language"但是目前已经不是这个含义不过我们仍然称呼它为TCL是一种 脚本语言。由John Ousterhout创建。 TCL很好学功能很强大。TCL经常被用于快速原型开发脚本编程GUI和测试等方面。TCL念作“踢叩”(tickle)。Tcl的特性包括 任何东西都是一条命令包括语法结构for,if等。 任何事物都可以重新定义和重载。 所有的数据类型都可以看作字符串。 语法规则相当简单。 提供事件驱动给Socket和文件。基于时间或者用户定义的事件也可以。 动态的域定义。 很容易用C, C++或者Java扩展。 解释语言,代码能够动态的改变。 完全的Unicode支持。 平台无关。Win32UNIXMac 上都可以跑。 和Windows的GUI紧密集成。Tk 代码紧凑,易于维护。 TCL本身在 8.6 以后提供面向对象的支持。因为语言本身很容易扩展到支持面向对象所以在8.6之前存在许多C语言扩展提供面向对象能力包括XOTcl, Incr Tcl 等。另外SNIT扩展本身就是用TCL写的。 使用最广泛的TCL扩展是TK。 TK提供了各种OS平台下的图形用户界面GUI。连强大的Python语言都不单独提供自己的GUI而是提供接口适配到TK上。 另一个流行的扩展包是Expect. Expect提供了通过终端自动执行命令的能力例如passwd, ftp, telnet等命令驱动的外壳. Tcl 支援扩充套件,这些扩充套件提供了额外的功能(像是 GUI自动化数据库存取等。 下面是一些 Tcl 扩充套件的列表: tclodbc mk4tcl sqlite Pgtcl, pgintcl mysqltcl, msqltcl AdabasTcl FBSQL ibtcl Oratcl Sybtcl db2tcl 示例代码: #!/bin/sh # next line restarts using tclsh in path \ exec tclsh $0 ${1+"$@"} # echo server that can handle multiple # simultaneous connections. proc newConnection { sock addr port } { # client connections will be handled in # line-buffered, non-blocking mode fconfigure $sock -blocking no -buffering line # call handleData when socket is readable fileevent $sock readable [ list handleData $sock ] } proc handleData { sock } { puts $sock [ gets $sock ] if { [ eof $sock ] } { close $sock } } # handle all connections to port given # as argument when server was invoked # by calling newConnection set port [ lindex $argv 0 ] socket -server newConnection $port # enter the event loop by waiting # on a dummy variable that is otherwise # unused. vwait forever
=============================================================================================================
Tellmatic tellmatic - the newslettermachine 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: "Tellmatic - the newsletter machine" is a PHP based newsletter script to create, manage and send personalized newsletters or massmails. It uses WYSIWYG and has a form editor. Recipients and newsletter are stored in unlimited groups. It handles bouncemails and failed adresses automagical.
FreeCode: Tellmatic is a tool to manage and create newsletters for personalized mailing or mass mailing. Addresses and newsletters are stored in groups to handle different user groups and thousands of addresses at a time. SMTP is used for sending the newsletter to your subscribers to make sure you get all error and bounce messages. Bounces can be handled automagically via a small bounce-management module with POP3 access. It also has a small form-editor and statistics. You can import and export your addresses in CSV format.
----------------------------------------------------------------------------------------------------------------
SourceForge: tellmatic is a php and mysql based newsletter script to create, manage and send personalized newsletters or mass mails. uses wysiwyg and has a form editor. adresses and newsletter are stored in unlimited groups. handle bouncemails and failed adresses tellmatic - the newslettermachine Web Site
=============================================================================================================
tk10 TK-10 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: tk10 is open source, multi-platform software for configuring the ICOM IC-R10 portable receiver. It lets you read a memory image from the receiver or a file, view and change settings using a graphical interface, and sort memory channels by frequency or by label. Users can import and export memory channel data from CSV files. tk10 can then write the image from the computer back to the radio.
----------------------------------------------------------------------------------------------------------------
FreeCode: TK10 is a GUI for the Bottlerocket program. It provides a graphical interface for controlling X10 modules that come with the X10 Firecracker kit. TK10 is designed to mimic the look and functionality of the HR12A controller unit that comes with the X10 Firecracker kit. If you are familiar with the HR12A, then you will find TK10 very easy to use. The on/off/dim buttons, device letter dial, and device number range switch work just like in the HR12A, and you can also edit the device labels.
=============================================================================================================
Tapioca Tapioca VoIP 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Tapioca is designed to provide an extremely thin layer on top of existing, albeit obscure, portions of the standard Java class library in order to provide an IoC container.
----------------------------------------------------------------------------------------------------------------
FreeCode: Tapioca is a framework for Voice over IP (VoIP) and IM applications. Its main goal is to provide an easy way to develop and use VoIP/IM services in any kind of application. It provides a pluggable interface for different protocols, such as SIP/XMPP.
=============================================================================================================
Eclipse Eclipse Project 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: Eclipse is a software development environment for many popular languages that includes an integrated development environment (IDE) and an extensible plug-in system. Eclipse can be used to develop Java by default, and has plugins to support: Ada, C, C++, COBOL, Perl, PHP, Python, R, Ruby (including Ruby on Rails framework), Scala, Clojure, Groovy and Scheme. Eclipse Web Site
OSChina: Eclipse是著名的跨平台的自由集成开发环境IDE。最初主要用来Java语言开发但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。 Eclipse的本身只是一个框架平台但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境2001年11月贡献给开源社区现在它由非营利软件供应商联盟Eclipse基金会Eclipse Foundation管理。 2003年Eclipse 3.0选择OSGi服务平台规范为运行时架构。 2007年6月稳定版3.3发布。2008年6月发布代号为Ganymede的3.4版。 Eclipse的基础是富客户机平台Rich Client Platform, 即RCP。RCP包括下列组件 核心平台(启动Eclipse运行插件 OSGi标准集束框架 SWT可移植构件工具包 JFace文件缓冲文本处理文本编辑器 Eclipse工作台即Workbench 包含视图views、编辑器editors、视角perspectives、和向导wizards Eclipse采用的技术是IBM公司开发的SWT这是一种基于Java的窗口组件类似Java本身提供的AWT和Swing窗口组件不过IBM声称SWT比其他Java窗口组件更有效率。Eclipse的用户界面还使用了GUI中间层JFace从而简化了基于SWT的应用程序的构建。 Eclipse的插件机制是轻型软件组件化架构。在富客户机平台上Eclipse使用插件来提供所有的附加功能例如支持Java以外的其他语 言。 已有的分离的插件已经能够支持C/C++CDT、Perl、RubyPython、telnet和数据库开发。插件架构能够支持将任意的扩展加入到 现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。 Eclipse的设计思想是一切皆插件。Eclipse核心很小其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括图形API (SWT/Jface) Java开发环境插件(JDT ),插件开发环境(PDE)等。 Eclipse由各种不同的计划组成。以下列出了部分计划。 Eclipse计划本身包括Eclipse平台Eclipse富客户端平台RCP和Java开发工具JDT。 Eclipse测试和性能工具平台TPTP提供一个允许软件开发者构建诸如测试调试、概况分析、基准评测等测试和性能工具的平台。 Eclipse Web工具平台计划 WTP用Java企业版Web应用程序开发工具来扩展Eclipse平台。它由以下部分组成HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和WSDL的 源代码编辑器XSD和WSDL的图形界面编辑器Java企业版的“项目性质”project nature、建构器builder和模型model与一个Java企业版的导航navigator一个Web服务Web service向导和浏览器还有一个WS-I测试工具最后是数据库访问查询的工具与模型。 Eclipse商业智能和报表工具计划BIRT提供Web应用程序特别是基于Java企业版的的报表开发工具。 Eclipse可视化界面编辑器计划VEP一个Eclipse下创建图形用户界面代码生成器的框架。 Eclipse建模框架EMF依据使用XMI描述的建模规格生成结构化数据模型的工具和其他应用程序的代码。 图形化编辑器框架GEF能让开发者采用一个现成的应用程序模型来轻松地创建富图形化编辑器。 UML2Eclipse平台下的一个UML 2.0元模型的实现,用以支持建模工具的开发。 AspectJ一种针对Java的面向侧面语言扩展。 Eclipse通讯框架ECF专注于在Eclipse平台上创建通讯应用程序的工作。 Eclipse数据工具平台计划DTP Eclipse设备驱动软件开发计划DSDP C/C++开发工具计划CDT努力为Eclipse平台提供一个全功能C和C++的集成开发环境IDE它使用GCC作为编译器。 Eclipse平台COBOL集成开发环境子计划COBOL将构建一个Eclipse平台上的全功能COBOL集成开发环境。 并行工具平台PTP将开发一个对并行计算机架构下的一组工具进行集成的平行工具平台而且这个平台是可移植的可伸缩的并基于标准的。 嵌入式富客户端平台eRCP计划将Eclipse富客户端平台扩展到嵌入式设备上。这个平台主要是一个富客户端平台RCP组件子集的集合。它能让桌面环境下的应用程序模型能够大致同样地能运用在嵌入式设备上。
----------------------------------------------------------------------------------------------------------------
FreeCode: Eclipse is a kind of universal tool platform - an open extensible IDE for anything and nothing in particular. The real value of Eclipse comes from tool plug-ins that "teach" Eclipse how to work with things - java files, web content, graphics, video, etc. Eclipse allows you to independently develop tools that integrate with other people's tools seamlessly.
=============================================================================================================
SQLite pysqlite 01
-----------------------------------------------------------------------------------------------------------------
OpenHub: SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine. Implements most of SQL92 and ACID (atomic, consistent, isolated, and durable) transactions; no setup or administration needed.
OSChina: SQLite是遵守ACID的关联式数据库管理系统它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。 不像常见的客户-服务器范例SQLite引擎不是个程序与之通信的独立进程而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。 特征 库实现了多数的SQL-92标准包括事务就是代表原子性、一致性、隔离性和持久性的ACID触发器和多数的复杂查询。不进行类型检查。你可以把字符串插入到整数列中。例如某些用户发现这是使数据库更加有用的创新特别是与无类型的脚本语言一起使用的时候。其他用户认为这是主要的缺点。 多个进程或线程可以访问同一个数据而没有问题。可以并行的满足多个读访问。只有在其他访问当前不被服务的时候才能满足写访问;否则写访问失败并带有一个错误代码(也可以在可配置的超时过期之后自动的重试)。 提供了叫做sqlite的一个独立程序用来查询和管理SQLite数据库文件。 它也充当写使用SQLite库的应用的一个例子。 语言绑定 可以从C/C++程序中使用这个库还可以获得对Tcl和一些其他脚本语言的绑定。 在CPAN的DBD::SQLite上有一个Perl的DBI/DBD模块它不是到SQLite的接口而是包括整个SQLite数据库引擎在其中并不需要任何额外的软件。 还有一个Python模块叫做PySQLite。 PHP从PHP5.0开始包含了SQLite但是自5.1版之后开始成为一个延伸函式库。SQLite能与PHP4一起工作但不包含在其中。 Rails2.0.3将缺省的数据库配置改为了SQLite 3 SQLite管理客户端 SQLite亦可以作为桌面数据库使用以下为第三方SQLite的GUI软件。例如 SQLiteMan使用QT开发的一个SQLite客户端支持多语言、跨平台。SQLiteMan SQLite Manager, 以 火狐浏览器的扩展形式提供的SQLite客户端。 SQLite Database Browser, a graphical client to access SQLite databases SqlPro SQL Client, another graphical client to work with SQLite databases 在线文档http://www.ostools.net/apidocs/apidoc?api=sqlite
FreeCode: SQLite is a small, fast, embeddable SQL database engine that supports most of SQL92, including transactions with atomic commit and rollback, subqueries, compound queries, triggers, and views. A complete database is stored in a single cross-platform disk file. The native C/C++ API is simple and easy to use. Bindings for other languages are also available.
----------------------------------------------------------------------------------------------------------------
OpenHub: pysqlite is a Python DB-API 2.0 interface for the SQLite embedded relational database engine.
FreeCode: SQLite is a powerful embedded relational database engine. pysqlite makes it available to Python developers via the Database API 2.0.
=============================================================================================================
vomit Video Management System 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: The vomit utility converts a Cisco IP phone conversation into a wav file that can be played with ordinary sound players. The phone conversation can either be played directly from the network or from a tcpdump output file. Vomit is also capable of inserting wavfiles into ongoing telephone conversations. It can be used as a network debugging tool, a speaker phone, etc.
----------------------------------------------------------------------------------------------------------------
FreeCode: Vomit is a Web-based management system for video stores. While the administrator can manage the stock, customer details and orders, customers can view the available content over the net.
=============================================================================================================
Journal Journal for the Web 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Journal is software for developing and publishing journals on the Web. It combines Java, Spring 3, Lucene, and Ehcache into an elegant solution for Web content management. The presentation is modern and CSS-based, and uses a responsive approach to layout. Resize your browser window and watch the layout adapt.
----------------------------------------------------------------------------------------------------------------
FreeCode: Journal is a Perl/CGI script that allows the user to keep a regular log of his/her thoughts. The interface is easy to understand, with only a few buttons to utilize. This journal is fast and able to be viewed and used by both text and graphical browsers. Drawbacks as of now are that it works better if Apache is running (but can be changed if the user can read Perl), and there is no installer. The pieces need to be hand placed (optimal placement in the README.txt), and there is not a Win32 port yet.
=============================================================================================================
MetroForm Project (.NET) Lucene.Net 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: 1.3 COMING SOON! Includes: Updated settings Improved all animations (using Transitions Library) Added new default theme Changed resize control Native maximise behaviour Added MetroButton (BETA) Form title is now automatically uppercase Currently Supported: WinForms Available Languages: Visual Basic.NET This is a simple Visual Studio template which has a pre-built Metro interface. Currently, there is only a VB version; however, a C# version will be introduced very soon, so stay posted! Likewise, a WPF version will be available in future. Because the project is new, documentation is still being created for the wiki, so please remain patient if you have any issues. To install, simply move the archive to Visual Studio 2010 > Templates > Project Templates > Visual Basic, and the project should then be available from the Visual Studio 'New Project' window. MetroForm Project (.NET) Web Site
----------------------------------------------------------------------------------------------------------------
OpenHub: Lucene.Net is a source code, class-per-class, API-per-API and algorithmatic port of the Java Lucene search engine to the C# and .NET platform utilizing Microsoft .NET Framework.
OSChina: .Net 是 .NET 版的 。 .Net 命名空间分析 .Net.Documents 这个命名空间提供了一些为封装要索引的文档所需要的类,比如 Document, Field。这样每一个文档最终被封装成了一个 Document 对象。 .Net.Analysis 这个命名空间主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。 .Net.Index 这个命名空间提供了一些类来协助创建索引以及对创建好的索引进行更新。这里面有两个基础的类IndexWriter 和 IndexReader其中 IndexWriter 是用来创建索引并添加文档到索引中的IndexReader 是用来删除索引中的文档的。 .Net.Search 这个命名空间提供了对在建立好的索引上进行搜索所需要的类。比如 IndexSearcher 和 Hits, IndexSearcher 定义了在指定的索引上进行搜索的方法Hits 用来保存搜索得到的结果。
=============================================================================================================
L2J L2J Server 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: Alternative Lineage 2 Game Server written in Java. L2J Web Site
OSChina: L2J是一个开源的采用纯Java开发的天堂Ⅱ(Lineage2)游戏服务器。
FreeCode: L2J is an alternate game server for Lineage2. The L2 protocol is reimplemented in the server, so you can play with this server without any modifications to the client (except changing the server IP address). The latest USA live client version is always supported, so don't expect this server to work with the PTS/Korean client.
----------------------------------------------------------------------------------------------------------------
OpenHub: L2J is a server application that emulates a Lineage II (a MMORPG) server. Players can play on a L2J server using the original Lineage II client. It was built from scratch in Java.
=============================================================================================================
bdb Berkeley DB 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: bdb is a bibliography database with a flexible Web-based interface. One can easily add items to the database, search for information in the database, and generate reports.
----------------------------------------------------------------------------------------------------------------
OpenHub: Berkeley DB (BDB) is a high-performance, embedded database library with bindings in C, C++, Java, Perl, Python, Tcl, Smalltalk and many other programming languages. BDB stores arbitrary key/data pairs as byte arrays, and supports multiple data items for a single key. BDB can support thousands of simultaneous threads of control or concurrent processes manipulating databases as large as 256 terabytes, on a wide variety of systems including most UNIX-like and Windows systems as well as real-time operating systems.
OSChina: Berkeley DB是历史悠久的嵌入式数据库系统主要应用在UNIX/LINUX操作系统上其设计思想是简单、小巧、可靠、高性能。 Berkeley DB 中国讨论区入口http://www.berkeleydb.net/
FreeCode: Berkeley DB (libdb) is a programmatic toolkit that provides embedded database support for both traditional and client/server applications. It includes b+tree, queue, extended linear hashing, fixed, and variable-length record access methods, transactions, locking, logging, shared memory caching, database recovery, and replication for highly available systems. DB supports C, C++, C#, Java, PHP, and Perl APIs. It supports key-value pair (NoSQL), SQL, and Java Object formatted data. It is available for a wide variety of Unix platforms as well as QNX, Android, Mac OS X, and several varieties of Windows.
=============================================================================================================
Atlantis Atlantis Installer 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Atlantis is a native Web browser for the GNOME desktop.
----------------------------------------------------------------------------------------------------------------
FreeCode: Atlantis is an installer developers can use to install software on users' computers on multiple platforms. It was designed for installing PHP-GTK2 applications as an alternative to PEAR, but will theoretically work for anything.
=============================================================================================================
CDT (Eclipse) Eclipse 2D Game Engine 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: The CDT is Eclipse's C/C++ Development Tooling project. It is a world class C/C++ IDE that also serves as a platform for others to provide value added tooling for C/C++ developers.
----------------------------------------------------------------------------------------------------------------
FreeCode: Eclipse is a set of C++ classes designed to give beginner developers a head start in developing their first games as well as more experienced developers who don't want to have to write code for mundane tasks like fonts, sprites, and image loading. It provides bitmap fonts, window management, audio capabilities, image loading, error logging, and zip file support.
=============================================================================================================
Logwatcher Graysky Plugins for Eclipse 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Log watcher is a PHP class that polls log files and takes newly added lines to send them to a given watcher email address. Although this class can be used to poll any type of log files, it was developed with the intention to overcome a limitation of the PHP error trapping system that is not able to capture certain types of errors during script execution, like script parsing errors or form file uploading failures. It is meant to be used from cron-like task schedulers to poll log files regularly. The email notification message can be composed from text templates. The message delivery function can be replaced by custom functions like the urgent mail function that can be faster for delivering critical messages.
----------------------------------------------------------------------------------------------------------------
SourceForge: LogWatcher is a tool to monitor any log file from an Eclipse view. Graysky Plugins for Eclipse Web Site
=============================================================================================================
Golly The Golly Game of Life Simulator 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Golly 是一个跨平台的用于探索生命游戏和细胞自动机的应用。功能包括有界和无界的宇宙快速生成算法Perl / Python的脚本一个最先进的模式集合。
----------------------------------------------------------------------------------------------------------------
FreeCode: Golly is a new implementation of John Conway's Game of Life for the Mac, PC, and X11, with an unbounded universe capable of running patterns faster and further than ever before.
=============================================================================================================
Rec Reverse Engineering Compiler 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Rec is a small app written in Perl to keep track of recipes.
----------------------------------------------------------------------------------------------------------------
FreeCode: REC is a portable reverse engineering compiler, or decompiler. It reads an executable file and attempts to produce a C-like representation of the code and data used to build it. It can decompile 386, 68k, PowerPC, and MIPS R3000 programs. It recognizes the following file formats: ELF (System V Rel. 4, e.g. Linux, Solaris, etc.), COFF (System V Rel. 3.x, e.g. SCO), PE (Win32 .EXE and .DLL for Microsoft Windows 95 and NT), AOUT (BSD derivatives, e.g. SunOS 4.x), Playstation PS-X (MIPS target only), and raw binary data (via .cmd files).
=============================================================================================================
jack-keyboard Virtual keyboard for JACK MIDI 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: jack-keyboard is a virtual MIDI keyboard - a program that allows you to send JACK MIDI events (play ;-) using your PC keyboard. It's BSD-licensed. User interface is GTK-based.
----------------------------------------------------------------------------------------------------------------
SourceForge: jack-keyboard is a virtual MIDI keyboard - a program that allows you to send JACK MIDI events (play ;-) using your PC keyboard. It's BSD-licensed. User interface is GTK-based. Virtual keyboard for JACK MIDI Web Site
=============================================================================================================
bfr Batch File Rename 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: bfr maintains a buffer of data collected from stdin, emitting the data to stdout. It will both read and write at the speed each stream can handle, and allows you to set thresholds of when to start outputting and inputting again (after reaching a full buffer), the size of the buffer, as well as monitor content/throughput with an optional progress-bar. It also includes bfp, a variant especially written to play audio data using /dev/dsp.
----------------------------------------------------------------------------------------------------------------
FreeCode: Batch File Rename (BFR) is a PHP library to rename sets of files and folders with many advanced options.
=============================================================================================================
pulse pulse-java 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Pulse is a continuous integration server (or build server) designed to be easy to use while offering powerful features. It regularly checks your source code out from your SCM, builds your projects, and notifies you of the results. Key features include simple setup and administration using an AJAX-powered Web UI, adaptability to existing environments, distributed building, personal builds (test using Pulse before committing), and individual developer dashboards and notification preferences.
----------------------------------------------------------------------------------------------------------------
FreeCode: Pulse is a Web application framework and portal solution that provides easy-to-use, extensible patterns for creating browser based applications, Web sites, and portals. It delivers a set of out-of-the-box components, such as CMS, shopping, and user management.
=============================================================================================================
Pencil (drawing/animation) Pencil2D 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics.
----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics. Pencil is free and open source.
=============================================================================================================
Pencil Pencil2D 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is a log-message-compiler for java. The main goal of the "Pencil" project is to provide a mechanism to make logging simple, secure and abstract. To achieve this result, "Pencil" uses its own expression language developed with the ANTLR parser-generator.
SourceForge: Pencil is a cross-platform open-source 2D animation software. Its first aim is to make traditional animations (cel, cartoons, etc). It features bitmap and vector drawing tools, layers, cameras. Animations made with Pencil can be exported as QuickTime. Pencil Web Site
OSChina: Pencil 是一款开源的原型图绘制工具手绘风格的就像自己在纸上画的那样。Pencil 还可以用来绘制各种架构图和流程图,同时还提供 Firefox 的插件(点击这里安装)。
----------------------------------------------------------------------------------------------------------------
OpenHub: Pencil is an animation/drawing software for Mac OS X, Windows, and Linux. It lets you create traditional hand-drawn animation (cartoon) using both bitmap and vector graphics. Pencil is free and open source.
=============================================================================================================
Fat-Free Fat-Free Framework 1
-----------------------------------------------------------------------------------------------------------------
OSChina: 全栈式Php 5.3微型框架,  自带auth, orm(sql/mongodb),  验证码图表feed, smtp等一系列功能
----------------------------------------------------------------------------------------------------------------
OpenHub: FAT-FREE is a powerful yet lightweight PHP 5.3+ Web development framework designed to help you build dynamic and robust applications - fast!
SourceForge: FAT-FREE is a powerful and lightweight PHP 5.3+ Web application framework designed to help you build dynamic and robust Web sites - fast! Unlike other PHP frameworks, Fat-Free aims to be usable - not usual. Fat-Free Framework Web Site
=============================================================================================================
GNU Autoconf Archive GNU Autoconf Macro Archive 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: The GNU Autoconf Archive is a collection of more than 450 macros for GNU Autoconf that have been contributed as free software by friendly supporters of the cause from all over the Internet. Every single one of those macros can be re-used without imposing any restrictions whatsoever on the licensing of the generated configure script. In particular, it is possible to use all those macros in configure scripts that are meant for non-free software.
----------------------------------------------------------------------------------------------------------------
FreeCode: The GNU Autoconf Archive is a collection of more than 450 macros for GNU Autoconf. They can be re-used without imposing any restrictions on the licensing of the generated configure script. In particular, it is possible to use them in configure scripts that are meant for non-free software.
=============================================================================================================
Image Tools Union D Image Tools 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: Image Tools is a screen capture, file sharing and image processing tool. It features multi-threaded batch image resizing, conversion, cropping, flipping/rotating, watermarks, decolorizing (grayscale, negative, sepia), and optimizing. The BMP, GIF, TIFF, JPEG, PNG, and EMF image types are supported. It is compatible with Linux MONO (only for GNOME and Xfce). Multicore processing is supported to increase performance. The quality for output when optimizing is variable. Color channels can be filtered. An internal benchmarking tool is available. Indexed pixel format images can be processed. You can process your images, publish pieces of your screens, files and send links to everyone you want to share it. Image Tools Web Site
FreeCode: Image Tools is a desktop application to capture the display as an image or open an existing image file, crop and annotate it if necessary, and save the image. It features line and text annotation and undo/redo.
----------------------------------------------------------------------------------------------------------------
FreeCode: Image Tools is a screen capture and file sharing tool. It features multi-threaded batch image resizing, conversion, cropping, flipping/rotating, watermarks, decolorizing (grayscale, negative, sepia), and optimizing. The BMP, GIF, TIFF, JPEG, PNG, and EMF image types are supported. It is compatible with MONO (only for GNOME). Multicore processing is supported to increase performance. The quality for output when optimizing is variable. Color channels can be filtered. An internal benchmarking tool is available. Indexed pixel format images can be processed.
=============================================================================================================
Jetty Jetty - Java based HTTP / Servlet / SPDY / WebSocket Server 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Jetty 是一个开源的servlet容器它为基于Java的web内容例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象可以迅速为一些独立运行stand-alone的Java应用提供网络和web连接。 Javadoc:http://tool.oschina.net/apidocs/apidoc?api=jetty8.1.5
FreeCode: Jetty is an Open Source HTTP Servlet Server written in Java. It is a full featured HTTP/1.1 server and a Servlet container. It is designed to be small, fast, embeddable and extensible. It supports HTTP/1.1, servlets 2.3, and JSP 1.2.
----------------------------------------------------------------------------------------------------------------
OpenHub: Jetty is an Open Source HTTP Servlet Server written in Java. It is a full featured HTTP/1.1 server and a Servlet container. It is designed to be small, fast, embeddable and extensible. It supports HTTP/1.1, servlet, SPDY, websockets, and JSP.
=============================================================================================================
BIRT Bulk Image Resizing Thing 0
-----------------------------------------------------------------------------------------------------------------
OSChina: BIRT是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。
----------------------------------------------------------------------------------------------------------------
FreeCode: BIRT is a simple application that allows a large number of images to be resized in one go. It was created in order to facilitate the maintenance of an online photo album where each hi-res photo needs a low-res copy and a thumbnail.
=============================================================================================================
Tonic Tonic Chess 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Tonic is a "less is more", RESTful Web application development and Web site management PHP script designed to do things "the right way", where resources are king and the framework gets out of the way and leaves the developer to get on with it.
----------------------------------------------------------------------------------------------------------------
FreeCode: Tonic is a graphical interface for playing online chess. It is based on Jin.
=============================================================================================================
Sam Horde Sam 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Sam is a Morse code trainer. It is a bash script that runs in a terminal. It beeps and boops out the command-line arguments in Morse code. If there are no command-line arguments, then it beeps and boops the Usage message. Simple, no? But the gimmick is that it prints out the text to the terminal, and the cursor below the text keeps track of which letter is being sounded.
----------------------------------------------------------------------------------------------------------------
FreeCode: Sam is the Horde anti-spam, anti-virus module. It allows users to change their specific anti-spam and anti-virus rules for SpamAssassin or amavisd-new, given a general subset of the overall features that are available.
=============================================================================================================
Deluge deluge-torrent 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Deluge is a full-featured BitTorrent client for Linux, OS X, Unix and Windows. It uses libtorrent in its backend and features multiple user-interfaces including: GTK+, web and console. It has been designed using the client server model with a daemon process that handles all the bittorrent activity. The Deluge daemon is able to run on headless machines with the user-interfaces being able to connect remotely from any platform.
----------------------------------------------------------------------------------------------------------------
FreeCode: Deluge is a full-featured BitTorrent client. It features a rich plugin collection and was created with the intention of being lightweight and unobtrusive. It works well under any desktop environment.
=============================================================================================================
LAME LAME (Lame Ain't an MP3 Encoder) 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: LAME (LAME Ain't an MP3 Encoder) is a research project for learning about and improving MP3 encoding technology. LAME includes an MP3 encoding library, a simple frontend application, and other tools for sound analysis, as well as convenience tools. Please note that any commercial use (including distributing the LAME encoding engine in a free encoder) may require a patent license from Thomson Multimedia.
----------------------------------------------------------------------------------------------------------------
OpenHub: LAME (LAME Ain't an MP3 Encoder) is a research project for learning about and improving MP3 encoding technology. LAME includes an MP3 encoding library, simple frontend application, a much-improved psycho-acoustic model (GPSYCHO), and a graphical frame analyzer (MP3x). Please note that any commercial use (including distributing the LAME encoding engine in a free encoder) may require a patent license from Thomson Multimedia.
=============================================================================================================
HyperSQL Database Engine (HSQLDB) hsqldb Database Engine 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: HSQLDB is a relational database engine written in Java, with a JDBC driver, conforming to ANSI SQL:2008. A small, fast, multithreaded engine and server with memory and disk tables, LOBs, transaction isolation, multiversion concurrency and ACID. HyperSQL Database Engine (HSQLDB) Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: HSQLDB (HyperSQL DataBase) is an SQL relational database engine written in Java. It supports nearly full ANSI-92 SQL and SQL:2008 enhancements. It is a small, fast multithreaded, and transactional database engine which offers in-memory and disk-based tables and supports embedded and server modes.
=============================================================================================================
PAR Perl Archive Toolkit 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: The Perl Archive (PAR) Toolkit helps create single-file bundles of Perl code, analogous to Java's JAR files. PAR can optionally create standalone executables that bundle the entire Perl interpreter to enable deployment to machines that lack Perl.
----------------------------------------------------------------------------------------------------------------
FreeCode: PAR is a cross-platform packaging and deployment tool, dubbed as a cross between Java's JAR and Perl2EXE/PerlApp. It can turn your Perl programs into ready-to-run executables, build and use PAR files into @INC to avoid version conflicts, turn CPAN module distributions into PAR distributions, or install/uninstall/sign/verify PAR distributions.
=============================================================================================================
CVS CVS: Concurrent Versions System 1
-----------------------------------------------------------------------------------------------------------------
OSChina: CVSConcurrent Versions System老牌的版本控制系统它是基于客户端/服务器的行为使得其可容纳多用户构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件特别是程序的源代码时的首选。
FreeCode: CVS is a version control system, which allows you to keep old versions of files (usually source code), keep a log of who, when, and why changes occurred, etc., like RCS or SCCS. Unlike the simpler systems, CVS does not just operate on one file at a time or one directory at a time, but operates on hierarchical collections of directories consisting of version controlled files. CVS helps to manage releases and to control the concurrent editing of source files among multiple authors. CVS allows triggers to enable/log/control various operations and works well over a wide area network.
----------------------------------------------------------------------------------------------------------------
OpenHub: CVS is a version control system, an important component of Source Configuration Management (SCM).
=============================================================================================================
PHPki PHPki Digital Certificate Authority 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: PHPki is a Web application for managing a multi-agency PKI for HIPAA compliance. With it, you may create and centrally manage X.509 certificates for use with S/MIME enabled e-mail clients, SSL servers, and VPN applications.
----------------------------------------------------------------------------------------------------------------
SourceForge: PHPki is an Open Source Web application for managing a multi-agency PKI for HIPAA compliance. With it, you may create and centrally manage X.509 certificates for use with S/MIME enabled e-mail clients, SSL servers, and VPN applications. PHPki Digital Certificate Authority Web Site
=============================================================================================================
Solar The SOLAR Operating System 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Solar is a "simple object library and application repository" for PHP5. That is, Solar is a combined class library, component suite, and application development framework.
----------------------------------------------------------------------------------------------------------------
FreeCode: SOLAR is a realtime, fast operating system that is written entirely in assembler.
=============================================================================================================
Archivist Archivist NDCA 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: Archivist is a program for "Magic the Gathering". Archivist allows you to create Magic Decks for Mindless Automaton and Apprentice. You can manage your private card collection and multiple decks. Rich analysis tools help you to improve your deck. Archivist 2 is the latest version build for Windows Systems using the .NET Framework. Download as archive or self extracting archive. No installation required! Archivist Web Site
FreeCode: Archivist is a command-line program and C# library that provides standard archiving and compression utilities.
----------------------------------------------------------------------------------------------------------------
FreeCode: Archivist is a network device configuration archiving and versioning program. It uses Subversion as its revision control system. Its multithreaded design makes it quite fast and thus suitable for operation on large networks with thousands of network devices. It supports Cisco IOS, Cisco CatOS, Juniper JUNOS, and Brocade/Foundry MLX series, but it can be easily extended to support any SSH or telnet-based network device by creating your own config download and post-processing scripts.
=============================================================================================================
IPc Isotopic Pattern Calculator 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: IPc (IP checker) is just a simple tool to find out what your Public IP address is. It is under the form of (Non annoying) Taskbar Icon. IPc Web Site
----------------------------------------------------------------------------------------------------------------
SourceForge: The ISOTOPIC PATTERN CALCULATOR is a small linux tool for mass spectrometry. It calculates the isotopic distribution for a given chemical formula or peptide sequence. GIPS is a GUI Version of the Isotopic Pattern Calculator. Isotopic Pattern Calculator Web Site
FreeCode: IPC (Isotopic Pattern Calculator) is a tool for mass spectrometry that calculates the isotopic distribution of a given chemical formula or peptide sequence. It uses gnuplot to visualize the results.
=============================================================================================================
squint squint screen 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: squint is a Squid proxy log analyzer that generates a detailed report of who is spending the most time and resources browsing the Internet. The top offenders in terms of data transfer, number of files transferred, and on-line time are reported.
----------------------------------------------------------------------------------------------------------------
FreeCode: squint is command that duplicates the output of a monitor into an X11 window. It is designed to allow you to display a presentation (or any other kind of demonstration) on multiple monitors at the same time without cloning the entire screen.
=============================================================================================================
openQRM openQRM - Cloud Computing Platform 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: openQRM is a web-based open source datacenter management and hybrid cloud computing platform that integrates flexibly with existing components in enterprise data centers. openQRM abstracts Virtualization and supports the following virtualization technologies: KVM, XEN, Citrix XenServer, VMWare ESX, LXC, OpenVZ. Additionally the Hybrid Cloud Connector in openQRM supports a range of private or public cloud providers to extend your infrastructure on demand via Amazon AWS, Eucalyptus or OpenStack.
FreeCode: openQRM is a data-center management and cloud computing platform. Its fully pluggable architecture focuses on automatic, rapid, and appliance-based deployment, monitoring, high-availability, cloud computing, and especially on supporting multiple virtualization technologies. openQRM is a single-management console for a complete IT infrastructure and provides a well-defined API which can be used to integrate third-party tools as additional plugins.
----------------------------------------------------------------------------------------------------------------
SourceForge: openQRM is a web-based open source datacenter management and hybrid cloud computing platform that integrates flexibly with existing components in enterprise data centers. openQRM abstracts Virtualization and supports the following virtualization technologies: KVM, XEN, Citrix XenServer, VMWare ESX, LXC, OpenVZ. The Hybrid Cloud Connector in openQRM supports a range of private or public cloud providers to extend your infrastructure on demand via Amazon AWS, Eucalyptus or OpenStack. openQRM automates provisioning, virtualization, storage and configuration management, and it takes care of high-availability. A self-service cloud portal with integrated billing system enables end-users to request new servers and application stacks on-demand.
=============================================================================================================
Keyboard Solo on the Keyboard 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Keyboard is an object that can show an on-screen keyboard to emulate letter key typing. It can display a keyboard on the page with buttons for letters. The user can click on the letter buttons, and the object pastes the letters on the currently active form input. It supports switching between many types of keyboard maps.
----------------------------------------------------------------------------------------------------------------
FreeCode: Solo on the Keyboard is an authorized touch typing tutorial which guarantees solid typing skills in 30 hours of enjoyable yet responsible work. The course is available for QWERTY (US and UK) and Dvorak keyboard layouts as well as Italian and Russian touch typing courses. This course is the fruit of detailed experimental research done by Dr. Vladimir Shahidzhanjan, a psychologist and a journalist.
=============================================================================================================
GPS Manager gpsman 10
-----------------------------------------------------------------------------------------------------------------
FreeCode: GPS Manager is a GUI for organizing GPS data such as waypoints, tracks, and routes. It is able to download data from many different GPS units, providing off-unit storage for as much data as your computer can hold and higher level organization and analysis tools than most GPS units provide.
----------------------------------------------------------------------------------------------------------------
SourceForge: GPS Manager (GPSMan) is a graphical manager of GPS data that makes possible the preparation, inspection and edition of GPS data in a friendly environment. GPSMan can also be used in command mode (with no graphical interface) gpsman Web Site
FreeCode: GPSMan (GPS Manager) is a graphical manager of GPS data that makes possible the preparation, inspection, and edition of GPS data in a friendly environment. It supports communication with both Garmin, Lowrance, and Magellan receivers, and real-time support for any receiver using NMEA-0183. It can also be used in command-line mode.
=============================================================================================================
Swing The Swing Traffic Generator 0
-----------------------------------------------------------------------------------------------------------------
OSChina: Swing 是一个为Java设计的GUI工具包。 Swing 是 JAVA基础类 的一部分。 Swing 包括了图形用户界面 (GUI) 器件 如:文本框,按钮,分隔窗格和表。 SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成所以同Java本身一样可以跨平台运行这 一点不像AWT。 它们是JFC的一部分。 它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台 上使用JAVA支持的任意面板。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。 Swing程序外观 示例代码: import javax.swing.*;        
public class HelloWorldSwing {
    /**
     * 创建并显示GUI。 出于线程安全的考虑
     * 这个方法在事件调用线程中调用。
     */
    private static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Add the ubiquitous "Hello World" label.
        JLabel label = new JLabel("Hello World");
        frame.getContentPane().add(label);
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}
----------------------------------------------------------------------------------------------------------------
FreeCode: Swing is a closed-loop, network-responsive traffic generator. It accurately reproduces packet interactions (at multiple timescales) using a simple structural model, starting from observed traffic on a link.
=============================================================================================================
Neo4j Neo4j.rb 10
-----------------------------------------------------------------------------------------------------------------
OSChina: Neo是一个网络——面向网络的数据库——也就是说它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎但是它将结构化数据存储在网络上而不是表中。网络从数学角度叫做图是一个灵活的数据结构可以应用更加敏捷和快速的开发模式。 你可以把Neo看作是一个高性能的图引擎该引擎具有成熟和健壮的数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
FreeCode: Neo4j is a graph database, a fully transactional database that stores data structured as graphs. A graph is a flexible data structure that allows for a more agile and rapid style of development. You can think of Neo4j as a high-performance graph engine with all the features of a mature and robust database. The programmer works with an object-oriented, flexible network structure rather than with strict and static tables, yet enjoys all the benefits of a fully transactional, enterprise-strength database. The community edition is GPLv3 licensed, while the advanced and enterprise editions are AGPLv3 licensed.
----------------------------------------------------------------------------------------------------------------
OpenHub: Neo4j is a graph database for JRuby. It supports: transactions, querying/indexing, traversal of relationships, mapping of ruby objects to a graph. It uses the java libs neo4j and lucene.
=============================================================================================================
ECM Eve Corp. Management 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: ECM is demo software for planetary-scale terrain rendering. It implements Ellipsoidal Cube Maps (ECMs), as described in M. Lambers and A. Kolb, Ellipsoidal Cube Maps for Accurate Rendering of Planetary-Scale Terrain Data, Proc. Pacific Graphics (Short Papers), Sep. 2012. It consists of three parts: libecmdb, which implements the basic model and projection; ecmdb, which builds ECM databases from remote sensing data; and ecmview, which renders ECM databases interactively.
----------------------------------------------------------------------------------------------------------------
OpenHub: ECM is a management and decision-making helper-application for the game EVE Online.
=============================================================================================================
Z-Push Z-Push - Synchronizing mobile devices 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Z-Push是ActiveSync推送协议的一种开源实现方案其构建在PHP基础之上。通过Z-Push可以实现将各种PHP应用转化成为支持同步的ActiveSync兼容应用 Z-Push的结构如下图所示:
FreeCode: Z-push is an implementation of the ActiveSync protocol, which is used 'over-the-air' for multi-platform ActiveSync devices including Windows Mobile, Ericsson, and Nokia phones. It allows any e-mail or groupware system using Maildir to be connected and synced with these devices.
----------------------------------------------------------------------------------------------------------------
OpenHub: Z-Push is an opensource implementation of the ActiveSync protocol, which is used 'over-the-air' for multi platform ActiveSync devices, including Android, iPhone and Windows 7. With Z-Push any groupware can be connected and synced with these devices.
SourceForge: Z-Push is an implementation of the ActiveSync protocol, which is used 'over-the-air' for multi platform ActiveSync devices, including Windows Mobile, Ericsson and Nokia phones. With Z-Push any groupware can be connected and synced with these devices. Z-Push - Synchronizing mobile devices Web Site
=============================================================================================================
CDT CDT (Eclipse) 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Eclipse CDT 是 Eclipse 插件,它将把 Eclipse 转换为功能强大的 C/C++ IDE。它被设计为将 Java 开发人员喜爱的许多 Eclipse 优秀功能提供给 C/C++ 开发人员,例如项目管理、集成调试、类向导、自动构建、语法着色和代码完成。当 Eclipse 被用作 Java IDE 时,它将利用 JDK 并与之集成。同样地CDT 将利用标准的 C/C++ 工具并与之集成,例如 g++、make 和 GDB。这使得 CDT 在 Linux 中变得非常流行,这些工具都可在 Linux 中使用并用于大多数 C++ 开发。可以在 Windows 上设置 CDT 以使用相同的工具。目前还在努力将 CDT 与 Microsoft 的 C++ 工具结合使用,以使 CDT 对 Windows C++ 开发人员更有吸引力。
----------------------------------------------------------------------------------------------------------------
OpenHub: The CDT is Eclipse's C/C++ Development Tooling project. It is a world class C/C++ IDE that also serves as a platform for others to provide value added tooling for C/C++ developers.
=============================================================================================================
Burp burp backup and restore program 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Burp is a program that backs up and restores data. It uses librsync in order to save on the amount of space that is used by each backup. It also uses VSS (Volume Shadow Copy Service) to make snapshots when backing up Windows computers.
----------------------------------------------------------------------------------------------------------------
SourceForge: Burp is a backup and restore program. It uses librsync in order to save on the amount of space that is used by each backup. It also uses VSS (Volume Shadow Copy Service) to make snapshots when backing up Windows computers. burp backup and restore program Web Site
=============================================================================================================
gSOAP Toolkit gSOAP 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: The gSOAP toolkit is an extensive suite of portable C and C++ software to develop XML Web services with powerful type-safe XML data bindings. Easy-to-use XML auto-serialization allows you to directly integrate XML data in C and C++ (C++11 compatible) applications. Includes WSDL/XSD schema binding and auto-coding tools, stub/skeleton compiler, Web servers (with SSL), integrated XML processing with schema validation, fast MIME/MTOM streaming, SOAP and REST, WS-* protocols (WS-Security, WS-Policy, etc), XML-RPC and JSON serialization.
----------------------------------------------------------------------------------------------------------------
OpenHub: The gSOAP toolkit is a cross-platform development toolkit for C and C++ XML Web services (SOAP1.1/1.2; WSDL1.1/2.0) and general XML data bindings. The toolkit offers a seamless XML databinding for C and C++. Auto-serializes C/C++ data in XML. Includes SOAP/XML engine, Web server, stub/skeleton and serialization code generator, WSDL/XSD tools, XML-RPC, JSON, UDDI, and more.
OSChina: gSOAP一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码XML数据绑定对SOAP Web服务和其他应用形成高效的具体架构解析器它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。此外使用XML数据绑定大大简化了XML自动映射。应用开发人员不再需要调整应用程序逻辑的具体库和XML为中心的数据如 交涉DOM。 功能和特点 可移植性gSOAP支持大多 数平台包括嵌入式系统和小系统例如嵌入式SymbianPalm。可移植性测试Windows98XPVistaLinuxUnix 系统Mac OS XSolarisHP-UXAIXFreeBSDTRU64IrixQNXVxWorks。 稳定性该软件已经成熟。自2001年以来经过几年的发展和试验。许多工业项目和产品都在使用该软件。 广泛的用户群自2003年以来超过150000次下载成千上万许可证/支持协议的公司其中包括一些财富100强企业。 所有功能于一身的软件包:独立第三方工具和库确保可靠的运行执行。 开源:可选择自由和商业许可。 C和C++的支持支持纯粹的ANSI C和混合的C/C++应用开发。 综合XML数据绑定 gSOAP是唯一的SOAP/XML工具包支持一个纯粹的本地的C/C++数据绑定到XML。该工具包是以自动序列指针为基础的数据结构。 行业标准协议: SOAP 1.1/1.2  WSDL 1.1v2和UDDI 。支持XML架构原始XSD结构类型等等。 传 输HTTP/S, TCP, UDP, MIME (SwA), DIME (streaming), MTOM (streaming), HTTP1.0/1.1, IPv4, IPv6, RSS, XML-RPC, WS-Addressing, WS-Enumeration等 安全HTTPS和WS安全性认证令牌数字签名。 速度架构特定的编译器生成的代码速度快。基准测试表明速度优于最快的XML解析器。 占用内存小:客户端应用程序总运行内存占用很小。内存管理使用垃圾收集,可以自动清理。 许多例子软件包包括许多代码范例其中包括独立的HTTP/1.1和HTTPS安全的Web服务器。 Web服务器整合包括Apache_mod, IIS, WinInet, CGI, FastCGI。
=============================================================================================================
StumpWM The Stump Window Manager 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: Stumpwm is a tiling window manager written entirely in Common Lisp. It attempts to be highly customizable while relying entirely on the keyboard for input.
----------------------------------------------------------------------------------------------------------------
FreeCode: Stumpwm is a tiling, keyboard driven X11 window manager written entirely in Common Lisp. While it is minimalistic in appearance, its full customizability, event hooks, and 100% pure Lisp implementation make it startlingly powerful.
=============================================================================================================
sos Son of Service 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: This set of tools is designed to provide information to support organizations in an extensible manner, allowing third parties, package maintainers, and anyone else to provide plugins that will collect, analyze, and report information that is useful for supporting software packages.
----------------------------------------------------------------------------------------------------------------
SourceForge: Son of Service (SOS) is a multiuser volunteer management database for non-profits. Useful for keeping track of work history, comments, reminders, skills, availability, and relationships, SOS requires PHP, a RDBMS, and a HTML 4.0 browser. Son of Service Web Site
FreeCode: Son of Service is a Web-based, multi-user volunteer management database for non-profits, schools, clubs, etc. It requires PHP and an arbitrary database (because it uses ADOdb abstraction). It supports a variety of software and hardware, including low-end systems.
=============================================================================================================
Monkey Monkey HTTP Server 0
-----------------------------------------------------------------------------------------------------------------
OSChina: Blitz Research发布了其最新的游戏程序语言“Monkey”Monkey能够降低在编写多平台游戏时的重复劳动同时带来灵活的高等级语言并可接入每个平台的本地SDK。 使用Monkey语言所编写的游戏能够进行转换并在iPhoneiPadAndroidFlashHTML 5微软 XNA面向Xbox 360PC 或Windows Phone 7或 OpenGL平台上运行。 开发者通过一次点击便能将Monkey游戏转移到目标平添的SDK中并在多个在线市场和应用商店上传他们的游戏潜在的扩大了销售范围并极大的降低了开发成本。 免费版Monkey允许任何人使用它来创建非商业HTML5应用。商业版本包含一个2D游戏模块支持所有平台其授权价格为120美元详情请参看。 “创建跨平台游戏需要大量乏味的工作和综合知识,你必须得重新学习每个平台的开发技术。这是个非常枯燥乏味又艰难的工作,并阻碍的最重要的东西 制作一款真正有趣的游戏的创意过程。Monkey将麻烦的事情赶走同时给开发者一个灵活高性能的语言” Blitz Research CEO Mark Sibly说。 开发者仅需要在每个目标平台上安装SDK随后Monkey将负责进行编写架构和运行。Monkey语言本身是一个高等级程序语言着重于可读性面向对象的功能以及一个流线型的指令设置同所有目标平台兼容。 Monkey是最新的来自语游戏语言开发商Blitz Research的长线游戏编程工具。
----------------------------------------------------------------------------------------------------------------
OpenHub: Monkey is a Fast and Lightweight Web server written in C for Linux platform. This is an open source project based on the HTTP/1.1 protocol.
=============================================================================================================
STK phpBB Support Toolkit 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: The STK is a (not so) Small Toolbox for Kriging. Its primary focus in on the interpolation / regression technique known as kriging, which is very closely related to Splines and Radial Basis Functions, and can be interpreted as a non-parametric Bayesian method using a Gaussian Process (GP) prior. The STK also provides tools for the sequential and non-sequential design of experiments. Even though it is, currently, mostly geared towards the Design and Analysis of Computer Experiments (DACE), the STK can be useful for other applications areas (such as Geostatistics, Machine Learning, Non-parametric Regression, etc.). STK Web Site
----------------------------------------------------------------------------------------------------------------
OpenHub: The Support Toolkit (STK) was developed by the phpBB.com Support Team in cooperation with EXreaction. The STK provides a second "Administration Control Panel" that can be used to recover various part of a corrupted phpBB 3.0.x installation or to solve commonly encountered problems with the software.
=============================================================================================================
Lan Core Lan Core :: Thin Client Server and OS 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Lan Core is software that lets you build a thin client network on a Windows operating system. It was originally designed to work in a server or workstation with Windows XP Professional and using the native remote desktop protocol or RDP. To this end, the Lan Core package includes: (1) the Preboot Execution Environment or PXE service, a server application used to boot the thin clients (also referred as terminals or clients) in a local area network; (2) the thin client operating system (Thin OS), an embedded system based on Linux; and (3) an interface application used to manage the PXE service and thin clients. The thin clients' boot is done through a local area network (LAN), and it is based on the Preboot Execution Environment (PXE) protocol. In order to do it, Lan Core also provides two additional services: a DHCP server and a Trivial FTP server for Windows, used to assign IP addresses and transfer boot files, respectively.
----------------------------------------------------------------------------------------------------------------
SourceForge: Lan Core is a free & open source software that lets you to build a thin client network on a Windows operating system. It was originally designed to work in a server or workstation with Windows XP Professional using the native remote desktop protocol. Lan Core :: Thin Client Server and OS Web Site
=============================================================================================================
JFunc JFunc JUnit Functional Testing Extension 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: JFunc is an extension to the JUnit testing framework to make it easier for use with functional tests. Functional testing (also called integration testing) significantly differs from unit testing in a number of respects. Part of this project is dedicated towards putting together code to address these differences; the other part is putting together methodologies for functional testing.
----------------------------------------------------------------------------------------------------------------
SourceForge: JFunc is a JUnit extension designed to address issues of functional testing (also known as systems/integration/scenario testing) concerning not only the differences in code, but also the differences in methodology. JFunc JUnit Functional Testing Extension Web Site
=============================================================================================================
Network UPS Tools NUT - Network UPS Tools 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Network UPS Tools (also known as NUT) is an extremely powerful and versatile client/server based approach to UPS monitoring. Products from a wide range of vendors (APC, Belkin, Best Power, MGE, Tripp-Lite, etc.) are supported. A shared UPS can be monitored by one host, notifcations being sent to the other hosts via authenticated TCP connections. A Web interface is available, as is a Windows client.
----------------------------------------------------------------------------------------------------------------
OpenHub: The primary goal of the Network UPS Tools (NUT) project is to provide support for Power Devices, such as Uninterruptible Power Supplies, Power Distribution Units and Solar Controllers.
=============================================================================================================
ISIS Interactive Spectral Interpretation System 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: The Malete database core is the new basis of OpenIsis, which has its roots in the UNESCO CDS/ISIS database. Traditionaly used in libraries; now a general purpose highspeed database. ISIS Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: The Interactive Spectral Interpretation System (ISIS) is designed to facilitate the interpretation and analysis of high resolution X-ray spectra. It is being developed as a programmable, interactive tool for studying the physics of X-ray spectrum formation, supporting measurement and identification of spectral features and interaction with a database of atomic structure parameters and plasma emission models.
=============================================================================================================
Vim GVim 01
-----------------------------------------------------------------------------------------------------------------
OpenHub: Vim is an advanced text editor that seeks to provide the power of the de-facto Unix editor 'Vi', with a more complete feature set. It's useful whether you're already using vi or using a different editor.
OSChina: Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 主要功能 根据设定可以和原始vi完全兼容 多缓冲编辑 任意个数的分割窗口(横,竖) 具备列表和字典功能的脚本语言 可以在脚本中调用 Perl, Ruby, Python, Tcl, MzScheme 单词缩写功能 动态单词补完 多次撤销和重做 对应400种以上文本文件的语法高亮 C/C++, Perl, Java, Ruby, Python 等40种以上语言的自动缩排 利用ctags的标签中跳转 崩溃后文件恢复 光标位置和打开的缓冲状态的保存 复原session功能 可以对两个文件进行差分同步功能的diff模式 远程文件编辑 Omni补完上下文相关的补完
FreeCode: Vim is an almost fully-compatible version of the Unix editor Vi. Many new features have been added including multi-level undo, syntax highlighting, commandline history, online help, filename completion, and block operations. It is descended from the vi clone "stevie" and runs on many systems, including Unix, MS Windows, OS/2, Macintosh, VMS, and Amiga.
----------------------------------------------------------------------------------------------------------------
OSChina: Vim是Linux上的著名的文本编辑器他是早年的Vi编辑器的加强版。这个GVim是windows版的并且有了标准的windows风格的图形界 面所以叫g(graphical)Vim。这是一个国际版本会根据安装的平台自动选择相应语言包支持中文及其各种编码连界面也是中文的请放心使 用。这个极具Unix特色和风格(simple is the best)的编辑器相信会给您带来不同的感受。
=============================================================================================================
SlackPkg slackpkg+ 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Slackpkg is an automated package-management tool for Slackware Linux. It can do tasks such as automatic downloading and installing or upgrading, browse the MANIFEST.gz (Slackware package-contents guide), and more. Dependencies are not automatically handled. It is not a replacement for pkgtool, but a valuable add-on.
----------------------------------------------------------------------------------------------------------------
SourceForge: Slackpkg is a good package manager for slackware that help the user to keep updated its installation. The Slackpkg+ project is a simple plugin that allow the user to add third-party repositories to slackpkg so to use a single tool for keep update the slackware installation and to install non-official packages. Like slackpkg, slackpkg+ leave unchanged the slackware philosophy becouse the user take full control of installation process. Slackpkg+ also allow to install and keep updated the alienbob's compat32 libraries so to have a multilib system without download and install it manually. Slackpkg+ is NOT a new tool with new commands. The user can continue to use the standard slackpkg command line: # slackpkg update gpg # slackpkg update # slackpkg install openjdk # slackpkg upgrade-all etc.. slackpkg+ Web Site
=============================================================================================================
Hermes Horde Hermes 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: Hermes provides a Swing GUI to access JMS queues and topics for common tasks such as sending messages, removing messages and copying messages between queues and topics. Hermes Web Site
FreeCode: HERMES is a Web application framework designed to help provide a rapid application development framework for business tools with an initial focus of CRM (application included). It provides an integrated and flexible approach to business tools, and allows for database abstraction, library models, user rights management, and other critical areas.
----------------------------------------------------------------------------------------------------------------
FreeCode: Hermes is a Horde time-tracking application. It ties into address books (to retrieve clients) and task lists, bug trackers, etc. (to retrieve cost objects). It comes with a stop watch, search and reporting capabilities, a Mac OS X Dashboard widget, and an invoice interface.
=============================================================================================================
SWTBot Eclipse SWTBot - SWT/Eclipse functional testing 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: SWTBot is a Java-based functional testing tool for testing SWT and Eclipse based applications. It provides APIs that are simple to read and write and hide the complexities involved with SWT and Eclipse. This makes it suitable for functional testing by everyone. A set of assertions that are useful for SWT are provided, and you can also use your own assertion framework. A recorder and driver are provided for recording and playing back tests along with Ant tasks so that you can run your builds from within CruiseControl or other CI tools.
----------------------------------------------------------------------------------------------------------------
OpenHub: SWTBot is an automation and testing tool for SWT/RCP applications, with the facility to record and playback scripts. Features will include, text based scripts, ant support for playback of test suites, reporting, and multi threaded playback.
=============================================================================================================
Dexter Dexter-XSL 0
-----------------------------------------------------------------------------------------------------------------
SourceForge: Dexter is an Open Source Tool for the Automation Industry that provides the user with a friendly graphic interface for simulating both MODBUS and DNP3 slaves, over multiple serial and TCP/IP connections. Dexter Web Site
----------------------------------------------------------------------------------------------------------------
FreeCode: Dexter is a tool that allows users to define extended attributes which can be associated with descriptors and editors. These attributes can be embedded into any well-formed XML document. The resulting embellished document, the 'source', is then input to the dexter engine. This will generate one or more XSLT stylesheets describing the input document interpolating editor modifications and any instructions specified by the descriptors. As dexter's operations are specified exclusively with extended attributes, all but the most unforgiving of XML content viewers will continue to see the decorated source exactly as the designer saw it before.
=============================================================================================================
eViacam Enable Viacam 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: Mouse replacement software that moves the pointer as you move your head. It works on standard PCs equipped with a web camera. No additional hardware is required. Based on the award winning Facial Mouse software. For Linux and Windows systems. eViacam Web Site Follow @creasoftware
----------------------------------------------------------------------------------------------------------------
FreeCode: Enable Viacam (eViacam) is a mouse replacement software that moves the pointer as you move your head. It works on standard PCs equipped with a Web camera. No additional hardware is required. It is based on the award winning Facial Mouse software.
=============================================================================================================
poMMo poMMo - The post modern Mass Mailer 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: poMMo is versatile mass mailing software. It can be used to add a mailing list to your Web site or to organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives.
FreeCode: poMMo is versatile mass mailing software. It can be used to add a mailing list to your Web site or to organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives.
----------------------------------------------------------------------------------------------------------------
SourceForge: poMMo is versatile Mass Mailing software. Add a mailing list to your website, or organize stand alone mailings. Unique features such as the ability to mail subsets of your subscribers set it apart from alternatives. poMMo - The post modern Mass Mailer Web Site
=============================================================================================================
Big Brother BB Webcam Viewer 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Big Brother is a combination of monitoring methods. Unlike SNMP where information is just collected and devices polled, Big Brother is designed in such a way that each local system broadcasts its own information to a central location. Simultaneously, Big Brother also polls all networked systems from a central location. This creates a highly efficient and redundant method for proactive network monitoring.
----------------------------------------------------------------------------------------------------------------
FreeCode: BB (Big Brother) is a small and simple webcam and security camera viewer that, given the URL of an image and a refresh rate, will display the latest image on the desktop. Images can be displayed in a normal window, always-on-top, or below everything else.
=============================================================================================================
isk-daemon (imgSeek) imgSeek - Intelligent image database 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: isk-daemon is an open source standalone server or library capable of adding content-based (visual) image searching to any image related website or software. Also known as "imgSeek - Intelligent image database"
----------------------------------------------------------------------------------------------------------------
SourceForge: imgSeek is a photo collection manager and viewer with content-based search and many other features. The query is expressed either as a rough sketch painted by the user or as another image you supply (or an image in your collection). imgSeek - Intelligent image database Web Site
=============================================================================================================
Foswiki JumpBox for the Foswiki Wiki System 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Foswiki is the next generation of enterprise collaboration suites. With Foswiki, you don't have to be a programmer to collect, store, and re-use enterprise information: everyday users have the power to easily create Web 2.0 applications such as mashups and social interaction tools.
SourceForge: Foswiki is an Enterprise wiki, typically used to run a collaboration platform, knowledge base or document management system. Users can create wiki applications using the Topic Markup Language, and developers can extend its functionality with plugins. Foswiki stands for "Free and Open Source" wiki to emphasize its commitment to Open Source software.
----------------------------------------------------------------------------------------------------------------
FreeCode: Foswiki is a wiki system that is notable for its approachability for non-technical users and its ability to store content in a structured fashion. Running JumpBox for the Foswiki Wiki System allows you to be up and running with this software in minutes on any operating system. It carries other benefits such as portability across computing environments, a Web-based admin console to simplify administration, and a built-in automated backup system to protect your work. Once you've deployed one JumpBox, you'll be able to deploy any of over 50 open source applications regardless of the underlying technologies utilized.
=============================================================================================================
STAF Software Testing Automation Framework 1
-----------------------------------------------------------------------------------------------------------------
OSChina: STAF (SW Test Automation Framework) 是一个自动化测试框架用以提升测试用例和测试环境的可重用性以及自动化的程度。STAF 为测试人员提供了一个端到端的自动化测试解决方案。
----------------------------------------------------------------------------------------------------------------
FreeCode: STAF (Software Testing Automation Framework) is a framework designed to improve the level of reuse and automation in test cases and test environments. Its goal is to provide a complete end-to-end automation solution for testers.
=============================================================================================================
Query Object Framework QOF Generator 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: QOF (Query Object Framework), provides a set of C Language utilities for performing generic structured complex queries on a set of data held by a set of C/C++ objects. This framework is unique in that it does not require SQL or any database at all to perform the query. Thus, it allows programmers to add query support to their applications without having to hook into an SQL database.
----------------------------------------------------------------------------------------------------------------
FreeCode: Generating new objects for the Query Object Framework is repetitive, tedious, and time consuming. Qof Generator automates this process in PHP to build a working test program linked against QOF. Objects are created from an HTML form using a temporary MySQL cache and exported with Makefile, ./autogen.sh, ChangeLog, README, C source code, and doxygen mark-up comments in a tarball built by the PHP code.
=============================================================================================================
linda PyLinda 01
-----------------------------------------------------------------------------------------------------------------
FreeCode: linda is a simple library implementation of the Linda parallel programming system (http://www.cs.yale.edu/Linda/linda.html). To write a parallel program with linda, you have to know only 6 functions: spawn, out, in, inp, rd, and rdp. linda was originally written by Wong Weng Fai. It has been improved by making it a real library by using GNU autotools, by adding timeout functions, and by using glib/gthread.
----------------------------------------------------------------------------------------------------------------
FreeCode: Linda is a widely studied distributed computing environment, centered around the notion of a tuple space. A tuple space is a bag (also called a multi-set) of tuples. A tuple is an ordered, typed chunk of data. Tuple spaces exist independently of processes in the system, and the data placed into a tuple space also exist independently. PyLinda is a simple implementation of a Linda system, but it also includes several of the more recently proposed extensions to Linda in the form of multiple tuple spaces, garbage collection, sane non-blocking primitives and bulk tuple operations.
=============================================================================================================
Nutch Apache Nutch 1
-----------------------------------------------------------------------------------------------------------------
OSChina: Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Nutch的创始人是Doug Cutting他同时也是Lucene、Hadoop和Avro开源项目的创始人。 Nutch诞生于2002年8月是Apache旗下的一个用Java实现的开源搜索引擎项目自Nutch1.2版本之后Nutch已经从搜索引擎演化为网络爬虫接着Nutch进一步演化为两大分支版本1.X和2.X这两大分支最大的区别在于2.X对底层的数据存储进行了抽象以支持各种底层存储技术。 在Nutch的进化过程中产生了Hadoop、Tika、Gora和Crawler Commons四个Java开源项目。如今这四个项目都发展迅速极其火爆尤其是Hadoop其已成为大规模数据处理的事实上的标准。Tika使用多种现有的开源内容解析项目来实现从多种格式的文件中提取元数据和结构化文本Gora支持把大数据持久化到多种存储实现Crawler Commons是一个通用的网络爬虫组件。 Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到: 每个月取几十亿网页 为这些网页维护一个索引 对索引文件进行每秒上千次的搜索 提供高质量的搜索结果 以最小的成本运作 在线Javadochttp://tool.oschina.net/apidocs/apidoc?api=nutch2.0
----------------------------------------------------------------------------------------------------------------
OpenHub: Nutch is a search engine based on Apache Lucene.,
FreeCode: Nutch is highly scalable Web searching software which builds on top of Apache Hadoop and Lucene Java. Key features include a Web crawler, indexer, crawl management tools, parsers for HTML, PDF, DOC, and several other document formats, and an expandable architecture that allows you to plug in additional functionality such as document parsers, custom scoring algorithms, custom content parsers, protocols, and more.
=============================================================================================================
CouchPotato Couch Potato App 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: CouchPotato is a media center application. It can play movies (in any format QuickTime can play) and it works with all infrared remote controls supported by the IRTrans universal IR receiver. CouchPotato is extendable by plugins. Plugin classes include applications (DVD player, music player, etc.), skins, and more.
----------------------------------------------------------------------------------------------------------------
OpenHub: CouchPotato (CP) is an automatic NZB downloader. You can keep a "movies I want"-list and it will search for NZBs & Torrents of these movies every X minutes. Once a movie is found, it will send it to SABnzbd or download the nzb/torrent to the provided folder.
=============================================================================================================
Perl Wolf Software WolfChat (Perl) 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development, network programming, GUI development, and more. Its major features include support for multiple programming paradigms (procedural, object-oriented, and functional styles), automatic memory management, built-in support for text processing, and a large collection of third-party modules.
OSChina: Perl是一种脚本语言。 最初的设计者为拉里·沃尔Larry Wall它於1987年12月18日發表。Perl借取了C、sed、awk、shell scripting 以及很多其他程式語言的特性。其中最重要的特性是他内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN。 Perl原名pearl但是在這個語言官方發表前拉里·沃尔發現已經有個程式語言“pearl”便將這個程式語言的名字改成Perl。对于Perl 这四个字母有一些解釋包括充滿幽默感的“Pathologically Eclectic Rubbish Lister”。“Practical Extraction and Report Language”曾經出現在很多有關Perl的資料裏包括官方的主頁。不过事实上这个长名字是后来凑出来的。它的名字第一個字母大写Perl時就 指這個程式語言無大写字母perl時就指它的直譯器。將Perl寫成“PERL”是不適當的因為它並非一個縮寫字。 Perl 语言的中心思想可以集成为一句话「TMTOWTDI」 There's More Than One Way To Do It.(不只一种方法來做这件事。) Perl 的作者 Larry Wall 建议可以把这个缩写词念成「Tim Toady」。 另一个 Perl 程序员常常想起的 Perl 俗语是: Easy things should be easy, and hard things should be possible. Perl駱駝是歐萊禮媒體O'Reilly Media設計給Perl程式語言的圖標。牠也是一種駭客的象徵出現在某些T-shirt和其他衣服標籤上。 歐萊禮擁有此圖像之商標,並且宣稱,唯有在捍衛「符號之完整性」時,才會行使其法律上的權力。歐萊禮允許此商標在非商業目的之前提下被使用,並同時供了 Programming Republic of Perl 的圖像以及 Powered by Perl 的按鈕圖。然而,駱駝其實從未被考慮成為 Perl 的官方識別符號,真要說有的話,其識別符號其實是洋蔥。 为了实现这样的目标,并且又因为 Larry Wall 本人也是一个语言学家他设计Perl语言时使用了很多语言学的思维。相比 C、Pascal 这样的“高级”语言而言Perl语言直接提供泛型變數、动态数组、Hash表等更加便捷的编程元素。Perl 具有动态语言的 强大灵活的特性并且还从C/C++、Basic、Pascal 等语言中分别借鉴了语法规则,从而提供了许多冗餘语法。使得程序员可以忽略计算机内部資料存储、类型、处理方法、运算规则、甚至内存越界等等的细节,而将 思考中心放在所需要的程序逻辑上。就这一点而言,很多 Perl 程序员认为目前只有 Perl、Python等泛型语言才能称为“高级”语言而 C、Pascal 甚至 C++ 这些只能称为“中高级”语言而已。可以说在统一變數类型和掩盖运算细节方面Perl 做得比 Python 更为出色。 由于从其他语言大量借鉴了语法,使得从其他编程语言转到 Perl 语言的程序员可以迅速上手写程序并完成任务,这使得 Perl语言是一门容易用的语言。但问题是这样写出来的“类xx语言”的 Perl 程序对不熟悉这种语言的程序员却如同天书,这使得 Perl 语言易写不易读。 也正是因为 Perl 的灵活性和“过度”的冗余语法,也因此获得了 write-only 的“美誉”,因为许多 Perl 程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍。 但 Perl 同样可以将代码书写得像 Python 或 Ruby 等语言一样优雅。
FreeCode: Perl is a high-level, general-purpose programming language that makes easy things easy and hard things possible. It is optimized for scanning arbitrary text files and system administration. It has built-in extended regular expression matching and replacement, a dataflow mechanism to improve security with setuid scripts and is extensible via modules that can interface to C libraries.
----------------------------------------------------------------------------------------------------------------
FreeCode: WolfChat (Perl) is a simple implementation of WolfChat. It was written purely as a challenge and demonstration of Perl socket code.
=============================================================================================================
Dolphin (KDE) Dolphin-emu 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Dolphin is a file manager for KDE focusing on usability. The main features of Dolphin are: * Navigation bar for URLs, which allows to navigate quickly through the file hierarchy. * View properties are remembered for each folder. * Split of views is supported. * Network transparency. * Undo functionality. * Renaming of a variable number of selected items in one step.
----------------------------------------------------------------------------------------------------------------
OpenHub: Dolphin is a Gamecube and Wii emulator with built in tools for managing gamecube, wii, and wiiware games and saves. There is also support for action replay and gecko cheat code systems, and a full debugger.
FreeCode: Dolphin is a Nintendo GameCube, Wii, and Triforce emulator for Microsoft Windows, Linux, and Mac OS X (on Intel-based machines), it is the first emulator to successfully run commercial GameCube and Wii games, and is still the only emulator capable of running commercial Wii games.
=============================================================================================================
QuteCom QuteCom (formerly WengoPhone) 1
-----------------------------------------------------------------------------------------------------------------
SourceForge: QuteCom (previously called OpenWengo) is a SIP-compliant voice-over-IP client that allows you to speak to other users of SIP-compliant softphones at no cost. It also allows users to call landlines and cell phones, send SMS text, and make video calls, and is compatible with any SIP provider. QuteCom Web Site
FreeCode: QuteCom (formerly WengoPhone) is a multi-platform VoIP client. The GUI is Qt-based, and the Video-over-IP engine is based on the eXosip, oSIP, oRTP, ffmpeg, and libgaim projects. The eXosip module is extended by a phApi module, which implements a high-level, easy-to-use call control API. It supports PC-to-PC voice, video, and chat. One can use a standard SIP service provider such as Wengo to be assigned an incoming number, make calls to PSTN/cell phones, get voice mail, and more. In addition to SIP/SIMPLE QuteCom provides IM functionality using libgaim, so it is compatible with all protocols supported by libgaim.
----------------------------------------------------------------------------------------------------------------
OpenHub: QuteCom is the new name for the open source softphone previously known as WengoPhone, a standards-based softphone and multi-protocol IM client.
=============================================================================================================
V8 Google V8 JavaScript Engine 1
-----------------------------------------------------------------------------------------------------------------
OSChina: V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写,在 Google 的 Chrome 浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到 C++ 应用程序中执行。
----------------------------------------------------------------------------------------------------------------
OpenHub: V8 is Google's open source JavaScript engine.
=============================================================================================================
Jitsi Jitsi (previously SIP Communicator) 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Jitsi (formerly SIP Communicator) is an audio/video and chat communicator that supports protocols such as SIP, XMPP/Jabber, AIM/ICQ, Windows Live, Yahoo!, Bonjour, and many other useful features. It is currently the most feature rich Internet Communicator, and is the only one to provide encrypted audio/video calls, desktop streaming and sharing, and chat on Windows, Mac OS X, and Linux with both the SIP and XMPP protocols.
----------------------------------------------------------------------------------------------------------------
OpenHub: Jitsi (previously SIP Communicator) is a cross-platform VOIP, videoconference, desktop sharing and chat client.
=============================================================================================================
Qubit QuBit library 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Qubit (Qmail Ultimate Backend Integration Tool) is a fully Web-based qmail server configuration and administration suite. It is based on the qmailrules qmail server installation style. It has the same features as other similar tools (like vqadmin and qmailadmin), and it also gives you full control to administer your server with all sorts of features and applications.
----------------------------------------------------------------------------------------------------------------
FreeCode: QuBit is a library to support quantum superpositions in C++. This allows each variable of the CQuBit type to hold a number of different values at the same time. Normal mathematical operations can be performed on a QuBit, but they affect every value in the QuBit, at the same time. Binary operations on two QuBits cause a result based on every possible outcome.
=============================================================================================================
Spring Spring RTS Engine 0
-----------------------------------------------------------------------------------------------------------------
OSChina: Spring Framework 是一个开源的Java/Java EE全功能栈full-stack的应用程序框架以Apache许可证形式发布也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and DevelopmentISBN 0-7645-4385-7一书中的代码最初由 Rod Johnson 和 Juergen Hoeller等开发。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。 Spring 中包含的关键特性: 强大的基于 JavaBeans 的采用控制翻转Inversion of ControlIoC原则的配置管理使得应用程序的组建更加快捷简易。 一个可用于从 applet 到 Java EE 等不同运行环境的核心 Bean 工厂。 数据库事务的一般化抽象层,允许宣告式(Declarative)事务管理器,简化事务的划分使之与底层无关。 内建的针对 JTA 和 单个 JDBC 数据源的一般化策略,使 Spring 的事务支持不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。 JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码), 简化了错误处理, 大大减少了程序员的编码量. 再次利用JDBC时你无需再写出另一个 '终止' (finally) 模块. 并且面向JDBC的异常与Spring 通用数据访问对象 (Data Access Object) 异常等级相一致. 以资源容器DAO 实现和事务策略等形式与 HibernateJDO 和 iBATIS SQL Maps 集成。利用众多的翻转控制方便特性来全面支持, 解决了许多典型的Hibernate集成问题. 所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范. 灵活的基于核心 Spring 功能的 MVC 网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSPFreeMarkerVelocityTilesiText 以及 POI。值得注意的是Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 StrutsWebWork或 Tapestry。 提供诸如事务管理等服务的面向方面编程框架。 在设计应用程序Model时MVC 模式例如Struts通常难于给出一个简洁明了的框架结构。Spring却具有能够让这部分工作变得简单的能力。程序开发员们可以使用Spring的 JDBC 抽象层重新设计那些复杂的框架结构。 在线Javadochttp://tool.oschina.net/apidocs/apidoc?api=Spring-3.1.1
FreeCode: Spring is a lightweight Java/J2EE application framework based on code published in "Expert One-on-One J2EE Design and Development" by Rod Johnson. It includes powerful JavaBeans-based configuration management applying Inversion-of-Control principles, a generic abstraction layer for transaction management allowing for pluggable transaction managers, a JDBC abstraction layer, integration with Hibernate, JDO, Apache OJB, and iBATIS SQL Maps, AOP functionality, and a flexible MVC Web application framework with multiple view technologies. There is also a .NET port available.
----------------------------------------------------------------------------------------------------------------
OpenHub: Spring is a versatile 3D RTS game engine. Using extensively Lua for scripting game-specific code to make nearly every aspect of the engine customizable, from GUI, to unit AI, to pathfinding.
SourceForge: Spring is a versatile 3D RTS game engine. Using extensively Lua for scripting game-specific code to make nearly every aspect of the engine customizable, from GUI, to unit AI, to pathfinding. Spring RTS Engine Web Site
=============================================================================================================
termite (terminal) Xfce Terminal 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: A keyboard-centric VTE-based terminal, aimed at use within a window manager with tiling and/or tabbing support.
----------------------------------------------------------------------------------------------------------------
OpenHub: Terminal is a modern terminal emulator for the Unix/Linux desktop - primarily for the Xfce desktop environment. It is a lightweight emulator based on the VTE widget, easy to use and provides an optional drop-down window (game-console style).
=============================================================================================================
ORFEO Toolbox OTB 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Orfeo Toolbox (OTB) is a high resolution remote sensing image processing library. It contains a set of algorithmic components which allow the user to capitalize on methodological know how, and therefore use an incremental approach to profit from the results of methodological research. OTB is made of a set of basic elements (a C++ class API) and utilities (independent programs built upon the base API).
----------------------------------------------------------------------------------------------------------------
OpenHub: ORFEO Toolbox (OTB) is distributed as an open source library of image processing algorithms. OTB is based on the medical image processing library ITK and offers particular functionalities for remote sensing image processing in general and for high spatial resolution images in particular. OTB is distributed under a free software licence CeCILL (similar to GPL) to encourage contribution from users and to promote reproducible research. The library is intensively tested on several platforms as Linux, Unix and Windows. Most functionnalies are also adapted to process huge images using streaming and multithreading as often as possible.
SourceForge: The Orfeo Toolbox is a C++ library for high resolution remote sensing image processing. It is developped by CNES in the frame of the ORFEO program. More information is available at www.orfeo-toolbox.org It is based on the medical image processing library ITK and offers particular functionalities for remote sensing image processing in general and for high spatial resolution images in particular. Targeted algorithms for high resolution optical images (SPOT, Quickbird, Worldview, Landsat, Ikonos), hyperspectral sensors (Hyperion) or SAR (TerraSarX, ERS, Palsar) are available. Orfeo ToolBox has three main access depending on the category of user: write processing chains in C++ using existing filters or creating new ones, use the OTB applications, which is a plugin-based framework allowing to extend high-level processing chains from various environment ( command-line, QT, QGis, Python....) or use Monteverdi, a software for everyday life image manipulation and analysis. OTB Web Site Follow @orfeotoolbox
=============================================================================================================
ThinWire ThinWire Ajax RIA Framework 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: ThinWire is a development framework that allows you to easily build applications for the Web that have responsive, expressive, and interactive user interfaces without the complexity of the alternatives. While virtually any Web application can be built with ThinWire, it especially excels at enterprise applications, with its highly interactive and rich user interface components. Using ThinWire to handle the view-layer of your Java EE (J2EE) application can provide better user experience and with shorter development time.
----------------------------------------------------------------------------------------------------------------
OpenHub: ThinWire is an LGPL open source, free for commercial use, development framework that allows you to easily build applications for the web that have responsive, expressive & interactive user interfaces without the complexity of the alternatives. While virtually any web application can be built with ThinWire, when it comes to enterprise applications, the framework excels with its highly interactive and rich user interface components. Use ThinWire to handle the view-layer of your Java EE (J2EE) application and you'll be able to provide an unparalleled user experience, while at the same time completing your project faster than ever.
SourceForge: ThinWire is an Ajax RIA framework for building zero footprint Ajax browser applications that feel like desktop GUI applications. Program Ajax on the server, using an event driven GUI model that reconnects program logic. All Major Ajax Browsers Supported! ThinWire Ajax RIA Framework Web Site
=============================================================================================================
TWIG PHP Twig 1
-----------------------------------------------------------------------------------------------------------------
OpenHub: TWIG is a Web-based groupware suite written in PHP. Its features include IMAP and POP3 email, Usenet newsgroups, contact management, scheduling, shared notes, bookmarks and todo lists, meeting announcements, a file manager, a facility reservation tracker, a helpdesk system and a wiki-style intranet content management system. Information in any feature can be shared among users with group oriented access controls. TWIG is accessible, cross-platform, fast and browser-independent. TWIG is fully internationalized and translated into 22 languages.
OSChina: Twig是一个灵活快速安全的PHP模板语言。它将模板编译成经过优化的原始PHP代码。Twig拥有一个Sandbox模型来检测不可信的模板代码。Twig由一个灵活的词法分析器和语法分析器组成可以让开发人员定义自己的标签过滤器并创建自己的DSL。 示例模板: {% extends "layout.html" %} {% block content %}   Content of the page... {% endblock %}
FreeCode: TWIG is a Web-based groupware suite written in PHP, compatible with both PHP3 and PHP4. Its features include IMAP and POP3 email, Usenet newsgroups, contact management, scheduling, shared notes and bookmarks, a todo list, and meeting announcements. Any piece of information can be shared with others via group oriented access controls. By using only plain HTML, it is a simple, cross-platform, fast, and browser-independent way to access or share almost any kind of information, without the complexity or costs of other intranet/groupware packages. It is fully internationalized, with 24 translations.
----------------------------------------------------------------------------------------------------------------
OpenHub: Twig is a template language for PHP, released under the new BSD license (code and documentation).
=============================================================================================================
Prometheus Simply GNUstep (Prometheus) 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Prometheus is a strategical game for 10 to 20 players which is played by email. This package contains a C++ program which is needed for hosting the game, a player's manual, and a set of images you need in the HTML-game printouts.
----------------------------------------------------------------------------------------------------------------
FreeCode: Simply GNUstep (Prometheus) is a Linux/GNU distribution aimed at providing a OpenStep feeling right from the initial bootup. To enhance ease of use, this distribution is more stripped down than most. It is based upon its own source tree, not on any other Linux distribution.
=============================================================================================================
Chemistry Development Kit The Chemistry Development Kit 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: The Chemistry Development Kit (CDK) is a library of Java classes for chemo-, bioinformatics, computational chemistry, and chemometrics. It provides important algorithms like substructure search, SMILES, Gasteiger charges, QSAR descriptor calculation, 3D structure generation, 2D layout and rendering, many IO formats, atom typing, and more.
----------------------------------------------------------------------------------------------------------------
OpenHub: The Chemistry Development Kit (CDK) is a library of Java classes for chemo-, bioinformatics, computational chemistry, and chemometrics. It provides important algorithms like substructure search, SMILES, Gasteiger charges, QSAR descriptor calculation, 3D structure generation, 2D layout and rendering, many IO formats, atom typing, and more.
=============================================================================================================
Gunther Gunther - PHP Website Builder 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Gunther allows the owner to create, manage, and easily maintain his or her Web site using a simple wiki-style syntax in a secure, Web-based environment. It avoids the bloat and complexity of other Content Management Systems, stores pages as flat files, and uses Smarty for template processing. Its features include per-page template preferences, automatic thumbnail creation, image gallery generation, table generation, and a clean and elegant default page template.
----------------------------------------------------------------------------------------------------------------
SourceForge: Gunther is an elegant, accessible, web-based tool (written in PHP) for those who want to build small to medium sized websites. It is also aimed at those building sites for other non-technical users to maintain. Zero configuration required. Gunther - PHP Website Builder Web Site
=============================================================================================================
armadillo Armadillo C++ Library 0
-----------------------------------------------------------------------------------------------------------------
FreeCode: Armadillo is an isometric view shooter game with Armadillo Man as the hero.
----------------------------------------------------------------------------------------------------------------
OpenHub: Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS libraries.
FreeCode: Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. The API is deliberately similar to Matlab's. Integer, floating point, and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS numerics libraries. A delayed evaluation approach, based on template meta-programming, is used (during compile time) to combine several operations into one and reduce or eliminate the need for temporaries.
=============================================================================================================
OpenGTS Open GPS Tracking System 1
-----------------------------------------------------------------------------------------------------------------
OSChina: OpenGTS(Open sourced GPS Tracking System)提供一个基础框架用于创建属于你的基于Web的GPS跟踪系统。它当前使用Google Maps来mapping。并能够通过插件增加对各种GPS跟踪设备的支持。
FreeCode: OpenGTS (Open Source GPS Tracking System) is a full featured Web-based GPS tracking system for fleets of vehicles. It supports OpenLayers and other map providers, detail/summary reporting, and various GPS tracking devices.
----------------------------------------------------------------------------------------------------------------
SourceForge: OpenGTS (Open Source GPS Tracking System) is a full featured web-based GPS tracking system for your fleet of vehicles. It supports OpenLayers and other map providers, detail/summary Reporting, and various GPS tracking devices. Open GPS Tracking System Web Site
=============================================================================================================
RapidMiner RapidMiner (YALE) 1
-----------------------------------------------------------------------------------------------------------------
OSChina: RapidMiner是世界领先的数据挖掘解决方案在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛包括各种数据艺术能简化数据挖掘过程的设计和评价。 功能和特点 免费提供数据挖掘技术和库 100%用Java代码可运行在操作系统 数据挖掘过程简单,强大和直观 内部XML保证了标准化的格式来表示交换数据挖掘过程 可以用简单脚本语言自动进行大规模进程 多层次的数据视图,确保有效和透明的数据 图形用户界面的互动原型 命令行(批处理模式)自动大规模应用 Java API应用编程接口 简单的插件和推广机制 强大的可视化引擎,许多尖端的高维数据的可视化建模 400多个数据挖掘运营商支持 耶鲁大学已成功地应用在许多不同的应用领域,包括文本挖掘,多媒体挖掘,功能设计,数据流挖掘,集成开发的方法和分布式数据挖掘
----------------------------------------------------------------------------------------------------------------
FreeCode: RapidMiner (formerly YALE) is a flexible Java environment for knowledge discovery in databases, machine learning, and data mining. Many nestable learning and preprocessing operators (including Weka) are provided. It features an XML-based graphical user interface, a plugin mechanism, and high-dimensional plotting, and provides an easy-to-use extension mechanism that makes it possible to integrate new operators and adapt the system to your personal requirements. A command line version is also included.
=============================================================================================================
is_email() Blender-boot 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: Checks an email address against the followings RFCs:
FreeCode: is_email() is a PHP function that checks the validity of an email address. It tests whether the given address conforms to the followings RFCs: 5321, 5322, 4291, 2821, 2822, 3696, and 1123 (section 2.1).
----------------------------------------------------------------------------------------------------------------
SourceForge: Live session login user: live password:(no password) Blender-boot is designed to be a dual boot Linux distro. It boots straight into a light enviroment with Blender already open. Its has Dropbox and UbuntuOne for saving your files to open easily in your main operating system. It has Blender 2.62, Gimp 2.8(with single window mode), Guake terminal, Chromium browser and more. Its based on Ubuntu for ease of use and the Software Center has been left in, for installing more applications if you want to. Its a distraction free resource light distro designed with Blender in mind and fast rendering, I hope you enjoy it. Lots of how to`s will be on blenderboot.com soon. Blender-boot Web Site
=============================================================================================================
eLML eLML - eLesson Markup Language 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: The eLesson Markup Language (eLML) is an XML framework for creating structured eLessons using XML. For easier lesson authoring, the Web-based WYSIWYG Firedocs eLML Editor is available, and to create eLML template layouts without any XSLT knowledge, you can use the Template Builder.
----------------------------------------------------------------------------------------------------------------
SourceForge: eLML (eLesson Markup Language) is an XML framework for creating structured eLessons based on a pedagogical model. eLML consists of an XMLSchema and XSLT files to create XHTML, PDF, LaTeX, IMS CP and SCORM versions, standards supported by most LMS. eLML - eLesson Markup Language Web Site
=============================================================================================================
Kate (KDE) libkate 0
-----------------------------------------------------------------------------------------------------------------
OpenHub: KDE Advanced Text Editor,
----------------------------------------------------------------------------------------------------------------
FreeCode: Kate is a codec for karaoke and text encapsulation for Ogg. Most of the time, this would be multiplexed with audio/video to carry subtitles, song lyrics (with or without karaoke data), etc, but it doesn't have to be. Moreover, the motion feature gives Kate a powerful means to describe arbitrary curves, so hand drawing of shapes can be achieved. This was originally meant for karaoke use, but can be used for any purpose. Motions can be attached to various semantics, like position or color, so scrolling or fading text can be defined.
=============================================================================================================
Ranquel Ranquel webserver 1
-----------------------------------------------------------------------------------------------------------------
FreeCode: Ranquel is a small Web server written in Perl. It serves static files and CGI applications (via GET and POST methods). It is designed to be highly portable and doesn't need any extra Perl modules or libraries, and is based on DNHTTPD but remains small and fast by not providing any "advanced" feature such as SSL support, virtual hosts, SSI, etc.
----------------------------------------------------------------------------------------------------------------
SourceForge: Ranquel is a lightweight http server written in Perl that can serve static files and execute CGI applications. Originally based on DNHTTPD, the main goal is to make a simple, portable and minimum webserver (no extra Perl modules, no SSI, no SSL). Ranquel webserver Web Site

Binary file not shown.

151
project_match/pom.xml Normal file
View File

@ -0,0 +1,151 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ossean</groupId>
<artifactId>EDBD</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>EDBD</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- m2eclipse wtp 0.12+ enabled to configure contextRoot, add by w.vela -->
<m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot>
<spring-version>3.1.1.RELEASE</spring-version>
<spring-security-version>3.1.0.RELEASE</spring-security-version>
</properties>
<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20141113</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.wltea.analyzer</groupId>
<artifactId>IKAnalyzer</artifactId>
<version>5.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/IKAnalyzer-5.0.jar</systemPath>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,25 @@
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<!-- TODO: a jarjar format would be better -->
<id>jar-with-dependencies-without-resources</id>
<formats>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<unpack>false</unpack>
<scope>system</scope>
</dependencySet>
</dependencySets>
</assembly>

Binary file not shown.

View File

@ -0,0 +1,126 @@
package com.ossean;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.ossean.databaseSource.DBSource;
import com.ossean.databaseSource.GatherDao;
import com.ossean.model.Configure;
import com.ossean.util.GatherProjectsUtil;
@Component
public class GatherProjects {
private static Logger logger = Logger.getLogger(GatherProjects.class);
private Configure conf;
@Resource
private GatherDao gatherDao;
@Resource
private DBSource dbSource;
@Qualifier("gatherProjectsUtil")
@Autowired
private GatherProjectsUtil gatherProjectsUtil;
private int idsBegin; //转移开始Id值
private int idsEnd; //转移结束Id值
private int idsIncrement;//每次转移的Id量
private int beginId;
private int endId;
private int maxId;
private int pointer;
//读指针
public int readPointer(String table, String source, String target){
int pointer = 1;
//pointer的初始值应该从数据库中读出最小的id
try {
pointer = dbSource.getMinId(source);
} catch (Exception e){
//表示表中没有数据
logger.info("No item in this table");
dbSource.insertPointer(table, source, target, 1);
return 1;
}
try {
pointer = dbSource.getPointer(table, source, target);
} catch(Exception e) {
logger.info("No such pointer! Create one");
dbSource.insertPointer(table, source, target, pointer);
}
return pointer;
}
public void start(String configureName) throws InterruptedException{
conf = new Configure(configureName);
idsIncrement = conf.getIdsIncrement();
idsBegin = readPointer(conf.getPointerTableName(), conf.getSourceTableName(), conf.getTargetTableName());
idsEnd = maxId = dbSource.getMaxId(conf.getSourceTableName());
while(idsBegin < idsEnd){
beginId = idsBegin;
endId = beginId + idsIncrement - 1; //取数据时两边都取等号
if(endId <= maxId){
gatherDao.insertLog(beginId, endId, conf.getMigrationTask(),conf.getSourceTableName(),conf.getTargetTableName());
idsBegin = idsBegin + idsIncrement;
}else {
endId = maxId; //endId应小于maxId
gatherDao.insertLog(beginId, endId, conf.getMigrationTask(),conf.getSourceTableName(),conf.getTargetTableName());
break;
}
}
while(true){
Map checkDoneMap = gatherDao.checkDone(conf.getMigrationTask(),conf.getSourceTableName(),conf.getTargetTableName());
if (checkDoneMap == null) {
// 全部任务完成时线程休眠
logger.info("Thread sleeping ....waiting for new data");
Thread.sleep(conf.getWaitDataTime());
// 取最大id
maxId = dbSource.getMaxId(conf.getSourceTableName());
pointer = dbSource.getPointer(conf.getPointerTableName(), conf.getSourceTableName(), conf.getTargetTableName());
// 有新数据
if (maxId >= pointer) {
// 添加一次任务
beginId = pointer;
if (maxId > beginId + idsIncrement - 1) {
endId = beginId + idsIncrement - 1;
} else {
// 不足时全部转移
endId = maxId;
}
gatherDao.insertLog(beginId, endId, conf.getMigrationTask(),conf.getSourceTableName(),conf.getTargetTableName());
}
continue;
}
//表示有任务没有完成时 继续执行任务 批量处理数据
gatherProjectsUtil.handleBatchData(checkDoneMap, conf);
}
}
public static void main(String[] args) throws InterruptedException{
//获取传递的参数
String configureName = "";
if (args.length != 0) {
configureName = args[0].toString();
} else {
logger.error("404 configure!");
configureName = "flow";
//return;
}
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext*.xml");
GatherProjects Main = applicationContext.getBean(GatherProjects.class);
Main.start(configureName);
}
}

View File

@ -0,0 +1,108 @@
package com.ossean;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.ossean.databaseSource.DBSource;
import com.ossean.databaseSource.GatherDao;
import com.ossean.databaseSource.UpdateControlProjectsDao;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.UpdateControlProjects;
import com.ossean.util.MergeProjectsUtil;
@Component
public class MergeProjects {
Logger logger = Logger.getLogger(this.getClass());
@Resource
private DBSource dbSource;
@Resource
private GatherDao gatherDao;
@Resource
private UpdateControlProjectsDao updateControlDao;
@Qualifier("mergeProjectsUtil")
@Autowired
private MergeProjectsUtil mergeProjectsUtil;
private int startId1;
private static String pointerTableName = "edd_pointers";
private static String sourceTableName = "gather_projects";
private static String targetTableName = "edd_relations";
private static String updateControlProjectsTableName = "update_control_projects";
private static int batchSize = 500;
//读指针
public int readPointer(String table, String source, String target){
int pointer = 1;
//pointer的初始值应该从数据库中读出最小的id
try {
pointer = dbSource.getMinId(source);
} catch (Exception e){
//表示表中没有数据
logger.info("No item in this table");
dbSource.insertPointer(table, source, target, 1);
return 1;
}
try {
pointer = dbSource.getPointer(table, source, target);
} catch(Exception e) {
logger.info("No such pointer! Create one");
dbSource.insertPointer(table, source, target, pointer);
}
return pointer;
}
public void start(){
while(true){
//查看更新表中有没有需要更新的数据
List<UpdateControlProjects> updateProjectList = updateControlDao.findAllItems(updateControlProjectsTableName);
if(updateProjectList.size() != 0){
//表示有需要更新的项目
for(UpdateControlProjects updateProject:updateProjectList){
//重新处理更新项目
GatherProjectsModel model = gatherDao.selectGPMById(sourceTableName, updateProject.getId());
mergeProjectsUtil.handleNewProject(model, true);
updateControlDao.deleteOneItem(updateControlProjectsTableName, updateProject.getId());
}
}
startId1 = readPointer(pointerTableName, sourceTableName, targetTableName);
List<GatherProjectsModel> gpmList1 = gatherDao.selectGPMList(sourceTableName, startId1, batchSize);
if(gpmList1.size() == 0){
try {
logger.info("no item to be handled! Sleep 1h");
Thread.sleep(3600*1000);
continue;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(GatherProjectsModel model1:gpmList1){
logger.info("handling project : " + model1.getId());
// List<GatherProjectsModel> sameProjects = gatherDao.selectGPMByUrlMD5(sourceTableName, model1.getHomepageMD5());
/**
* 内部函数中省略了相同homepage_MD5的代码片段
*/
mergeProjectsUtil.handleNewProject(model1, false);
}
}
}
public static void main(String[] args){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext*.xml");
MergeProjects Main = applicationContext.getBean(MergeProjects.class);
Main.start();
}
}

View File

@ -0,0 +1,65 @@
package com.ossean;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.ossean.databaseSource.DBSource;
import com.ossean.databaseSource.GatherDao;
import com.ossean.model.EddProjects;
import com.ossean.model.EddRelations;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.OpenSourceProject;
import com.ossean.model.Synonymmings;
import com.ossean.model.Synonyms;
import com.ossean.util.MergeProjectsUtil;
import com.ossean.util.RegexHandler;
import com.ossean.util.StringHandler;
import com.ossean.util.StringHandler_ProjectName;
import com.ossean.util.TransferProjectsUtil;
@Component
public class Test {
@Resource
private MergeProjectsUtil util;
@Resource
private TransferProjectsUtil transUtil;
@Resource
private DBSource dbSource;
@Resource
private GatherDao gatherDao;
public void start(){
GatherProjectsModel model1 = new GatherProjectsModel();
GatherProjectsModel model2 = new GatherProjectsModel();
GatherProjectsModel model3 = new GatherProjectsModel();
model1.setId(1);
model2.setId(2);
model3.setId(3);
List<GatherProjectsModel> list = new ArrayList<GatherProjectsModel>();
list.add(model1);
list.add(model2);
list.add(model3);
int hottest_id = 1;
List<GatherProjectsModel> result = transUtil.putHottestInHead(list, hottest_id);
for(GatherProjectsModel model:result){
System.out.println(model.getId());
}
}
public static void main(String[] args){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext*.xml");
Test Main = applicationContext.getBean(Test.class);
Main.start();
}
}

View File

@ -0,0 +1,88 @@
package com.ossean;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.ossean.databaseDest.DBDest;
import com.ossean.databaseSource.DBSource;
import com.ossean.model.EddRelations;
import com.ossean.util.TransferProjectsUtil;
@Component
public class TransferProjects {
Logger logger = Logger.getLogger(this.getClass());
@Resource
private DBSource dbSource;
@Resource
private DBDest dbDest;
@Qualifier("transferProjectsUtil")
@Autowired
private TransferProjectsUtil transferProjectsUtil;
private String pointerTableName = "edd_pointers";
private String sourceTableName = "edd_relations";
private String targetTableName = "open_source_projects";
private int batchSize = 100;
//读指针
public int readPointer(String table, String source, String target){
int pointer = 1;
//pointer的初始值应该从数据库中读出最小的id
try {
pointer = dbSource.getMinId(source);
} catch (Exception e){
//表示表中没有数据
logger.info("No item in this table");
dbSource.insertPointer(table, source, target, 1);
return 1;
}
try {
pointer = dbSource.getPointer(table, source, target);
} catch(Exception e) {
logger.info("No such pointer! Create one");
dbSource.insertPointer(table, source, target, pointer);
}
return pointer;
}
public void start(){
while(true){
int startId = readPointer(pointerTableName, sourceTableName, targetTableName);
List<EddRelations> eddRelationList = dbSource.getEddRelationList(sourceTableName, startId, batchSize);
if(eddRelationList.size() == 0){
try {
logger.info("没有数据了休眠10min");
Thread.sleep(600*1000L);
continue;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(EddRelations relation:eddRelationList){
transferProjectsUtil.handleOneRelation(relation);
}
}
}
public static void main(String[] args){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext*.xml");
TransferProjects Main = applicationContext.getBean(TransferProjects.class);
Main.start();
}
}

View File

@ -0,0 +1,53 @@
package com.ossean.databaseDest;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.ossean.model.OpenSourceProject;
import com.ossean.model.Taggings;
public interface DBDest {
//删除open_source_projects表中对应id的数据
@Delete("delete from ${table} where id=#{id}")
public void deleteOpenSourceProjectsItem(@Param("table") String table, @Param("id") int id);
//查找open_source_projects表对应id的记录
@Select("select * from ${table} where id=#{id}")
public OpenSourceProject selectOpenSourceProjectsItem(@Param("table") String table, @Param("id") int id);
/**
* 下面是transferProjects程序的函数
*/
//向open_source_projects表中插入对象数据
@Insert("insert into ${table} (id,name,description,followers_num,url,language,download_num,view_num_crawled,category,"
+ "crawled_time,source,view_num_local,created_at,updated_at,relative_memos_num,created_time,updated_time,"
+ "tags,composite_score,view_num,activeness,tags_for_search,synonyms) values (#{model.id},#{model.name},#{model.description},"
+ "#{model.followers_num},#{model.url},#{model.language},#{model.download_num},#{model.view_num_crawled},"
+ "#{model.category},#{model.crawled_time},#{model.source},#{model.view_num_local},#{model.created_at},"
+ "now(),#{model.relative_memos_num},#{model.created_time},#{model.updated_time},#{model.tags},"
+ "#{model.composite_score},#{model.view_num},#{model.activeness},#{model.tags_for_search},#{model.synonyms})")
public void insertOsp(@Param("table") String table, @Param("model") OpenSourceProject model);
//查找刚刚插入open_source_projects表中的记录id
@Select("select id from ${table} where name=#{model.name} order by id desc limit 1")
public int getAutoIncrementOspId(@Param("table") String table, @Param("model") OpenSourceProject model);
//插入tag
@Insert("insert ignore into ${table} (name) values (#{name})")
public void insertTag(@Param("table") String table, @Param("name") String name);
//根据tag name查找id
@Select("select id from ${table} where name=#{name}")
public int selectTagIdByName(@Param("table") String table, @Param("name") String name);
//插入tagging
@Insert("insert ignore into ${table} (tag_id,taggable_id,taggable_type,context,created_at,disagree_num) values (#{model.tag_id},#{model.taggable_id},#{model.taggable_type},#{model.context},#{model.created_at},#{model.disagree_num})")
public void insertTagging(@Param("table") String table, @Param("model") Taggings model);
}

View File

@ -0,0 +1,174 @@
package com.ossean.databaseSource;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.ossean.model.EddProjects;
import com.ossean.model.EddRelations;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.Synonymmings;
import com.ossean.model.Synonyms;
import com.ossean.model.Taggings;
import com.ossean.model.Tags;
import com.ossean.model.UpdateControlProjects;
public interface DBSource {
@Select("select Pointer from ${table} where SourceTableName=#{SourceTableName} and TargetTableName=#{TargetTableName}")
public int getPointer(@Param("table") String table, @Param("SourceTableName") String SourceTableName, @Param("TargetTableName") String TargetTableName);
//读取表中最小id值
@Select("select min(id) from ${table}")
public int getMinId(@Param("table") String table);
//读取表中最大id值
@Select("select max(id) from ${table}")
public int getMaxId(@Param("table") String table);
//读取item_tag_relation表对应id后面的数据
@Select("select * from ${table} where id>#{id}")
public List<Taggings> getRemainItems(@Param("table") String table, @Param("id") int id);
//根据标签名读取标签id
@Select("select * from ${table} where name=#{name}")
public Tags getTagByName(@Param("table") String table, @Param("name") String name);
//根据标签id读取Tag对象
@Select("select * from ${table} where id=#{id}")
public Tags getTagById(@Param("table") String table, @Param("id") int id);
//读取对应表中项目总数
@Select("select count(*) from ${table}")
public int getItemNumber(@Param("table") String table);
//从item_tag_relation表中读取对应gather_projects_id的数据
@Select("select * from ${table} where taggable_id=#{id} and taggable_type='OpenSourceProject'")
public List<Taggings> getTaggingsListByTaggableId(@Param("table") String table, @Param("id") int id);
//读取tagid和taggable_type对应的数据条目数
@Select("select count(*) from ${table} where (tag_id=#{tagId1} or tag_id=#{tagId2}) and taggable_type='OpenSourceProject'")
public int getNumOfTagIdAndOspByTwoTagIds(@Param("table") String table, @Param("tagId1") int tagId1, @Param("tagId2") int tagId2);
//重载的上面一个函数
@Select("select count(*) from ${table} where tag_id=#{tagId1} and taggable_type='OpenSourceProject'")
public int getNumOfTagIdAndOsp(@Param("table") String table, @Param("tagId1") int tagId);
//对新的EddProject对象进行更新
@Update("update ${table} set "
+ "name=#{project.name},description=#{project.description},followers_num=#{project.followers_num},"
+ "url=#{project.url},language=#{project.language},download_num=#{project.download_num},view_num_crawled=#{project.view_num_crawled},"
+ "category=#{project.category},crawled_time=#{project.crawled_time},source=#{project.source},view_num_local=#{project.view_num_local},"
+ "created_at=#{project.created_at},updated_at=#{project.updated_at},composite_score=#{project.composite_score},"
+ "relative_memos_num=#{project.relative_memos_num},created_time=#{project.created_time},updated_time=#{project.updated_time},"
+ "view_num=#{project.view_num},activeness=#{project.activeness},tags=#{project.tags},name_value=#{project.name_value} where id=#{project.id}")
public void updateEddProject(@Param("table") String table, @Param("project") EddProjects project);
@Insert("insert into ${table} "
+ "(name,description,followers_num,url,language,download_num,view_num_crawled,category,crawled_time,source,view_num_local,created_at,"
+ "updated_at,composite_score,relative_memos_num,created_time,updated_time,view_num,activeness,tags,name_value) "
+ "values "
+ "(#{project.name},#{project.description},#{project.followers_num},#{project.url},#{project.language},"
+ "#{project.download_num},#{project.view_num_crawled},#{project.category},#{project.crawled_time},#{project.source},#{project.view_num_local},"
+ "#{project.created_at},#{project.updated_at},#{project.composite_score},#{project.relative_memos_num},#{project.created_time},#{project.updated_time},"
+ "#{project.view_num},#{project.activeness},#{project.tags},#{project.name_value})")
public void insertEddProject(@Param("table") String table, @Param("project") EddProjects project);
@Insert("insert into ${table} (`SourceTableName`,`TargetTableName`,`Pointer`) values (#{SourceTableName},#{TargetTableName},#{Pointer})")
public void insertPointer(@Param("table") String table, @Param("SourceTableName") String SourceTableName, @Param("TargetTableName") String TargetTableName, @Param("Pointer") int Pointer);
@Update("update ${table} set Pointer=#{Pointer} where SourceTableName=#{SourceTableName} and TargetTableName=#{TargetTableName}")
public void updatePointer(@Param("table") String table, @Param("SourceTableName") String SourceTableName, @Param("TargetTableName") String TargetTableName, @Param("Pointer") int Pointer);
//插入Taggings对象
@Insert("insert ignore into ${table} (tag_id,urlMD5,taggable_type,context,created_at,disagree_num) values (#{model.tag_id},#{model.urlMD5},#{model.taggable_type},#{model.context},#{model.created_at},#{model.disagree_num})")
public void insertTaggings(@Param("table") String table, @Param("model") Taggings model);
//读取同义词表中得所有同义词
@Select("select name from ${synonyms} where id in (select synonym_id from ${synonymmings} where synonymming_id=#{synonymming_id})")
public List<String> getSynonyms(@Param("synonyms") String synonyms, @Param("synonymmings") String synonymmings, @Param("synonymming_id") int synonymming_id);
//插入别名到synonym表
@Insert("insert ignore into ${table} (name) values (#{model.name})")
public void insertSynonym(@Param("table") String table, @Param("model") Synonyms model);
//根据同义词名查找同义词对象
@Select("select * from ${table} where name=#{name}")
public Synonyms getSynonymByName(@Param("table") String table, @Param("name") String name);
//插入Synonymmings对象
@Insert("insert ignore into ${table} (synonym_id,synonymming_id) values (#{model.synonym_id},#{model.synonymming_id})")
public void insertSynonymming(@Param("table") String table, @Param("model") Synonymmings model);
//取出synonymmings对象
@Select("select * from ${table} where synonym_id=#{synonym_id} and synonymming_id=#{synonymming_id}")
public Synonymmings selectSynonymming(@Param("table") String table, @Param("synonym_id") int synonym_id, @Param("synonymming_id") int synonymming_id);
//根据synonym_id找到所有synonymmings对象
@Select("select * from ${table} where synonym_id=#{synonym_id}")
public List<Synonymmings> selectSynonymmingListBySynonymId(@Param("table") String table, @Param("synonym_id") int synonym_id);
//根据url检测是否存在匹配结果
@Select("select * from ${table} where url like '%|:|${url}' escape '/' or url like '%|:|${url}|,|%' escape '/'")
public EddProjects selectEddProjectsByUrl(@Param("table") String table, @Param("url") String url);
@Select("select * from ${table} where id=#{id}")
public EddProjects selectEddProjectsById(@Param("table") String table, @Param("id") int id);
//根据删除表中对应的数据
@Delete("delete from ${table} where id=#{id}")
public void deleteItemById(@Param("table") String table, @Param("id") int id);
//根据id获取EddProjects对象信息
@Select("select * from ${table} where id=#{id}")
public EddProjects getEddProjectsById(@Param("table") String table, @Param("id") int id);
//获取edd_relations表中记录相应gather_projects_id的记录
@Select("select * from ${table} where gather_projects_ids like '%,${gather_projects_id},%'")
public List<EddRelations> getEddRelationsByGatherProjectsId(@Param("table") String table, @Param("gather_projects_id") int gather_projects_id);
//删除edd_relations表中对应id的记录
@Delete("delete from ${table} where id=#{id}")
public void deleteEddRelationsItem(@Param("table") String table, @Param("id") int id);
//向edd_relations表插入记录
@Insert("insert into ${table} (gather_projects_ids) values (#{model.gather_projects_ids})")
public void insertEddRelations(@Param("table") String table, @Param("model") EddRelations model);
/**
* 下面是transferProjects程序的函数
*/
//获取edd_relations表中数据
@Select("select * from ${table} where id>=#{start} limit #{size}")
public List<EddRelations> getEddRelationList(@Param("table") String table, @Param("start") int start, @Param("size") int size);
//读取gather_projects表中的数据 根据id in来读取
@Select("select * from ${table} where id=#{id}")
public GatherProjectsModel getGatherProjectById(@Param("table") String table, @Param("id") int id);
//读取synonymmings表
@Select("select * from ${table} where synonymming_id=#{synonymming_id}")
public List<Synonymmings> getSynonymmingList(@Param("table") String table, @Param("synonymming_id") int synonymming_id);
//读取synonym对象
@Select("select * from ${table} where id=#{id}")
public Synonyms getSynonymById(@Param("table") String table, @Param("id") int id);
//更新edd_relations表的osp_id字段
@Update("update ${table} set osp_id=#{osp_id} where id=#{id}")
public void updateEddRelationOspId(@Param("table") String table, @Param("id") int id, @Param("osp_id") int osp_id);
//更新edd_relations表的gather_projects_ids字段
@Update("update ${table} set gather_projects_ids=#{gather_projects_ids} where id=#{id}")
public void updateEddRelationGatherProjectsIds(@Param("table") String table, @Param("id") int id, @Param("gather_projects_ids") String gather_projects_ids);
}

View File

@ -0,0 +1,103 @@
package com.ossean.databaseSource;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.ossean.model.GatherProjectsModel;
public interface GatherDao {
//向gather_tasks表插入转移任务
@Insert("INSERT ignore INTO ${taskTableName} (BeginId,EndId,SourceTableName,TargetTableName) VALUES (${idsBegin},${idsEnd},#{sourceTableName},#{targetTableName})")
public int insertLog(@Param("idsBegin") int idsBegin, @Param("idsEnd") int idsEnd, @Param("taskTableName") String taskTableName,
@Param("sourceTableName") String sourceTableName, @Param("targetTableName") String targetTableName);
//查询未处理的task
@Select("SELECT BeginId,EndId,BeginTime,EndTime " +
"FROM ${migrationTask} " +
"WHERE IsDone = 0 AND SourceTableName=#{sourceTableName} AND TargetTableName=#{targetTableName} ORDER BY BeginId LIMIT 0,1")
public Map checkDone(@Param("migrationTask") String migrationTask, @Param("sourceTableName") String sourceTableName, @Param("targetTableName") String targetTableName);
//更新转移任务开始时间
@Update("UPDATE ${migrationTask} SET BeginTime = NOW() WHERE BeginId = ${sourceIdBegin} AND SourceTableName=#{sourceTableName} AND TargetTableName=#{targetTableName}")
public int updateTaskBeginTime(@Param("migrationTask") String migrationTask, @Param("sourceIdBegin") int sourceIdBegin, @Param("sourceTableName") String sourceTableName, @Param("targetTableName") String targetTableName);
//获取数据源中相应数据 两边都有等于号
@Select("Select ${selectItems} from ${sourceTable} " +
"where id >=${idBegin} and id <= ${idEnd} ${andWhere}")
public List<GatherProjectsModel> moveDataGet(@Param("sourceTable") String sourceTableName,
@Param("selectItems") String selectItems,
@Param("idBegin") int idBegin, @Param("idEnd") int idEnd,
@Param("andWhere") String andWhere);
//将获取到得数据源数据插入目标表中
@Insert("INSERT INTO ${targetTable} (${targetFields}) VALUES (#{model.id},#{model.deal_name},#{model.name},#{model.description},#{model.last_update_time},#{model.registered_time},#{model.followers_num},#{model.url},#{model.urlMD5},#{model.pageMD5},#{model.language},#{model.tags},#{model.contributors_num},#{model.monitor},#{model.status},#{model.download_num},#{model.visit_num},#{model.category},#{model.crawled_time},#{model.history},#{model.source},#{model.license},#{model.platform},#{model.homepage})")
public int moveDataInsert(@Param("targetTable") String targetTableName,
@Param("targetFields") String targetFields,
@Param("model") GatherProjectsModel model);
//对urlMD5相同的数据进行replace into操作
@Update("replace into ${targetTable} (${targetFields}) values (#{model.deal_name},#{model.name},#{model.description},#{model.last_update_time},#{model.registered_time},#{model.followers_num},#{model.url},#{model.urlMD5},#{model.pageMD5},#{model.language},#{model.tags},#{model.contributors_num},#{model.monitor},#{model.status},#{model.download_num},#{model.visit_num},#{model.category},#{model.crawled_time},#{model.history},#{model.source},#{model.license},#{model.platform},#{model.homepage})")
public int moveDataReplace(@Param("targetTable") String targetTableName,
@Param("targetFields") String targetFields,
@Param("model") GatherProjectsModel model);
//对urlMD5相同的数据进行update操作
@Update("update ${targetTable} set deal_name=#{model.deal_name},name=#{model.name},description=#{model.description},"
+ "last_update_time=#{model.last_update_time},registered_time=#{model.registered_time},"
+ "followers_num=#{model.followers_num},pageMD5=#{model.pageMD5},language=#{model.language},"
+ "tags=#{model.tags},contributors_num=#{model.contributors_num},monitor=#{model.monitor},"
+ "status=#{model.status},download_num=#{model.download_num},visit_num=#{model.visit_num},"
+ "category=#{model.category},crawled_time=#{model.crawled_time},history=#{model.history},"
+ "source=#{model.source},license=#{model.license},platform=#{model.platform},homepage=#{model.homepage} where id=#{id}")
public void moveDataUpdate(@Param("targetTable") String targetTableName, @Param("model") GatherProjectsModel model, @Param("id") int id);
// //获取刚刚插入gather_projects表中数据的id 由于gather_projects表中的自增id主键删除
// @Select("select id from ${table} where urlMD5=#{model.urlMD5} and name=#{model.name} order by id desc limit 1")
// public int getAutoIncrementIdFromTable(@Param("table") String table, @Param("model") GatherProjectsModel model);
//更新数据
@Update("")
public void updateData(@Param("id") int id, @Param("model") GatherProjectsModel model);
//更新任务结束时间
@Update("UPDATE ${migrationTask} SET IsDone = 1,EndTime = NOW(),flow=${moveNum} WHERE BeginId = ${endIdBegin} AND SourceTableName=#{sourceTableName} AND TargetTableName=#{targetTableName}")
public int updateTaskEndTime(@Param("migrationTask") String migrationTask, @Param("endIdBegin") int endIdBegin, @Param("moveNum") int moveNum, @Param("sourceTableName") String sourceTableName, @Param("targetTableName") String targetTableName);
//向tag表存储数据
@Insert("insert ignore into ${table} (name) values (#{name})")
public void insertTag(@Param("table") String table, @Param("name") String name);
//根据tag的name找tag的id
@Select("select id from ${table} where name=#{name}")
public int selectTagIdByName(@Param("table") String table, @Param("name") String name);
//根据urlMD5码找到GatherProjectModel对象
@Select("select * from ${table} where urlMD5=#{urlMD5}")
public GatherProjectsModel selectGPMByUrlMD5(@Param("table") String table, @Param("urlMD5") String urlMD5);
//根据id和limit取GatherProjectsModel列表
@Select("select * from ${table} where id>=#{start} order by id asc limit #{size}")
public List<GatherProjectsModel> selectGPMList(@Param("table") String table, @Param("start") int start, @Param("size") int size);
@Select("select * from ${table} where id>=#{start} and id<#{end} limit #{size}")
public List<GatherProjectsModel> selectGPMListBySize(@Param("table") String table, @Param("start") int start, @Param("end") int end, @Param("size") int size);
//根据id取GatherProjectsModel对象
@Select("select * from ${table} where id=#{id}")
public GatherProjectsModel selectGPMById(@Param("table") String table, @Param("id") int id);
//查找相同homepage的项目
@Select("select * from ${table} where homepage_MD5=#{md5}")
public List<GatherProjectsModel> selectGPMBySameHomePage(@Param("table") String table, @Param("md5") String md5);
}

View File

@ -0,0 +1,18 @@
package com.ossean.databaseSource;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.ossean.model.PKControlProjects;
public interface PKControlProjectsDao {
//向表中插入一条数据
@Insert("insert into ${table} (`urlMD5`) values (#{urlMD5})")
public void insertOneItem(@Param("table") String table, @Param("urlMD5") String urlMD5);
//读取项目urlMD5码对应的数据信息
@Select("select * from ${table} where urlMD5=#{urlMD5}")
public PKControlProjects selectItemByUrlMD5(@Param("table") String table, @Param("urlMD5") String urlMD5);
}

View File

@ -0,0 +1,36 @@
package com.ossean.databaseSource;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.ossean.model.UpdateControlProjects;
public interface UpdateControlProjectsDao {
//向更新表中添加数据
@Insert("insert into ${table} (`id`,`update_time`) values (#{id},now())")
public void insertOneItem(@Param("table") String table, @Param("id") int id);
//检查更新表中是否有对相同项目的更新
@Select("select * from ${table} where id=#{id}")
public UpdateControlProjects findSameUpdate(@Param("table") String table, @Param("id") int id);
//更新更新时间
@Update("update ${table} set update_time=now() where id=#{model.id}")
public void updateItem(@Param("table") String table, @Param("model") UpdateControlProjects model);
//查找table中所有的记录(首先按照更新时间从近到远排再按更新id从小到大排)
@Select("select * from ${table} order by update_time desc, id asc")
public List<UpdateControlProjects> findAllItems(@Param("table") String table);
//删除对应id的记录
@Delete("delete from ${table} where id=#{id}")
public void deleteOneItem(@Param("table") String table, @Param("id") int id);
}

View File

@ -0,0 +1,124 @@
package com.ossean.model;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
import org.apache.log4j.Logger;
public class Configure {
private Properties prop = new Properties();
Logger log4j = Logger.getLogger(Configure.class);
private String pointerTableName;
private String migrationTask;
private String sourceTableName;
private String targetTableName;
private String sourceFields;
private String targetFields;
private int idsIncrement;
private int waitDataTime;
private String andWhere;
//自定义构造函数
public Configure(String confPath) {
confPath = confPath + ".xml";
try {
URL url = ClassLoader.getSystemResource(confPath);
InputStream is = url.openStream();
prop.loadFromXML(is);
} catch (FileNotFoundException e) {
log4j.error("Configure FileNotFoundException !");
e.printStackTrace();
} catch (InvalidPropertiesFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
config();
}
private void config() {
this.pointerTableName=prop.getProperty("pointerTableName");
this.migrationTask=prop.getProperty("migrationTask");
this.sourceTableName = prop.getProperty("sourceTableName");
this.sourceFields=prop.getProperty("sourceFields");
this.targetTableName=prop.getProperty("targetTableName");
this.targetFields=prop.getProperty("targetFields");
this.idsIncrement=Integer.parseInt(prop.getProperty("idsIncrement"));
this.waitDataTime=Integer.parseInt(prop.getProperty("waitDataTime"));
this.andWhere=prop.getProperty("andWhere");
}
public Properties getProp() {
return prop;
}
public void setProp(Properties prop) {
this.prop = prop;
}
public Logger getLog4j() {
return log4j;
}
public void setLog4j(Logger log4j) {
this.log4j = log4j;
}
public String getPointerTableName() {
return pointerTableName;
}
public void setPointerTableName(String pointerTableName) {
this.pointerTableName = pointerTableName;
}
public String getMigrationTask() {
return migrationTask;
}
public void setMigrationTask(String migrationTask) {
this.migrationTask = migrationTask;
}
public String getSourceTableName() {
return sourceTableName;
}
public void setSourceTableName(String sourceTableName) {
this.sourceTableName = sourceTableName;
}
public String getTargetTableName() {
return targetTableName;
}
public void setTargetTableName(String targetTableName) {
this.targetTableName = targetTableName;
}
public String getSourceFields() {
return sourceFields;
}
public void setSourceFields(String sourceFields) {
this.sourceFields = sourceFields;
}
public String getTargetFields() {
return targetFields;
}
public void setTargetFields(String targetFields) {
this.targetFields = targetFields;
}
public int getIdsIncrement() {
return idsIncrement;
}
public void setIdsIncrement(int idsIncrement) {
this.idsIncrement = idsIncrement;
}
public int getWaitDataTime() {
return waitDataTime;
}
public void setWaitDataTime(int waitDataTime) {
this.waitDataTime = waitDataTime;
}
public String getAndWhere() {
return andWhere;
}
public void setAndWhere(String andWhere) {
this.andWhere = andWhere;
}
}

View File

@ -0,0 +1,160 @@
package com.ossean.model;
public class EddProjects {
private int id;
private String name;
private String description;
private int followers_num;
private String url;
private String language;
private int download_num;
private int view_num_crawled;
private String category;
private String crawled_time;
private String source;
private int view_num_local;
private String created_at;
private String updated_at;
private int composite_score;
private int relative_memos_num;
private String created_time;
private String updated_time;
private int view_num;
private int activeness;
private String tags;
private double name_value;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getFollowers_num() {
return followers_num;
}
public void setFollowers_num(int followers_num) {
this.followers_num = followers_num;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public int getDownload_num() {
return download_num;
}
public void setDownload_num(int download_num) {
this.download_num = download_num;
}
public int getView_num_crawled() {
return view_num_crawled;
}
public void setView_num_crawled(int view_num_crawled) {
this.view_num_crawled = view_num_crawled;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getCrawled_time() {
return crawled_time;
}
public void setCrawled_time(String crawled_time) {
this.crawled_time = crawled_time;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public int getView_num_local() {
return view_num_local;
}
public void setView_num_local(int view_num_local) {
this.view_num_local = view_num_local;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getUpdated_at() {
return updated_at;
}
public void setUpdated_at(String updated_at) {
this.updated_at = updated_at;
}
public int getRelative_memos_num() {
return relative_memos_num;
}
public void setRelative_memos_num(int relative_memos_num) {
this.relative_memos_num = relative_memos_num;
}
public String getCreated_time() {
return created_time;
}
public void setCreated_time(String created_time) {
this.created_time = created_time;
}
public String getUpdated_time() {
return updated_time;
}
public void setUpdated_time(String updated_time) {
this.updated_time = updated_time;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public int getComposite_score() {
return composite_score;
}
public void setComposite_score(int composite_score) {
this.composite_score = composite_score;
}
public int getView_num() {
return view_num;
}
public void setView_num(int view_num) {
this.view_num = view_num;
}
public int getActiveness() {
return activeness;
}
public void setActiveness(int activeness) {
this.activeness = activeness;
}
public double getName_value() {
return name_value;
}
public void setName_value(double name_value) {
this.name_value = name_value;
}
}

View File

@ -0,0 +1,18 @@
package com.ossean.model;
public class EddRelations {
private int id;
private String gather_projects_ids;
public String getGather_projects_ids() {
return gather_projects_ids;
}
public void setGather_projects_ids(String gather_projects_ids) {
this.gather_projects_ids = gather_projects_ids;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

View File

@ -0,0 +1,267 @@
package com.ossean.model;
public class GatherProjectsModel {
private int id;
private String deal_name;
private String name;
private String description;
private String last_update_time;
private String registered_time;
private Integer followers_num = null;
private String url;
private String urlMD5;
private String pageMD5;
private String language;
private String tags;
private Integer contributors_num = null;
private Integer monitor = null;
private String status;
private Integer download_num = null;
private Integer visit_num = null;
private String category;
private String crawled_time;
private Integer history = null;
private String source;
private String license;
private String platform;
private String homepage;
//自定义构造函数
public GatherProjectsModel(){
}
public GatherProjectsModel(String deal_name, String name,
String description, String last_update_time,
String registered_time, Integer followers_num, String url,
String urlMD5, String pageMD5, String language, String tags,
Integer contributors_num, Integer monitor, String status,
Integer download_num, Integer visit_num, String category,
String crawled_time, Integer history, String source,
String license, String platform) {
super();
this.deal_name = deal_name;
this.name = name;
this.description = description;
this.last_update_time = last_update_time;
this.registered_time = registered_time;
this.followers_num = followers_num;
this.url = url;
this.urlMD5 = urlMD5;
this.pageMD5 = pageMD5;
this.language = language;
this.tags = tags;
this.contributors_num = contributors_num;
this.monitor = monitor;
this.status = status;
this.download_num = download_num;
this.visit_num = visit_num;
this.category = category;
this.crawled_time = crawled_time;
this.history = history;
this.source = source;
this.license = license;
this.platform = platform;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDeal_name() {
return deal_name;
}
public void setDeal_name(String deal_name) {
this.deal_name = deal_name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getLast_update_time() {
return last_update_time;
}
public void setLast_update_time(String last_update_time) {
this.last_update_time = last_update_time;
}
public String getRegistered_time() {
return registered_time;
}
public void setRegistered_time(String registered_time) {
this.registered_time = registered_time;
}
public Integer getFollowers_num() {
return followers_num;
}
public void setFollowers_num(Integer followers_num) {
this.followers_num = followers_num;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrlMD5() {
return urlMD5;
}
public void setUrlMD5(String urlMD5) {
this.urlMD5 = urlMD5;
}
public String getPageMD5() {
return pageMD5;
}
public void setPageMD5(String pageMD5) {
this.pageMD5 = pageMD5;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public Integer getContributors_num() {
return contributors_num;
}
public void setContributors_num(Integer contributors_num) {
this.contributors_num = contributors_num;
}
public Integer getMonitor() {
return monitor;
}
public void setMonitor(Integer monitor) {
this.monitor = monitor;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getDownload_num() {
return download_num;
}
public void setDownload_num(Integer download_num) {
this.download_num = download_num;
}
public Integer getVisit_num() {
return visit_num;
}
public void setVisit_num(Integer visit_num) {
this.visit_num = visit_num;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getCrawled_time() {
return crawled_time;
}
public void setCrawled_time(String crawled_time) {
this.crawled_time = crawled_time;
}
public Integer getHistory() {
return history;
}
public void setHistory(Integer history) {
this.history = history;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getLicense() {
return license;
}
public void setLicense(String license) {
this.license = license;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getHomepage() {
return homepage;
}
public void setHomepage(String homepage) {
this.homepage = homepage;
}
}

View File

@ -0,0 +1,181 @@
package com.ossean.model;
public class OpenSourceProject {
private int id;
private String name;
private String description;
private int followers_num;
private String url;
private String urlMD5; //添加urlMD5作为主键
private String language;
private int download_num;
private int view_num_crawled;
private String category;
private String crawled_time;
private String source;
private int view_num_local;
private String created_at;
private String updated_at;
private int relative_memos_num;
private String created_time;
private String updated_time;
private String tags;
private int composite_score;
private int view_num;
private int activeness;
private String tags_for_search;
private String synonyms;
private String update_time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getFollowers_num() {
return followers_num;
}
public void setFollowers_num(int followers_num) {
this.followers_num = followers_num;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrlMD5() {
return urlMD5;
}
public void setUrlMD5(String urlMD5) {
this.urlMD5 = urlMD5;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public int getDownload_num() {
return download_num;
}
public void setDownload_num(int download_num) {
this.download_num = download_num;
}
public int getView_num_crawled() {
return view_num_crawled;
}
public void setView_num_crawled(int view_num_crawled) {
this.view_num_crawled = view_num_crawled;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getCrawled_time() {
return crawled_time;
}
public void setCrawled_time(String crawled_time) {
this.crawled_time = crawled_time;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public int getView_num_local() {
return view_num_local;
}
public void setView_num_local(int view_num_local) {
this.view_num_local = view_num_local;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public String getUpdated_at() {
return updated_at;
}
public void setUpdated_at(String updated_at) {
this.updated_at = updated_at;
}
public int getRelative_memos_num() {
return relative_memos_num;
}
public void setRelative_memos_num(int relative_memos_num) {
this.relative_memos_num = relative_memos_num;
}
public String getCreated_time() {
return created_time;
}
public void setCreated_time(String created_time) {
this.created_time = created_time;
}
public String getUpdated_time() {
return updated_time;
}
public void setUpdated_time(String updated_time) {
this.updated_time = updated_time;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public int getComposite_score() {
return composite_score;
}
public void setComposite_score(int composite_score) {
this.composite_score = composite_score;
}
public int getView_num() {
return view_num;
}
public void setView_num(int view_num) {
this.view_num = view_num;
}
public int getActiveness() {
return activeness;
}
public void setActiveness(int activeness) {
this.activeness = activeness;
}
public String getTags_for_search() {
return tags_for_search;
}
public void setTags_for_search(String tags_for_search) {
this.tags_for_search = tags_for_search;
}
public String getSynonyms() {
return synonyms;
}
public void setSynonyms(String synonyms) {
this.synonyms = synonyms;
}
public String getUpdate_time() {
return update_time;
}
public void setUpdate_time(String update_time) {
this.update_time = update_time;
}
}

View File

@ -0,0 +1,19 @@
package com.ossean.model;
public class PKControlProjects {
private int id; //自增id用于生成固定项目固定的id
private String urlMD5;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUrlMD5() {
return urlMD5;
}
public void setUrlMD5(String urlMD5) {
this.urlMD5 = urlMD5;
}
}

View File

@ -0,0 +1,26 @@
package com.ossean.model;
public class Synonymmings {
private int id;
private int synonym_id;
private int synonymming_id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getSynonym_id() {
return synonym_id;
}
public void setSynonym_id(int synonym_id) {
this.synonym_id = synonym_id;
}
public int getSynonymming_id() {
return synonymming_id;
}
public void setSynonymming_id(int synonymming_id) {
this.synonymming_id = synonymming_id;
}
}

View File

@ -0,0 +1,20 @@
package com.ossean.model;
public class Synonyms {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,78 @@
package com.ossean.model;
public class Taggings {
private int id;
private int tag_id;
private String urlMD5;
private String taggable_type;
private int taggable_id;
private int tagger_id;
private String tagger_type;
private String context;
private String created_at;
private int disagree_num;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getTag_id() {
return tag_id;
}
public void setTag_id(int tag_id) {
this.tag_id = tag_id;
}
public int getTaggable_id() {
return taggable_id;
}
public void setTaggable_id(int taggable_id) {
this.taggable_id = taggable_id;
}
public String getUrlMD5() {
return urlMD5;
}
public void setUrlMD5(String urlMD5) {
this.urlMD5 = urlMD5;
}
public String getTaggable_type() {
return taggable_type;
}
public void setTaggable_type(String taggable_type) {
this.taggable_type = taggable_type;
}
public int getTagger_id() {
return tagger_id;
}
public void setTagger_id(int tagger_id) {
this.tagger_id = tagger_id;
}
public String getTagger_type() {
return tagger_type;
}
public void setTagger_type(String tagger_type) {
this.tagger_type = tagger_type;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getCreated_at() {
return created_at;
}
public void setCreated_at(String created_at) {
this.created_at = created_at;
}
public int getDisagree_num() {
return disagree_num;
}
public void setDisagree_num(int disagree_num) {
this.disagree_num = disagree_num;
}
}

View File

@ -0,0 +1,20 @@
package com.ossean.model;
public class Tags {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,19 @@
package com.ossean.model;
public class UpdateControlProjects {
private int id;
private String update_time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUpdate_time() {
return update_time;
}
public void setUpdate_time(String update_time) {
this.update_time = update_time;
}
}

View File

@ -0,0 +1,16 @@
package com.ossean.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateHandler {
//获取当前时间的String
public static String getNow(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String result = sdf.format(new Date());
return result;
}
}

View File

@ -0,0 +1,298 @@
package com.ossean.util;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EDDHandler {
//提取主副描述信息1类型
public static List<String> getMainAndViceDescriptionByBracket(String str){
List<String> result = new ArrayList<String>();
int index1 = -1;
int index2 = -1;
String strInBracket = null;
index1 = str.indexOf("(");
index2 = str.indexOf(")");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("");
index2 = str.indexOf("");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("[");
index2 = str.indexOf("]");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("");
index2 = str.indexOf("");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("{");
index2 = str.indexOf("}");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
result.add(str.trim());
}
}
}
}
}
if(strInBracket != null){
result.add(strInBracket.trim());//暂时没有对括号中的数据进行常用词排除处理
}
return result;
}
//提取主副描述信息2known as
public static List<String> getMainAndViceDescriptionByKnowAs(List<String> strs){
List<String> result = new ArrayList<String>();
for(String str:strs){
boolean flag = false;
if(str == null)
continue;
List<String> knownAss = FileReader.read("./files/known_as.txt");
for(String tmp:knownAss){
int index = str.toLowerCase().indexOf(tmp);
if(index > 0){
String tmp2 = str.substring(index + tmp.length()).trim();
String[] resultTmp = tmp2.split(" and ");
for(String s:resultTmp){
String[] resultTmp2 = s.split(" or ");
for(String s2:resultTmp2){
result.add(s2.trim());
}
}
flag = true;
break;
}
}
if(flag == false){
//表示没有known as之类的短语
result.add(str.trim());
}
}
return result;
}
//去除定语描述信息1,
public static List<String> removeComma(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i);
int index1 = str.indexOf(",");
if(index1 > 0){
strs.remove(i);
i--;
continue;
}
int index2 = str.indexOf("");
if(index2 > 0){
strs.remove(i);
i--;
continue;
}
}
return strs;
}
//去除定语描述信息2The
public static List<String> removeDemonstrativeWords(List<String> strs){
List<String> demonstrativeWords = FileReader.read("./files/demonstrativeWord.txt");
List<String> results = new ArrayList<String>();
for(String str:strs){
int lastIndex = -1;
for(int i = 0; i < demonstrativeWords.size(); i++){
String dWord = demonstrativeWords.get(i);
int indexTmp = -1;
if((indexTmp = str.lastIndexOf(dWord)) > lastIndex){
lastIndex = indexTmp + dWord.length();
}
}
if(lastIndex > 0){
String result = str.substring(lastIndex).trim();
results.add(result);
continue;
}
results.add(str.trim());
}
return results;
}
//去除从句描述信息
public static List<String> removeArrtibutiveClause(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i);
//去除which is/that is/what is这样的从句
String[] acs = {" that"," which"," what"};
for(String ac:acs){
str = str.trim();
int index = str.lastIndexOf(ac);
if(index > 0){
if(index + ac.length() >= str.length()){
strs.remove(i);
i--;
break;
}
}
}
}
return strs;
}
//去除指示代词项目描述词以及两者的笛卡尔积
//去除指示代词
public static List<String> removePronoun(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i).trim();
List<String> pronouns = FileReader.read("./files/pronoun.txt");
for(int j = 0; j < pronouns.size(); j++){
String pronoun = pronouns.get(j);
if((str.toLowerCase()).equals(pronoun.toLowerCase())){
strs.remove(i);
i--;
break;
}
}
}
return strs;
}
//去除项目常用词
public static List<String> removeProject(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i).trim();
List<String> nouns = FileReader.read("./files/project.txt");
for(String noun:nouns){
if((str.toLowerCase()).equals(noun.toLowerCase())){
strs.remove(i);
i--;
break;
}
}
}
return strs;
}
//去除两者的笛卡尔积
public static List<String> removePPCombine(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i).trim();
List<String> pronouns = FileReader.read("./files/pronoun.txt");
List<String> nouns = FileReader.read("./files/project.txt");
for(int k = 0; k < pronouns.size(); k++){
boolean flag = false;//用于判断是不是删除了当前的字符串
String pronoun = pronouns.get(k).toLowerCase();
for(int j = 0; j < nouns.size(); j++){
String noun = nouns.get(j).toLowerCase();
Pattern pattern = Pattern.compile(pronoun+"\\s*"+noun);
Matcher matcher = pattern.matcher(str.toLowerCase());
if(matcher.find()){
strs.remove(i);
i--;
flag = true;
break;
}
}
if(flag){
break;
}
}
}
return strs;
}
//特殊字符处理 空字符串 引号 冒号
//空字符串
public static List<String> removeEmpty(List<String> strs){
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i);
Pattern pattern = Pattern.compile("^\\s*$");
Matcher matcher = pattern.matcher(str);
Boolean find = matcher.find();
if(find){
strs.remove(i);
i--;
}
}
return strs;
}
//引号的处理
public static List<String> removeSemicolon(List<String> strs){
List<String> result = new ArrayList<String>();
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i);
str = str.replaceAll("\"", " ").trim();
str = str.replaceAll("", " ").trim();
str = str.replaceAll("", " ").trim();
str = str.replaceAll("`", " ").trim();
//如果单引号是在开头和结尾 去除
int index1 = str.indexOf("\'");
int index2 = str.lastIndexOf("\'");
if(index1 == 0 && index2 >= str.length() - 1){
str = str.substring(1,index2).trim();
}
result.add(str);
}
return result;
}
//冒号处理将冒号处理替换成特殊字符处理
public static List<String> removeSingleColon(List<String> strs){
List<String> results = new ArrayList<String>();
for(int i = 0; i < strs.size(); i++){
String str = strs.get(i);
//中文
int indexChi = str.lastIndexOf("");
if(indexChi > 0){
str = str.substring(indexChi + 1);
}
//英文
Pattern pattern = Pattern.compile("\\w+(:::\\w+|::\\w+)+");
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
str = matcher.group(0);
str = str.replaceAll(":::", " ");
str = str.replaceAll("::", " ");
}
int indexEng = str.lastIndexOf(":");
if(indexEng > 0){
str = str.substring(indexEng + 1);
results.add(str);
}
results.add(str);
}
return results;
}
}

View File

@ -0,0 +1,88 @@
package com.ossean.util;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class FileReader {
public static List<String> read(String path){
List<String> result = new ArrayList<String>();
InputStream inputStream;
try {
inputStream = new FileInputStream(path);
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
try {
while((line = bufferedReader.readLine()) != null){
result.add(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bufferedReader.close();
reader.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
public static Map<String, String[]> readReturnMap(String path){
Map<String, String[]> result = new HashMap<String, String[]>();
InputStream inputStream;
try {
inputStream = new FileInputStream(path);
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
try {
while((line = bufferedReader.readLine()) != null){
String[] tmp = line.split(" ");
String[] tmp2 = new String[3];
tmp2[0] = tmp[1];//name
tmp2[1] = tmp[2];//tag
tmp2[2] = tmp[3];//description
result.put(tmp[0], tmp2);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
bufferedReader.close();
reader.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

View File

@ -0,0 +1,208 @@
package com.ossean.util;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ossean.databaseDest.DBDest;
import com.ossean.databaseSource.DBSource;
import com.ossean.databaseSource.GatherDao;
import com.ossean.databaseSource.PKControlProjectsDao;
import com.ossean.databaseSource.UpdateControlProjectsDao;
import com.ossean.model.Configure;
import com.ossean.model.EddRelations;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.PKControlProjects;
import com.ossean.model.Taggings;
import com.ossean.model.UpdateControlProjects;
@Component("gatherProjectsUtil")
public class GatherProjectsUtil {
Logger logger = Logger.getLogger(this.getClass());
@Resource
private DBSource dbSource;
@Resource
private DBDest dbDest;
@Resource
private GatherDao gatherDao;
@Resource
private PKControlProjectsDao pkControlProjectsDao;
@Resource
private UpdateControlProjectsDao updateControlProjectsDao;
private String gatherProjectsTableName = "gather_projects";
private String taggingsTableName = "edd_taggings";
private String tagsTableName = "edd_tags";
private String pkControlProjectsTableName = "pk_control_projects";
private String updateControlProjectsTableName = "update_control_projects";
//批量处理转移数据 需要处理为原子操作
@Transactional(propagation=Propagation.REQUIRED)
public void handleBatchData(Map checkDoneMap, Configure conf){
logger.info("BeginId#"+conf.getSourceTableName()+":"+ checkDoneMap.get("BeginId"));
int sourceIdBegin = Integer.parseInt(checkDoneMap.get("BeginId").toString());
int sourceIdEnd = Integer.parseInt(checkDoneMap.get("EndId").toString());
if (checkDoneMap.get("EndTime") == null) {
//表示任务没有完成
int maxId = dbSource.getMaxId(conf.getSourceTableName());
// 防止转移超过当前最大值的Id数据
if (sourceIdBegin >= 0 && sourceIdEnd > 0 && maxId >= sourceIdEnd) {
// 更新执行开始时间
gatherDao.updateTaskBeginTime(conf.getMigrationTask(),sourceIdBegin,conf.getSourceTableName(),conf.getTargetTableName());
logger.info("Transaction...@"+ new Date());
// 插入Id段数据忽略重复值
int num = 0;
try {
String[] sourceFields=conf.getSourceFields().split(",");
String[] targetFields = conf.getTargetFields().split(",");
String selectItems = "";
for(int i = 0; i < sourceFields.length; i++){
String str_source = sourceFields[i];
String str_target = targetFields[i];
selectItems += str_source + " as " + str_target + ",";
}
selectItems = selectItems.substring(0, selectItems.length() - 1) + " ";
List<GatherProjectsModel> dataGet = gatherDao.moveDataGet(
conf.getSourceTableName(),selectItems,
sourceIdBegin,sourceIdEnd,conf.getAndWhere());
num = dataGet.size();
for(int i = 0; i < dataGet.size(); i++){
GatherProjectsModel model = dataGet.get(i);
String urlMD5 = model.getUrlMD5();//通过urlMD5判断是不是已经存在过该项目 是否更新
GatherProjectsModel sameProject = gatherDao.selectGPMByUrlMD5(conf.getTargetTableName(), urlMD5);
if(sameProject == null){
//不存在 插入
PKControlProjects pkControlModel = pkControlProjectsDao.selectItemByUrlMD5(pkControlProjectsTableName, urlMD5);//查看有没有固定的id
if(pkControlModel != null)
model.setId(pkControlModel.getId());
else{
//在pk_control_projects表中生成当前项目对应的id
pkControlProjectsDao.insertOneItem(pkControlProjectsTableName, urlMD5);
//查看刚刚插入信息的id
PKControlProjects controlItem = pkControlProjectsDao.selectItemByUrlMD5(pkControlProjectsTableName, urlMD5);
//用id构造model对应的固定不变的id
model.setId(controlItem.getId());
}
handleInsertGatherProjects(model, conf);
}else{
//update gather_projects表中对应的记录在维持待更新表
handleUpdateGatherProjects(sameProject.getId(),model);
}
//将tag和项目的关系存入表item_tag_relation 并分离tag
String tags = model.getTags();
if(tags == null){
//表示该项目没有标签
continue;
}
String[] tagArray = tags.split(",");
for(String tag:tagArray){
tag = tag.substring(1, tag.length() - 1).toLowerCase();//去掉两边的尖括号 并转换为小写
gatherDao.insertTag(tagsTableName, tag);//ignore方式插入该项目的标签
int tag_id = gatherDao.selectTagIdByName(tagsTableName, tag);
Taggings taggings = new Taggings();
taggings.setTag_id(tag_id);
taggings.setUrlMD5(urlMD5);
taggings.setTaggable_type("OpenSourceProject");
taggings.setContext("tags");
taggings.setCreated_at(DateHandler.getNow());
taggings.setDisagree_num(50);
//将Taggings对象存入数据库中
try {
dbSource.insertTaggings(taggingsTableName, taggings);
} catch (Exception e) {
//在插入记录之前 gather_projects表中的记录已经被删除掉了
System.out.println(e.getMessage());
System.exit(0);
}
}
}
} catch (Exception ex) {
// 数据迁移过程可能发生异常情况
logger.error(ex.toString());
System.exit(0);
}
// 更新执行结束时间
gatherDao.updateTaskEndTime(conf.getMigrationTask(),sourceIdBegin, num,conf.getSourceTableName(),conf.getTargetTableName());
logger.info("EndTime:" + new Date());
// 更新游标到本次 EndId+1;
dbSource.updatePointer(conf.getPointerTableName(), conf.getSourceTableName(), conf.getTargetTableName()
, sourceIdEnd + 1);//sourceIdBegin + idsIncrement
}
}
}
//处理URL不存在的项目 插入gather_projects表
public void handleInsertGatherProjects(GatherProjectsModel model, Configure conf){
gatherDao.moveDataInsert(conf.getTargetTableName(),conf.getTargetFields(), model);
// int taggable_id = gatherDao.getAutoIncrementIdFromTable(conf.getTargetTableName(), model);
}
//处理URL相同的项目更新 id表示更新的项目固定id
public void handleUpdateGatherProjects(int id, GatherProjectsModel model_new){
//删除gather_projects表中原记录
// dbSource.deleteItemById(gatherProjectsTableName, id);
// List<EddRelations> eddRelationList = dbSource.getEddRelationsByGatherProjectsId(eddRelationTableName, id);
// for(EddRelations relation:eddRelationList){
// if(relation.getOsp_id() != null){
// //删除osp_id对应的open_source_projects表中的记录
// dbDest.deleteOpenSourceProjectsItem(openSourceProjectsTableName, relation.getOsp_id());
// }
// //删除edd_relations表中的记录
// dbSource.deleteEddRelationsItem(eddRelationTableName, relation.getId());
// }
// //如果有剩余的关联 插入剩余的关联
// String relation_new = ",";
// Map<String, Integer> relationMap = getRelationMap(eddRelationList);
// Set<String> keys = relationMap.keySet();
// Iterator<String> it = keys.iterator();
// while(it.hasNext()){
// String key = it.next();
// if(Integer.parseInt(key) != id)
// relation_new = relation_new + key + ",";//如果是已经删除的id 就不添加到新的relation字符串中
// }
// if(relation_new.length() > 1){
// //表示有剩余的关联需要插入edd_relations表中
// EddRelations r = new EddRelations();
// r.setGather_projects_ids(relation_new);
// dbSource.insertEddRelations(eddRelationTableName, r);
// }
//
// //在gather_projects表中插入新记录
// gatherDao.moveDataInsert(conf.getTargetTableName(), conf.getTargetFields() , model_new);
// int taggable_id = gatherDao.getAutoIncrementIdFromTable(conf.getTargetTableName(), model_new);
// return taggable_id;
gatherDao.moveDataUpdate(gatherProjectsTableName, model_new, id);//更新数据gather_projects表
//更新维持更新表 update_control_projects
//首先判断表前面有没有当前项目还没有再次更新的
UpdateControlProjects sameUpdate = updateControlProjectsDao.findSameUpdate(updateControlProjectsTableName, id);
if(sameUpdate == null){
//表示没有相同的update 则直接插入
updateControlProjectsDao.insertOneItem(updateControlProjectsTableName, id);
}else{
//表示有相同的更新请求 更新时间
updateControlProjectsDao.updateItem(updateControlProjectsTableName, sameUpdate);
}
}
}

View File

@ -0,0 +1,45 @@
package com.ossean.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Handler {
// 全局数组
private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
public static String getMD5(String strObj){
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
// md.digest() 该函数返回值为存放哈希值结果的byte数组
resultString = byteToString(md.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return resultString;
}
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}
// 返回形式为数字跟字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
// System.out.println("iRet="+iRet);
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}
}

View File

@ -0,0 +1,959 @@
package com.ossean.util;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import com.ossean.databaseDest.DBDest;
import com.ossean.databaseSource.DBSource;
import com.ossean.databaseSource.GatherDao;
import com.ossean.model.EddRelations;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.Synonymmings;
import com.ossean.model.Synonyms;
import com.ossean.model.Taggings;
import com.ossean.model.Tags;
@Component("mergeProjectsUtil")
public class MergeProjectsUtil {
Logger logger = Logger.getLogger(this.getClass());
@Resource
private DBSource dbSource;
@Resource
private GatherDao gatherDao;
@Resource
private DBDest dbDest;
@Qualifier("gatherProjectsUtil")
@Autowired
private GatherProjectsUtil gatherProjectsUtil;
private String synonymTableName = "synonyms";
private String synonymmingTableName = "synonymmings";
private String gatherProjectsTableName = "gather_projects";
private String pointerTableName = "edd_pointers";
private String taggingsTableName = "edd_taggings";
private String tagsTableName = "edd_tags";
private String eddRelationTableName = "edd_relations";
//判断两个项目是否相同 默认两个项目的urlMD5码是不同的
public boolean areTwoProjectsTheSame(GatherProjectsModel model1, GatherProjectsModel model2){
/**
* 如果是同一个社区 则默认不相同
*/
if(model1.getSource().equals(model2.getSource()))
return false;
boolean result = false;
//两个项目初步匹配结果是相同的
boolean stepOneResult = false;
if(model1.getSource().equals(model2.getSource()))
stepOneResult = true;
result = isTheSameAfterTFIDF(model1, model2, stepOneResult);
return result;
}
//edd算法提取linkNames 其中包含项目名本身
public List<String> getSynonyms(GatherProjectsModel model){
List<String> result = dbSource.getSynonyms(synonymTableName, synonymmingTableName, model.getId());//表示当前的项目已经处理过了 当前的是需要更新的
if(result.size() != 0)
return result;
String description = model.getDescription();
if(description == null)
return result;
Map<String,Integer> linkNames = new HashMap<String,Integer>();//用于存储所有提取出来的关联项目名
//对项目名进行处理
//提取项目名括号中的信息
String bracket = StringHandler_ProjectName.getBracket(model.getName());
if(!"".equals(bracket)){
//去除括号中信息的特殊符号
bracket = RegexHandler.extractEngDecChiAndDot(bracket);
if(!RegexHandler.onlySpecialChar(bracket))
linkNames.put(bracket, 1);
}
//读取be动词表
List<String> beWords = FileReader.read("./files/beVerb.txt");
description = StringHandler.getFirstSentence(description);
for(String beWord:beWords){
//按系动词表优先级进行匹配
String linkName = StringHandler.findLinkName(description, beWord);
if(linkName == null){
//表示没有匹配到当前的系动词 进行下一个匹配
continue;
}
//特征短语去噪
//提取主副描述信息(括号中)
List<String> linkNameResult = EDDHandler.getMainAndViceDescriptionByBracket(linkName);
//提取主副描述信息(known as+连词)
linkNameResult = EDDHandler.getMainAndViceDescriptionByKnowAs(linkNameResult);
//去除定语描述信息(逗号定语)
linkNameResult = EDDHandler.removeComma(linkNameResult);
//去除定语描述信息(定冠词The)
linkNameResult = EDDHandler.removeDemonstrativeWords(linkNameResult);
//去除从句描述信息
linkNameResult = EDDHandler.removeArrtibutiveClause(linkNameResult);
//去除指示代词
linkNameResult = EDDHandler.removePronoun(linkNameResult);
//去除项目常用词
linkNameResult = EDDHandler.removeProject(linkNameResult);
//去除指示代词和项目常用词两者的笛卡尔积
linkNameResult = EDDHandler.removePPCombine(linkNameResult);
// //特殊字符处理(空字符串)
// linkNameResult = EDDHandler.removeEmpty(linkNameResult);
// //特殊字符处理(引号)
// linkNameResult = EDDHandler.removeSemicolon(linkNameResult);
// 特殊字符处理(除英文中文外 中间用空格连接)
// linkNameResult = EDDHandler.removeSingleColon(linkNameResult);
//提取项目中
linkNameResult = RegexHandler.extractEngDecChiAndDot(linkNameResult);
//删除只有特殊字符的同义词
linkNameResult = RegexHandler.removeOnlySpecial(linkNameResult);
for(String name:linkNameResult){
if(linkNames.containsKey(name)){
linkNames.put(name, linkNames.get(name)+1);
}else{
if(!name.equals(model.getName().toLowerCase()))
linkNames.put(name, 1);
}
}
break;
}//遍历be动词 for循环结尾
//将map转换成List
Set<String> keys = linkNames.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()){
result.add(it.next());
}
/**
* 对上面提取出来的同义词结果进行进一步限制 返回结果为result3
*/
List<String> result2 = new ArrayList<String>();
//若项目名为缩写形式 项目描述信息中存不存在项目名的全称
String fullName = StringHandler.getFullName(model.getName().toLowerCase(), result);
if(!fullName.equals(""))
result2.add(fullName.toLowerCase());//表示项目名确实是缩写 并提取到了项目全名
String shortName = StringHandler.getShortName(model.getName().toLowerCase(), result);
if(!shortName.equals(""))
result2.add(shortName.toLowerCase());//表示项目名确实是全称 并提取到了项目缩写
//要求描述信息中出现的项目名对应的词 按照顺序链接到一起
for(int i = 0; i < result.size(); i++){
//同义词要在项目名中出现
String extract = "";
String synonym = result.get(i);
String[] words = synonym.split(" ");//按照空格进行分词
for(String word:words){
//查看每个词在项目名中是否出现
if(model.getName().toLowerCase().indexOf(word) >= 0){
//表示项目名中存在这个分词
extract += word + " ";
}
}
if(!"".equals(extract)){
//表示确实是别名
extract = extract.substring(0, extract.length() - 1);
result2.add(extract);
continue;
}
}
//对最终结果进行处理如果与项目原名相同去除 如果提取出了相同的结果去除重复的
Map<String,Integer> tmp = new HashMap<String,Integer>();
for(String r:result2){
r = r.toLowerCase();
if(!r.equals(model.getName().toLowerCase()))
tmp.put(r, 1);
}
//将map中的key转换为list
List<String> result3 = new ArrayList<String>();
Set<String> keys_tmp = tmp.keySet();
Iterator it_tmp = keys_tmp.iterator();
while(it_tmp.hasNext())
result3.add(it_tmp.next().toString());
result3.add(model.getName().toLowerCase());
//项目同义词不包括项目原名
return result3;
}
//根据项目别名判断两个项目初步匹配是否正确 返回值为匹配上的项目别名
public boolean isTheSameByLinkName(List<String> linkNames1, List<String> linkNames2){
//对两个项目的别名之间进行匹配
for(int i = 0; i < linkNames1.size(); i++){
String linkName1 = linkNames1.get(i);
for(int j = 0; j < linkNames2.size(); j++){
String linkName2 = linkNames2.get(j);
if(linkName1.equals(linkName2))
return true;
}
}
return false;
}
//去伪取真过程
public boolean isTheSameAfterTFIDF(GatherProjectsModel model1, GatherProjectsModel model2, boolean stepOneResult){
//获取两个对象的tags属性
String tags1 = model1.getTags();
String tags2 = model2.getTags();
if(tags1 != null && tags2 != null){
//表示两个项目都有标签
double similarity = calSimilarityByTag(model1, model2);
if(stepOneResult){
//表示两个项目源自一个社区 去伪
//如果两个项目匹配结果 weight>0.9 表示是同一个项目
if(similarity > 0.9)
return true;
return false;
}else{
//表示两个项目不来自同一个社区 存真
//如果两个项目匹配结果 weight<0.1 表示不是同一个项目
if(similarity < 0.1)
return false;
return true;
}
}
else{
if((tags1 == null && tags2 != null) || (tags1 != null && tags2 == null)){
//表示两者有一个项目有标签
Map<String, Integer> result = new HashMap<String, Integer>();
List<String> tagList = new ArrayList<String>();
int count_tag = 0;
if(tags1 == null){
//表示项目2有标签
//对项目1的描述信息进行分词
result = getResolveResult(model1.getDescription());
String[] tmp = tags2.split(",");
count_tag = tmp.length;
tagList = changeArrayToList(tmp);
}else{
//表示项目1有标签
result = getResolveResult(model2.getDescription());
String[] tmp = tags1.split(",");
count_tag = tmp.length;
tagList = changeArrayToList(tmp);
}
if(stepOneResult){
//表示两个项目来自同一社区 匹配上的标签数量应该在50%以上
int threshold = 0;
if(count_tag % 2 == 0)
threshold = count_tag / 2;
else
threshold = count_tag / 2 + 1;
int count_match = matchListAndMap(tagList,result);
if(count_match >= threshold)
return true;
else
return false;
}else{
int threshold = 1;
int count_match = matchListAndMap(tagList, result);
if(count_match >= threshold)
return true;
else
return false;
}
}else{
//表示两者都没有标签
double similarity = calSimilarityByDescription(model1, model2);
if(stepOneResult){
//表示两个项目源自一个社区 去伪
//如果两个项目匹配结果 weight>0.9 表示是同一个项目
if(similarity > 0.9)
return true;
return false;
}else{
//表示两个项目不来自同一个社区 存真
//如果两个项目匹配结果 weight<0.1 表示不是同一个项目
if(similarity < 0.1)
return false;
return true;
}
}
}
}
//计算都有标签的项目之间的相似度
public double calSimilarityByTag(GatherProjectsModel model1, GatherProjectsModel model2){
long time3_1 = System.currentTimeMillis();
//读取item_tag_relation表中项目总数
int wholeNum = dbSource.getItemNumber(taggingsTableName);
//读取item_tag_relation表中该model对应的标签对象
List<Taggings> taggingsList1 = dbSource.getTaggingsListByTaggableId(taggingsTableName, model1.getId());
List<Taggings> taggingsList2 = dbSource.getTaggingsListByTaggableId(taggingsTableName, model2.getId());
//读取每个name对应的tag对象
List<Tags> tagList1 = getTagListByItemTagRelationList(taggingsList1);
List<Tags> tagList2 = getTagListByItemTagRelationList(taggingsList2);
//获取权重向量
Map<Integer, List<Double>> weightListMap = getWeightVectorByTag(tagList1, tagList2, wholeNum);
List<Double> weightVector1 = weightListMap.get(1);
List<Double> weightVector2 = weightListMap.get(2);
long time3_2 = System.currentTimeMillis();
if(time3_2 - time3_1 > 10)
logger.info("time cost for cal similarity by tag: " + (time3_2 - time3_1));
return calDistance(weightVector1, weightVector2);
}
//计算文本相似度
public double calSimilarityByDescription(GatherProjectsModel model1, GatherProjectsModel model2){
long time4_1 = System.currentTimeMillis();
String description1 = model1.getDescription();
String description2 = model2.getDescription();
Map<String, Integer> resolveResult1 = getResolveResult(description1);
Map<String, Integer> resolveResult2 = getResolveResult(description2);
Map<String, Double> tfResult1 = calTFOfDescription(resolveResult1);
Map<String, Double> tfResult2 = calTFOfDescription(resolveResult2);
Map<String, Double> idfResult = calIDFOfDescription(resolveResult1, resolveResult2);
List<String> commonList = new ArrayList<String>();
List<String> uniqueList1 = new ArrayList<String>();
List<String> uniqueList2 = new ArrayList<String>();
Set<String> keys1 = resolveResult1.keySet();
Iterator<String> it1 = keys1.iterator();
while(it1.hasNext()){
String key1 = it1.next();
if(resolveResult2.containsKey(key1)){
commonList.add(key1);
}else{
uniqueList1.add(key1);
}
}
Set<String> keys2 = resolveResult2.keySet();
Iterator<String> it2 = keys2.iterator();
while(it2.hasNext()){
String key1 = it2.next();
if(resolveResult1.containsKey(key1)){
//因为遍历第一个map时已经将commonList进行构造了 此处不用再add了
}else{
uniqueList2.add(key1);
}
}
List<Double> weightCommon1 = calWeightListOfDescription(commonList, tfResult1, idfResult);
List<Double> weightCommon2 = calWeightListOfDescription(commonList, tfResult2, idfResult);
List<Double> weightUnique1 = calWeightListOfDescription(uniqueList1, tfResult1, idfResult);
List<Double> weightUnique2 = calWeightListOfDescription(uniqueList2, tfResult2, idfResult);
List<Double> weightResult1 = new ArrayList<Double>();
List<Double> weightResult2 = new ArrayList<Double>();
for(int i = 0; i < weightCommon1.size(); i++){
weightResult1.add(weightCommon1.get(i));
weightResult2.add(weightCommon2.get(i));
}
for(int i = 0; i < weightUnique1.size(); i++){
weightResult1.add(weightUnique1.get(i));
weightResult2.add(0.0);
}
for(int i = 0; i < weightUnique2.size(); i++){
weightResult1.add(0.0);
weightResult2.add(weightUnique2.get(i));
}
long time4_2 = System.currentTimeMillis();
if(time4_2 - time4_1 > 10)
logger.info("time cost for cal similarity by description: " + (time4_2 - time4_1));
return calDistance(weightResult1, weightResult2);
}
//找两个向量组成的相似向量
public Map<Integer, List<Double>> getWeightVectorByTag(List<Tags> tagList1, List<Tags> tagList2, int wholeNum){
long time5_1 = System.currentTimeMillis();
List<Tags> commonTagList1 = new ArrayList<Tags>();//里面用Tag表示格式不同的相同标签 在取得时候两者都要取出来
List<Tags> commonTagList2 = new ArrayList<Tags>();
List<Tags> uniqueTag1 = new ArrayList<Tags>();
List<Tags> uniqueTag2 = new ArrayList<Tags>();
//首先要根据两边的tag组成向量
for(int i = 0; i < tagList1.size(); i++){
Tags tag1 = tagList1.get(i);
Tags similarTag;
if((similarTag = theMostSimilarTag(tag1, tagList2)) != null){
//表示存在相同的标签
commonTagList1.add(tag1);
commonTagList2.add(similarTag);
}
}
//找到各自独有的标签
uniqueTag1 = findUniqueTag(tagList1, commonTagList1);
uniqueTag2 = findUniqueTag(tagList2, commonTagList2);
List<Double> weightList1 = new ArrayList<Double>();
List<Double> weightList2 = new ArrayList<Double>();
for(int i = 0; i < commonTagList1.size(); i++){
Tags tag1 = commonTagList1.get(i);
Tags tag2 = commonTagList2.get(i);
double weight = calIDFOfTag(tag1, tag2, wholeNum);
weightList1.add(weight);
weightList2.add(weight);
}
for(int i = 0; i < uniqueTag1.size(); i++){
Tags tag1 = uniqueTag1.get(i);
double weight = calIDFOfTag(tag1, wholeNum);
weightList1.add(weight);
weightList2.add(0.0);
}
for(int i = 0; i < uniqueTag2.size(); i++){
Tags tag2 = uniqueTag2.get(i);
double weight = calIDFOfTag(tag2, wholeNum);
weightList2.add(weight);
weightList1.add(0.0);
}
Map<Integer, List<Double>> result = new HashMap<Integer, List<Double>>();
result.put(1, weightList1);
result.put(2, weightList2);
long time5_2 = System.currentTimeMillis();
if(time5_2 - time5_1 > 10)
logger.info("time cost for get weight vector by tag: " + (time5_2 - time5_1));
return result;
}
//找List各自独有的标签
public List<Tags> findUniqueTag(List<Tags> tagList, List<Tags> commonList){
List<Tags> result = new ArrayList<Tags>();
for(Tags tag:tagList){
if(!isExist(tag, commonList)){
//表示独有
result.add(tag);
}
}
return result;
}
//判断后者是否拥有前者
public boolean isExist(Tags tag, List<Tags> list){
for(Tags t:list){
if(tag.getId() == t.getId())
return true;
}
return false;
}
//找与该标签最相似的标签
public Tags theMostSimilarTag(Tags tag, List<Tags> tagList){
if(tag == null)
return null;
//对标签进行特殊字符去除处理
String tagName = RegexHandler.extractEngDecimalAndChinese(tag.getName());
for(Tags t:tagList){
if(t == null)
continue;
String tName = RegexHandler.extractEngDecimalAndChinese(t.getName());
if(tagName.equals(tName)){
//表示两个标签完全相同
return t;
}
}
return null;//表示没有找到相同的标签
}
//计算tag对应id的idf值
public double calIDFOfTag(Tags tag1, Tags tag2, int wholeNum){
double result = 0.00;
int count = dbSource.getNumOfTagIdAndOspByTwoTagIds(taggingsTableName, tag1.getId(), tag2.getId());
result = wholeNum * 1.0 / count;
result = Math.log(result);
return result;
}
//上面函数的重载
public double calIDFOfTag(Tags tag, int wholeNum){
double result = 0.00;
int count = dbSource.getNumOfTagIdAndOsp(taggingsTableName, tag.getId());
result = wholeNum * 1.0 / count + 0.0001;
result = Math.log(result);
return result;
}
//根据itemTagRelationList找到对应tag_id的Tag对象列表
public List<Tags> getTagListByItemTagRelationList(List<Taggings> itemTagRelationList){
List<Tags> result = new ArrayList<Tags>();
for(Taggings i:itemTagRelationList){
Tags t = dbSource.getTagById(tagsTableName, i.getTag_id());
result.add(t);
}
return result;
}
//计算向量余弦夹角
public double calDistance(List<Double> vector1, List<Double> vector2){
double numerator = 0.0;//分子
double denominator = 0.0001;//分母
numerator = calNumerator(vector1, vector2);
denominator = calDenominator(vector1, vector2);
return numerator / denominator;
}
//余弦夹角分子计算
public double calNumerator(List<Double> vector1, List<Double> vector2){
Double result = 0.0;
for(int i = 0; i < vector1.size(); i++){
result += vector1.get(i) * vector2.get(i);
}
return result;
}
//余弦夹角分母计算
public double calDenominator(List<Double> vector1, List<Double> vector2){
Double result = 0.0001;
double result1 = 0.0;
for(Double d:vector1){
result1 += d * d;
}
result1 = Math.sqrt(result1);
double result2 = 0.0;
for(Double d:vector2){
result2 += d * d;
}
result2 = Math.sqrt(result2);
result = result1 * result2;
return result;
}
//对描述信息进行分词得到词频统计结果的Map
public Map<String, Integer> getResolveResult(String description){
long time6_1 = System.currentTimeMillis();
Map<String, Integer> result = new HashMap<String, Integer>();
Reader text = new StringReader(description);
IKSegmenter ik = new IKSegmenter(text, true);
Lexeme term = null;
try {
//处理一个分词结果
while((term = ik.next()) != null){
String tmp = term.getLexemeText().toString();
tmp = RegexHandler.extractEngDecimalAndChinese(tmp).toLowerCase();
if(result.containsKey(tmp))
result.put(tmp, result.get(tmp) + 1);
else
result.put(tmp, 1);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long time6_2 = System.currentTimeMillis();
if(time6_2 - time6_1 > 10)
logger.info("time cost for get resolve result: " + (time6_2 - time6_1));
return result;
}
//计算文本匹配tf值
public Map<String, Double> calTFOfDescription(Map<String, Integer> map){
long time7_1 = System.currentTimeMillis();
Map<String, Double> result = new HashMap<String, Double>();
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
int tfAll = 0;
//计算当前描述所有词词频总和
while(it.hasNext()){
String name = it.next();
tfAll += map.get(name);
}
Iterator<String> it2 = keys.iterator();
while(it2.hasNext()){
String name = it2.next();
int tf = map.get(name);
double weight = tf * 1.0 / tfAll;
result.put(name, weight);
}
long time7_2 = System.currentTimeMillis();
if(time7_2 - time7_1 > 10)
logger.info("time cost for cal tf of description: " + (time7_2 - time7_1));
return result;
}
//计算文本匹配IDF值
public Map<String, Double> calIDFOfDescription(Map<String, Integer> map1, Map<String, Integer> map2){
long time8_1 = System.currentTimeMillis();
int docNum = 2;
Map<String, Double> result = new HashMap<String, Double>();
Map<String, Integer> count_n = new HashMap<String, Integer>();
Set<String> keys1 = map1.keySet();
Iterator<String> it1 = keys1.iterator();
while(it1.hasNext()){
String key = it1.next();
if(count_n.containsKey(key)){
count_n.put(key, count_n.get(key) + 1);
}else{
count_n.put(key, 1);
}
}
Set<String> keys2 = map2.keySet();
Iterator<String> it2 = keys2.iterator();
while(it2.hasNext()){
String key = it2.next();
if(count_n.containsKey(key)){
count_n.put(key, count_n.get(key) + 1);
}else{
count_n.put(key, 1);
}
}
Set<String> keys = count_n.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()){
String name = it.next();
double weight = docNum / count_n.get(name) * 1.0 + 0.0001;
weight = Math.log(weight);
result.put(name, weight);
}
long time8_2 = System.currentTimeMillis();
if(time8_2 - time8_1 > 10)
logger.info("time cost for cal idf of description: " + (time8_2 - time8_1));
return result;
}
//根据文本的list得到weight的list
public List<Double> calWeightListOfDescription(List<String> textList, Map<String, Double> tfMap, Map<String, Double> idfMap){
long time9_1 = System.currentTimeMillis();
List<Double> result = new ArrayList<Double>();
for(int i = 0; i < textList.size(); i++){
double weight = tfMap.get(textList.get(i)) * idfMap.get(textList.get(i));
result.add(weight);
}
long time9_2 = System.currentTimeMillis();
if(time9_2 - time9_1 > 10)
logger.info("time cost for cal weight list of description: " + (time9_2 - time9_1));
return result;
}
//将linkNames存入数据库
public void insertSynonyms(List<String> linkNames){
for(String name:linkNames){
Synonyms model = new Synonyms();
model.setName(name.trim());
dbSource.insertSynonym(synonymTableName, model);
}
}
//插入数据到同义词表和项目关联表
public void insertSynonymming(List<String> linkNames, int synonymming_id){
for(String name:linkNames){
//查找同义词对象
Synonyms synonyms = dbSource.getSynonymByName(synonymTableName, name);
Synonymmings synonymmings = new Synonymmings();
synonymmings.setSynonym_id(synonyms.getId());
synonymmings.setSynonymming_id(synonymming_id);
try {
dbSource.insertSynonymming(synonymmingTableName, synonymmings);
} catch (Exception e) {
//在插入同义词时 gather_projects中的记录已经被删除掉了
logger.info("gather_projects_id has been removed");
break;
}
}
}
//匹配完成后 将关联上的项目进行合并 结果存储到edd_relations表中 最后一个参数为true表示是更新表中的数据
public void handleAfterMatch(GatherProjectsModel model, List<String> synonyms, List<GatherProjectsModel> matchedProjectList, boolean updateOrNot){
insertSynonyms(synonyms);//插入新增项目的同义词
insertSynonymming(synonyms, model.getId());//插入新增项目和同义词之间的关联
//处理同义词表
for(int i = 0; i < matchedProjectList.size(); i++){
GatherProjectsModel model1 = matchedProjectList.get(i);
List<String> synonyms_1 = getSynonyms(model1);//获取同义词
insertSynonymming(synonyms_1, model.getId());//在新增项目中插入关联项目同义词记录
insertSynonymming(synonyms, model1.getId());//在关联项目中插入新增项目的同义词记录
}
List<EddRelations> relationsList = new ArrayList<EddRelations>();
EddRelations relation_model = new EddRelations();
relation_model.setGather_projects_ids(","+model.getId()+",");
relationsList.add(relation_model); //relationsList用于记录包含当前项目在内的
List<EddRelations> relationsList_matched = new ArrayList<EddRelations>();//匹配上的项目在edd_relations表中的记录
for(int i = 0; i < matchedProjectList.size(); i++){
GatherProjectsModel model2 = matchedProjectList.get(i);
//查找edd_relations表得到相应的记录
List<EddRelations> eddRelationList = dbSource.getEddRelationsByGatherProjectsId(eddRelationTableName, model2.getId());
for(EddRelations relation:eddRelationList){
relationsList.add(relation);
relationsList_matched.add(relation);
}
if(eddRelationList.size() == 0){
//表示之前没有匹配上项目的匹配记录 需要插入这条记录 eg: ,12,
EddRelations relation = new EddRelations();
relation.setGather_projects_ids(","+model2.getId()+",");
relationsList.add(relation); //relationsList用于记录包含当前项目在内的
}
}
//relationsList_now表示目前正在处理的项目在edd_relations表中的记录 需要在插入新的edd_relations对象前查找
List<EddRelations> relationsList_now = dbSource.getEddRelationsByGatherProjectsId(eddRelationTableName, model.getId());
//统计relationList中所有不同的gather_projects_id
String relation_new_gather_projects_ids = hasDiffProjFromSameCommunity(relationsList);
EddRelations eddRelation = new EddRelations();
if(relation_new_gather_projects_ids != null){
//表示匹配结果中不存在同一个社区不同的多个项目匹配到一起
eddRelation.setGather_projects_ids(relation_new_gather_projects_ids);
dbSource.insertEddRelations(eddRelationTableName, eddRelation);//插入最新的结果集
/**
* 删除关联项目在edd_relations表中对应的记录
*/
for(EddRelations relation:relationsList_matched)
deleteExistEddRelations(relation);
/**
* 如果是更新项目 需要查看edd_relations表中是否有该记录 如果有要删除掉
*/
for(EddRelations relation:relationsList_now)
deleteExistEddRelations(relation);
}else{
//表示结果有来自同一社区的项目 如果当前项目在edd_relations表中找不到相应记录 则应插入本身的记录反之不进行操作
if(relationsList_now.size() == 0){
//表示不是更新的项目 需要插入当前项目本身的记录
dbSource.insertEddRelations(eddRelationTableName, relation_model);
}
}
//如果是对更新表中的数据进行操作 则不更新指针
if(!updateOrNot)
dbSource.updatePointer(pointerTableName, gatherProjectsTableName, eddRelationTableName, model.getId() + 1);
}
//判断GatherProjects中哪个项目名更合适
public double calProjectNameSuitValue(GatherProjectsModel model1){
double result = 0.0;
int visit_num = 0;
int download_num = 0;
int contributors_num = 0;
int followers_num = 0;
if(model1.getFollowers_num() == null)
followers_num = 0;
else
followers_num = model1.getFollowers_num();
if(model1.getContributors_num() == null)
contributors_num = 0;
else
contributors_num = model1.getContributors_num();
if(model1.getDownload_num() == null)
download_num = 0;
else
download_num = model1.getDownload_num();
if(model1.getVisit_num() == null)
visit_num = 0;
else
visit_num = model1.getVisit_num();
result += followers_num + contributors_num + download_num + visit_num;
return result;
}
public int changeNullToInt(Integer i){
if(i == null)
return 0;
else
return i;
}
public List<String> changeArrayToList(String[] strs){
List<String> result = new ArrayList<String>();
for(String str:strs){
str = RegexHandler.extractEngDecimalAndChinese(str);//对标签进行处理
result.add(str);
}
return result;
}
//匹配List中的数据和Map中的数据 返回匹配上得数量
public int matchListAndMap(List<String> tags, Map<String, Integer> description){
int count = 0;
for(String tag:tags){
if(description.containsKey(tag))
count++;
}
return count;
}
//找到当前项目同义词关联的项目 要求项目不相同 因为同一个项目可能包含多个同义词
public List<GatherProjectsModel> getRelatedGatherProjects(GatherProjectsModel model, List<String> synonymList){
List<GatherProjectsModel> result = new ArrayList<GatherProjectsModel>();
for(String name:synonymList){
Synonyms synonym = dbSource.getSynonymByName(synonymTableName, name);
if(synonym == null)
continue;//表示还不存在这样的标签
List<Synonymmings> synonymmingList = dbSource.selectSynonymmingListBySynonymId(synonymmingTableName, synonym.getId());
for(Synonymmings synonymming:synonymmingList){
GatherProjectsModel m = gatherDao.selectGPMById(gatherProjectsTableName, synonymming.getSynonymming_id());
if(model.getId() != m.getId()){
//判断m在result中是否存在
int i;
for(i = 0; i < result.size(); i++){
GatherProjectsModel tmp = result.get(i);
if(tmp.getId() == m.getId())
break;
}
if(i == result.size())
result.add(m);
}
}
}
return result;
}
//对url地址中的特殊字符进行转义处理
public String changeUrl(String url){
url = url.replace("/", "//");
url = url.replace("%", "/%");
url = url.replace("_", "/_");
url = url.replace("\\", "/\\");
return url;
}
//判断项目名的缩写是不是别名
public String getShortProjectName(String name, List<String> list){
String[] tmp = name.toLowerCase().split(" ");
String shortName = "";
for(String s:tmp){
String firstLetter = s.substring(0, 1);//取出第一个字符
shortName += firstLetter;
}
if(!"".equals(shortName)){
//如果该缩写在同义词结果中以单独的词存在 则说明是别名
for(String synonym:list){
//检查提取的别名中是否存在这个缩写形式
String[] words = synonym.split(" ");
for(String word:words){
if(shortName.equals(word)){
return shortName;
}
}
}
}
return "";//表示项目名的缩写不是项目的别名
}
//项目名是缩写 判断有没有相应的全称
public String getTotalProjectName(String name, List<String> list){
if(RegexHandler.othersExceptEng(name.toLowerCase())){
//表示项目名含有除小写英文字幕外的其他字符
return "";
}else{
//将项目名一个字符一个字符分隔开
String result = StringHandler.getFullName(name, list);
return result;//如果没有返回""
}
}
/**
* 对一个新软件的全部操作
* @param args
*/
@Transactional(propagation=Propagation.REQUIRED)
public void handleNewProject(GatherProjectsModel model, boolean updateOrNot){
//提取项目的homepage_MD5
//提取项目的同义词
List<String> synonymList = getSynonyms(model);//获取项目的同义词
List<GatherProjectsModel> matchedProjectList = getRelatedGatherProjects(model, synonymList);//在之前已经处理过的项目中找到有相同同义词的项目列表
for(int i = 0; i < matchedProjectList.size(); i++){
GatherProjectsModel model2 = matchedProjectList.get(i);
logger.info("handling projects: " + model.getId() + " and " + model2.getId());
if(!areTwoProjectsTheSame(model, model2)){
matchedProjectList.remove(i);//对于不是同一项目的在匹配列表中去除掉
i--;
}
}
/**
* 对项目同义词表进行合并,并添加项目之间的关联(匹配完之后的所有操作)
* 是不是相同的项目都做相同的操作 因为在edd_relations表中不论是删除还是更新都是先删除再插入
*/
handleAfterMatch(model,synonymList,matchedProjectList, updateOrNot);
}
/**
* 判断edd_relations中的记录合并到一起会不会导致项目中有相同的项目匹配到一起
* 如果存在返回null 如果不存在返回匹配的结果
*/
public String hasDiffProjFromSameCommunity(List<EddRelations> list){
String result = ",";
Map<Integer, Integer> map_project = new HashMap<Integer, Integer>();
Map<String, Integer> map_source = new HashMap<String, Integer>();
for(EddRelations relation:list){
//统计不同的项目id
String gather_projects_ids = relation.getGather_projects_ids();
gather_projects_ids = gather_projects_ids.substring(1, gather_projects_ids.length() - 1);
String[] idArray = gather_projects_ids.split(",");
for(String id:idArray)
map_project.put(Integer.parseInt(id), 1);
}
Set<Integer> idSet = map_project.keySet();
Iterator it = idSet.iterator();
while(it.hasNext()){
int id = (int)it.next();
GatherProjectsModel model = gatherDao.selectGPMById(gatherProjectsTableName, id);
String source = model.getSource();
if(map_source.containsKey(source)){
return null;//表示有重复社区的项目
}else{
map_source.put(source, 1);
result += id + ",";
}
}
return result;
}
/**
* 删除edd_relations表中对应id的记录 如果有osp_id则也要删除对应的open_source_projects表中的记录
*/
public void deleteExistEddRelations(EddRelations relation){
//删除之前对应的relation记录
int edd_relation_id = relation.getId();
dbSource.deleteEddRelationsItem(eddRelationTableName, edd_relation_id);
}
}

View File

@ -0,0 +1,111 @@
package com.ossean.util;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexHandler {
public static boolean onlySpecialChar(String str){
if(str == null)
return true;
if("".equals(extractEngDecimalAndChinese(str)))
return true;
return false;
}
public static List<String> removeOnlySpecial(List<String> list){
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
if(onlySpecialChar(s))
list.remove(i);
}
return list;
}
public static List<String> extractEngDecimalAndChinese(List<String> list){
List<String> result = new ArrayList<String>();
for(String s:list){
String s_new = extractEngDecimalAndChinese(s);
if(!"".equals(s_new))
result.add(s_new);
}
return result;
}
public static String extractEngDecimalAndChinese(String str){
String result = "";
//正则表达式匹配英文数字中文 中文正则表达式\u4E00-\u9FA5
String regex = "(\\w|[\\u4E00-\\u9FA5])+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
//表示有匹配到结果
String tmp = matcher.group(0);
result = result + tmp + " ";
}
return result.trim().toLowerCase();
}
/**
* 匹配字符串中的中文英文数字英文.
* @param strs
* @return
*/
public static List<String> extractEngDecChiAndDot(List<String> list){
List<String> result = new ArrayList<String>();
for(String str:list){
String tmp = extractEngDecChiAndDot(str);
if(!"".equals(tmp))
result.add(tmp);
}
return result;
}
public static String extractEngDecChiAndDot(String str){
String result = "";
String regex = "(\\w|[\\u4E00-\\u9FA5]|\\.)+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
String tmp = matcher.group(0);
result = result + tmp + " ";
}
return result.trim().toLowerCase();
}
public static String[] extractEngDecimalAndChinese(String[] strs){
String[] result_array = new String[strs.length];
for(int i = 0; i < strs.length; i++){
String str = strs[i];
String result = "";
//正则表达式匹配英文数字中文 中文正则表达式\u4E00-\u9FA5
String regex = "(\\w|[\\u4E00-\\u9FA5])+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
//表示有匹配到结果
String tmp = matcher.group(0);
result = result + tmp + " ";
}
result_array[i] = result;
}
return result_array;
}
//判断字符串是否含有除小写英文外的其他字符
public static boolean othersExceptEng(String str){
String regex = "[^a-z]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
//表示匹配到了结果
return true;
}else{
return false;
}
}
}

View File

@ -0,0 +1,237 @@
package com.ossean.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StringHandler {
public static String getFirstSentence(String sentence){
if(sentence == null)
return null;
int index = -1;
int indexEng = sentence.indexOf(".");
int indexChi = sentence.indexOf("");//中文句号
if(indexChi < 0){
index = indexEng;
}else if(indexEng < 0){
index = indexChi;
}else{
index = indexEng < indexChi?indexEng:indexChi;
}
if(index > 0){
sentence = sentence.substring(0, index+1);
}
return sentence;
}
public static String findLinkName(String str, String beWord){
String result = null;
int index = str.indexOf(beWord);
if(index > 0 && index < 100){
//如果超过100个字符默认不是定义语句(暂没有找到论文根据)
result = str.substring(0, index).trim();
}
return result;
}
/**
* 存在的将括号中的信息提取出来 去除常用词后得到另外一个linkName
* @param str
* @return
*/
public static List<String> removeBracket(String str){
List<String> result = new ArrayList<String>();
int index1 = -1;
int index2 = -1;
String strInBracket = null;
index1 = str.indexOf("(");
index2 = str.indexOf(")");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("");
index2 = str.indexOf("");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("[");
index2 = str.indexOf("]");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("");
index2 = str.indexOf("");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
index1 = str.indexOf("{");
index2 = str.indexOf("}");
if(index1 > 0){
result.add(str.substring(0,index1).trim());
if(index2 > index1){
strInBracket = str.substring(index1 + 1, index2);
}
}else{
result.add(str);
}
}
}
}
}
if(strInBracket != null){
result.add(strInBracket.trim());//暂时没有对括号中的数据进行常用词排除处理
}
return result;
}
/**
* 包含逗号都去掉
* @param str
* @return
*/
public static String removeComma(String str){
int index1 = str.indexOf(",");
if(index1 > 0){
return null;
}
int index2 = str.indexOf("");
if(index2 > 0){
return null;
}
return str;
}
/**
* 字符串中有指示代词 去掉指示代词 the
* @param str
* @return
*/
public static String removeDWords(String str, List<String> dWords){
String result = str;
int lastIndex = -1;
for(int i = 0; i < dWords.size(); i++){
String dWord = dWords.get(i);
int indexTmp = -1;
if((indexTmp = str.lastIndexOf(dWord)) > lastIndex){
lastIndex = indexTmp + dWord.length();
}
}
if(lastIndex > 0){
result = str.substring(lastIndex).trim();
}
return result;
}
public static List<String> extractOtherDescriptions(String des){
List<String> result = new ArrayList<String>();
//提取括号中的主副描述信息
List<String> resultStep1 = removeBracket(des);
for(String str:resultStep1){
if(str == null)
return null;
result.add(str);
List<String> knownAss = FileReader.read("./files/known_as.txt");
for(String tmp:knownAss){
int index = str.toLowerCase().indexOf(tmp);
if(index > 0){
result.remove(0);
String tmp2 = str.substring(index + tmp.length()).trim();
String[] resultTmp = tmp2.split(" and ");
for(String s:resultTmp){
String[] resultTmp2 = s.split(" or ");
for(String s2:resultTmp2){
result.add(s2);
}
}
break;
}
}
}
return result;
}
//查看若干个char有没有在list中连续单词的首字母出现 如果出现返回连续出现的单词组成的字符串
public static String getFullName(String shortName, List<String> list){
String fullName = "";
for(String synonym:list){
//查看当前的同义词是不是含不含有全称
String[] words = synonym.split(" ");
String shortenWord = "";
Map<Integer,String> wordMap = new HashMap<Integer,String>();//记录每个词对应的下标和词的全称
for(int i = 0; i < words.length; i++){
String word = words[i];
// if(RegexHandler.othersExceptEng(word)){
// continue;//表示当前的词不止含有英文 不满足条件
// }else{
String tmp = word.substring(0, 1);//取出第一个英文字符
shortenWord += tmp;
wordMap.put(i, word);
// }
}
//判断shortName是不是shortenWord中的一部分
int index_start = shortenWord.indexOf(shortName);
int index_end = index_start + shortName.length()-1;
if(index_start >= 0){
//找到map中对应下表的词全称
for(int j = index_start; j <= index_end; j++){
if(!wordMap.containsKey(j)){
fullName = "";
break;//表示中间有单词不仅仅包含英文字母 因此没有存到相应的map中
}
String w = wordMap.get(j);
fullName += w + " ";
}
if(!"".equals(fullName)){
return fullName.substring(0, fullName.length()-1);
}
}
}
return fullName;
}
//查看字符串中 在后面的list里面有没有首字母缩写的结果
public static String getShortName(String fullName, List<String> list){
//判断fullName是不是全英文的形式 如果不是 返回""
// boolean onlyEng = RegexHandler.othersExceptEng(fullName.toLowerCase());
// if(onlyEng)
// return "";
//如果fullName没有空格 表示是一个单词 默认没有缩写形式
String[] words = fullName.split(" ");
if(words.length <= 1)
return "";
//获取空格分词后每个英文单词的首字母
String shortName = "";
for(String word:words){
String firstLetter = word.substring(0, 1).toLowerCase();
shortName += firstLetter;
}
for(String str:list){
if(str.equals(shortName))
return shortName;//表示描述信息中出现了缩写形式
}
return "";
}
}

View File

@ -0,0 +1,123 @@
package com.ossean.util;
import java.util.HashMap;
import java.util.Map;
public class StringHandler_ProjectName {
/**
* Map中Integer: 0-原名;1-不含括号;2-括号中
* @param ospName
* @return
*/
public static Map<String,Integer> divideProjectName(String ospName){
Map<String,Integer> result = new HashMap<String,Integer>();
result.put(ospName, 0);
int index1 = ospName.indexOf("(");
if(index1 > 0){
String inside = null;
String outside = null;
String str1 = ospName.substring(0, index1).trim();//(之前的字符串
String str2 = "";//括号中的字符串
String str3 = "";//括号后的字符串
int index2 = ospName.indexOf(")");
if(index2 > index1){
//表示左右括号完整
str2 = ospName.substring(index1 + 1, index2).trim();
str3 = ospName.substring(index2 + 1).trim();
}else{
str2 = ospName.substring(index1 + 1).trim();
}
inside = (str2 + " " + str3).trim();
outside = (str1 + " " + str3).trim();
result.put(outside, 1);
result.put(inside, 2);
}else{
index1 = ospName.indexOf("");
if(index1 > 0){
String inside = null;
String outside = null;
String str1 = ospName.substring(0, index1).trim();//(之前的字符串
String str2 = "";//括号中的字符串
String str3 = "";//括号后的字符串
int index2 = ospName.indexOf("");
if(index2 > index1){
//表示左右括号完整
str2 = ospName.substring(index1 + 1, index2).trim();
str3 = ospName.substring(index2 + 1).trim();
}else{
str2 = ospName.substring(index1 + 1).trim();
}
inside = (str2 + " " + str3).trim();;
outside = (str1 + " " + str3).trim();
result.put(outside, 1);
result.put(inside, 2);
}
}
return result;
}
public static String removeBracket(String name){
String result = name;
int index1 = name.indexOf("(");
if(index1 > 0){
String outside = null;
String str1 = name.substring(0, index1).trim();//(之前的字符串
String str3 = "";//括号后的字符串
int index2 = name.indexOf(")");
if(index2 > index1){
//表示左右括号完整
str3 = name.substring(index2 + 1).trim();
}
outside = (str1 + " " + str3).trim();
result = outside;
}else{
index1 = name.indexOf("");
if(index1 > 0){
String outside = null;
String str1 = name.substring(0, index1).trim();//(之前的字符串
String str3 = "";//括号后的字符串
int index2 = name.indexOf("");
if(index2 > index1){
//表示左右括号完整
str3 = name.substring(index2 + 1).trim();
}
outside = (str1 + " " + str3).trim();
result = outside;
}
}
return result;
}
/**
* 提取项目名括号中的描述信息 如果没有括号 返回""
*/
public static String getBracket(String name){
int index2;
int index1 = name.indexOf("(");
String inside = "";
if(index1 > 0){
index2 = name.indexOf(")");
if(index2 > index1)
inside = name.substring(index1 + 1, index2);//抽取括号内部的信息
else{
index2 = name.length();
inside = name.substring(index1 + 1, index2);
}
}else{
index1 = name.indexOf("");
if(index1 > 0){
index2 = name.indexOf("");
if(index2 > index1)
inside = name.substring(index1 + 1, index2);
else{
index2 = name.length();
inside = name.substring(index1 + 1, index2);
}
}
}
return inside;
}
}

View File

@ -0,0 +1,535 @@
package com.ossean.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.ossean.databaseDest.DBDest;
import com.ossean.databaseSource.DBSource;
import com.ossean.model.EddRelations;
import com.ossean.model.GatherProjectsModel;
import com.ossean.model.OpenSourceProject;
import com.ossean.model.Synonymmings;
import com.ossean.model.Synonyms;
import com.ossean.model.Taggings;
@Component("transferProjectsUtil")
public class TransferProjectsUtil {
Logger logger = Logger.getLogger(this.getClass());
@Resource
private DBSource dbSource;
@Resource
private DBDest dbDest;
private String gatherProjectTableName = "gather_projects";
private String synonymmingTableName = "synonymmings";
private String synonymTableName = "synonyms";
private String openSourceProjectTableName = "open_source_projects";
private String tagTableName = "tags";
private String taggingTableName = "taggings";
private String eddRelationTableName = "edd_relations";
private String pointerTableName = "edd_pointers";
private String sourceTableName = "edd_relations";
private String targetTableName = "open_source_projects";
/**
* 处理一个edd_relation
* @param eddRelation
* @return
*/
public void handleOneRelation(EddRelations relation){
logger.info("处理edd_relations表数据id" + relation.getId());
List<GatherProjectsModel> gatherProjectList = new ArrayList<GatherProjectsModel>();//最热门项目要放在第一个下表的位置
String gather_projects_ids = relation.getGather_projects_ids();
gather_projects_ids = gather_projects_ids.substring(1, gather_projects_ids.length() - 1);
String[] idsArray = gather_projects_ids.split(",");
boolean error_lost = false;
for(int i = 0; i < idsArray.length; i++){
String id = idsArray[i];
GatherProjectsModel p = dbSource.getGatherProjectById(gatherProjectTableName, Integer.parseInt(id));
if (p != null)//防止因为数据不一致导致的没有取到相应的数据
gatherProjectList.add(p);
else{
//删除没有的id
error_lost = true;
idsArray[i] = null;
}
}
if(error_lost){
//需要更新gather_projects_ids字段
String gather_projects_ids_new = ",";
for(String id:idsArray)
if(id != null)
gather_projects_ids_new = gather_projects_ids_new + id + ",";
if(gather_projects_ids_new.length() > 1){
//更新gather_projects_ids字段
dbSource.updateEddRelationGatherProjectsIds(eddRelationTableName, relation.getId(), gather_projects_ids_new);
}else{
//删除该relation记录
dbSource.deleteEddRelationsItem(eddRelationTableName, relation.getId());
}
}
OpenSourceProject osp = mergeGatherProjectsToOpenSourceProject(gatherProjectList);
if(osp != null){
boolean sameAlready = hasSameOsp(gather_projects_ids, osp);
if(!sameAlready){
//将数据插入open_source_projects表中
dbDest.insertOsp(openSourceProjectTableName, osp);
// int osp_id = dbDest.getAutoIncrementOspId(openSourceProjectTableName, osp);//系统没有考虑目的数据库事务操作
int osp_id = osp.getId();
//tag分离
String tags = osp.getTags();
if(tags == null){
//表示该项目没有标签
return;
}
String[] tagArray = tags.split(",");
for(String tag:tagArray){
tag = tag.substring(1, tag.length() - 1).toLowerCase();//去掉两边的尖括号 并转换为小写
dbDest.insertTag(tagTableName, tag);//ignore方式插入该项目的标签
int tag_id = dbDest.selectTagIdByName(tagTableName, tag);
Taggings tagging = new Taggings();
tagging.setTag_id(tag_id);
tagging.setTaggable_id(osp_id);
tagging.setTaggable_type("OpenSourceProject");
tagging.setContext("tags");
tagging.setCreated_at(DateHandler.getNow());
tagging.setDisagree_num(50);
//将Taggings对象存入数据库中
try {
dbDest.insertTagging(taggingTableName, tagging);
} catch (Exception e) {
//在插入同义词时 open_source_projects中的记录已经被删除掉了
logger.info("osp_id has been removed");
return;
}
}
}
}
//更新指针
int end_id = relation.getId();
dbSource.updatePointer(pointerTableName, sourceTableName, targetTableName, end_id+1);
}
//将GatherProject的list合并为OpenSourceProject
//需要将最热门项目存储到第一个下标的位置
public OpenSourceProject mergeGatherProjectsToOpenSourceProject(List<GatherProjectsModel> gatherProjectList){
if(gatherProjectList.size() == 0 || gatherProjectList == null)
return null;
OpenSourceProject result = new OpenSourceProject();
GatherProjectsModel hottestProject = getHottestProject(gatherProjectList);
int id = hottestProject.getId();
String name = hottestProject.getName();
String description = null;
int followers_num = 0;
String url = null;
String language = null;
int download_num = 0;
int view_num_crawled = 0;
String category = null;
String crawled_time = null;
String source = mergeSource(gatherProjectList, hottestProject.getId());
int view_num_local = 0;
String created_at = null;
// String updated_at = null; 直接在sql语句中用now()插入或更新
int relative_memos_num = 0;
String created_time = null;
String updated_time = null;
String tags = null;
int composite_score = 0;
int view_num = 0;
int activeness = 0;
String tags_for_search = null;
String synonyms = null;
/**
* 将gatherProjectList列表中的最热门项目放在第一个下标的位置
*/
gatherProjectList = putHottestInHead(gatherProjectList, id);
for(GatherProjectsModel gatherProject:gatherProjectList){
tags = mergeTextWithoutSource(tags, gatherProject.getTags());
//处理同义词
List<Synonymmings> synonymmingList = dbSource.getSynonymmingList(synonymmingTableName, gatherProject.getId());
String synonyms2 = "";
for(Synonymmings s:synonymmingList){
int synonym_id = s.getSynonym_id();
Synonyms synonym = dbSource.getSynonymById(synonymTableName, synonym_id);
if(synonym != null && !(((synonym.getName()).toLowerCase()).equals(name.toLowerCase())))//如果和项目名相同 也不加入到同义词字段中
synonyms2 = synonyms2 + "<" + synonym.getName() + ">,";
}
if(synonyms2.length() == 0)
synonyms2 = null;
else
synonyms2 = synonyms2.substring(0, synonyms2.length() - 1);
synonyms = mergeTextWithoutSource(synonyms, synonyms2);
if(!"FreeCode".equals(gatherProject.getSource())){
//表示如果是FreeCode社区中的项目 只将tags属性合并 不进行下面的步骤
description = mergeTextWithSource(description, gatherProject.getDescription(), gatherProject.getSource());
followers_num = hottestProject.getFollowers_num() == null ? 0 : hottestProject.getFollowers_num();
url = mergeTextWithSource(url, gatherProject.getUrl(), gatherProject.getSource());
language = mergeTextWithoutSource(language, gatherProject.getLanguage());
download_num = hottestProject.getDownload_num() == null ? 0 : hottestProject.getDownload_num();
//view_num_crawled暂不处理
category = mergeTextWithoutSource(category, gatherProject.getCategory());
crawled_time = mergeTime(crawled_time, gatherProject.getCrawled_time());
//source = mergeSource(source, gatherProject.getSource());
created_time = mergeTime(created_time, gatherProject.getRegistered_time());
updated_time = mergeTime(updated_time, gatherProject.getLast_update_time());
}
}
result.setId(id);
result.setName(name);
result.setDescription(description);
result.setFollowers_num(followers_num);
result.setUrl(url);
result.setLanguage(language);
result.setDownload_num(download_num);
result.setView_num_crawled(view_num_crawled);
result.setCategory(category);
result.setCrawled_time(crawled_time);
result.setSource(source);
result.setView_num_local(view_num_local);
result.setCreated_at(created_at);
result.setTags(tags);
result.setComposite_score(composite_score);
result.setView_num(view_num);
result.setCreated_time(created_time);
result.setRelative_memos_num(relative_memos_num);
result.setUpdated_time(updated_time);
result.setActiveness(activeness);
result.setTags_for_search(tags_for_search);
result.setSynonyms(synonyms);
if("FreeCode".equals(result.getSource()) || result.getName() == null || result.getDescription() == null)
return null;
return result;
}
/**
* 获取合适的id 用最热门项目的id表示
* @param
* @return
*/
public int getSuitableId(List<GatherProjectsModel> gatherProjectList){
int smallestId = Integer.MAX_VALUE;
for(GatherProjectsModel model:gatherProjectList){
if(model.getId() < smallestId)
smallestId = model.getId();
}
return smallestId;
}
//获取gatherProjectsList中最合适的项目名
public String getSuitableName(List<GatherProjectsModel> gatherProjectList){
double max = 0.0;
String result = null;
for(GatherProjectsModel project:gatherProjectList){
double tmp = calNameValue(project);
if(tmp >= max && project != null){
max = tmp;
result = project.getName();
}
}
return result;
}
//获取最热门项目
public GatherProjectsModel getHottestProject(List<GatherProjectsModel> gatherProjectList){
GatherProjectsModel result = gatherProjectList.get(0);
double max_value = calNameValue(result);
for(GatherProjectsModel model:gatherProjectList){
double value = calNameValue(model);
//System.out.println("id:" + model.getId() + " value:" + value);
if(value > max_value){
max_value = value;
result = model;
}
}
//System.out.println("max id:" + result.getId() + " value:" + max_value);
return result;
}
//计算项目名的价值
public double calNameValue(GatherProjectsModel gatherProject){
double result = 0.0;
if(gatherProject == null)
return result;
int visit_num = 0;
int download_num = 0;
int contributors_num = 0;
int followers_num = 0;
if(gatherProject.getFollowers_num() == null)
followers_num = 0;
else
followers_num = gatherProject.getFollowers_num();
if(gatherProject.getContributors_num() == null)
contributors_num = 0;
else
contributors_num = gatherProject.getContributors_num();
if(gatherProject.getDownload_num() == null)
download_num = 0;
else
download_num = gatherProject.getDownload_num();
if(gatherProject.getVisit_num() == null)
visit_num = 0;
else
visit_num = gatherProject.getVisit_num();
result += followers_num + contributors_num + download_num + visit_num;
return result;
}
//合并没有项目源区分的字段
public String mergeTextWithoutSource(String tag1, String tag2){
if(tag2 == null)
return tag1;
if(tag1 == null)
return tag2;
String result = "";
tag1 = tag1.trim();
tag2 = tag2.trim();
String[] tagArray1 = tag1.split(",");
String[] tagArray2 = tag2.split(",");
Map<String, Integer> map = new HashMap<String, Integer>();
for(String tag:tagArray1)
map.put(tag, 1);
for(String tag:tagArray2)
map.put(tag, 1);
//将map转换为List
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()){
String key = it.next();
if(!"".equals(key))//如果是空字符串 不添加进去
result += key + ",";
}
if(result.length() == 0)
return null;
return result.substring(0, result.length() - 1);
}
//合并有项目源区分的字段
public String mergeTextWithSource(String text1, String text2, String source){
//text2是新增的 text1是以前的
if(text2 == null && text1 != null)
return text1;
if(text2 != null && text1 == null){
return source + "|:|" + text2.trim();
}
if(text1 != null && text1.length() != 0){
return text1 + "|,|" + source + "|:|" + text2.trim();
}
return text1;
}
//合并数字类的记录
public int mergeInteger(Integer integer1, Integer integer2){
if(integer1 == null)
return integer2;
if(integer2 == null)
return integer1;
return integer1 + integer2;
}
//合并日期类记录
public String mergeTime(String time1, String time2){
if(time2 == null)
return time1;
if(time1 == null)
return time2;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = sdf.parse(time1);
Date date2 = sdf.parse(time2);
if(date1.before(date2)){
return time1;
}
return time2;
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return time1;//如果出现错误 原来的时间不变
}
}
//合并项目来源
public String mergeSource(String source1, String source2){
if (source2 == null)
return source1;
if (source1 == null)
return source2;
String result = "";
Map<String, Integer> map = new HashMap<String, Integer>();
String[] array1 = source1.split(",");
for(String source:array1)
map.put(source, 1);
String[] array2 = source2.split(",");
for(String source:array2)
map.put(source, 1);
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext()){
String key = it.next();
result = result + key + ",";
}
result = result.substring(0, result.length() - 1);
return result;
}
//更新的合并项目来源函数
public String mergeSource(List<GatherProjectsModel> gatherProjectList, int hottest_id){
String result = "";
for(int i = 0; i < gatherProjectList.size(); i++){
GatherProjectsModel model = gatherProjectList.get(i);
int id = model.getId();
String source = model.getSource();
if(id == hottest_id){
result = source + "," + result;
}else{
result = result + source + ",";
}
}
result = result.substring(0, result.length() - 1);
return result;
}
/**
* 查看当前新形成的osp有没有每个id对应的osp_former 使得他们的name tag synonyms属性不相同
* 如果有不相同 则删除原来的记录 并插入一条新的记录
* 如果全部相同 则不进行后续操作
*/
public boolean hasSameOsp(String gather_projects_ids, OpenSourceProject osp){
boolean result = false;
String[] idArray = gather_projects_ids.split(",");
for(String id_str:idArray){
//查找对应osp记录
int id = Integer.parseInt(id_str);
OpenSourceProject osp_former = dbDest.selectOpenSourceProjectsItem(openSourceProjectTableName, id);
if(osp_former != null){
if(sameName(osp_former, osp) && sameTags(osp_former, osp) && sameSynonyms(osp_former, osp) && result == false){
result = true;
continue;//认为项目相同 不替换
}else{
//删除osp_former
dbDest.deleteOpenSourceProjectsItem(openSourceProjectTableName,id); //级联删除了taggings表中对应的数据
/**
* 需要删除匹配结果的代码 或者采用数据库级联删除的方式
* 代码留白
*/
}
}
}
return result;
}
/**
* 比较两个osp对象的姓名是否相同
*/
public boolean sameName(OpenSourceProject osp_former, OpenSourceProject osp){
if(osp_former.getName().equals(osp.getName()))
return true;
else
return false;
}
/**
* 比较两个osp对象的标签是否相同
*/
public boolean sameTags(OpenSourceProject osp_former, OpenSourceProject osp){
String tags_former = osp_former.getTags();
String tags = osp.getTags();
if(tags_former == null && tags == null)
return true;
else if((tags_former != null && tags == null) || (tags_former == null && tags != null))
return false;
Map<String, Integer> tagMap_former = new HashMap<String, Integer>();
Map<String, Integer> tagMap = new HashMap<String, Integer>();
String[] tagArray_former = tags_former.split(",");
String[] tagArray = tags.split(",");
for(String tag:tagArray_former)
tagMap_former.put(tag, 1);
for(String tag:tagArray)
tagMap.put(tag, 1);
for(String tag:tagArray_former)
if(!tagMap.containsKey(tag))
return false;
for(String tag:tagArray)
if(!tagMap_former.containsKey(tag))
return false;
//如果相互之间每个tag都存在 则证明两个tags属性完全相同
return true;
}
/**
* 比较两个osp对象的同义词是否相同
*/
public boolean sameSynonyms(OpenSourceProject osp_former, OpenSourceProject osp){
String synonyms_former = osp_former.getSynonyms();
String synonyms = osp.getSynonyms();
if(synonyms_former == null && synonyms == null)
return true;
else if((synonyms_former != null && synonyms == null) || (synonyms_former == null && synonyms != null))
return false;
Map<String, Integer> synonymMap_former = new HashMap<String, Integer>();
Map<String, Integer> synonymMap = new HashMap<String, Integer>();
String[] synonymArray_former = synonyms_former.split(",");
String[] synonymArray = synonyms.split(",");
for(String synonym:synonymArray_former)
synonymMap_former.put(synonym, 1);
for(String synonym:synonymArray)
synonymMap.put(synonym, 1);
for(String synonym:synonymArray_former)
if(!synonymMap.containsKey(synonym))
return false;
for(String synonym:synonymArray)
if(!synonymMap_former.containsKey(synonym))
return false;
//如果相互之间每个synonym都存在 则证明两个synonyms属性完全相同
return true;
}
/**
* 将gather_projects_ids转换为最热门项目id在前的
*/
public List<GatherProjectsModel> putHottestInHead(List<GatherProjectsModel> gatherProjectList, int hottest_id){
for(int i = 0; i < gatherProjectList.size(); i++){
GatherProjectsModel model = gatherProjectList.get(i);
int id = model.getId();
if(id == hottest_id){
//删除当前下标的 再插入到最前面
gatherProjectList.remove(i);
gatherProjectList.add(0, model);
break;
}
}
return gatherProjectList;
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">apache</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">id,null,project_name,project_descriprion,project_updated_time,project_created_time,null,Url,MD5(Url),null,languege,null,null,null,null,null,null,categories,null,history,"Apache",license,null</entry>
<entry key="targetFields">id,deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and id>=1</entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!--SourceData -->
<bean id="dataSourceOne" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/extract_result?characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true" />
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true"/>
</bean>
<bean id="sqlSessionFactoryOne" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceOne" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ossean.databaseSource" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryOne"></property>
</bean>
<!--DestData -->
<bean id="dataSourceTwo" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ossean_show?characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull&amp;autoReconnect=true" />
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="validationQuery" value="SELECT 1" />
<property name="testOnBorrow" value="true"/>
</bean>
<bean id="sqlSessionFactoryTwo" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceTwo" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ossean.databaseDest" />
<property name="sqlSessionFactory" ref="sqlSessionFactoryTwo"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceOne" />
</bean>
</beans>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.ossean"/>
</beans>

View File

@ -0,0 +1,6 @@
sql server
web server
http server
linux kernel
face++
一个

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">freecode_projects</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">id,deal_name,projectTitle,description,last_update_time,registered_time,followers_num,url,MD5(url),null,implementation,tags,null,null,null,null,visit_num,category,crawled_time,history,"FreeCode",license,operateSystem,homepage</entry>
<!-- <entry key="targetFields">url,crawled_time,tags,license,name,description,language,platform,source,registered_time,urlMD5</entry> -->
<entry key="targetFields">id,deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform,homepage</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> AND projectTitle is not null AND description IS NOT NULL and projectTitle != '' and description != ''</entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="threshold" value="ERROR" />
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./log/error.log" />
<param name="threshold" value="ERROR" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<appender name="file_log" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="./log/webmagic.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss,SSS} %-5p %c(%F:%L) ## %m%n" />
</layout>
</appender>
<!-- 邮件只有ERROR时才会发送 -->
<appender name="MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="threshold" value="debug" />
<!-- 日志的错误级别 <param name="threshold" value="fatal"/> -->
<!-- 缓存文件大小日志达到512K时发送Email -->
<param name="BufferSize" value="1" />
<!-- 单位K -->
<param name="From" value="ossean_debug@163.com" />
<param name="SMTPHost" value="smtp.163.com" />
<param name="Subject" value="ossean-crawler-debug-log4jMessage" />
<param name="To" value="gcm3651@126.com" />
<param name="SMTPUsername" value="ossean_debug" />
<param name="SMTPPassword" value="goodwell123" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
</layout>
</appender>
<!-- 数据库状态-->
<appender name="DATABASE" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:mysql://127.0.0.1:3306/webmagic?characterEncoding=UTF-8"/>
<param name="driver" value="com.mysql.jdbc.Driver"/>
<param name="user" value="root"/>
<param name="password" value="1234"/>
<param name="sql" value="INSERT INTO log4j(stamp,thread,info_level,class,message,logger) VALUES ('%d{yyyy-MM-dd HH:mm:ss}','%t','%p','%c','%m','%l')"/>
<!-- <layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="INSERT INTO log4j(stamp,thread,info_level,class,message,logger) VALUES ('%d{yyyy-MM-dd HH:mm:ss}','%t','%.50p','%.50c','%.1000m','%.50l')" />
</layout>-->
<!-- 过滤输出时Log内容在这里LevelMin是ERRORLevelMax都 FATAL所以输出DEBUG级别到FATAL级别的LOG数据-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="FATAL"/>
</filter>
</appender>
<logger name="org.apache" additivity="false">
<level value="warn" />
<appender-ref ref="stdout" />
</logger>
<root>
<level value="info" />
<appender-ref ref="stdout" />
<appender-ref ref="file" />
<appender-ref ref="file_log" />
<!-- <appender-ref ref="MAIL" />-->
<!-- <appender-ref ref="DATABASE" /> -->
</root>
</log4j:configuration>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">openhub_project</entry>
<entry key="targetTableName">gather_projects</entry>
<!-- 服务器上抽取结果表删除了last_update_time和license两个属性 -->
<!-- <entry key="sourceFields">null,name,description,last_update_time,firstCommitTime,followers_num,Url,MD5(Url),null,null,tags,contributorNum,null,null,null,null,null,null,null,"OpenHub",license,null</entry>
<entry key="targetFields">deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform</entry>
-->
<entry key="sourceFields">id,null,name,description,null,firstCommitTime,followers_num,Url,MD5(Url),null,null,tags,contributorNum,null,null,null,null,null,null,null,"OpenHub",null,null,homepage</entry>
<entry key="targetFields">id,deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform,homepage</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and name is not null and description is not null and name != '' and description != '' </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">oschina_project</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">id,deal_name,name,description,last_update_time,IncludedTime,followers_num,url,MD5(url),pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,"OSChina",license,projectOS,homepage</entry>
<!-- <entry key="targetFields">url,crawled_time,tags,license,name,description,language,platform,source,registered_time,urlMD5</entry> -->
<entry key="targetFields">id,deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform,homepage</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and projectTitle is not null and description is not null and projectTitle != '' and description != '' </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>TableFlow</comment>
<entry key="pointerTableName">edd_pointers</entry>
<entry key="migrationTask">gather_tasks</entry>
<entry key="sourceTableName">sourceforge_project</entry>
<entry key="targetTableName">gather_projects</entry>
<entry key="sourceFields">id,null,name,description,last_update_time,registered_time,null,url,MD5(url),pageMd5,programmingLanguage,null,null,null,null,download_num,null,category,null,history,"SourceForge",license,platform,homepage</entry>
<entry key="targetFields">id,deal_name,name,description,last_update_time,registered_time,followers_num,url,urlMD5,pageMD5,language,tags,contributors_num,monitor,status,download_num,visit_num,category,crawled_time,history,source,license,platform,homepage</entry>
<entry key="waitDataTime">3600000</entry>
<entry key="andWhere"> and name is not null and description is not null and name != '' and description != '' </entry>
<entry key="idsBegin">1</entry>
<entry key="idsEnd">500000</entry>
<entry key="idsIncrement">500</entry>
</properties>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,42 @@
package foo;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
public class IKTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Reader text = new StringReader("1.hour photo");
//
// IKSegmenter iks = new IKSegmenter(text, false);
//
// Lexeme term = null;
// try {
// while((term = iks.next()) != null){
// System.out.print(term.getLexemeText().toString() + "|");
//
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// String name = "multiplatform";
// String newName = "";
// String[] tmp = name.split("[_|\\-|.| |:|,|]");
// for(String s:tmp){
// newName += s.toLowerCase() + " ";
// }
// newName = newName.trim();
//
// System.out.println(newName);
}
}

View File

@ -150,6 +150,20 @@ class OpenSourceProjectsController < ApplicationController
}
end
end
#异步加载更多标签
def _tag_name
osp_id = params[:osp_id].to_i
@object_flag = params[:object_flag].to_i
@obj = OpenSourceProject.find(osp_id)
@tags = @obj.tags
@non_list_all = false
respond_to do |format|
format.html {
render :layout => nil
}
end
end
def allbug
@bugs = RelativeBug.all

View File

@ -1,200 +1,200 @@
<% @nav_dispaly_project_label = 1 %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><%= h html_title %></title>
<meta name="description" content="<%= Redmine::Info.app_name %>" />
<meta name="keywords" content="issue,bug,tracker" />
<%= csrf_meta_tag %>
<%= favicon %>
<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %>
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
<%= javascript_heads %>
<%= heads_for_theme %>
<%= hubspot_head %>
<%= call_hook :view_layouts_base_html_head %>
<!-- page specific tags -->
<%= yield :header_tags -%>
</head>
<!--add by huang-->
<body class="<%= h body_css_classes %>">
<div id="wrapper">
<div id="wrapper2">
<div id="wrapper3">
<%=render :partial => 'layouts/base_header'%>
<div id="main">
<div class="top-content">
<table>
<tr>
<td class="info_font" style="width: 240px; color: #15bccf">软件项目托管社区</td>
<td style="width: 430px; color: #15bccf"><strong><%= l(:label_user_location) %> : </strong></td>
<td rowspan="2" width="250px">
<div class="top-content-search">
<%= form_tag(projects_search_path, :method => :get) do %>
<%= text_field_tag 'name', params[:name], :size => 20 %>
<%= hidden_field_tag 'project_type', params[:project_type] %>
<%= submit_tag l(:label_search), :class => "enterprise", :name => nil %>
<% end %>
</div>
</td>
</tr>
<tr>
<td style="padding-left: 8px"><%= link_to request.host()+"/projects", :controller => 'projects', :action => 'index', :project_type => 0 %></td>
<td><p class="top-content-list"><%=link_to l(:label_home),home_path %> > <%=link_to l(:label_project_deposit),:controller => 'projects', :action => 'index', :project_type => 0 %> > <%=link_to @project, project_path(@project) %></p></td>
</tr>
</table>
</div>
<div id="sidebar">
<div class="spaceleft">
<div class="inf_user_image">
<% @project = Project.find_by_id(@project.id)%>
<table>
<tr>
<td><%= image_tag(url_to_avatar(@project), :class => 'avatar2') %></td>
<td>
<div class="info-course">
<%= @project.name %>
</div>
<div>
<!-- added by bai 增加项目得分 -->
<% issue_count = @project.issues.count %>
<% issue_journal_count = @project.issue_changes.count %>
<% issue_score = issue_count * 0.2 %>
<% issue_journal_score = issue_journal_count * 0.1 %>
<% finall_issue_score = issue_score + issue_journal_score %>
<% new_count = @project.news.count %>
<% new_score = new_count * 0.1 %>
<% finall_new_score = new_score %>
<% document_count = @project.documents.count %>
<% file_score = document_count * 0.1 %>
<% finall_file_score = file_score %>
<% changeset_count = @project.changesets.count %>
<% code_submit_score = changeset_count * 0.3 %>
<% finall_code_submit_score = code_submit_score %>
<% board_message_count = 0 %>
<% @project.boards.each do |board| %>
<% board_message_count += board.messages_count %>
<% end %>
<% topic_score = board_message_count * 0.1 %>
<% finall_topic_score = topic_score %>
<% finall_project_score = finall_issue_score + finall_new_score + finall_file_score + finall_code_submit_score + topic_score %>
<% if @project.project_type == 0 %>
<%= l(:label_project_grade)%> :
<%= link_to(format("%.2f" , finall_project_score ).to_f, {:controller => 'projects',
:action => 'show_projects_score',
:remote => true,
:id => @project.id
}, :style => "color: #EC6300;")%>
<% end %>
<!-- end -->
</div>
<div style="margin-left: 20px;">
<% if ( !(User.current.member_of? @project) && User.current.login?) %> <!--added by linchun-->
<span class="icon-fav icon"></span><%= watcher_link(@project, User.current) %>
<% end %>
</div>
<!--添加项目申请-->
<div style="margin-left: 20px;">
<% if ( !(User.current.member_of? @project) && User.current.login?) %>
<span class="icon-fav icon"></span>
<%= applied_link(@project, User.current) %>
<% end %>
</div>
</td>
</tr>
</table>
</div>
<div class="user_fans">
<table width="240" border="0">
<tr align="center" width="80px">
<% files_count = @project.attachments.count %>
<% @project.versions.each do |version| %>
<% files_count += version.attachments.count %>
<% end %>
<td class="font_index"><%=link_to "#{@project.members.count}", project_member_path(@project) %></td>
<td class="font_index"><%=link_to @project.watcher_users.count, :controller=>"projects", :action=>"watcherlist", :id => @project %></td>
<td class="font_index"><%=link_to "#{@project.issues.count}", project_issues_path(@project) %></td>
<!-- <td class="font_index"><%=link_to files_count, project_files_path(@project) %></td> -->
</tr>
<tr class="font_aram">
<td align="center" width="70px"> <%= l(:label_member) %></td>
<td align="center" width="100px"><%= l(:label_user_watchered) %></td>
<td align="center" width="70px"> <%= l(:label_project_issues) %></td>
<!-- <td align="center" width="58px"><%= l(:label_attachment) %></td> -->
</tr>
</table>
<div class="user_underline"></div>
</div>
<div class="inf_user_context">
<div class="font_title_left">
<%= l(:label_project_overview) %>
</div>
<div style="padding-bottom: 8px">
<div class="font_lighter_sidebar">
<%= textilizable @project.description %>
</div>
<div class="created_on_project">
<strong style="color: #15bccf"><%= l(:label_create_time) %></strong><%= format_time(@project.created_on) %>
</div>
</div>
<div class="user_underline"></div>
</div>
<!--tags-->
<div class="user_fans">
<!-- added by william -for tag -->
<div class="user_tags">
<div id="tags">
<%= render :partial => 'tags/tag', :locals => {:obj => @project,:object_flag => "2"}%>
</div>
</div>
</div>
<!--tool-->
<div class="user_underline"></div>
<div class="tool">
<%= render 'projects/tools_expand' %>
</div>
<div class="user_underline"></div>
</div>
</div>
<div id="content">
<div class="tabs_new">
<%= render_main_menu(@project) %>
</div>
<%= render_flash_messages %>
<%= yield %>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;"></div>
</div>
<%= render :partial => 'layouts/base_footer'%>
</div>
<div id="ajax-indicator" style="display:none;">
<span><%= l(:label_loading) %></span>
</div>
<div id="ajax-modal" style="display:none;"></div>
</div>
</div>
<%= call_hook :view_layouts_base_body_bottom %>
</div>
</body>
</html>
<% @nav_dispaly_project_label = 1 %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><%= h html_title %></title>
<meta name="description" content="<%= Redmine::Info.app_name %>" />
<meta name="keywords" content="issue,bug,tracker" />
<%= csrf_meta_tag %>
<%= favicon %>
<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %>
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
<%= javascript_heads %>
<%= heads_for_theme %>
<%= hubspot_head %>
<%= call_hook :view_layouts_base_html_head %>
<!-- page specific tags -->
<%= yield :header_tags -%>
</head>
<!--add by huang-->
<body class="<%= h body_css_classes %>">
<div id="wrapper">
<div id="wrapper2">
<div id="wrapper3">
<%=render :partial => 'layouts/base_header'%>
<div id="main">
<div class="top-content">
<table>
<tr>
<td class="info_font" style="width: 240px; color: #15bccf">软件项目托管社区</td>
<td style="width: 430px; color: #15bccf"><strong><%= l(:label_user_location) %> : </strong></td>
<td rowspan="2" width="250px">
<div class="top-content-search">
<%= form_tag(projects_search_path, :method => :get) do %>
<%= text_field_tag 'name', params[:name], :size => 20 %>
<%= hidden_field_tag 'project_type', params[:project_type] %>
<%= submit_tag l(:label_search), :class => "enterprise", :name => nil %>
<% end %>
</div>
</td>
</tr>
<tr>
<td style="padding-left: 8px"><%= link_to request.host()+"/projects", :controller => 'projects', :action => 'index', :project_type => 0 %></td>
<td><p class="top-content-list"><%=link_to l(:label_home),home_path %> > <%=link_to l(:label_project_deposit),:controller => 'projects', :action => 'index', :project_type => 0 %> > <%=link_to @project, project_path(@project) %></p></td>
</tr>
</table>
</div>
<div id="sidebar">
<div class="spaceleft">
<div class="inf_user_image">
<% @project = Project.find_by_id(@project.id)%>
<table>
<tr>
<td><%= image_tag(url_to_avatar(@project), :class => 'avatar2') %></td>
<td>
<div class="info-course">
<%= @project.name %>
</div>
<div>
<!-- added by bai 增加项目得分 -->
<% issue_count = @project.issues.count %>
<% issue_journal_count = @project.issue_changes.count %>
<% issue_score = issue_count * 0.2 %>
<% issue_journal_score = issue_journal_count * 0.1 %>
<% finall_issue_score = issue_score + issue_journal_score %>
<% new_count = @project.news.count %>
<% new_score = new_count * 0.1 %>
<% finall_new_score = new_score %>
<% document_count = @project.documents.count %>
<% file_score = document_count * 0.1 %>
<% finall_file_score = file_score %>
<% changeset_count = @project.changesets.count %>
<% code_submit_score = changeset_count * 0.3 %>
<% finall_code_submit_score = code_submit_score %>
<% board_message_count = 0 %>
<% @project.boards.each do |board| %>
<% board_message_count += board.messages_count %>
<% end %>
<% topic_score = board_message_count * 0.1 %>
<% finall_topic_score = topic_score %>
<% finall_project_score = finall_issue_score + finall_new_score + finall_file_score + finall_code_submit_score + topic_score %>
<% if @project.project_type == 0 %>
<%= l(:label_project_grade)%> :
<%= link_to(format("%.2f" , finall_project_score ).to_f, {:controller => 'projects',
:action => 'show_projects_score',
:remote => true,
:id => @project.id
}, :style => "color: #EC6300;")%>
<% end %>
<!-- end -->
</div>
<div style="margin-left: 20px;">
<% if ( !(User.current.member_of? @project) && User.current.login?) %> <!--added by linchun-->
<span class="icon-fav icon"></span><%= watcher_link(@project, User.current) %>
<% end %>
</div>
<!--添加项目申请-->
<div style="margin-left: 20px;">
<% if ( !(User.current.member_of? @project) && User.current.login?) %>
<span class="icon-fav icon"></span>
<%= applied_link(@project, User.current) %>
<% end %>
</div>
</td>
</tr>
</table>
</div>
<div class="user_fans">
<table width="240" border="0">
<tr align="center" width="80px">
<% files_count = @project.attachments.count %>
<% @project.versions.each do |version| %>
<% files_count += version.attachments.count %>
<% end %>
<td class="font_index"><%=link_to "#{@project.members.count}", project_member_path(@project) %></td>
<td class="font_index"><%=link_to @project.watcher_users.count, :controller=>"projects", :action=>"watcherlist", :id => @project %></td>
<td class="font_index"><%=link_to "#{@project.issues.count}", project_issues_path(@project) %></td>
<!-- <td class="font_index"><%=link_to files_count, project_files_path(@project) %></td> -->
</tr>
<tr class="font_aram">
<td align="center" width="70px"> <%= l(:label_member) %></td>
<td align="center" width="100px"><%= l(:label_user_watchered) %></td>
<td align="center" width="70px"> <%= l(:label_project_issues) %></td>
<!-- <td align="center" width="58px"><%= l(:label_attachment) %></td> -->
</tr>
</table>
<div class="user_underline"></div>
</div>
<div class="inf_user_context">
<div class="font_title_left">
<%= l(:label_project_overview) %>
</div>
<div style="padding-bottom: 8px">
<div class="font_lighter_sidebar">
<%= textilizable @project.description %>
</div>
<div class="created_on_project">
<strong style="color: #15bccf"><%= l(:label_create_time) %></strong><%= format_time(@project.created_on) %>
</div>
</div>
<div class="user_underline"></div>
</div>
<!--tags-->
<div class="user_fans">
<!-- added by william -for tag -->
<div class="user_tags">
<div id="tags">
<%= render :partial => 'tags/tag', :locals => {:obj => @project,:object_flag => "2"}%>
</div>
</div>
</div>
<!--tool-->
<div class="user_underline"></div>
<div class="tool">
<%= render 'projects/tools_expand' %>
</div>
<div class="user_underline"></div>
</div>
</div>
<div id="content">
<div class="tabs_new">
<%= render_main_menu(@project) %>
</div>
<%= render_flash_messages %>
<%= yield %>
<%= call_hook :view_layouts_base_content %>
<div style="clear:both;"></div>
</div>
<%= render :partial => 'layouts/base_footer'%>
</div>
<div id="ajax-indicator" style="display:none;">
<span><%= l(:label_loading) %></span>
</div>
<div id="ajax-modal" style="display:none;"></div>
</div>
</div>
<%= call_hook :view_layouts_base_body_bottom %>
</div>
</body>
</html>

View File

@ -1,104 +1,104 @@
<div id="tags">
<%#begin
1 代表是user类型
2 代表是project类型
3 代表是issue类型
4 代表是bid类型
5 代表是forum类型
6 代表是Attachment类型
7 代表是contest类型
8 代表是OpenSourceProject类型
9 代表是RelativeMemo类型
#end%>
<!-- 3 代表的是issue 当是issue是 处理方式与前2个对象不同 -->
<% if object_flag == '3' %>
<span><%= image_tag("/images/sidebar/tags.png") %></span>
<span class="font_title_tag"><%= l(:label_tag) %>:</span>
<% if User.current.logged? %>
<span> <%= toggle_link (image_tag "/images/sidebar/add.png"), 'put-tag-form-issue', {:focus => 'name-issue'} %></span>
<% end %>
<div id="tags_show_issue">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div id="put-tag-form-issue" style="display: none">
<%= form_for "tag_for_save", :remote => true, :url => tag_path,
:update => "tags_show",
:complete => '$("#put-tag-form-issue").hide();' do |f| %>
<%= f.text_field :name, :id => "name-issue", :size => "30", :require => true, :maxlength => Setting.tags_max_length, :minlength => 1 %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<%= link_to_function l(:button_cancel), '$("#put-tag-form-issue").hide();' %>
<% end %>
</div>
<% elsif object_flag == '6' %>
<span><%#= image_tag("/images/sidebar/tags.png") %></span>
<span>
<%= link_to (image_tag "/images/sidebar/add.png"), 'javascript:void(0);', :class => "tags_icona", :onclick => "$('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this);" if User.current.logged? %>
<%#= toggle_link (image_tag "/images/sidebar/add.png"), "put-tag-form-#{obj.class}-#{obj.id}", {:focus => "put-tag-form-#{obj.class}-#{obj.id} #name"} if User.current.logged? %>
</span>
&nbsp;&nbsp;
<div id="tags_show-<%= obj.class %>-<%= obj.id %>" style="display:inline; ">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div id="put-tag-form-<%= obj.class %>-<%= obj.id %>" style="display: none">
<%= form_for "tag_for_save", :remote => true, :header => "Accept: application/javascript", :url => tag_path,
:update => "tags_show",
:complete => "$(\"#put-tag-form-#{obj.class}-#{obj.id}\").hide();" do |f| %>
<%= f.text_field :name, :id => "name", :size => "28", :require => true, :maxlength => Setting.tags_max_length, :minlength => Setting.tags_min_length, :style => "width: 100px;" %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<div class='hidden'>
<% preTags = @preTags.nil? ? [] : @preTags %>
<% preTags.each do |tag| %>
<%= link_to tag, "
javascript:(function(){
var $tagInputVal = $('#put-tag-form-"+obj.class.to_s+"-"+obj.id.to_s+"').find('#name');
var tagArr = [];
tagArr = tagArr.concat( $tagInputVal[0].value.split(',') );
tagArr = tagArr.concat('"+tag.to_s+"');
tagArr = cleanArray(tagArr);
$tagInputVal.val(tagArr.join(','));
})();
"
%>
<% end %>
</div>
<%#= link_to_function l(:button_cancel), "$(\"#put-tag-form-#{obj.class}-#{obj.id}\").hide();"%>
<% end %>
</div>
<% else %>
<div style="float: left;">
<span><%= image_tag("/images/sidebar/tags.png") %></span>
<span class="font_title_tag"><%= l(:label_tag) %>:</span>
</div>
<% if User.current.logged? %>
<span><%= toggle_link (image_tag "/images/sidebar/add.png"), 'put-tag-form', {:focus => 'name'} %></span>
<% end %>
<div id="tags_show" style="float: left;">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div style="float: left;">
<!-- 添加标签 -->
<!-- <div style="margin-bottom: 30px; margin-top: 5px">
<a href="javascript:void(0)" class="yellowBtn f_l" onclick="$('#put-tag-form').slideToggle();"><%= l(:label_add_tag) %></a>
</div> -->
<div id="put-tag-form" style="display:none; vertical-align: middle; margin-bottom: 10px">
<%= form_for "tag_for_save", :remote => true, :url => tag_path,
:update => "tags_show",
:complete => '$("#put-tag-form").hide();' do |f| %>
<%= f.text_field :name, :id => "name", :size => "20", :require => true, :maxlength => Setting.tags_max_length, :minlength => Setting.tags_min_length, :style => "height: 26px;" %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<% end %>
</div>
</div>
<% end %>
</div>
<div id="tags">
<%#begin
1 代表是user类型
2 代表是project类型
3 代表是issue类型
4 代表是bid类型
5 代表是forum类型
6 代表是Attachment类型
7 代表是contest类型
8 代表是OpenSourceProject类型
9 代表是RelativeMemo类型
#end%>
<!-- 3 代表的是issue 当是issue是 处理方式与前2个对象不同 -->
<% if object_flag == '3' %>
<span><%= image_tag("/images/sidebar/tags.png") %></span>
<span class="font_title_tag"><%= l(:label_tag) %>:</span>
<% if User.current.logged? %>
<span> <%= toggle_link (image_tag "/images/sidebar/add.png"), 'put-tag-form-issue', {:focus => 'name-issue'} %></span>
<% end %>
<div id="tags_show_issue">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div id="put-tag-form-issue" style="display: none">
<%= form_for "tag_for_save", :remote => true, :url => tag_path,
:update => "tags_show",
:complete => '$("#put-tag-form-issue").hide();' do |f| %>
<%= f.text_field :name, :id => "name-issue", :size => "30", :require => true, :maxlength => Setting.tags_max_length, :minlength => 1 %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<%= link_to_function l(:button_cancel), '$("#put-tag-form-issue").hide();' %>
<% end %>
</div>
<% elsif object_flag == '6' %>
<span><%#= image_tag("/images/sidebar/tags.png") %></span>
<span>
<%= link_to (image_tag "/images/sidebar/add.png"), 'javascript:void(0);', :class => "tags_icona", :onclick => "$('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this);" if User.current.logged? %>
<%#= toggle_link (image_tag "/images/sidebar/add.png"), "put-tag-form-#{obj.class}-#{obj.id}", {:focus => "put-tag-form-#{obj.class}-#{obj.id} #name"} if User.current.logged? %>
</span>
&nbsp;&nbsp;
<div id="tags_show-<%= obj.class %>-<%= obj.id %>" style="display:inline; ">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div id="put-tag-form-<%= obj.class %>-<%= obj.id %>" style="display: none">
<%= form_for "tag_for_save", :remote => true, :header => "Accept: application/javascript", :url => tag_path,
:update => "tags_show",
:complete => "$(\"#put-tag-form-#{obj.class}-#{obj.id}\").hide();" do |f| %>
<%= f.text_field :name, :id => "name", :size => "28", :require => true, :maxlength => Setting.tags_max_length, :minlength => Setting.tags_min_length, :style => "width: 100px;" %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<div class='hidden'>
<% preTags = @preTags.nil? ? [] : @preTags %>
<% preTags.each do |tag| %>
<%= link_to tag, "
javascript:(function(){
var $tagInputVal = $('#put-tag-form-"+obj.class.to_s+"-"+obj.id.to_s+"').find('#name');
var tagArr = [];
tagArr = tagArr.concat( $tagInputVal[0].value.split(',') );
tagArr = tagArr.concat('"+tag.to_s+"');
tagArr = cleanArray(tagArr);
$tagInputVal.val(tagArr.join(','));
})();
"
%>
<% end %>
</div>
<%#= link_to_function l(:button_cancel), "$(\"#put-tag-form-#{obj.class}-#{obj.id}\").hide();"%>
<% end %>
</div>
<% else %>
<div style="float: left;">
<span><%= image_tag("/images/sidebar/tags.png") %></span>
<span class="font_title_tag"><%= l(:label_tag) %>:</span>
</div>
<% if User.current.logged? %>
<span><%= toggle_link (image_tag "/images/sidebar/add.png"), 'put-tag-form', {:focus => 'name'} %></span>
<% end %>
<div id="tags_show" style="float: left;">
<%= render :partial => "tags/tag_name", :locals => {:obj => obj, :non_list_all => false, :object_flag => object_flag} %>
</div>
<div style="float: left;">
<!-- 添加标签 -->
<!-- <div style="margin-bottom: 30px; margin-top: 5px">
<a href="javascript:void(0)" class="yellowBtn f_l" onclick="$('#put-tag-form').slideToggle();"><%= l(:label_add_tag) %></a>
</div> -->
<div id="put-tag-form" style="display:none; vertical-align: middle; margin-bottom: 10px">
<%= form_for "tag_for_save", :remote => true, :url => tag_path,
:update => "tags_show",
:complete => '$("#put-tag-form").hide();' do |f| %>
<%= f.text_field :name, :id => "name", :size => "20", :require => true, :maxlength => Setting.tags_max_length, :minlength => Setting.tags_min_length, :style => "height: 26px;" %>
<%= f.text_field :object_id, :value => obj.id, :style => "display:none" %>
<%= f.text_field :object_flag, :value => object_flag, :style => "display:none" %>
<%= f.submit l(:button_project_tags_add), :class => "small" %>
<% end %>
</div>
</div>
<% end %>
</div>

View File

@ -1,71 +1,71 @@
<script type="text/javascript">
// $(this).ready(function(){
// $('.tag_show').hover(function() {
// $(this).children("span").show();
// }, function() {
// $(this).children("span").hide();
// });
// })
function reload_tags(){
<% @tags = obj.reload.tag_list %>
}
</script>
<!-- 1代表是user类型 2代表是project类型 3代表是issue类型 4代表需求-->
<% if object_flag == '8'%>
<%# @tags = obj.get_tag_list%>
<% @tags = obj.tags.limit(9)%>
<% else %>
<% @tags = obj.reload.tag_list %>
<% end%>
<% if non_list_all and (@tags.size > 0) %>
<!-- 这里是显示的非主页的tag 所以当tag数量较多时 不必全部显示 用“更多”代替 -->
<% if @tags.size > Setting.show_tags_length.to_i then %>
<% i = 0 %>
<% until i>Setting.show_tags_length.to_i do %>
<div id="tag">
<%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i].to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% i += 1 %>
<% end %>
<%= link_to l(:label_more_tags), :action => "show", :id => obj.id %>
<% else %>
<% @tags.each do |tag| %>
<div id="tag">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag.to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% end %>
<% end %>
<% else %>
<!-- 用来显示三大对象的主页中的tag 故是全部显示 -->
<% if @tags.size > 9 then %>
<!-- <#%= link_to (image_tag "/images/sidebar/tag_disagree.png"), :controller => "users", :action => "tag_disagree" %> -->
<!-- 倒标签 -->
<!-- <a href="/users/tag_disagree?tag_name=<#%= tag%>&obj_id=<#%= obj.id%>" class="glyphicon glyphicon-thumbs-down" aria-hidden="true"></a> -->
<% i = 0 %>
<% until i>Setting.show_tags_length.to_i do %>
<div id="tag">
<span class="tag_show">
<%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i].to_s, :object_flag => object_flag, :obj_id => obj.id %>
</span>
</div>
<% i += 1 %>
<% end %>
<a href="javascript:void(0)" onclick="reload_tags()"><%= l(:label_more_tags)%></a>
<% elsif @tags.size > 0 %>
<% @tags.each do |tag| %>
<div id="tag">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag.to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% end %>
<% else %>
<span style="color:#8c8a8a"> &nbsp;&nbsp;&nbsp;<%= l(:label_tags_no) %></span>
<% end %>
<% end %>
<script type="text/javascript">
// $(this).ready(function(){
// $('.tag_show').hover(function() {
// $(this).children("span").show();
// }, function() {
// $(this).children("span").hide();
// });
// })
function reload_tags(){
<% @tags = obj.reload.tag_list %>
}
</script>
<!-- 1代表是user类型 2代表是project类型 3代表是issue类型 4代表需求-->
<% if object_flag == '8'%>
<%# @tags = obj.get_tag_list%>
<% @tags = obj.tags.limit(9)%>
<% else %>
<% @tags = obj.reload.tag_list %>
<% end%>
<% if non_list_all and (@tags.size > 0) %>
<!-- 这里是显示的非主页的tag 所以当tag数量较多时 不必全部显示 用“更多”代替 -->
<% if @tags.size > Setting.show_tags_length.to_i then %>
<% i = 0 %>
<% until i>Setting.show_tags_length.to_i do %>
<div id="tag">
<%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i].to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% i += 1 %>
<% end %>
<%= link_to l(:label_more_tags), :action => "show", :id => obj.id %>
<% else %>
<% @tags.each do |tag| %>
<div id="tag">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag.to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% end %>
<% end %>
<% else %>
<!-- 用来显示三大对象的主页中的tag 故是全部显示 -->
<% if @tags.size > 9 then %>
<!-- <#%= link_to (image_tag "/images/sidebar/tag_disagree.png"), :controller => "users", :action => "tag_disagree" %> -->
<!-- 倒标签 -->
<!-- <a href="/users/tag_disagree?tag_name=<#%= tag%>&obj_id=<#%= obj.id%>" class="glyphicon glyphicon-thumbs-down" aria-hidden="true"></a> -->
<% i = 0 %>
<% until i>Setting.show_tags_length.to_i do %>
<div id="tag">
<span class="tag_show">
<%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i].to_s, :object_flag => object_flag, :obj_id => obj.id %>
</span>
</div>
<% i += 1 %>
<% end %>
<a href="javascript:void(0)" onclick="reload_tags()"><%= l(:label_more_tags)%></a>
<% elsif @tags.size > 0 %>
<% @tags.each do |tag| %>
<div id="tag">
<%= link_to tag, :controller => "tags", :action => "index", :q => tag.to_s, :object_flag => object_flag, :obj_id => obj.id %>
</div>
<% end %>
<% else %>
<span style="color:#8c8a8a"> &nbsp;&nbsp;&nbsp;<%= l(:label_tags_no) %></span>
<% end %>
<% end %>