|
Ruggan posted:I pushed some minor changes to one of our customer-facing websites yesterday. This website is essentially a project management & task tracker for our clients - it isn't a core part of our business but supports groups who buy and need to implement our software. One of those changes involved adding a column to a CSV extract you can pull from the app's UI. We don't expose any sort of API endpoint, you need to get it from within the tool. I got a complaint this morning from one of our employees who is staffed to some organization that was "surprised" by the change. Apparently this organization is doing some scripting automation to pull down their data via the extract and post-process it. Adding this column broke their script. If you were actually updating an API, I'd answer your questions, but since it's a website, there's no need. Them scraping your site is their problem, not yours.
|
# ? Sep 10, 2019 20:12 |
|
|
# ? Jun 1, 2024 02:52 |
|
Ruggan posted:Is versioning a web-app valuable, beyond marketing purposes? If yes, what versioning method do you use? Yes, for correlating builds/tickets/exceptions/logs etc. Lately I tend to just use my CI build numbers as versions - even if I rebuild again from a commit I already built, I just consider it a new version to keep things simple (even though, in theory, all of my dependencies have their versions locked, I doubt that all of my builds are fully deterministic). Ruggan posted:Is the code-writing end-user someone that is worth providing explicit support for even when we do not provide a public API? Providing a public API and providing explicit support for an internal API are pretty much the same thing. It's worth creating public APIs for end-users who will pay for them. Ruggan posted:What would you consider the public API of a website? (relevant article here) If no other agreements are in place, then I would never consider anything but the UI to be the public API. Ruggan posted:What constitutes a major change, minor change, and patch to a website (applying the SemVer mental model)? I don't think there's any reason to use semver for a normal website. It makes sense for actual APIs, but even then it's usually overkill. Do your the end-users of your API care if there's a non-breaking change? If they do, you might want to consider a minor version number, but if not, you can just stick to having a major version that you only increment for breaking changes. Breaking changes are pretty obvious: changes in URIs, changes in request formats, changes in response formats. Ruggan posted:What sort of proactive communication do you feel is necessary for varying degrees of change? Keep track of all systems that depend on your APIs (give them unique API keys and make sure to have a mapping of API keys to some sort of contact information). If you want to deprecate an older version your API, it's also useful to know if it's ever actually used at all, so keeping track of historical request statistics is also be a good idea, and you can find out exactly who is using which API endpoint by forcing everybody to use API keys. When you release a new version, keep the older versions around if at all possible, and communicate to all known users that the old version is deprecated and will be turned off at X date.
|
# ? Sep 10, 2019 20:54 |
|
Lumpy posted:If you were actually updating an API, I'd answer your questions, but since it's a website, there's no need. Them scraping your site is their problem, not yours. Yeah, this is how I feel, but trying to be sensitive that they're paying us a lot for software whose implementation uses this tool. I don't think they care that the change was made, just wanted forewarning. sunaurus posted:Providing a public API and providing explicit support for an internal API are pretty much the same thing. It's worth creating public APIs for end-users who will pay for them. At this point we aren't charging, and I don't think we'd want to go down that route, but maybe? sunaurus posted:Keep track of all systems that depend on your APIs (give them unique API keys and make sure to have a mapping of API keys to some sort of contact information). If you want to deprecate an older version your API, it's also useful to know if it's ever actually used at all, so keeping track of historical request statistics is also be a good idea, and you can find out exactly who is using which API endpoint by forcing everybody to use API keys. When you release a new version, keep the older versions around if at all possible, and communicate to all known users that the old version is deprecated and will be turned off at X date. Definitely makes sense if I were developing a public API, but I'm not. I'm a consumer of a handful for various projects so what you said there makes total sense to me and is what some of those groups do.
|
# ? Sep 10, 2019 23:14 |
|
Lumpy posted:If you were actually updating an API, I'd answer your questions, but since it's a website, there's no need. Them scraping your site is their problem, not yours. Well, they are providing a CSV file. I think you have to expect people to use it for more than opening in Excel. I don't think the fact that are automating the download makes a difference. The changed format could break any import procedure someone had set up, whether they are downloading it manually or not. And it's not like these are just random users, they are clients who buy poo poo. It might not be a bad idea to send an email to the employees that deal with the clients notifying them of the change. At least then it's their responsibility if someone complains.
|
# ? Sep 11, 2019 00:33 |
|
I would consider the CSV generation should be behind a versioned API and fed into the UI. Then at least you have support for making UI changes, having different concurrent UI versions for your own better management. The API does not need to be public, although it could always be raised to clients using it and note in contracts as a line item.
|
# ? Sep 11, 2019 06:48 |
|
I have a really hard time taking a set of wireframes or mocks and turning it into matching html + css. Is there any good resource for web development for a backed software engineer who wants to be able to handle frontend? I can do backend stuff no problem but I will spend two hours of trial and error trying to do basic tasks like figure out why an anchor tag won't center in the middle of its container even though I thought I understood the flexbox cheatsheet I re-read right before starting, then spend another three hours trying random poo poo to figure out how to remove the text decoration from it and make it inherit the color of the container since the container may be in multiple states with different colors for its contents and I had no idea I needed to use the text-decoration or inherit keywords and I didn't see anything on stack overflow for that till I happened to rephrase my Google search in just the right way. I had a big UI project late last year that resulted in me getting complaints about my slow performance from a teammate and my manager asking if I wanted to stay here and what my future plans were. I was pretty much at the end of that UI project at the point when those complaints started coming in so I was soon able to get backend stuff and start making fast progress again, but this seems like a major weak point of mine that I don't know how to address. I always thought I could do literally anything given time, but it seems that there's a big difference between getting something done very fast and getting something done very slow. Backend stuff, code flies from my fingertips faster than my teammates review it and I develop a backlog of stuff they have to churn through. But frontend stuff, I get similar sized changes out every 2-3 days instead of 3-5 times per day. What do I read to get me ready to become a web dev expert? I want to get just as fast if not faster at web stuff than I am at backend stuff.
|
# ? Sep 12, 2019 14:52 |
|
Go to Dribble or other site where people post UIs. Pick one. Make it. Pick another. Make it. Just do it enough that you've solved all the little corner cases and annoyances so many times that you aren't starting on square one every time you hit a snag. If you have any specific problems that caused a great deal of wasted time, I'd be happy to talk through how I'd think about them / approach them. Heck, I'd even do a walkthrough of a Dribble UI with you if you want.
|
# ? Sep 12, 2019 15:06 |
|
Also, once you start feeling pretty good about your abilities go to a site like the following and realize you know nothing. https://tympanus.net/codrops/category/tutorials/
|
# ? Sep 12, 2019 18:15 |
|
Thermopyle posted:Also, once you start feeling pretty good about your abilities go to a site like the following and realize you know nothing. Please note: Never ever show this site to a product owner or designer.
|
# ? Sep 12, 2019 19:40 |
|
Null of Undefined posted:Please note: Never ever show this site to a product owner or designer. Or client or junior dev with too much time.
|
# ? Sep 12, 2019 19:56 |
|
In React, what's a good way to implement a button that needs to be pushed for a couple of seconds to have an effect? And also set a css class on initial push to animate that it is reacting/waiting.
|
# ? Sep 12, 2019 20:19 |
|
uncle blog posted:In React, what's a good way to implement a button that needs to be pushed for a couple of seconds to have an effect? And also set a css class on initial push to animate that it is reacting/waiting. There's a lot of variables that will change the answer (Do they have to keep the mouse over the button, etc.) but add a mouse down handler that kicks off a timer and hangs on to the ID, have a mouse up handler that kills the timer based on that ID. If the timer goes off, you're a winner! You can use the ID hanger-onner to set your class name.
|
# ? Sep 12, 2019 20:32 |
|
oliveoil posted:I have a really hard time taking a set of wireframes or mocks and turning it into matching html + css. A lot of people act like implementing layouts with HTML and CSS is easy but it can be really tricky! See if you can find some screencasts of people doing exactly what you're talking about. You can pick up a lot of tips just watching how someone else tackles similar problems. Also I'm becoming a huge TailwindCSS fan, especially for rapidly building out custom designs, so here's a screencast of its creator building out a custom design with it https://www.youtube.com/watch?v=ZrRRMBaz5Z0 I like this style of video where it's a pre-recorded live stream vs. someone who's just following a script because it's good to see how someone tackles something from start to finish, including sometimes going down the wrong path. Also post in this thread if you have specific problems, with Codepen or Codesandbox it's really easy to crowdsource your job these days prom candy fucked around with this message at 02:43 on Sep 13, 2019 |
# ? Sep 13, 2019 02:41 |
|
I'm trying to learn web development in Javascript and to this effect I'm building a simple webapp in Node/Express using mongoose to interact with a MongoDB database. I'm trying to delete everything in a specific collection where some condition is met, so I'm using the deleteMany() function. The mongoose docs seem to indicate that providing a callback function isn't required (that's what the square brackets mean right?), but if I don't provide a callback it's not working properly:code:
Edit: just noticed there's a separate JS thread further down, apologies if this should have been posted there. oh no computer fucked around with this message at 15:39 on Sep 14, 2019 |
# ? Sep 14, 2019 15:31 |
|
oh no computer posted:I'm trying to learn web development in Javascript and to this effect I'm building a simple webapp in Node/Express using mongoose to interact with a MongoDB database. I'm trying to delete everything in a specific collection where some condition is met, so I'm using the deleteMany() function. The mongoose docs seem to indicate that providing a callback function isn't required (that's what the square brackets mean right?), but if I don't provide a callback it's not working properly: Given that the explicitly say the ‘options’ argument is optional, but don’t say the callback is, I’m guessing the callback is in fact required. You are correct that in most docs, things in square brackets are optional, but thus wouldn’t be the first set of confusing docs in the world.
|
# ? Sep 15, 2019 04:43 |
|
Wow, thanks for all the advice, everyone!Lumpy posted:Go to Dribble or other site where people post UIs. Pick one. ... I'll start by trying to build some dribble UIs. That sounds like fun and I can't believe I didn't think of that! prom candy posted:A lot of people act like implementing layouts with HTML and CSS is easy but it can be really tricky! See if you can find some screencasts ... Oh man that's smart. That sounds like how I learned when I first graduated from college and realized I knew nothing substantial about programming in languages employers actually wanted- I started watching Ruby, rails, JavaScript, and html5+css tutorials where people showed you how to do stuff. Thanks again, everyone!
|
# ? Sep 16, 2019 00:20 |
|
Is there a good place to ask UI/UX questions related to web apps?
|
# ? Sep 17, 2019 19:29 |
|
This may be a good spot...
|
# ? Sep 17, 2019 19:39 |
|
uncle blog posted:Is there a good place to ask UI/UX questions related to web apps? here?
|
# ? Sep 17, 2019 19:39 |
|
I mean, there's technically this thread, but seriously
|
# ? Sep 17, 2019 19:44 |
|
The Fool posted:I mean, there's technically this thread, but seriously This thread has design in the title, therefore it is the objectively correct place.
|
# ? Sep 17, 2019 20:09 |
|
I'm a pretty seasoned product design lead so I can offer you some really opinionated and bad advice.
|
# ? Sep 17, 2019 20:31 |
|
Okay, here goes. We're developing an application that's currently aimed at older people. It's meant to show people a list of suggestion for services that will fit their goals and hindrances. The current mock up has 3 separate pages: goals - where the user selects a singular goal with a radio button. hindrances - the user is shown a list of applicable hindrances (based on the goal) where they can choose from 0 to all. results - a list of suggested services based on the input. Heres a quick and stupid mock-up that hopefully gets the idea across: Our very limited testing suggests that some users might want to be able to select multiple goals, and see suggestions for each individual goal. The current way of doing this is hitting the button "Select a new goal" at the end, which will take the user to the goal page. The concern is that the user might feel that the process is repetitive, going through two of the pages multiple times. A suggestion has been to let the user check multiple goals, and then having to go through the hindrance screen multiple times - one for each goal - and then having the suggestions be presented in a vertically scrolling list separated by goal. But I fear this might be overwhelming for our user group. So what we want is a different way to present this form where the user feels that it is easy and intuitive to jump between different goals and the corresponding result pages.
|
# ? Sep 17, 2019 20:46 |
|
I've used this in Senior Living applications for Assessments. https://surveyjs.io/create-survey/
|
# ? Sep 17, 2019 20:56 |
|
My initial train of though ramblings: Your intuition that having people pick multiple goals at once getting confusing fast is a good one. The current workflow of one goal is straightforward, and should be preserved most likely. If it turns out 80% of your users want multiple goals, then it's time to rethink that.
|
# ? Sep 17, 2019 21:25 |
|
I could definitely see a retooling to maybe smooth some rough edges. It's hard to fully get a grasp of how the user is getting into this app and what their expectations are. If it's a very wide open "We help you achieve goals" then I could agree with wanting to tell you my interests up front and never having to pick them again. What if you reshuffled the steps so it was 1 > 3 > 2, and 2 was used to refine the vanilla results? In my head I can picture "Select all that you're interested in" and then getting to a page with kind of a card view where horizontal swipes will cycle between the categories, and vertically would show me my options, with a smooth way to say I need to refine these results by using the prompts in screen 2. Unless you could come up with a universal set of roadblocks that could be applied to all at a base level, and then again reveal a deeper roadblock choice after revealing some results. One thing is for sure, this is a really tricky demo and you are going to have to repeatedly do research, it's critical to getting this right. And you're going to want to get sample of seniors from different environments (urban, rural, burbs, etc.) The Dave fucked around with this message at 00:06 on Sep 18, 2019 |
# ? Sep 17, 2019 23:41 |
|
Thanks for the insight guys! I’ll keep on iterating.
|
# ? Sep 18, 2019 15:35 |
|
I have a big batch of exported content from an old site that needs to be imported into a new site (WordPress). The content is in a CSV, in its raw HTML format. I need to perform some mutations on the content to support the new markup/styles on the site, so for example I need to be able to take a piece of code like this:code:
code:
I'm comfortable in JS and PHP and would rather not learn a whole new language just for this one project. I'm imagining some sort of JS that might use something like jQuery for DOM modifications, but I'm not sure what's the best/smartest way to parse, update and save a CSV. I basically need to be able to target a specific column per row, treat that row's content like HTML so I can easily modify it/get attributes without having to resort to regex hell, and then plop new, modified content in its place. kedo fucked around with this message at 20:13 on Sep 18, 2019 |
# ? Sep 18, 2019 20:10 |
|
kedo posted:I have a big batch of exported content from an old site that needs to be imported into a new site (WordPress). The content is in a CSV, in its raw HTML format. I need to perform some mutations on the content to support the new markup/styles on the site, so for example I need to be able to take a piece of code like this: Depending on how complex these mutations have to be you should be able to do a lot with regex and find+replace in your editor of choice.
|
# ? Sep 18, 2019 20:13 |
|
Null of Undefined posted:Depending on how complex these mutations have to be you should be able to do a lot with regex and find+replace in your editor of choice. Some of them are going to be fairly complex, and if I've learned one thing in all my years of web development, it's to never try to parse HTML with regex.
|
# ? Sep 18, 2019 20:17 |
|
I did something like that a few years back in PHP with DOMDocument: https://www.php.net/manual/en/class.domdocument.php . It's been a while but I used the loadHTML method and then found it was pretty easy to manipulate stuff following the examples. I'm sure NodeJS has something similar.
|
# ? Sep 20, 2019 18:36 |
|
NotWearingPants posted:I'm sure NodeJS has something similar. You are correct! I ended up writing a simple Node script that uses PapaParse to convert CSV data into JSON, and then JSDOM and jQuery to parse and translate the HTML. Thanks for the input, though!
|
# ? Sep 20, 2019 19:00 |
|
The person who first came up with CRUD could have easily gone with CURD instead. I think I would have chosen the later. I wonder if they regret it.
|
# ? Sep 21, 2019 08:07 |
|
NotWearingPants posted:The person who first came up with CRUD could have easily gone with CURD instead. I think I would have chosen the later. I wonder if they regret it. He went with CURD first, then updated it to CRUD before reading his mistake.
|
# ? Sep 21, 2019 08:12 |
|
NotWearingPants posted:The person who first came up with CRUD could have easily gone with CURD instead. I think I would have chosen the later. I wonder if they regret it. They knew all software was poo poo and embraced it.
|
# ? Sep 21, 2019 13:18 |
|
Is it possible to use JS components in a TS React app? Trying to import a custom JS component to a TS one gives me the error "Could not find a declaration file for module [path to my component]". Edit: Decided to rewrite the component to TS, ran into new problems. The component is a custom button, which takes in some props. One of which is a onClick parameter, which it in turn passes on to its button element. Like this: code:
"Type '{ children: string; onClick: () => void; }' is not assignable to type 'IntrinsicAttributes & NavButtonProps'. Property 'onClick' does not exist on type 'IntrinsicAttributes & NavButtonProps'. Do I have to declare onClick somewhere? uncle blog fucked around with this message at 09:55 on Sep 24, 2019 |
# ? Sep 24, 2019 09:23 |
|
You need to add onClick to the NavButtonProps interface
|
# ? Sep 24, 2019 13:36 |
Anyone else suddenly having a problem with the window.print function in Chrome? A few days ago, all of my printing buttons, who call window.print from javascript, abruptly stopped working in Chrome. They still work in Edge, and also, bizarrely, in an incognito window in Chrome. The problem only occurs in a normal Chrome tab. Nothing happens when calling the print function. The print dialog is not shown, and no error message is displayed in the console or anywhere else. CTRL-P works just fine, but I often adjust the layout programmatically before calling print(), so that's not even a good workaround. I know it is not just me since I now am getting calls from clients complaining that their print buttons are not working either. I can't find anyone with the same problem on StackOverflow or anywhere else. I am completely at a loss here. Edit: Clearing cookies and cached data caused the problem to disappear. I would still very much like to know how a cookie and/or cached file can prevent the print dialog from opening. SimonChris fucked around with this message at 17:26 on Sep 24, 2019 |
|
# ? Sep 24, 2019 16:36 |
|
It might have been interesting to try a window.print() from the console to see if the problem might have been with the buttons and not the print function.
|
# ? Sep 25, 2019 03:40 |
|
|
# ? Jun 1, 2024 02:52 |
NotWearingPants posted:It might have been interesting to try a window.print() from the console to see if the problem might have been with the buttons and not the print function. I tested it on a different computer, and window.print() doesn't work in the console either. Clearing "Cookies and other site data" and restarting the browser fixes the problem, both in the console and in code. The problem seems to have appeared simultanously on every computer accessing the live production app. The same app on localhost works fine. Unfortunately, I have now removed the offending data from my office computer and can no longer reproduce the issue. I think I may be still be able to reproduce the problem on a few other machines if anyone have any ideas.
|
|
# ? Sep 25, 2019 09:16 |