# Interop Project¶

Please choose a project and a form of interop that appeals to you and your background.

## Project 1: Interfacing with your own scripts¶

Choose a script from your own work. Modify it so that way it requires and input, and spits out a sensible output. Use Julia's interop functionalities to call this script and retrieve the answer.

## Project 2: Wrapped Least Squares¶

Use Julia's interop capabilities to solve the least squares problem using your language of choice and retreve the answer back to Julia.

## Tools¶

These are mature interop libraries provided by Julia:

#### ccall¶

The documentation page for ccall is: http://docs.julialang.org/en/release-0.4/manual/calling-c-and-fortran-code/. Since I found that slightly opaque on my first read, I wrote a tutorial for using ccall to call compile your C-code for usage with ccall and writing the wrapper code: http://www.stochasticlifestyle.com/using-julias-c-interface-utilize-c-libraries/

##### Xeon Phi¶

While not technically supported, note that you can use ccall to control Xeon Phi acceleration cards: http://www.stochasticlifestyle.com/interfacing-xeon-phi-via-julia/

#### Cxx.jl¶

https://github.com/Keno/Cxx.jl

#### RCall¶

https://github.com/JuliaInterop/RCall.jl

https://github.com/joshday/Talks/blob/master/SLG2016_IntroToJulia/Slides.ipynb

#### PyCall¶

https://github.com/JuliaPy/PyCall.jl

https://github.com/joshday/Talks/blob/master/SLG2016_IntroToJulia/Slides.ipynb

#### MATLAB.jl¶

https://github.com/JuliaInterop/MATLAB.jl

#### CUDArt.jl¶

http://www.stochasticlifestyle.com/julia-on-the-hpc-with-gpus/

http://www.stochasticlifestyle.com/multiple-gpu-on-the-hpc-with-julia/