You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Weizheng Lu <lu...@gmail.com> on 2015/04/23 03:23:51 UTC

Use Fuseki to load YAGO TTL file

Hi there,

I am a newbie to Jena and Fuseki. Currently I am trying to use Fuseki to
load YAGO ttl file into database and want to make some SPARQL queries on
the data set.
Actually I first tried to use the official converter of YAGO to load all
the ttl into Jena. The tool is on this page(
http://resources.mpi-inf.mpg.de/yago-naga/yago/downloads_old.html). But the
offical tool did not function well. And I have to use Jena directly.
There are still some problem using Jena. When I loaded a small file like
yagoSimpleTaxonomy.ttl which is 512KB, Fuseki works pretty well. I can make
queries on the data. When I loaded a bigger size file like
yagoSimpleTypes.ttl which is 300MB, Fuseki did not really work well. The
log is like follows.

I will be really grateful for any replies.

Thank you so much!


[2015-04-23 09:04:31] Fuseki     INFO  [17] Filename: yagoSimpleTypes.ttl,
Content-Type=application/octet-stream, Charset=null => Turtle :
Count=5437179 Triples=5437179 Quads=0
[2015-04-23 09:10:28] TDB        WARN  Exception during 'prepare' :
attempting transaction abort
com.hp.hpl.jena.query.QueryParseException: Line -1, column 1: Unknown
escape: \L
at
com.hp.hpl.jena.sparql.lang.ParserBase.throwParseException(ParserBase.java:677)
at com.hp.hpl.jena.sparql.lang.ParserBase.unescape(ParserBase.java:551)
at org.apache.jena.riot.out.EscapeStr.unescape(EscapeStr.java:114)
at org.apache.jena.riot.out.EscapeStr.unescapeStr(EscapeStr.java:109)
at org.apache.jena.atlas.lib.StrUtils.unescapeString(StrUtils.java:292)
at com.hp.hpl.jena.tdb.store.nodetable.NodecSSE.decode(NodecSSE.java:123)
at com.hp.hpl.jena.tdb.lib.NodeLib.decode(NodeLib.java:107)
at
com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:245)
at
com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:239)
at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:323)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.append(NodeTableTrans.java:210)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.writeNodeJournal(NodeTableTrans.java:319)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.commitPrepare(NodeTableTrans.java:291)
at com.hp.hpl.jena.tdb.transaction.Transaction.prepare(Transaction.java:173)
at com.hp.hpl.jena.tdb.transaction.Transaction.commit(Transaction.java:109)
at
com.hp.hpl.jena.tdb.transaction.DatasetGraphTxn.commit(DatasetGraphTxn.java:44)
at
com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction._commit(DatasetGraphTransaction.java:164)
at
com.hp.hpl.jena.sparql.core.DatasetGraphTrackActive.commit(DatasetGraphTrackActive.java:49)
at org.apache.jena.fuseki.servlets.HttpAction.commit(HttpAction.java:278)
at
org.apache.jena.fuseki.servlets.REST_Quads_RW.doPutPostTxn(REST_Quads_RW.java:87)
at
org.apache.jena.fuseki.servlets.REST_Quads_RW.doPost(REST_Quads_RW.java:49)
at org.apache.jena.fuseki.servlets.ActionREST.doPost$(ActionREST.java:102)
at org.apache.jena.fuseki.servlets.ActionREST.dispatch(ActionREST.java:57)
at org.apache.jena.fuseki.servlets.ActionREST.perform(ActionREST.java:44)
at
org.apache.jena.fuseki.servlets.ActionSPARQL.executeLifecycle(ActionSPARQL.java:130)
at
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.serviceDispatch(SPARQL_UberServlet.java:324)
at
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.executeAction(SPARQL_UberServlet.java:244)
at
org.apache.jena.fuseki.servlets.ActionSPARQL.execCommonWorker(ActionSPARQL.java:84)
at org.apache.jena.fuseki.servlets.ActionBase.doCommon(ActionBase.java:81)
at
org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:71)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1632)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1624)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1110)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1044)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:459)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
at
org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:745)


-- 
Weizheng Lu
School of Electronics Engineering and Computer Science, Peking University

Re: Use Fuseki to load YAGO TTL file

Posted by Andy Seaborne <an...@apache.org>.
I strongly suggest running the data through "riot --validate" first to 
check the data before attempting to load it.

Loading is not a substitute for checking external data.

	Andy

On 23/04/15 09:44, Jiangenbo wrote:
>
>
>
>
>
>
>
> I think there are some illegal character or content that make fuseki go wrong.you can give me the url of ttl file and I am glad to try it
>
>
>   From: Weizheng LuDate: 2015-04-23 09:23To: usersSubject: Use Fuseki to load YAGO TTL fileHi there,
>
> I am a newbie to Jena and Fuseki. Currently I am trying to use Fuseki to
> load YAGO ttl file into database and want to make some SPARQL queries on
> the data set.
> Actually I first tried to use the official converter of YAGO to load all
> the ttl into Jena. The tool is on this page(
> http://resources.mpi-inf.mpg.de/yago-naga/yago/downloads_old.html).

NB the "old" and "If you are using YAGO for the first time, please use 
the newer release."

  But the
> offical tool did not function well. And I have to use Jena directly.
> There are still some problem using Jena. When I loaded a small file like
> yagoSimpleTaxonomy.ttl which is 512KB, Fuseki works pretty well. I can make
> queries on the data. When I loaded a bigger size file like
> yagoSimpleTypes.ttl which is 300MB, Fuseki did not really work well. The
> log is like follows.
>
> I will be really grateful for any replies.
>
> Thank you so much!
>
>
> [2015-04-23 09:04:31] Fuseki     INFO  [17] Filename: yagoSimpleTypes.ttl,
> Content-Type=application/octet-stream, Charset=null => Turtle :
> Count=5437179 Triples=5437179 Quads=0
> [2015-04-23 09:10:28] TDB        WARN  Exception during 'prepare' :
> attempting transaction abort
> com.hp.hpl.jena.query.QueryParseException: Line -1, column 1: Unknown
> escape: \L
> at
> com.hp.hpl.jena.sparql.lang.ParserBase.throwParseException(ParserBase.java:677)
> at com.hp.hpl.jena.sparql.lang.ParserBase.unescape(ParserBase.java:551)
> at org.apache.jena.riot.out.EscapeStr.unescape(EscapeStr.java:114)
> at org.apache.jena.riot.out.EscapeStr.unescapeStr(EscapeStr.java:109)
> at org.apache.jena.atlas.lib.StrUtils.unescapeString(StrUtils.java:292)
> at com.hp.hpl.jena.tdb.store.nodetable.NodecSSE.decode(NodecSSE.java:123)
> at com.hp.hpl.jena.tdb.lib.NodeLib.decode(NodeLib.java:107)
> at
> com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:245)
> at
> com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:239)
> at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:323)
> at
> com.hp.hpl.jena.tdb.transaction.NodeTableTrans.append(NodeTableTrans.java:210)
> at
> com.hp.hpl.jena.tdb.transaction.NodeTableTrans.writeNodeJournal(NodeTableTrans.java:319)
> at
> com.hp.hpl.jena.tdb.transaction.NodeTableTrans.commitPrepare(NodeTableTrans.java:291)
> at com.hp.hpl.jena.tdb.transaction.Transaction.prepare(Transaction.java:173)
> at com.hp.hpl.jena.tdb.transaction.Transaction.commit(Transaction.java:109)
> at
> com.hp.hpl.jena.tdb.transaction.DatasetGraphTxn.commit(DatasetGraphTxn.java:44)
> at
> com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction._commit(DatasetGraphTransaction.java:164)
> at
> com.hp.hpl.jena.sparql.core.DatasetGraphTrackActive.commit(DatasetGraphTrackActive.java:49)
> at org.apache.jena.fuseki.servlets.HttpAction.commit(HttpAction.java:278)
> at
> org.apache.jena.fuseki.servlets.REST_Quads_RW.doPutPostTxn(REST_Quads_RW.java:87)
> at
> org.apache.jena.fuseki.servlets.REST_Quads_RW.doPost(REST_Quads_RW.java:49)
> at org.apache.jena.fuseki.servlets.ActionREST.doPost$(ActionREST.java:102)
> at org.apache.jena.fuseki.servlets.ActionREST.dispatch(ActionREST.java:57)
> at org.apache.jena.fuseki.servlets.ActionREST.perform(ActionREST.java:44)
> at
> org.apache.jena.fuseki.servlets.ActionSPARQL.executeLifecycle(ActionSPARQL.java:130)
> at
> org.apache.jena.fuseki.servlets.SPARQL_UberServlet.serviceDispatch(SPARQL_UberServlet.java:324)
> at
> org.apache.jena.fuseki.servlets.SPARQL_UberServlet.executeAction(SPARQL_UberServlet.java:244)
> at
> org.apache.jena.fuseki.servlets.ActionSPARQL.execCommonWorker(ActionSPARQL.java:84)
> at org.apache.jena.fuseki.servlets.ActionBase.doCommon(ActionBase.java:81)
> at
> org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:71)
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1632)
> at
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
> at
> org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> at
> org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> at
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> at
> org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
> at
> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
> at
> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
> at
> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
> at
> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
> at
> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1624)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568)
> at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1110)
> at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)
> at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
> at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1044)
> at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
> at org.eclipse.jetty.server.Server.handle(Server.java:459)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
> at
> org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
> at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
> at java.lang.Thread.run(Thread.java:745)
>
>
>


Re: Use Fuseki to load YAGO TTL file

Posted by Jiangenbo <ji...@clas.ac.cn>.






I think there are some illegal character or content that make fuseki go wrong.you can give me the url of ttl file and I am glad to try it 
 

 From: Weizheng LuDate: 2015-04-23 09:23To: usersSubject: Use Fuseki to load YAGO TTL fileHi there,
 
I am a newbie to Jena and Fuseki. Currently I am trying to use Fuseki to
load YAGO ttl file into database and want to make some SPARQL queries on
the data set.
Actually I first tried to use the official converter of YAGO to load all
the ttl into Jena. The tool is on this page(
http://resources.mpi-inf.mpg.de/yago-naga/yago/downloads_old.html). But the
offical tool did not function well. And I have to use Jena directly.
There are still some problem using Jena. When I loaded a small file like
yagoSimpleTaxonomy.ttl which is 512KB, Fuseki works pretty well. I can make
queries on the data. When I loaded a bigger size file like
yagoSimpleTypes.ttl which is 300MB, Fuseki did not really work well. The
log is like follows.
 
I will be really grateful for any replies.
 
Thank you so much!
 
 
[2015-04-23 09:04:31] Fuseki     INFO  [17] Filename: yagoSimpleTypes.ttl,
Content-Type=application/octet-stream, Charset=null => Turtle :
Count=5437179 Triples=5437179 Quads=0
[2015-04-23 09:10:28] TDB        WARN  Exception during 'prepare' :
attempting transaction abort
com.hp.hpl.jena.query.QueryParseException: Line -1, column 1: Unknown
escape: \L
at
com.hp.hpl.jena.sparql.lang.ParserBase.throwParseException(ParserBase.java:677)
at com.hp.hpl.jena.sparql.lang.ParserBase.unescape(ParserBase.java:551)
at org.apache.jena.riot.out.EscapeStr.unescape(EscapeStr.java:114)
at org.apache.jena.riot.out.EscapeStr.unescapeStr(EscapeStr.java:109)
at org.apache.jena.atlas.lib.StrUtils.unescapeString(StrUtils.java:292)
at com.hp.hpl.jena.tdb.store.nodetable.NodecSSE.decode(NodecSSE.java:123)
at com.hp.hpl.jena.tdb.lib.NodeLib.decode(NodeLib.java:107)
at
com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:245)
at
com.hp.hpl.jena.tdb.store.nodetable.NodeTableNative$2.convert(NodeTableNative.java:239)
at org.apache.jena.atlas.iterator.Iter$4.next(Iter.java:323)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.append(NodeTableTrans.java:210)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.writeNodeJournal(NodeTableTrans.java:319)
at
com.hp.hpl.jena.tdb.transaction.NodeTableTrans.commitPrepare(NodeTableTrans.java:291)
at com.hp.hpl.jena.tdb.transaction.Transaction.prepare(Transaction.java:173)
at com.hp.hpl.jena.tdb.transaction.Transaction.commit(Transaction.java:109)
at
com.hp.hpl.jena.tdb.transaction.DatasetGraphTxn.commit(DatasetGraphTxn.java:44)
at
com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction._commit(DatasetGraphTransaction.java:164)
at
com.hp.hpl.jena.sparql.core.DatasetGraphTrackActive.commit(DatasetGraphTrackActive.java:49)
at org.apache.jena.fuseki.servlets.HttpAction.commit(HttpAction.java:278)
at
org.apache.jena.fuseki.servlets.REST_Quads_RW.doPutPostTxn(REST_Quads_RW.java:87)
at
org.apache.jena.fuseki.servlets.REST_Quads_RW.doPost(REST_Quads_RW.java:49)
at org.apache.jena.fuseki.servlets.ActionREST.doPost$(ActionREST.java:102)
at org.apache.jena.fuseki.servlets.ActionREST.dispatch(ActionREST.java:57)
at org.apache.jena.fuseki.servlets.ActionREST.perform(ActionREST.java:44)
at
org.apache.jena.fuseki.servlets.ActionSPARQL.executeLifecycle(ActionSPARQL.java:130)
at
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.serviceDispatch(SPARQL_UberServlet.java:324)
at
org.apache.jena.fuseki.servlets.SPARQL_UberServlet.executeAction(SPARQL_UberServlet.java:244)
at
org.apache.jena.fuseki.servlets.ActionSPARQL.execCommonWorker(ActionSPARQL.java:84)
at org.apache.jena.fuseki.servlets.ActionBase.doCommon(ActionBase.java:81)
at
org.apache.jena.fuseki.servlets.FusekiFilter.doFilter(FusekiFilter.java:71)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1632)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at
org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at
org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at
org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at
org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at
org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at
org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at
org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at
org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at
org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at
org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1624)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1110)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1044)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:459)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
at
org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:745)
 
 
-- 
Weizheng Lu
School of Electronics Engineering and Computer Science, Peking University