SlideShare a Scribd company logo
IWSC ‘17
CREST, University College London, UK
Using Compilation/Decompilation
to Enhance Clone Detection
Chaiyong Ragkhitwetsagul, Jens Krinke
Clone 

det.
Plag 

det.
Comp.
Others
ccfx
deckard
iclones
nicad
simian
jplag-java
jplag-text
plaggie
sherlock
simjava
simtext
7zncd-BZip2
7zncd-LZMA
7zncd-LZMA2
7zncd-Deflate
7zncd-Deflate64
7zncd-PPMd
bzip2ncd
gzipncd
icd
ncd-bzlib
ncd-zlib
xz-ncd
bsdiff
diff
py-difflib
py-fuzzywuzzy
py-jellyfish
py-ngram
py-sklearn
0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 F1
Orig.
Dec.
Ragkhitwetsagul et al., 2016
Clone 

det.
Plag 

det.
Comp.
Others
ccfx
deckard
iclones
nicad
simian
jplag-java
jplag-text
plaggie
sherlock
simjava
simtext
7zncd-BZip2
7zncd-LZMA
7zncd-LZMA2
7zncd-Deflate
7zncd-Deflate64
7zncd-PPMd
bzip2ncd
gzipncd
icd
ncd-bzlib
ncd-zlib
xz-ncd
bsdiff
diff
py-difflib
py-fuzzywuzzy
py-jellyfish
py-ngram
py-sklearn
0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 F1
Orig.
Dec.
4
O. Kononenko, C. Zhang, and M. W. Godfrey, ICSME ‘14
What Happens?
Compiling Clones:
and Decompiling
4
What Happens?
Compiling Clones:
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
Existing
tools
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
Missing
Source
Existing
tools
Source
Code
and Decompiling
4
What Happens?
Compiling Clones:
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK
decomp.
clones
clone
mapper
decomp. &
mapped clones
compiler
decompiler
decompiled software
clone
detector
original
clones
5
software
common
clones
disjoint
clones
manual investigation
Experimental Framework
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 6
System Ver.
Original Decompiled
Files SLOC Files SLOC
4.1.3 203 9,777 311 11,233
1.5.0 644 96,711 669 85,251
9.0 1,688 241,924 2603 256,974
Apache Tomcat®
Software Systems
7
Tool Config. Parameters
NiCad Type-1 UPI=0.0, renaming=none
Type-2 UPI=0.0, renaming=consistent
Type-3 UPI=0.3, renaming=consistent
Tools
javac Procyon NiCad
Compiler Decompiler Clone Detector
8
Clone Mapper
decompiled
clone report
DCP1(dm1, dm2)
decompiled clone
pairs
software
m1
m2
m4
m3
mn
…
DCP2(dm1, dm3)
DCP3(dm2, dm4)
…
DCPn(dmm, dmo)
set of methods (M)
mo
decompiled-and-mapped
clone report
DCP*1((dm1,dm2),(m1,m2))
DCP*2((dm1,dm3),(m1,m3))
DCP*3((dm2,dm4),(m2,m4))
DCP*n((dmm,dmo),(mm,mo))
…
decompiled-and-mapped
clone pairs
…
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 9
Common & Disjoint Clone Pairs
Ccommon
Corig-only Cdecomp-only
Original Decompiled
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 10
Results
11
JUnit
Original Decompiled
Type-1
Type-2
Type-3
6
3
12
JFreeChart
Original Decompiled
Type-1
Type-2
Type-3
159
155
33
15
48
1
17
27
3
13
Tomcat
Original Decompiled
Type-1
Type-2
Type-3
217
608
20
25
141
22
3
23
1
C. Ragkhitwetsagul J. Krinke CREST, UCL, UK 14
Manual Investigation
15
No.ofclonepairs
0
10
20
30
40
50
Type-1 Type-2 Type-3
47
15
1
48
15
1
Candidates TP
JFreeChart
Cforig-only
No.ofclonepairs
0
6
12
18
24
30
Type-1 Type-2 Type-3
27
17
3
27
17
3
Cfdecomp-only
16
No.ofclonepairs
0
32
64
96
128
160
Type-1 Type-2 Type-3
141
2522
141
2522
Candidates TP
Tomcat
Cforig-only
No.ofclonepairs
0
6
12
18
24
30
Type-1 Type-2 Type-3
23
31
23
31
Cfdecomp-only
Clone set Reasons
Cforig-only
Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type cast, package
name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
Characteristics of Disjoint Clones
Clone set Reasons
Cforig-only Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher
dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type
cast, package name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
JFreeChart
0 10 20 30 40 50
5
11
32
6
9
T1 T2 T3
0 2 4 6 8 10 12 14 16
12
4
3
8
12
53
Clone set Reasons
Cforig-only Too small after decomp.
Too diff. after decomp.
Smaller after decomp. higher
dissimilarity
Unknown
Cfdecomp-only
Having deleted/added stmt., type
cast, package name.
Different if-else statements
Different loop statements
Inner class methods
Unknown
Tomcat
0 28 56 84 112 140
16
5
120
19
6
T1 T2 T3
0 5 10 15 20 25 30
20
2
1
3
2
@Override	
	 public	Range	findRangeBounds(XYDataset	dataset)	{	
	 	 if	(dataset	!=	null)	{	
	 	 	 Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 	 if	(r	==	null)	{	
	 	 	 	 return	null;	
	 	 	 }	else	{	
	 	 	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,	
																																																																								r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 	 	 }	
	 	 }	else	{	
	 	 	 return	null;	
	 	 }	
	 }		
	 @Override	
	 public	Range	findDomainBounds(XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
O
R
I
G
I
N
A
L
@Override	
	 public	Range	findRangeBounds(XYDataset	dataset)	{	
	 	 if	(dataset	!=	null)	{	
	 	 	 Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 	 if	(r	==	null)	{	
	 	 	 	 return	null;	
	 	 	 }	else	{	
	 	 	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,	
																																																																								r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 	 	 }	
	 	 }	else	{	
	 	 	 return	null;	
	 	 }	
	 }		
	 @Override	
	 public	Range	findDomainBounds(XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
O
R
I
G
I
N
A
L
@Override	
	 public	Range	findDomainBounds(final	XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 final	Range	r	=	DatasetUtilities.findDomainBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.xOffset,		
																																																						r.getUpperBound()	+	this.blockWidth	+	this.xOffset);	
	 }
	 @Override	
	 public	Range	findRangeBounds(final	XYDataset	dataset)	{	
	 	 if	(dataset	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 final	Range	r	=	DatasetUtilities.findRangeBounds(dataset,	false);	
	 	 if	(r	==	null)	{	
	 	 	 return	null;	
	 	 }	
	 	 return	new	Range(r.getLowerBound()	+	this.yOffset,		
	 	 	 	 									r.getUpperBound()	+	this.blockHeight	+	this.yOffset);	
	 }
D
E
C
O
M
P
I
L
E
D
public	void	clearRangeMarkers()	{	
				if	(this.backgroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																										this.backgroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.backgroundRangeMarkers.clear();	
				}	
				if	(this.foregroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																									this.foregroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
				}	
				fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.backgroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.foregroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.foregroundRangeMarkers.clear();	
								}	
								fireChangeEvent();	
}	
ORIGINAL
public	void	clearRangeMarkers()	{	
				if	(this.backgroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																										this.backgroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.backgroundRangeMarkers.clear();	
				}	
				if	(this.foregroundRangeMarkers	!=	null)	{	
								Set<Integer>	keys	=		
																									this.foregroundRangeMarkers.keySet();	
								for	(Integer	key	:	keys)	{	
												clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
				}	
				fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.backgroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
												Set	keys	=		
																				this.foregroundRangeMarkers.keySet();	
												Iterator	iterator	=	keys.iterator();	
												while	(iterator.hasNext())	{	
																Integer	key	=	(Integer)	iterator.next();	
																clearRangeMarkers(key.intValue());	
												}	
												this.foregroundRangeMarkers.clear();	
								}	
								fireChangeEvent();	
}	
ORIGINAL
public	void	clearRangeMarkers()	{	
				if	(this.backgroundDomainMarkers	!=	null)	{	
								final	Set<Integer>	keys	=		
																		this.backgroundDomainMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearDomainMarkers(key);	
												}	
												this.backgroundDomainMarkers.clear();	
								}	
								if	(this.foregroundDomainMarkers	!=	null)	{	
												final	Set<Integer>	keys	=		
																						this.foregroundDomainMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearDomainMarkers(key);	
												}	
												this.foregroundDomainMarkers.clear();	
								}	
								this.fireChangeEvent();	
}
				public	void	clearRangeMarkers()	{	
								if	(this.backgroundRangeMarkers	!=	null)	{	
												final	Set	keys	=		
																this.backgroundRangeMarkers.keySet();	
												for	(final	Integer	key	:	keys)	{	
																this.clearRangeMarkers(key);	
												}	
												this.backgroundRangeMarkers.clear();	
								}	
								if	(this.foregroundRangeMarkers	!=	null)	{	
								final	Set	keys	=		
												this.foregroundRangeMarkers.keySet();	
								for	(final	Integer	key	:	keys)	{	
												this.clearRangeMarkers(key);	
								}	
								this.foregroundRangeMarkers.clear();	
								}	
								this.fireChangeEvent();	
				}
DECOMPILED
26
Study on 3 real-world systems: JUnit, JFreeChart, Tomcat
Using Compilation/Decompilation 

to Enhance Clone Detection
1 Clone pairs before and after decompilation are mostly
similar for all three clone types.
Findings:
2 One can complement the original clone results by
incorporating clones after decompilation.
Characteristics of disjoint clones3
C. Ragkhitwetsagul, J. Krinke
cragkhit.github.io/crjk-iwsc17

More Related Content

Viewers also liked

Device-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded SystemsDevice-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded SystemsemBO_Conference
 
Meetup: Spark + Kerberos
Meetup: Spark + KerberosMeetup: Spark + Kerberos
Meetup: Spark + KerberosStratio
 
Inventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicionInventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicionTalita Mtz
 
A historia do noso planeta
A historia do noso planetaA historia do noso planeta
A historia do noso planetairenetraba
 
公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收傑凱 楊
 
A estrutura e dinámica da terra
A estrutura e dinámica da terraA estrutura e dinámica da terra
A estrutura e dinámica da terrairenetraba
 
A saúde e a enfermidade
A saúde e a enfermidadeA saúde e a enfermidade
A saúde e a enfermidadeirenetraba
 
Estudo dos ecosistemas
Estudo dos ecosistemasEstudo dos ecosistemas
Estudo dos ecosistemasirenetraba
 
A información xenética
A información xenéticaA información xenética
A información xenéticairenetraba
 
MERCA PRESENTACION
MERCA PRESENTACIONMERCA PRESENTACION
MERCA PRESENTACIONlu2205
 
Presentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vuPresentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vuOLEXI
 
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente JiménezLos niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente JiménezRebeca Collado del Pozo
 
Inhalation analytical techniques 1
Inhalation analytical techniques 1Inhalation analytical techniques 1
Inhalation analytical techniques 1Pankaj Deshpande
 

Viewers also liked (17)

Device-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded SystemsDevice-specific Clang Tooling for Embedded Systems
Device-specific Clang Tooling for Embedded Systems
 
Meetup: Spark + Kerberos
Meetup: Spark + KerberosMeetup: Spark + Kerberos
Meetup: Spark + Kerberos
 
Inventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicionInventario de perasonalidad pexposicion
Inventario de perasonalidad pexposicion
 
Power point fuisha
Power point fuishaPower point fuisha
Power point fuisha
 
A historia do noso planeta
A historia do noso planetaA historia do noso planeta
A historia do noso planeta
 
公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收公聽會資料─豐富專案區段徵收
公聽會資料─豐富專案區段徵收
 
A estrutura e dinámica da terra
A estrutura e dinámica da terraA estrutura e dinámica da terra
A estrutura e dinámica da terra
 
A saúde e a enfermidade
A saúde e a enfermidadeA saúde e a enfermidade
A saúde e a enfermidade
 
El bulling
El bullingEl bulling
El bulling
 
Estudo dos ecosistemas
Estudo dos ecosistemasEstudo dos ecosistemas
Estudo dos ecosistemas
 
A información xenética
A información xenéticaA información xenética
A información xenética
 
MERCA PRESENTACION
MERCA PRESENTACIONMERCA PRESENTACION
MERCA PRESENTACION
 
Presentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vuPresentación SDL Trados vs Déjà-vu
Presentación SDL Trados vs Déjà-vu
 
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente JiménezLos niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
Los niñ@s de Villar de Olalla visitan Toledo, por Vicente Jiménez
 
Roma
RomaRoma
Roma
 
Inhalation analytical techniques 1
Inhalation analytical techniques 1Inhalation analytical techniques 1
Inhalation analytical techniques 1
 
La amistad
La amistadLa amistad
La amistad
 

Similar to Using Compilation/Decompilation to Enhance Clone Detection

Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Chaiyong Ragkhitwetsagul
 
Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)Sean Krail
 
LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例LINE Corporation
 
Android & PostgreSQL
Android & PostgreSQLAndroid & PostgreSQL
Android & PostgreSQLMark Wong
 
Zarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDIZarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDIKonrad Kokosa
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby SystemsEngine Yard
 
No dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real worldNo dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real worldtcurdt
 
Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601David Wood
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_mapslcplcp1
 
High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018Zahari Dichev
 
(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart PointersCarlo Pescio
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging RubyAman Gupta
 
Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2Li Shen
 
Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...Dmytro Mishkin
 
Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)Logico
 
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNUCodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNUArsenii Kostromin
 
Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)David Evans
 

Similar to Using Compilation/Decompilation to Enhance Clone Detection (20)

Cram
CramCram
Cram
 
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
Similarity of Source Code in the Presence of Pervasive Modifications [SCAM'16]
 
Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)Internship - Final Presentation (26-08-2015)
Internship - Final Presentation (26-08-2015)
 
LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例LINE スタンプショップにおける Zipkin 利用事例
LINE スタンプショップにおける Zipkin 利用事例
 
Android & PostgreSQL
Android & PostgreSQLAndroid & PostgreSQL
Android & PostgreSQL
 
Zarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDIZarzadzanie pamiecia w .NET - WDI
Zarzadzanie pamiecia w .NET - WDI
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
No dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real worldNo dark magic - Byte code engineering in the real world
No dark magic - Byte code engineering in the real world
 
Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601Functional manipulations of large data graphs 20160601
Functional manipulations of large data graphs 20160601
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_maps
 
High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018High Performance Systems Without Tears - Scala Days Berlin 2018
High Performance Systems Without Tears - Scala Days Berlin 2018
 
(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers(Slightly) Smarter Smart Pointers
(Slightly) Smarter Smart Pointers
 
IDS.pptx
IDS.pptxIDS.pptx
IDS.pptx
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging Ruby
 
Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2Bioinfo ngs data format visualization v2
Bioinfo ngs data format visualization v2
 
Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...Convolutional neural networks for image classification — evidence from Kaggle...
Convolutional neural networks for image classification — evidence from Kaggle...
 
Lrz kurse: r as superglue
Lrz kurse: r as superglueLrz kurse: r as superglue
Lrz kurse: r as superglue
 
Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)
 
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNUCodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
CodeQL + DTrace = Memory Disclosure Vulnerabilities in XNU
 
Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)Putting a Fork in Fork (Linux Process and Memory Management)
Putting a Fork in Fork (Linux Process and Memory Management)
 

Recently uploaded

Top 13 Famous Civil Engineering Scientist
Top 13 Famous Civil Engineering ScientistTop 13 Famous Civil Engineering Scientist
Top 13 Famous Civil Engineering Scientistgettygaming1
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdfPratik Pawar
 
Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdfKamal Acharya
 
ASME IX(9) 2007 Full Version .pdf
ASME IX(9)  2007 Full Version       .pdfASME IX(9)  2007 Full Version       .pdf
ASME IX(9) 2007 Full Version .pdfAhmedHussein950959
 
Introduction to Casting Processes in Manufacturing
Introduction to Casting Processes in ManufacturingIntroduction to Casting Processes in Manufacturing
Introduction to Casting Processes in Manufacturingssuser0811ec
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfPipe Restoration Solutions
 
Arduino based vehicle speed tracker project
Arduino based vehicle speed tracker projectArduino based vehicle speed tracker project
Arduino based vehicle speed tracker projectRased Khan
 
Natalia Rutkowska - BIM School Course in Kraków
Natalia Rutkowska - BIM School Course in KrakówNatalia Rutkowska - BIM School Course in Kraków
Natalia Rutkowska - BIM School Course in Krakówbim.edu.pl
 
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...Amil baba
 
Hall booking system project report .pdf
Hall booking system project report  .pdfHall booking system project report  .pdf
Hall booking system project report .pdfKamal Acharya
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxR&R Consult
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwoodseandesed
 
2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edge2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edgePaco Orozco
 
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical Engineering
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical EngineeringIntroduction to Machine Learning Unit-4 Notes for II-II Mechanical Engineering
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical EngineeringC Sai Kiran
 
Danfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdfDanfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdfNurvisNavarroSanchez
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdfKamal Acharya
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacksgerogepatton
 
Digital Signal Processing Lecture notes n.pdf
Digital Signal Processing Lecture notes n.pdfDigital Signal Processing Lecture notes n.pdf
Digital Signal Processing Lecture notes n.pdfAbrahamGadissa
 
Online blood donation management system project.pdf
Online blood donation management system project.pdfOnline blood donation management system project.pdf
Online blood donation management system project.pdfKamal Acharya
 

Recently uploaded (20)

Top 13 Famous Civil Engineering Scientist
Top 13 Famous Civil Engineering ScientistTop 13 Famous Civil Engineering Scientist
Top 13 Famous Civil Engineering Scientist
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdf
 
ASME IX(9) 2007 Full Version .pdf
ASME IX(9)  2007 Full Version       .pdfASME IX(9)  2007 Full Version       .pdf
ASME IX(9) 2007 Full Version .pdf
 
Introduction to Casting Processes in Manufacturing
Introduction to Casting Processes in ManufacturingIntroduction to Casting Processes in Manufacturing
Introduction to Casting Processes in Manufacturing
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdf
 
Arduino based vehicle speed tracker project
Arduino based vehicle speed tracker projectArduino based vehicle speed tracker project
Arduino based vehicle speed tracker project
 
Natalia Rutkowska - BIM School Course in Kraków
Natalia Rutkowska - BIM School Course in KrakówNatalia Rutkowska - BIM School Course in Kraków
Natalia Rutkowska - BIM School Course in Kraków
 
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...
NO1 Pandit Amil Baba In Bahawalpur, Sargodha, Sialkot, Sheikhupura, Rahim Yar...
 
Hall booking system project report .pdf
Hall booking system project report  .pdfHall booking system project report  .pdf
Hall booking system project report .pdf
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
 
Standard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - NeometrixStandard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - Neometrix
 
2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edge2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edge
 
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical Engineering
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical EngineeringIntroduction to Machine Learning Unit-4 Notes for II-II Mechanical Engineering
Introduction to Machine Learning Unit-4 Notes for II-II Mechanical Engineering
 
Danfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdfDanfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdf
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
Digital Signal Processing Lecture notes n.pdf
Digital Signal Processing Lecture notes n.pdfDigital Signal Processing Lecture notes n.pdf
Digital Signal Processing Lecture notes n.pdf
 
Online blood donation management system project.pdf
Online blood donation management system project.pdfOnline blood donation management system project.pdf
Online blood donation management system project.pdf
 

Using Compilation/Decompilation to Enhance Clone Detection