Qqwy

Qqwy

TypeCheck Core Team

Artfacer: Graphical art search engine

Hey everyone, I’d like to share a project I’ve been working on together wit three other students for one the Universities course ‘Requirements Engineering and Software Startups’.

It is called Artfacer, and it is a search engine that crawls the different graphical art services out there, to inspire visitors.

The reason I am sharing this here, is because it has been built using Elixir and Phoenix. Right now we do use some Postgres (but not much of the Postgres-specific or even SQL-specific stuff, so maybe we might move this to Mnesia at some point, when there is Ecto 2 support for it. For the fuzzy text searching, we use ElasticSearch. (On one hand it feels a bit unfortunate to bring a JVM in here as well. On the other, as far as I know there is no other tool that exists that has the same amount of discoverability of stuff as ElasticSearch has).

But the main important part is of course the Elixir code: The business logic, The crawlers and the web-facing user interface have all been written using Elixir in a nice supervision tree. (Which we want to improve further; crawler errors currently can bring the visitor-facing app down, which is not what we want. Maybe we’ll change it to an umbrella setup. So many possibilities… hooray for proper separation of concerns!)

I will go into a little bit more detail about our stack these next couple of days, and also would love to answer questions.

And all feedback on the site (all of the interface, the usability and our architectural choices) is of course extremely welcome! :slight_smile:

https://artfacer.com

~Qqwy/Wiebe-Marten and the others of Team Artfacer

First 5 of 5 Posts! Switch mode

AstonJ

AstonJ

Nice work :023:

I like that it is fast and accessible too :slight_smile:

Have you thought about putting some lists on the homepage - such as most common searches, most clicked images etc?

How are you storing the images? I expect over time it will require some hefty disk space (or do you delete old images routinely?)

Qqwy

Qqwy

TypeCheck Core Team

Thank you :blush:!

Yes, we have! This feature is actually due to release in some version today (of course, after that, the styling might be refined multiple times).

Images are fetched and stored using the Arc library. Amongst other things this wraps calling ImageMagick to create the different lower-resolution versions of the images for us (for use on mobile, tablet, etc.)

Indeed, images can take up storage space quite quickly. Right now, the ~100_000 images in the application take up 1/4th of a Terabyte together. I have no idea if there is a better way to manage this. Requesting all images only when they are shown is probably too slow (also, most of the services dislike hotlinking), so we need to store them in one way or another.

Great questions! :smiley:

LostKobrakai

LostKobrakai

Wouldn’t there be copyright concerns with storing images on your own server or do you handle that concern after crawling?

Qqwy

Qqwy

TypeCheck Core Team

We store a copy of the images so we can show smaller versions in the interface, which is a requirement for mobile phones, and the services we crawl want you to do that to reduce their bandwidth usage.

We do not alter the images in any way (other than making smaller, resized versions to reduce load for mobile visitors.), nor do we claim them to be our own: We mention the original author and the location it came from and people can go to that location directly by clicking on one of the images.

As far as we know (Of course, we’re four Computing Science students so our law experience is very limited), what we do falls under the Dutch/European [Citaatrecht]/Right to Quote, and the Fair Use doctrine in the United States (and I believe other American countries have similar rules).

Artfacer’s functionality is very similar as the one of any other search engine, so we expect the same rules to apply.

Qqwy

Qqwy

TypeCheck Core Team

The homepage now contains links to common tags as well as a ‘show all’ button.

There also now is a maturity filter, by popular request :grin:.

Where Next?

Trending in Discussions Top

AstonJ
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
2976 91332 914
New
f0rest8
Hi everyone :waving_hand: Posting here to showcase and announce that Metamorphic is now officially live on a public-facing domain at htt...
New
byu
@chrismccord : I just saw the Extract AGENTS.md from Phoenix.new into phx.new generator commit to the phoenix project. My initial shotgu...
New
arcanemachine
I was working on an Ecto migration and I needed a timestamp. So, for the nth time, I looked up the different data types for timestamps, a...
New
AstonJ
Just a general thread to post chat/news/info relating to AI/ML stuff that may be relevant for Nx now or in the future. Got anything to sh...
New
type1fool
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New

Other Trending Topics Top

JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
akoutmos
@hugobarauna and I (Alex Koutmos) have been hard at work on writing a book on Nerves that takes you from simply blinking LEDs to building...
New
zachdaniel
Introducing AshStorage! Attachment and file management that slots directly into your resources :smiling_face_with_sunglasses: I had hope...
New

We're in Beta

About us Mission Statement