practices | Guides principles from the web team at Canonical | Natural Language Processing library
kandi X-RAY | practices Summary
kandi X-RAY | practices Summary
A collection of documents that describe best practices for Canonical web team. These can be also be viewed at
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of practices
practices Key Features
practices Examples and Code Snippets
Community Discussions
Trending Discussions on practices
QUESTION
I'm a student learning about database design and currently learning about the relationships of - one-to-one, one-to-many, many-to-many. I understand the concept well enough, but feel like I'm lacking experience/information on how it would be implemented in a real production scenario.
My question is this
If I have a blog website with a Blog Post as an entity and comments for each blog post, how would you handle the comments in the database?`
Would you use a one-to-many relationship and just store all the comments in a single table. Then link those comments to each blog post and user who created it?
What if each comment had a sub-comment? Would you create a separate table for sub-comments and link it to a single comment? Would that cause too much overhead and confusion within the DB itself?
I get the concepts and all, but don't understand best practices for handling what seems like basic stuff.
Thanks in advance!
...ANSWER
Answered 2021-Jun-15 at 16:06The simplest solution is to stick with a one-to-many relationship. Use one table and store one comment per row, with references to the post and the comment author, and a timestamp so you can sort the comments chronologically.
You seem uncertain about whether you need a "threaded comment" hierarchy. This is more complex, so if you don't need it, don't bother.
If you do need to show comment threads, then you should learn about running recursive queries in MySQL 8.0: https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive
You still only need one table. Don't create a second table for sub-comments. Just store comments like in your one-to-many example, but each comment may link to its "parent" comment when it is a reply.
Another solution that many sites use is to skip implementing their own comment system, and just embed a comment service like Disqus. That's likely to be much more reliable and safe than yours. But if you're doing this as a learning exercise, that's worthwhile too.
QUESTION
When navigating from Composable A -> Composable B, say Composable A is a Lazy List scrolled halfway down and Composable B is a Lazy List Item Details Screen. Currently, the lazy list scroll position isn't stored, and when navigating back to Composable A from B, the list starts from item index 0. We could store it in a ViewModel, and read the value back, as well as use rememberSaveable, however, I am unsure as to how to implement rememberSaveable so that it scrolls to the saved position after back navigation.
Which method would be preferred to use following good code practices?
Edit: My problem arises from the fact that the listState isn't stored when navigating back from composable B to A. So if we scroll to the bottom and select an item and look at its details, when we navigate back to the list it is scrolled to the top, instead of saving its scrollState.
My composable
...ANSWER
Answered 2021-Jun-15 at 14:10I'm leaving this question up in case anyone else ever gets stuck in my situation, but the code works as it is meant to, I just committed a folly.
I didn't account for height changes with asynchronous image loading and as such, the list would not be at its saved position upon composable navigation, due to the list state being smaller than the screen height on returning to the composable.
However, If the images were given static containers to load into to that don't change their size, then upon back navigation, the composable would correctly display the saved list state.
QUESTION
Yet another question about the style and the good practices. The code, that I will show, works and do the functionality. But I'd like to know is it ok as solution or may be it's just too ugly?
As the question is a little bit obscure, I will give some points at the end.
So, the use case.
I have a site with the items. There is a functionality to add the item by user. Now I'd like a functionality to add several items via a csv-file.
How should it works?
- User go to special upload page.
- User choose a csv-file, click upload.
- Then he is redirected to the page that show the content of csv-file (as a table).
- If it's ok for user, he clicks "yes" (button with "confirm_items_upload" value) and the items from file are added to database (if they are ok).
I saw already examples for bulk upload for django, and they seem pretty clear. But I don't find an example with an intermediary "verify-confirm" page. So how I did it :
- in views.py : view for upload csv-file page
ANSWER
Answered 2021-May-28 at 09:27a) Even if obviously it could be better, is this solution is acceptable or not at all ?
I think it has some problems you want to address, but the general idea of using the filesystem and storing just filenames can be acceptable, depending on how many users you need to serve and what guarantees regarding data consistency and concurrent accesses you want to make.
I would consider the uploaded file temporary data that may be lost on system failure. If you want to provide any guarantees of not losing the data, you want to store it in a database instead of on the filesystem.
b) I pass 'uploaded_file' from one view to another using "request.session" is it a good practice? Is there another way to do it without using GET variables?
There are up- and downsides to using request.session.
- attackers can not change the filename and thus retrieve data of other users. This is also the reason why you should not use a GET parameter here: If you used one, attackers could simpy change that parameter and get access to files of other users.
- users can upload a file, go and do other stuff, and later come back to actually import the file, however:
- if users end their session, you lose the filename. Also, users can not upload the file on one device, change to another device, and then go on with the import, since the other device will have a different session.
The last point correlates with the leftover files problem: If you lose your information about which files are still needed, it makes cleaning up harder (although, in theory, you can retrieve which files are still needed from the session store).
If it is a problem that sessions might end or change because users clear their cookies or change devices, you could consider adding the filename to the UserProfile
in the database. This way, it is not bound to sessions.
c) At first my wish was to avoid to save the csv-file. But I could not figure out how to do it? Reading all the file to request.session seems not a good idea for me. Is there some possibility to upload the file into memory in Django?
You want to store state. The go-to ways of storing state are the database or a session store. You could load the whole CSVFile and put it into the database as text. Whether this is acceptable depends on your databases ability to handle large, unstructured data. Traditional databases were not originally built for that, however, most of them can handle small binary files pretty well nowadays. A database could give you advantages like ACID guarantees where concurrent writes to the same file on the file system will likely break the file. See this discussion on the dba stackexchange
Your database likely has documentation on the topic, e.g. there is this page about binary data in postgres.
d) If I have to use the tmp-file. How should I handle the situation if user abandon upload at the middle (for example, he sees the confirmation page, but does not click "yes" and decide to re-write his file). How to remove the tmp-file?
Some ideas:
- Limit the count of uploaded files per user to one by design. Currently, your filename is based on a timestamp. This breaks if two users simultaneously decide to upload a file: They will both get the same timestamp, and the file on disk may be corrupted. If you instead use the user's primary key, this guarantees that you have at most one file per user. If they later upload another file, their old file will be overwritten. If your user count is small enough that you can store one leftover file per user, you don't need additional cleaning. However, if the same user simultaneusly uploads two files, this still breaks.
- Use a unique identifier, like a UUID, and delete the old stored file whenever the user uploads a new file. This requires you to still have the old filename, so session storage can not be used with this. You will still always have the last file of the user in the filesystem.
- Use a unique identifier for the filename and set some arbitrary maximum storage duration. Set up a cronjob or similar that regularly goes through the files and deletes all files that have been stored longer than your specified maximum duration. If a user uploads a file, but does not do the actual import soon enough, their data is deleted, and they would have to do the upload again. Here, your code has to handle the case that the file with the stored filename does not exist anymore (and may even be deleted while you are reading the file).
You probably want to limit your server to one file stored per user so that attackers can not fill your filesystem.
e) Small additional question : what kind of checks there are in Django about uploaded file? For example, how could I check that the file is at least a text-file? Should I do it?
You definitely want to set up some maximum file size for the file, as described e.g. here. You could limit the allowed file extensions, but that would only be a usability thing. Attackers could also give you garbage data with any accepted extension.
Keep in mind: If you only store the csv as text data that you load and parse everytime a certain view is accessed, this can be an easy way for attackers to exhaust your servers, giving them an easy DoS attack.
Overall, it depends on what guarantees you want to make, how many users you have and how trustworthy they are. If users might be malicious, you want to keep all possible kinds of data extraction and resource exhaustion attacks in mind. The filesystem will not scale out (at least not as easily as a database).
I know of a similar setup in a project where only a handful of priviliged users are allowed to upload stuff, and we can tolerate deletion of all temporary files on failure. Users will simply have to reupload their files. This works fine.
QUESTION
I'm trying to understand best practices for Golang concurrency. I read O'Reilly's book on Go's concurrency and then came back to the Golang Codewalks, specifically this example:
https://golang.org/doc/codewalk/sharemem/
This is the code I was hoping to review with you in order to learn a little bit more about Go. My first impression is that this code is breaking some best practices. This is of course my (very) unexperienced opinion and I wanted to discuss and gain some insight on the process. This isn't about who's right or wrong, please be nice, I just want to share my views and get some feedback on them. Maybe this discussion will help other people see why I'm wrong and teach them something.
I'm fully aware that the purpose of this code is to teach beginners, not to be perfect code.
Issue 1 - No Goroutine cleanup logic
...ANSWER
Answered 2021-Jun-15 at 02:48It is the
main
method, so there is no need to cleanup. Whenmain
returns, the program exits. If this wasn't themain
, then you would be correct.There is no best practice that fits all use cases. The code you show here is a very common pattern. The function creates a goroutine, and returns a channel so that others can communicate with that goroutine. There is no rule that governs how channels must be created. There is no way to terminate that goroutine though. One use case this pattern fits well is reading a large resultset from a database. The channel allows streaming data as it is read from the database. In that case usually there are other means of terminating the goroutine though, like passing a context.
Again, there are no hard rules on how channels should be created/closed. A channel can be left open, and it will be garbage collected when it is no longer used. If the use case demands so, the channel can be left open indefinitely, and the scenario you worry about will never happen.
QUESTION
hopefull someone can shed some light on this topic and here are some of my questions:
- How do big ecommerce websites manage their images for their websites?
- Is there any Best Practices should be consider when deciding where to keep websites images?
- I have heard to keep the images in multiple folder structure on the same server where the website is hosted so websites can render them easily and fast since they are all on same server - Is this the idea solution?
- How do professionals or big ecommerce handle images storage and maintain website images reliability and stability?
- Is Azure or AWS etc best place to store images for websites rendering?
Thanks in advance!
...ANSWER
Answered 2021-Jun-15 at 02:52Keeping the files in the same server comes with more risk, if your server crashes or region goes down your application stopped as well as your files not gonna render if you are using those files separately for different applications like mobile applications.
In this case, users will also face a high loading time for those media files if the users are not in the same zone as your application hosted.
The best practice to store the image/media files on some cloud storage like S3 or Azure Blob then connect it with some CDN like CloudFront or Azure CDN.
Now you can serve your media files via CDN which will act as a global caching system for your media files.
QUESTION
I have the requirement to be able to present a document on a website, in the browser. (not download it) and well the way I know to tackle this (without paying to 3rd parties software) is an Iframe, but that sounds like a really old practice. I'm currently developing an application on Blazor and .net5 and sounds really wrong to put an iFrame in there, can you guys provide me input for better practices or just your thoughts?
Thanks in advance.
Edit: Im trying to use them to present doc, docx, pdf and pngs in a blazor application with .net5
...ANSWER
Answered 2021-Jun-14 at 17:41Honestly, after days of research, I'm trying to talk the team into the idea of creating an API dedicated to Docs, and as part of that effort would migrate documents to AWS S3 or azure blob storage. We will introduce Aspose for rendering and separate the Issue.
Why? because all the solutions I have seen to support doc and Docx in .net5 are really hacky and I can see lacks in terms of security. And I would not recommend anyone to try to do the approach I was looking to do at the begging of this question.
I leave here what experience cause this research was pain and I hope this question can still help someone.
QUESTION
This is sort of a "best practices" question, since I'm not clear on the right way to handle this case.
The situation is that I have a bookstore app with a list of books
that exists as state.bookstore.books
. When the visitor loads the index page of the bookstore, a thunk
action is dispatched that loads all the book
objects in the user's collection into the state.bookstore.books
array.
From the bookstore page, a user can click on an individual book, and a new page is loaded that pulls the book
item from the state books
array and displays the details.
My problem is that if a user directly visits the book detail link (eg. "mysite.com/book/123") without first going through the homepage, the state.bookstore.books
array is empty, and the page has no data to display.
My question is what is the "right" way to do this? Would I dispatch the loadBookstore
action to populate the state anytime the app is initialized? Would I create a new redux feature for book
? Would I ignore looking up the book
in the state, and just grab the specific book
record from the server?
I am assuming that I'm doing it wrong / implementing an anti-pattern because selectors are not built to take parameters, so it seems like since there's no easy way to grab book 123
from the store, then I shouldn't be doing it this way.
ANSWER
Answered 2021-Jun-14 at 04:40Let's say we have 2 components
BooksHome
for/books/
SingleBook
for/books/:id
So when the user visits /books/
route, fire a thunk fetchBooks(..)
which loads books and saves them in state.bookstore.books
and display those books in BooksHome
And when the user visits /books/:id
route, fire a thunk fetchSingleBook(..)
which will find book item with :id
in state.bookstore.books
if that's present return it and display it in SingleBook
and if it's not there, fetch it, add it to state.bookstore.books
and return it and display it in
SingleBook
.
Explanation:
When the user visits /books/123
right away, state.bookstore.books
is []
so no item is found, so we'll fetch it, store it and display it.
When the user visits /books/
(data fetched and stored) and then visits /books/123
, state.bookstore.books
is having an item with id:123
so the item is found, so we'll get it from state.bookstore.books
and display it.
Must do things:
fetchBooks
must be dispatched inBooksHome
but not inApp
- Same way
fetchSingleBook
must be dispatched inSingleBook
Things optimised with this approach:
- We need not fetch all books for displaying a single book.
- We need not re-fetch book's data when it is already available in
state.bookstore.books
Hope this helps🤝
QUESTION
I'm trying to test a bundle on different versions of Symfony with github actions. I tried to configure my job as explained in Best practices for reusable bundles
Here is my job:
...ANSWER
Answered 2021-Jun-13 at 16:21It seems that export
command isn't environment-proof.
Finally, I removed these lines:
QUESTION
I'm running the code below as part of a Celery task.
...ANSWER
Answered 2021-Jun-13 at 09:16I would add the celery
user to the sudoers
file with the only command allowed being the one needed. Use visudo
and add these lines
QUESTION
I'm working on embedded systems and my goal is to improve the safety of an existing code. I'm trying to follow Nasa's rules : https://en.wikipedia.org/wiki/The_Power_of_10:_Rules_for_Developing_Safety-Critical_Code
The existing code contains dynamically allocated instances and variables which is pretty common, I'm required to translate the program to static memory alocation.
Is there generic practices and patterns to succesfully switch from dynamic to static memory allocation without breaking the code ?
In particular, I'm having issues with those kinds of mallocs :
...ANSWER
Answered 2021-May-10 at 10:09Is there generic practices and patterns to succesfully switch from dynamic to static memory allocation without breaking the code ?
No, not really. You'll have to rewrite all such code in pretty radical ways.
You have to realize why all safety-related and embedded systems ban malloc
. The main reason is that it is non-deterministic. Instead of allowing completely variable sizes, you have to specify a maximum size for each such item, to cover the worst case scenario of the application.
Also, the presence of things like pointer-to-pointers instead of 2D arrays is a pretty certain indication that the original programmer didn't quite know what they were doing in the first place.
Additionally you need to drop the default types of C for stdint.h
ones. That's standard practice in all embedded systems.
In general, I'd strongly advise to drop those "NASA rules" and implement MISRA-C instead. It's a way more professional and in-depth document. Some of the "NASA rules" simply don't make sense and the rest can be summarized as "No s***t Sherlock" beginner-level stuff which we were already told during our first beginner-level C programming class back in school. If these rules come as a surprise to someone, they shouldn't be writing mission-critical firmware in the first place.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install practices
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page