-
9 votes
-
Forth: The programming language that writes itself
10 votes -
CommitMono font
55 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
15 votes -
How do Reddit, Lemmy, Tildes, etc. process, store, and serve ranked threads/links?
I'm familiar with how the ranking algorithms work on a high level. What I'm curious about is to how those algorithms are actually applied. How do these platforms actually apply the ranking...
I'm familiar with how the ranking algorithms work on a high level. What I'm curious about is to how those algorithms are actually applied.
How do these platforms actually apply the ranking algorithms so that the user sees the threads appropriately ordered? My knowledge is limited to PHP and MySQL, so I'm looking at it through the lense of those systems. I've thought of a few possible ways, but all of them seem pretty resource intensive.
-
Maintain a table of threads with all relevant information required to calculate ranking, as well as ranking itself. A server side script executing on a routine basis every X minutes (cron job?) updates the rankings on all the threads, so they can be easily ordered. However, people most likely don't care about threads >Y days old, so those can be excluded or automatically deranked somehow.
-
Maintain a table of threads with all relevant information required to calculate ranking. When a user visits, the last X threads (again, users probably don't care about really old stuff) are pulled out of the database and ran through a ranking and sorting algorithm, reordered and displayed to the user. This seems the most resource intensive?
I am by no means a professional developer, but I've been dabbling recently and the concept of how these large quantities of data are ranked both perplexes and interests me.
15 votes -
-
Hands-on with Freewheeling Apps
2 votes -
Comparing my favorite fonts for reading and writing code
37 votes -
Coding Adventure: Making a Stronger Chess Engine
8 votes -
Announcing TypeScript 5.2 Beta
6 votes -
Newbie here looking for advice on how to get into Programming/CS by building a project
Been lurking for a week on tildes now and I am really glad this place exists. The crow here is exactly what I have been missing on Reddit for a while now. Having said that, the whole Reddit...
Been lurking for a week on tildes now and I am really glad this place exists. The crow here is exactly what I have been missing on Reddit for a while now.
Having said that, the whole Reddit situation has some-what motivated me to get the balls rolling on an idea that I have had for a while and I am looking for advice on the same.
I have often heard this phrase "Learn programming by building" but whenever I dive in to the resources, I fall flat due to the information overload and the general abstractness that the field has (I appreciate abstractness but here it demotivates me) and I have never found a proper resource that I could follow to actually build something instead of just blindly following tutorials and playing with them.
So, my question is how do I translate "learn by building a project" into a practical framework.
I know of 100 days of swift and I really like that approach however I don't think I want to start with swift or build an iOS app right now.
24 votes -
I made a pass-like password manager thingy
8 votes -
What is the most advanced or creative program you can create using the LOX programming language?
Lox is a toy programming language that is designed in Java and C at craftinginterpreters.com. My challenge to you is: given the constraints of the Lox language, what are some creative or advanced...
Lox is a toy programming language that is designed in Java and C at craftinginterpreters.com.
My challenge to you is: given the constraints of the Lox language, what are some creative or advanced programs you can create?
This page provides a rundown of the design of Lox.
To kick it off, here's a simple function that estimates the value of pi:
fun estimatePi(rounds) { var pi = 0; var alt = 1; for (var i = 0; i < rounds; i = i + 1) { pi = pi + alt * 4/(2 * i + 1); alt = -alt; } return pi; } print "The value of pi is:"; print getPi(100000);
3 votes -
Solarus, a lightweight, multiplatform, free and open-source 2D game engine
19 votes -
Time is not a synchronization primitive
26 votes -
Dijkstra’s In Disguise [2018]
9 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
11 votes -
Has anyone here actually had success with launching that reddit-master archive clone?
8 votes -
COM+ alternatives in 2023?
We are small company and have utilized COM+ on the server for the last 20 years. Strictly Windows and all LAN based communication. We are rewriting in c#. What are some alternatives that I can...
We are small company and have utilized COM+ on the server for the last 20 years. Strictly Windows and all LAN based communication. We are rewriting in c#. What are some alternatives that I can look in to that may be better in terms of speed or management for COM+?
7 votes -
Looking for resources about AI development
Hello, I'm looking for resources on how to develop AI, aimed at people who already have experience with programming. They don't have to be free, I would just like to aggregate different type of...
Hello,
I'm looking for resources on how to develop AI, aimed at people who already have experience with programming.They don't have to be free, I would just like to aggregate different type of resources to pick from.
Thanks!
14 votes -
How to go about mirroring a repo to separate real identity from online identity?
I struggled to word this question. Let's say that I wish to work on a project to benefit Tildes (I don't currently have an idea, but just for example). Anything I did, I would like to keep...
I struggled to word this question.
Let's say that I wish to work on a project to benefit Tildes (I don't currently have an idea, but just for example). Anything I did, I would like to keep opensource and would encourage other users to contribute. But I would like to keep everything linked to my pseudonym as not to dox myself.
However, I would like to have a copy of everything on my personal GitHub as well, because I am a professional programmer and that is effectively my CV.
Is there a good way to mirror a repo in a way that any git history contributed by me, "John Smith", is changed to "bugsmith" on the mirrored repo? (or vice versa).
6 votes -
Is it normal to stress about your codebase becoming bad?
Lately, I've been working on a game in Godot. I've having a lot of fun, but I keep stressing out about my codebase becoming bad. I'm worrying about amassing technical debt, and having to rewrite...
Lately, I've been working on a game in Godot. I've having a lot of fun, but I keep stressing out about my codebase becoming bad. I'm worrying about amassing technical debt, and having to rewrite huge amounts of code because of bad practices.
I've been reading best practices documentation for Godot, and learning about game programming patterns, but it's still a worry for me.
I'm wondering if this is a normal feeling, and how more experienced developers manage it.
24 votes -
When consuming an API with state rate limits, how should one handle not exceeding them?
My typical approach is one that I believe is pretty common: Reading the response header for current count and waiting if the limit is reached. However, I am currently working with a couple of APIs...
My typical approach is one that I believe is pretty common: Reading the response header for current count and waiting if the limit is reached.
However, I am currently working with a couple of APIs which don't implement that and are currently set up with rate limits on an honesty system.
Is it a case of throwing sleep statements into you code, or using some kind of "bucket" and "lock" system?
I'd be interested to see any simple implementation people have used (the simpler the better).
9 votes -
Need help solutioning Microsoft APIM
We have a backend that kind of does REST APIs but cannot handle simple Bearer tokens for authorization and cannot produce the full set of HTTP error codes (the platform just doesn't allow, for...
We have a backend that kind of does REST APIs but cannot handle simple Bearer tokens for authorization and cannot produce the full set of HTTP error codes (the platform just doesn't allow, for example HTTP 501 to be returned programmatically). There is no Swagger for the API.
The thought was to use Microsoft API Management Services as a proxy of sorts. It would handle the Bearer token upfront, and then just proxy / wildcard the requests/responses to the backend. The hard part is that it needs to parse the return response, and if there is something like "{ errorCode: 501 }" property in the JSON, it needs to return HTTP 501 instead of the regular payload.
Does anyone have any experience in setting this up? It seems like the basic policy processing won't cut it, and so function apps and logic apps seem to be the ticket. We want to keep this facade layer as thin as possible. Microsoft APIM is the only platform we're allowed to consider at this time.
4 votes -
They're rebuilding the Death Star of complexity
16 votes -
Microsoft launches Devicescript, a subset of typescript that compiles to bytecode. What do you think?
15 votes -
The ideal backend language to write web apps in 2023?
I know quite a controversial and opinionated question, one that might easily get blasted with downvotes on a site like StackOverflow or even Reddit! Nevertheless, one which I believe is still...
I know quite a controversial and opinionated question, one that might easily get blasted with downvotes on a site like StackOverflow or even Reddit! Nevertheless, one which I believe is still relevant to ask and useful one even in 2023.
The problem with backend web technologies is that we are overwhelmed with choices. Whilst getting spoilt with choices seems like a useful thing sometimes, it might easily be an impediment in decision making too. Based on my experience, there are a bunch of useful stacks and I will work on any of them if you pay me to work as a freelance coder. Each has its own pros and cons but I'm yet to find the ideal one which according to me is something that should be easy to code and deploy while also better performing at the same time.
- ASP.NET: C# is the language I started coding web apps with in my last company and ASP.NET web forms was quite the rage back then. PHP was also gaining traction in the open source world and the webdev was mostly divided between the Enterprisey .NET aristocrats of Microsoft world and the poor PHP peasants of the FOSS world! One good thing about ASP.NET was performance. Since MS controlled the whole stack, they also put great efforts at making it work faster. The bad thing, of course, was dependence on a closed tech stack and a closed black box that generated JS functionality on its own.
- PHP: When I resigned from that company and started freelancing, I came to know about open source, linux, XAMPP, etc. That was when I realized that my own attitudes and thinking was more attuned to the FOSS peasant mindset than the wealthy aristocrat's! I didn't earn quite as much in freelancing with WP, Drupal, SuiteCRM, CodeIgniter, etc. but I found great happiness and contentment in being part of the open source process. Till date, PHP remains my favorite language for backend development and most of my web projects involve CodeIgniter or even pure PHP.
- Python: Flask is what got me interested in Python web development. The sheer minimalism and flexibility of that framework is what I found quite remarkable and quite a rarity in the frameworks world. And jinja2 template system was just fantastic. The other framework called django is more popular I think and I've worked on that too but Flask still remains my favorite. Flask is good in performance dept. too but I think it gets tricky once you start scaling with too many users.
- Java: I've never really bothered with Java web development except a few tutorial experiments on the Apache TomEE server. The multi-layered approach that Java takes not only has very steep learning curve but unless you're a very gifted programmer, it's practically impossible to beat the performance of interpreted PHP/Flask!
- NodeJS: Again, not much work here except brief hobby projects like http-live-simulator. The npm packaging system really turned me off initially with so many packages and issues with that system in the earlier days. Nowadays, I've heard that it's much usable but I've never gotten into it.
And now, we also have the evolving languages like Golang, Rust, etc. taking their baby steps towards web development too! Are any of them worth giving a try? If someone were to ask you for a backend tech stack recommendation while giving equal weightage to performance, developer productivity and ease of deployment, which one will you suggest?
23 votes -
Making infinite scrollable lists for web without a constantly expanding DOM
A common theme in web development, and the crux of the so-called "Web 2.0" is scrolling through dynamic lists of content. Tildes is such an example: you can scroll through about 50 topics on the...
A common theme in web development, and the crux of the so-called "Web 2.0" is scrolling through dynamic lists of content. Tildes is such an example: you can scroll through about 50 topics on the front page before you reach a "next" button if you want to keep looking.
There's a certain beauty in the simplicity of the next/previous page. When done right it's fast, it's easy, and fits neatly into a server-side rendered model. However, it does cause that small bit of friction where you need to hit the next button to go forward -- taking you out of the "flow", so-to-speak. It's slick, but it could be slicker. Perhaps more importantly, it's an interesting problem to solve.
A step up from the next/previous button is to load the next page of content when you reach the end of the list, inserting it below. If the load is pretty fast, this will hardly interrupt your flow at all! The ever-so-popular reddit enhancement suite does precisely that for reddit: instead of a next button, when you reach the bottom, the next page of items simply plops into place. If the loading isn't fast enough, perhaps instead of loading when they reach the last item, you might choose to load when they hit the fifth from last item, etc.
To try to keep this post more concrete, and more helpful, here's how this type of pagination would work in practice, in typescript and using the Intersection Observer API but otherwise framework agnostic:
/** * Allows the user to scroll forever through the given list by calling the given loadMore() * function whenever the bottom element (by default) becomes visible. This assumes that * loadMore is the only thing that modifies the list, and that the list is done being modified * once the promise returned from loadMore resolves * * @param list The element which contains the individual items * @param loadMore A function which can be called to insert more items into the list. Can return * a rejected promise to indicate that there are no more items to load * @param triggerLoadAt The index of the child in the list which triggers the load. Negative numbers * are interpreted as offsets from the end of the list. */ function handlePagination(list: Element, loadMore: () => Promise<void>, triggerLoadAt: number = -1) { manageIntersection(); return; function handleIntersection(ele: Element, handler: () => void): () => void { let active = true; const observer = new IntersectionObserver((entries) => { if (active && entries[0].isIntersecting) { handler() } }, { root: null, threshold: 0.5 }); observer.observe(ele); return () => { if (active) { active = false; observer.disconnect(); } } } function manageIntersection() { const index = triggerLoadAt < 0 ? list.children.length + triggerLoadAt : triggerLoadAt; if (index < 0 || index >= list.children.length) { throw new Error(`index=${index} is not valid for a list of ${list.children.length} items`); } const child = list.children[index]; const removeIntersectionHandler = handleIntersection(child, () => { removeIntersectionHandler(); loadMore().then(() => { manageIntersection(); }).catch((e) => {}); }); } }
If you're sane, this probably suffices for you. However, there is still one problem: as you scroll,
the number of elements on the DOM get longer and longer. This means they necessarily take up
some amount of memory, and browsers probably have to do some amount of work to keep
track of them. Thus, in theory, if you were to scroll long enough, the page would get slower and
slower! How long "long enough" is would depend mostly on how complicated each item is: if each one
is a unique 20k element svg, it'll get slow pretty quickly.The trick to avoid this, and to get a constant overhead, is that when adding new items below, remove the same number of items above! Of course, if the user scrolls back up they'll be expecting those items to be there, but no worries, the
handlePagination
from before works just as well for loading items before the first item.However, this simple change is where a key problem arises: inserting elements below doesn't cause any layout shift, but inserting an item above ought to--right?
The answer is: it depends on the browser! Back in 2017 chrome realized that it's often convenient to be able to insert items into the dom above the viewport, and implemented scroll anchoring, which basically ensures that if you insert an item 50px tall above the viewport, then scroll 50px down so that there's no visual layout shift. Firefox followed suite in 2019, and edge got support in 2020. But alas, safari both on mac and ios does not support scroll anchoring (though they expressed interest in it since 2017)
Now, there's two responses to this:
- Surely Safari support is coming soon, they've posted on that bug as recently as April! Just use simpler pagination for now
- Pshhhh, just implement scroll anchoring ourself!
Of course, I've gone and done #2, and it almost perfectly works. Here's the idea:
- Right before
loadMore
, find the first item in the list which is inside the viewport. This is the item whose position we don't want to move. Use getBoundingClientRect to find it's top position. - Perform the DOM manipulation as desired
- Use getBoundingClientRect again to find the new top of that item.
- Insert (or remove) the appropriate amount of blank space at the top of the list to offset the change in client rect (note that if there's scroll anchoring support in the browser this should always be zero, which means this effectively works as progressive enhancement)
Now, the function to do this is a tad too long for this post. I implemented it in React, however, and combined it with some stronger preloading object (we don't need all the items we've fetched from the API on the DOM, so we can use before, onTheDom, after lists to avoid getting a bunch of api requests just from scrolling down and up within the same small number of items).
What's interesting is that it still works perfectly on chrome even with scroll-anchoring disabled (via
overflow-anchor: none
), but on Safari there is still, sometimes, 1 frame where it renders the wrong scroll position before immediately adjusting. Because I implemented it in react, however, my current hypothesis is I have a mistake somewhere which causes the javascript to yield to the renderer before all the manipulations are done, and it only shows up on Safari because of the generally higher framerates thereIf it's interesting to people, I could extract the infinite list component outside of this project: I certainly like it, and in my case I do expect people to want to quickly scroll through hundreds to thousands of items, so the lighter DOM feels worth it (though perhaps it wouldn't if I had known, when starting, how painful getting it to work on Safari would be!).
What do you think of this type of "true" infinite scrolling for web? Good thing, neutral thing, bad thing? Would you use it, if the component were available? Would you remove it, if you saw someone doing this? Are there other questions about how this was accomplished? Is this an appropriate post for Tildes?
11 votes -
DreamBerd, the perfect programming language
14 votes -
Farmd alpha
9 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
5 votes -
Programming Challenge: Mini Calendar Display
It has been a while since the last time we did something like a programming challenge, so here's one for ya. The life story of the author before you get to the recipe I've been working on a little...
It has been a while since the last time we did something like a programming challenge, so here's one for ya.
The life story of the author before you get to the recipe
I've been working on a little "today" website, showing what day it is, if it's a significant date for holiday/independence/... reasons, and one of the things I wanted was a small calendar display that showed the full month and days in each week. Like how XFCE's Clock plugin does it.
So I got to figuring it out and after finishing it up I thought this could be a nice little programming challenge. It has one input (the date) that can be in any of the rows and columns, and it's up to you to figure out all the rest.
Here's how mine looks in about 250ish lines of TypeScript (TSX technically) and SCSS.
The Recipe
Make a mini calendar display that shows all the days of the current month and at least one day of each adjacent month. So for example for May 2023: the 31 days in May, the 30th of April and the 1st of June should at least be visible.
It can be in any language with any method of rendering; simple text, TUI/GUI toolkit, web-based, raytraced in some game engine, nixie tubes, whatever.
Bonus Points
- Highlight the current day name in the first row, if you're including day names.
- Highlight the current day number, wherever it is.
- Highlight the current week row, wherever it is.
- Differentiate the days of current month and the days of the other adjacent months, wherever they are.
Some Tips
The week number
If your programming language of choice doesn't have a built-in way to get the week number, like JavaScript doesn't, this website may have you covered.
Testing
Make sure to test multiple different input dates, I thought I was finished with my display until I tried some other dates and noticed that there were still some bugs left to squash.
Starting
If you know what the first day in the calendar should be, counting up is as easy as "one two three"!
Weeks
If you use 6 weeks in the display, you will always have enough space to fit all the current month's days and the minimum 1 day of the adjacent month's too.
Showcase
If at all possible and with at least a few entries I will try to run all the submissions myself and create a little showcase website for it.
16 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
3 votes -
I want to learn programming
I currently don't know anything about programming so am considering picking this up on the side in case I loose my current job and need a backup plan. Anyone knows any good books or online courses...
I currently don't know anything about programming so am considering picking this up on the side in case I loose my current job and need a backup plan. Anyone knows any good books or online courses or anything else for self-learning?
My friends said programming is too broad a subject and what you need to learn depends heavily on what fields you want to go in, which I'm ashamed to admit also know nothing about. So I guess I need some career advice too if possible.
22 votes -
Tail recursion for Java
4 votes -
Using computers more freely and safely
8 votes -
Patching Salt Lake 2002 to run on modern systems
6 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
2 votes -
Resources for learning to code
Tildes is pretty technically minded place, so I figured this would be a good place to get some advice. Programming is something I've taken a class or two on (though it's been long enough that I'd...
Tildes is pretty technically minded place, so I figured this would be a good place to get some advice. Programming is something I've taken a class or two on (though it's been long enough that I'd like to start from scratch) and I think I have some aptitude for it. The possibility of working from home is also very appealing. However, there are a ton of resources out there, and "learn to code" has been a thing for a while now. Is self-teaching or one of those coding boot camps a viable way to get started in the field? And if so, what are some good resources and practices for getting there? I have some money available, but a degree would be expensive both time and cost wise.
10 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
3 votes -
Show Tildes: a little, portable, hackable graph-drawing tool
13 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
2 votes -
Working with GPT
7 votes -
Letting users block injected third-party DLLs in Firefox
12 votes -
Why I decided not to do Emrakul, and how we shipped it anyway
10 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
2 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
2 votes -
Repeat yourself when it makes sense to do so
6 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
3 votes -
Old, but Interesting programs
7 votes -
Fortnightly Programming Q&A Thread
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...
General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.
Don't forget to format your code using the triple backticks or tildes:
Here is my schema: ```sql CREATE TABLE article_to_warehouse ( article_id INTEGER , warehouse_id INTEGER ) ; ``` How do I add a `UNIQUE` constraint?
2 votes