12,640 karma · joined August 27, 2014
https://francisco.io/
https://github.com/franciscop
> Fortunately RubyGems.org already provides the same information about gems.
> [...]
> After we unpack the gem, we can discover whether the gem is a native extension or not.
Why not adding the meta information of whether the gem is a native extension or not directly to rubygems.org? You could fully parallelize whole installation trees of dependencies then.
It's one of those explanations that sound very plausible on paper, but if you see real world issues it just doesn't happen, users will ask questions that are clearly explained in the first paragraph of the readme, en masse.
Some times I need to switch to Spain, or Japan, or just disable it due to geo blocking. I use Mullvad, which makes this easier, but TBH the main practical use of my VPN is what you mention, I never want results in Japanese and Google is very bad at getting the hint.
The worst one I keep noticing is MDN, I know there's an article in perfectly fine English but why am I always redirected to the local language one? That's not even location-dependent.
- Documentation: https://server-js.com/documentation#jsx
- Source of the main renderer: https://github.com/franciscop/server-next/blob/master/src/js...
With JSX templating, it's a subset of React, so you can directly share "up"t, and sharing "down" is very easy as well (just removing interaction), since both use the same syntax.
export default server()
.get('/', () => <div>Hello world</div>)
.get(...);
I've been using Bun's JSX transformer as well to do the transpilation, and since it's just a renderer on the backend I don't need to worry about events or hooks, just the rendering step. For this, the article was amazing and I learned a lot.For example, you make an API client library, now you can add polystore and accept multiple cache stores without writing all the compat layer yourself. This is a problem I've had multiple times in the past.
Or you make a project with cache, having it in files for local dev (highly debuggable) and then with Redis in prod is a simple ENV var change:
let store;
if (process.env.REDIS_URL) {
store = kv(RedisClient(process.env.REDIS_URL).connect());
} else {
store = kv(`file://${process.cwd()}/cache/`);
}
I've made many other libraries and projects during the years and having a single library handle all of this would be great.For those as confused as me, I'm on macOS 15.6.1, and it seems for the next version they aligned everything and I do indeed see an update for "macOS Tahoe 26.2". However, I also see a Sequoia 15.7.3 update dated at the same time and together in the same upgrade blog post (and for Sonoma 14.8.3, kudos), so for those that doesn't seem to want to do the jump now into Liquid Glass, that seems available:
https://support.apple.com/en-us/100100
Note: I had to click the [i], then unselect the "macOS Tahoe 26.2" and select the "macOS Sequoia 15.7.3" manually to avoid a full upgrade.
> "Please don't do things to make titles stand out, like using uppercase or exclamation points, or saying how great an article is. It's implicit in submitting something that you think it's important."
> "Otherwise please use the original title, unless it is misleading or linkbait; don't editorialize"
Is there anything I could do to improve this PR/get a review? I understand you are def very busy right now with the acquisition, but wanted to give my PR the best shot:
> 2) Advertise your start time as a quarter-to the hour. If you start an event at 2:00, people won't arrive till 2:30; if you make it 1:45, people will arrive at 2:00.
Needless to say this is highly culture-dependent. I recently threw a dinner at my place in Tokyo, and I had to add the warning:
- Official dinner time was 7pm.
- Told my Southern European friends at 7pm, expecting them to arrive at 8pm.
- Told my Japanese and American friends at 7:30-8, expecting them to arrive at 8pm.
It went much better than expected, everyone arrived within 8pm~8:10pm (okay, except that one friend who is chronically late, but that's a lost cause).
I can imagine in your situation as a pure designer how you got it though though, sorry to hear that and I wish other devs cared more. I've def mentoring people to care about it so hope others do so too.
// /some/path?name=Francisco
const [name, setName] = useQuery("name");
console.log(name); // Francisco
setName('whatever');
Here's a bit more complex example with a CodeSadnbox[2]: export default function SearchForm() {
const [place, setPlace] = useQuery("place");
const [max, setMax] = useQuery("max");
return (
<form>
<header>
<h1>Search Trips</h1>
<p>Start planning your holidays on a budget</p>
</header>
<TextInput
label="Location:"
name="place"
placeholder="Paris"
onChange={setPlace}
value={place}
/>
<NumberInput
label="Max Price ($):"
name="max"
placeholder="0"
onChange={setMax}
value={max}
/>
</form>
);
}
[1] https://crossroad.page/And true to my predictions, I no longer play tennis and I'm only $15 poorer. I don't know the name for this, but the fact that I avoided wasting $150 and only "wasted" $15 into something I knew might be temporary also feels very satisfying.