Обновить
2
Александр@gohrytt

Пользователь

0,1
Рейтинг
8
Подписчики
Отправить сообщение

Вот эти люди которые ставят минусы, вы кто?
Можете как-то по делу отвечать а не просто ср**ь?
Вы типа не согласны что русскоязычные пользователи интернете не влияют на решения?
Вот я новости открываю а в Питере опять белые списки.
Это вы повлияли? Я нет.

Так я не спорю с тем что это может помочь. Мой комментарий про то, что автор слишком узко рассматривает проблему, прямо видно что он никогда не жил нигде кроме США. Вся статья пронизана духом “давайте запретим ИИ”, а это очевидно не может сработать.

Главная концептуальная проблема этого лонгрида на самом деле описана в этом же лонгриде:
Даже если сейчас все умные люди всех демократических стран соберутся и договорятся остановить развитие ИИ, ну вот просто не работать в эту сторону,
даже если на это согласятся владельцы и работники ИИ компаний,
всё равно мы живем в мире где есть достаточно широкий набор государств где граждане не имеют никакого влияния на принимаемые решения.
Я думаю практически каждый русскоязычный пользователь интернета ощущает на себе этот эффект, а есть ещё поднебесная, персия, всяки там Ким Чен Ыны помельче.
И вот эти ребята не будут никак сдержаны ни в развитии ИИ ни в его боевом применении. ИИ угрожает демократии не только в том случае когда сотрудники лишаются работы и не знают чем занятся, ИИ угрожает демократии когда на поле боя появляются дроны с ИИ которые могут и хотят убивать людей заданной расы, нацональности, гендера и так далее.

Ну на подписке за 200 его возможно использовать, он мне даже что-то сделал реально полезное, но да, через 3 дня лимиты сгорают.

Ждём, Fable на моей кодовой базе очень хорошо работает но уж слишком быстро сгорает, может эти смогут

Что-то типа такого да, я не о конкретной сущности спринга. Просто давно заметил что в мире энтерпрайза как в школе есть технари и гуманитарии и большая часть программистов на java - именно гуманитарии.
Нет больше ни одного языка от программистов на которым я бы слышал таки выражения как “выразительность композиции”, “уровень абстракции”, “экспрессивный код” и так далее.
Там где надо взять и написать функцию “Hello world!” сначала возникает класс StdoutGreeter оборачивающий функцию, потом интерфейс Greeter описывающий класс, потом билдер класса, потом фабрика интерфейса чтобы вызывать билдеры, потом обнаруживается что это всё нужно ещё вызвать, а это отдельный интерфейс Program с какими-нибудь вложенными классами и так далее.

Все уже давно знают что если нормально работать с Java это может давать нормальный результат. ActiveJ, например, в состоянии просто взять и использовать существует года 3.
Проблема Java не в том что на нём невозможно написать хороший код, проблема в том что на нём пишут код хуже чем на других языках, плохой код наслаивается на плохой код и никто ничего не делает чтобы как-то изменить эту ситуацию.
Проблема не скорость языка, проблема скорость абстрактной фабрики абстрактных фабрик на java 8 которые пишут в среднем энтерпрайзе.

Выглядит круто, а что по оверхеду на всю эту красоту?

Представьте, что завтра станет нужно много детских учителей. Вот прямо в 10 раз больше, чем есть сейчас. И платить им будут в 10 раз больше. Вместе с профессионалами, которые должны и любят учить детей, в профессию придут люди, которые не любят свою работу. Они будут натягивать улыбку, заставлять себя ходить на уроки, а в душе ненавидеть преподавание, всех этих нелепых коллег и, собственно, детей.

А за выборами столько же камер будет следить?

Всю статью можно собрать до “мы дали евреям немного шекелей чтобы они нас похвалили публично”.

Так давно же стало всё плохо хаха, либо пытаться идти на постоянную работу либо автоматизация заказов по 1500 через ии где возможно

Ну тут вопрос в том оптимизировали на 40% размер бандла вк или внутренней админки. В каком-нибудь вк в котором страницы по 20 мегабайт по несколько минут грузятся это было бы классным достижением, в админке - как будто бесполезно. Но строчку напишут все потому что не хотят вылететь по автофильтрам

"Почему в споре iOS vs Android никто не говорит о главном?"
О Аврора ОС? (простите)

Потому что в США не было такого бума новых продуктов у крупных компаний, были в основном стартапы, которые традиционно на джс/пхп/etc.

Про Китай не знаю много, но я бы не сказал что там не так потому что как минимум bytedance активно использует go и развивает инфраструктуру вокруг go.

В России го популярен потому что момент стабилизации го совпал с моментом ковидного бума айти и повального создания или внедрения новых продуктов в крупных компаниях.
Количество джавистов было ограничено, плюс все к чему притрагиваются джависты через день превращается в легаси, а го оказался достаточно простым чтобы переучить на него более массовых питонистов и пыхеров чтобы получить нормальных разрабов по нормальной цене и быстро.

Вся статья выглядит как нытье старого джависта котого заставили выучить го

Потому что терминальный клиент Claude Code реализует ACP и подразумевает интеграцию по этому протоколу с любой IDE которая приложит к этому усилия, как например Zed

Ух ты, мы с вами буквально одну и ту же проблему решили, только я нигде не публиковал кроме корп репозитория. Чуть проще:

package graceful

import (
	"context"
	"time"

	"go.uber.org/multierr"
)

type (
	GroupConfiguration struct {
		Timeout time.Duration `name:"TIMEOUT" default:"30s"`
	}

	TimeoutOption time.Duration

	Group struct {
		configuration *GroupConfiguration
		ctx           context.Context
		cancel        context.CancelFunc
		errors        chan error
		closers       []closer
		wait          uint64
	}

	Resource[T_resource any] struct {
		group    *Group
		resource *T_resource
	}

	Task[T_resource any] func(context context.Context, resource *T_resource) error

	closer struct {
		resource any
		task     any
		wrapper  func(ctx context.Context, resource, task any, errors chan error)
	}
)

func New(ctx context.Context, configuration *GroupConfiguration) *Group {
	ctx, cancel := context.WithCancel(ctx)

	return &Group{
		configuration: configuration,
		ctx:           ctx,
		cancel:        cancel,
		errors:        make(chan error, 1),
	}
}

func WithOptions(ctx context.Context, options ...any) *Group {
	configuration := &GroupConfiguration{
		Timeout: 30 * time.Second,
	}

	for i := range options {
		switch typed := options[i].(type) {
		case TimeoutOption:
			configuration.Timeout = time.Duration(typed)
		}
	}

	ctx, cancel := context.WithCancel(ctx)

	return &Group{
		configuration: configuration,
		ctx:           ctx,
		cancel:        cancel,
		errors:        make(chan error, 1),
	}
}

func (group *Group) Context() context.Context {
	return group.ctx
}

func (group *Group) Wait() error {
	<-group.ctx.Done()

	ctx, cancel := context.Background(), context.CancelFunc(nil)

	if group.configuration.Timeout > 0 {
		ctx, cancel = context.WithTimeout(ctx, group.configuration.Timeout)
	}

	for _, closer := range group.closers {
		go closer.wrapper(ctx, closer.resource, closer.task, group.errors)
	}

	errors := []error(nil)

cycle:
	for group.wait > 0 {
		select {
		case <-ctx.Done():
			break cycle
		case err := <-group.errors:
			if err != nil {
				errors = append(errors, err)
			}
		}

		group.wait -= 1
	}

	if cancel != nil {
		cancel()
	}

	return multierr.Combine(errors...)
}

func AddResource[T_resource any](group *Group, resource *T_resource) Resource[T_resource] {
	return Resource[T_resource]{
		group:    group,
		resource: resource,
	}
}

func (resource Resource[T_resource]) OnStart(task Task[T_resource]) Resource[T_resource] {
	resource.group.wait += 1

	go func(resource Resource[T_resource], task Task[T_resource]) {
		err := task(resource.group.ctx, resource.resource)

		resource.group.cancel()
		resource.group.errors <- err
	}(resource, task)

	return resource
}

func (resource Resource[T_resource]) OnClose(task Task[T_resource]) Resource[T_resource] {
	resource.group.wait += 1

	wrapper := func(ctx context.Context, resource, task any, errors chan error) {
		errors <- task.(Task[T_resource])(ctx, resource.(*T_resource))
	}

	resource.group.closers = append(resource.group.closers, closer{
		resource: resource.resource,
		task:     task,
		wrapper:  wrapper,
	})

	return resource
}
package notifier

import (
	"context"
	"errors"
	"fmt"
	"os"
	"os/signal"
)

type (
	Notifier struct {
		signals  []os.Signal
		receiver chan os.Signal
	}
)

var (
	ErrSignalReceived = errors.New("signal received")
)

func New(signals []os.Signal) *Notifier {
	return &Notifier{
		signals:  signals,
		receiver: make(chan os.Signal, 1),
	}
}

func OnStart(ctx context.Context, notifier *Notifier) (err error) {
	signal.Notify(notifier.receiver, notifier.signals...)

	select {
	case <-ctx.Done():
		return nil
	case signal := <-notifier.receiver:
		return fmt.Errorf("%w: %s", ErrSignalReceived, signal.String())
	}
}

func OnClose(ctx context.Context, notifier *Notifier) (err error) {
	signal.Stop(notifier.receiver)
	return nil
}

Очень сильно упростило жизнь менее опытных коллег и меня когда за этими менее опытными коллегами надо переделать graceful shutdown.

Это не очевидно из синтаксиса.
Если я передаю строку я рассчитываю передать именно строку а не владение строкой.
Специальный синтаксис должен быть для передачи владения а не для передачи строки дописывать указатель, который ещё и не бесплатный и может нарушить заложенный алгоритм.

Так он и должен быть допускаемым значением для всех ссылочных типов.
Null - это 0. Вы сейчас говорите а давайте заведем специальный тип чисел который может быть чем угодно кроме нуля. Это некорректно, это логическое ограничение а не техническое. И обрабатываться оно должно как часть логики а не техники. Это мы опять решаем софт проблему хард методом.

1
23 ...

Информация

В рейтинге
4 092-й
Откуда
Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность