GSoC Proposal: Improvements to the REPL workflow. #1004
Replies: 7 comments 33 replies
-
Hi Soumitra, this project is also planned by another student @ashwani-rathee #1000. Usually, we don't have multiple students selected for the same project idea so I would recommend you to come up with some other ideas. Other similar projects I have in mind are:
Let us know if you're interested in this, or if you have other ideas related to JuliaImages. |
Beta Was this translation helpful? Give feedback.
-
Hmm... I noticed #1000 mentions two tasks: one being the EXIF one, and the other being the JPEG2000 and GIF one. Maybe one possible way forward is for me to take the JPEG2000 and GIF one since they've already started work on the EXIF one? If not, I'd be interested in the first task you mentioned. Would that require me to transfer this discussion to ImageMagick.jl? However, I did notice you've been interested in replacing ImageMagick with ImageIO. Is there any other functionality that ImageIO lacks but is provided by ImageMagick? I think that would move us a bit more forward in regards to your goal for ImageIO. Hope you can guide me through this. Thanks! |
Beta Was this translation helpful? Give feedback.
-
Yes, I've discussed this with him and we believe EXIF might only make a 120 hour project, so we add JPEG2000 and GIF to make it a 350 hour project.
This is mainly for performance consideration; we constantly find out wrapping the actual C backend libraries provides 1.5-3x performance improvement over ImageMagick. Thus for commonly used image formats, we would want to make it efficient enough. From the documentation in https://imagemagick.org/script/formats.php, there are more than 100 formats not supported by ImageIO. With this great coverage, we might never get a chance to really have ImageIO support that many formats, and thus we might never have a chance to actually sunset it. It is impossible and not necessary to have ImageIO support these many formats. Also, you might have seen a lot of legacy issues in https://github.com/JuliaIO/ImageMagick.jl. Instead of fixing it on the legacy ImageMagick v6, I would prefer a rewrite on top of ImageMagick v7. That should automatically fix a lot of issues.
See also the benchmarks in JuliaIO/ImageIO.jl#21 and JuliaIO/JpegTurbo.jl#15 |
Beta Was this translation helpful? Give feedback.
-
There's also another idea that I would like to see people tackle: build a terminal-based IDE to further improve the current REPL workflow via Term.jl + UnicodePlots + ImageInTerminal. I haven't done concept proof yet but with Term.jl I believe this is doable. I believe @t-bltg (who currently maintains UnicodePlots) would also be interested in this project. I would also want to invite @FedeClaudi to share some thoughts on whether this is doable. |
Beta Was this translation helpful? Give feedback.
-
Hi, That sounds cool!
I haven't used |
Beta Was this translation helpful? Give feedback.
-
Oh yeah, I think I understand a bit better now.
The only issue I have with wrapping ImageMagick is that it might be a project I wouldn't be able to complete. I imagine wrapping ImageMagick v7 is around a 350 hour project (especially since it has been framed as a 'rewrite'), and I want to pick a small to medium sized (~175-200hrs) project. I'm afraid I'll bite off more than I can chew.
This sounds like a really fun idea! I've never used the Images.jl REPL workflow, but I imagine I can familiarize myself with it in a couple of days and look at some potential concrete plans of improving it. Would I be considered qualified for the job though? |
Beta Was this translation helpful? Give feedback.
-
So I read through the test code I linked, and I used Here's a simplified version of the test code I was using (this one has all the REPL hooks removed, so what we have is just a REPL running in the background, we have no control over how expressions are evaluated): using REPL
inputbuf = Pipe()
outputbuf = Pipe()
errbuf = Pipe()
Base.link_pipe!(inputbuf, reader_supports_async=true, writer_supports_async=true)
Base.link_pipe!(outputbuf, reader_supports_async=true, writer_supports_async=true)
Base.link_pipe!(errbuf, reader_supports_async=true, writer_supports_async=true)
term = REPL.Terminals.TTYTerminal("dumb", inputbuf.out, outputbuf.in, errbuf.in)
repl = REPL.LineEditREPL(term, true)
@async begin
REPL.run_repl(repl)
end
commands = [
"\n",
"a = 1\n",
"println(a)\n",
"b = a/2\n",
"b\n",
"exit()\n",
]
for cmd in commands
println("STDIN:")
writeDone = @async begin
write(inputbuf.in, cmd)
end
wait(writeDone)
println("STDOUT:")
outReadDone = @async begin
println(String(readavailable(outputbuf.out)))
end
wait(outReadDone)
# println("STDERR:")
# errReadDone = @async begin
# println(String(readavailable(errbuf.out)))
# end
# wait(errReadDone)
println("--------------")
sleep(5)
end Output:
Some issues with this however:
What am I doing wrong here? I presume it's something with how I'm reading/writing from/to the |
Beta Was this translation helpful? Give feedback.
-
Hi, my name is Soumitra Shewale, and I'm a first year dual degree Economics student (second degree choice pending), at Birla Institute of Technology and Science Pilani, Hyderabad. I have worked extensively with Julia before (in Google Code-in 2019) and I learnt a lot during that period. When I found out about GSoC, I immediately checked if Julia was in the list, and sure enough, I found a project I was interested in.
I have prior experience with Julia and Images.jl, and I have some experience with cross compiling on linux, and I am also sufficiently familiar with C. I will admit however, that I have no experience in wrapping C libraries in Julia. Maybe I can learn a thing or two during the course of this project?
I do have a few questions regarding this project however:
Looking forward to a great discussion (and possibly project 😉). Thanks!
Beta Was this translation helpful? Give feedback.
All reactions