20 random bookmarks
Тут будут ссылки на всё-всё, что я найду интересным
Тут будут ссылки на всё-всё, что я найду интересным
Beautiful, Modern & Opinionated Linux by DHH
Алекс Хитеч подкидывает документы компании, которая забыла, как устроен её завод.
Skip brings Swift app development to Android
Equity or cash? These days, it seems that working for equity is the way to become a millionaire. I don't think it's true.
Programmers are expensive and difficult to control; here are a few tricks to keep them underpaid and happy, for a while.
The easiest way to configure a performant, secure, and stable NGINX server.
For me, this imagined audience is more important than getting it right. Which is why I write my blog posts with the wiki spirit. All these sites are pretty similar, in essence. Blog, wiki, digital garden, Zettelkasten, there’s not enough difference to draw lines. It’s all a question of intent, of culture, of belonging. The blog spirit is to write pages over time, and they disappear into the archive. The digital garden spirit is to write unfinished articles and papers, to be refined or not. The Zettelkasten spirit is to follow the trail of thoughts you thought and add new branches, small notes with new thoughts leading to more thoughts on new notes. And the wiki spirit is to write and edit online, to hit the Save button and then it’s live. There is no editor, there is no draft. Wiki is like brutalism in content management. I can see the page sources and the end result is obvious and full of that old web power. It’s not an app. The software has no idea of process. The wiki spirit is to open that window, write the text and hit save. And then I read it again, and edit it. And tomorrow, I read it again, and edit it. And next week, perhaps, I read it again, and edit it.
I no longer live in the Wiki Now. The pages are intended for future readers but they are not timeless. I add timestamps all over the place. The blog spirit is strong. The pages do disappear into the great compost of thoughts. The archive gobbles them up. I do go back but I don’t rewrite the pages completely. I’m more likely to simply add a timestamp and some thoughts like I did on this page.
package src
type config struct {
// Required
foo, bar string
// Optional
fizz, bazz int
}
// Each optional configuration attribute will have its own public method
func (c *config) WithFizz(fizz int) *config {
c.fizz = fizz
return c
}
func (c *config) WithBazz(bazz int) *config {
c.bazz = bazz
return c
}
// This only accepts the required options as params
func NewConfig(foo, bar string) *config {
// First fill in the options with default values
return &config{foo, bar, 10, 100}
}
func Do(c *config) {}
You’d use the API as follows:
package main
import ".../src"
func main() {
// Initialize the struct with only the required options and then chain
// the option methods to update the optional configuration attributes
c := src.NewConfig("hello", "world").WithFizz(0).WithBazz(42)
src.Do(c)
}
Luxury beliefs have, to a large extent, replaced luxury goods.
Luxury beliefs are ideas and opinions that confer status on the upper class, while often inflicting costs on the lower classes.
на примере Питера мы сделали свою карту гулябельности.
PRQL is a modern language for transforming data
Интересная замена SQL. Запросы для аналитики данных станет писать намного проще. Не думаю, что для чего-то другого этот проект подойдёт. Условный CRUD проще написать, используя именно SQL запросы, здесь PRQL излишен.
Заметки о том, как писать и оформлять код на Си
Видео о том, как писать понятный код