Ычан: [d | au / b / bro / hr / l / m / mu / o / s / tran / tu / tv / vg / x | a / aa / c / fi / jp / rm / tan / to / vn]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 25965)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, WEBP, XCF, ZIP размером до 5000 кБ.
  • Ныне 3602 unique user posts. Посмотреть каталог
  • Предельное количество бампов нити: 500
junior_developer_nene.png - (648.30KB, 720×720)
25965
No. 25965  
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

Не знаете, какой язык и библиотеки взять для вашей задачи? Вам сюда.
Не знаете, где клиент, а где сервер? Вам сюда.
Не понимаете, что такое ООП? Вам сюда.
Написали код, и не понимаете, почему не работает? Вам сюда.
Обнаружили кусок кода, и не понимаете, как оно вообще могло работать? Вам тоже сюда.
Не знаете, как подступиться к проблеме? Вам обязательно сюда.

Другие тематические нити (иногда обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены. Для подобных вещей теперь есть отдельная диспутов нить >>/dev/21353

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять FAQ и базу знаний.

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html
http://410chan.org/dev/arch/res/19666.html
http://410chan.org/dev/arch/res/21641.html
http://410chan.org/dev/arch/res/23830.html

Прошлая нить пока тонет тут: >>/dev/23830
366 сообщений пропущено. Показаны 50 последних сообщений
No. 27144  
lambda.png - (19.70KB, 1259×311)
27144
Чиочан, помоги.
https://paste.ofcode.org/KURH65fFQZTNgcgkPjDZWH
Написал лямбду для рекурсивного удаления папок, но не смог сделать ее рекурсивной без передачи аргумнета self. Если его убрать и вызывать лямбду по имени, то получается ошибка Variable 'removeDir' declared with deduced type 'auto' cannot appear in its own initializer.
Что я делаю не так? Я видел примеры рекурсивных лямбд без селфа, но у меня они не работают.
No. 27145  
>>27142
Спасибо!

>1. Правильный. Добавить к аннотации @Inherited, а затем дополнительно поменять механизм внутри мода, который достает аннотацию @PipeEventPriority так, чтобы он мог ее и для метода достать.

В общем, если форкать BuildCraft всерьёз (а там, вообще, вещей, которые стоило бы поменять, довольно много...), то курить нужно именно это.
Ясно, будем трясти...

>2. Простой. Сделать в производных классах метод-прокладку, который будет дублировать cаму аннотацию, но не код

Ну, до такого я уже и сам додумался.
Лишь немного сгладить то безобразие, которое там у меня сейчас...
No. 27146  
>>27144
Проблема в том что компилятор не может взять и узнать тип твоей рекурсивной лямбды заранее. Надо ему помочь.
Прочитав вот эту статью там кстати склоняются в пользу self:
https://artificial-mind.net/blog/2020/09/12/recursive-lambdas

Мне удалось помочь компилятору вот таким способом:
>using removeDir_t = bool(*)(const QString&);
>static removeDir_t removeDir = [](const QString &dirName) {
>...
>}
Что убирает ошибку при компиляции, но не уверен что в твоем случае этот способ применим.
Ждем советов от людей лучше понимающих в С++
No. 27148  
>>27145
>Спасибо!
Заходи, если что.
No. 27152  
>>27146
Спасибо за ответ.
No. 27153  
Почему sizeof объекта, содержащего только методы, возвращает 1, хотя если сделать sizeof указателя на метод объекта, будет возвращен валидный размер указателя? Разве указатели на методы не в классе хранятся?
No. 27155  
>>27153
Потому что если метод не виртуальный, то соответствующая функция точно известна уже на этапе компиляции и держать какую-то дополнительную информацию в объекте не нужно.

Если же класс будет иметь хотя бы один виртуальный метод, то объекты класса станут хранить указатель на соответствующую таблицу виртуальных методов, определяющую вызываемую функцию во время исполнения. Тогда размер объекта будет больше ровно на один указатель.
No. 27156  
>>27155
Кстати, я не учел выравнивание, поэтому слова про ровно один указатель - в некоторых случаях неправда.

Например, класс
class A {
сhar c;
};

будет иметь размер один байт, а класс

class B {
char c;
virtual void foo();
}

может иметь размер не 9 байт, а 16, чтобы быть кратным 8.

Сложно, да.
No. 27157  
>>27152
Надеюсь, от ответа была польза.
No. 27158  
>>27155
То есть, обычные методы класса хранятся не в классе, а как обычные функции? А как тогда разграничивается доступ этих функций к данным, которые private?
No. 27160  
>>27158
Да, в документации их так и называют - функциями-членами (member function).

Разграничивается ошибками компиляции.
No. 27161  
>>27160
Нет, я имею в виду, как компилятор узнает, что какие-то данные для такой-то функции доступны или нет, если функция никак не привязана к классу?
No. 27162  
>>27161
Ты путаешь происходящее на этапе компиляции и выполнения.

Компилятор знает о твоих функциях то, что ты написал в исходнике. Ты определил функцию как метод класса — он это знает. И ему нет никакой нужды хранить эту инфу внутри твоей программы.
И все модификаторы доступа проверяются именно компилятором, именно на этом этапе.

Если же ты уже в процессе работы твоей программы каким-нибудь хитрым путем получишь указатель на приватный метод — ты сможешь его вызвать. И никто тебя не остановит.
Другой разговор, что такой "хитрый путь" наверняка будут неопределенным поведением [нe]работающим совершенно по-разному в зависимости от компилятора, системы, фазы луны и т.д. Но это к делу не относится.

А вот с виртуальными функциями компилятор не может знать, какую из них вызвать. Это должна решать сама программа. Потому таблица указателей на них сохраняется в самом классе и используется программой. Уже на этапе исполнения.
No. 27163  
>>27162
Теперь понятно, спасибо.
No. 27217  
Безымянный.png - (32.84KB, 909×388)
27217
>>25965
Здрасьте, инкогнито!

Я использую flecs (ecs -- entity component system https://www.flecs.dev/flecs/ ), и там нужно задавать компоненты сущности (аналог в ООП -- создать поле классу/структуре) типом данных, а не переменной.
Пример:
flecs::entity e = world.entity();

e.set<float>(33.f);
*e.get<float>(); // вернёт 33.0f // с другими типами данных, в том числе и с классами и указателями, всё аналогично.


Цель: хранить две разных инфы с одинаковым простым типом.
Сейчас я использую в качестве компонентов
float
и
struct { float value; };
.

Есть ли способ решить эту проблему более простым (менее громоздким/неудобным) ?
C++
No. 27218  
>>27217
>пикрил
*типы структур (два разных класса), а не их экземпляры.
No. 27221  
>>27217
>>27218
>Цель: хранить две разных инфы с одинаковым простым типом.
Не уверен, что в этом контексте фреймворк как-то разделяет простые типы и составные.

Пока нашел вот такую дискуссию на счет мультивхождений:
https://github.com/SanderMertens/flecs/discussions/971

Но в целом ждем подсказку от кого-нибудь кто хорошо знает этот фреймворк.
No. 27222  
>>27221
>Не уверен, что...
Не в этом суть.

Просто два разный класса -- два разных класса, и проблем с хранением данных проблем нет:
struct vel {float x; float y;};

struct pos {float x; float y;};

entity.set<vel>({5; 0;});  //  теперь компонент типа vel равен {5; 0;}
entity.set<pos>({0; 0;});  //  теперь компонент типа pos равен {0; 0;}

Но как быть с простыми типами, которым нельзя сделать "копию":
int month = 13;
int day = 28;

//add<typename>() -- добавить компонент ("поле" сущности) типа 'typename'.
//set<typename T>(T value) -- добавить компонент (если отсутствует) типа 'T' и установить в него значение.

entity.add<day>(); // ошибка: переменная -- не тип данных.
entity.set<int>(day); // теперь компонент типа int равен перем. day.
entity.set<int>(month); // теперь компонент типа int равен month.


Есть ли способ получше, чем прибегать к созданию 
struct month {int v;};
 для возможности хранить и 
int day
 и 
int month
?


Впрочем, можете забить.
Я просто интересовался, можно ли сделать копию простого типа, наподобие 
class myclass : float` или иным способом.
No. 27224  
>>27222
А, я неправильно понял, подумал что тебе не хотелось придумывать каждый раз новый класс под новое поле.

>Есть ли способ получше, чем прибегать к созданию struct
Вижу несколько.
Первый - подключить BOOST_STRONG_TYPEDEF:
https://www.boost.org/doc/libs/1_46_1/libs/serialization/doc/strong_typedef.html

>BOOST_STRONG_TYPEDEF(int, year)
>BOOST_STRONG_TYPEDEF(int, month)
>BOOST_STRONG_TYPEDEF(int, day)

Второй - попробовать enum class:
https://stackoverflow.com/a/52495164

>enum class year : int;
>enum class month : int;
>enum class day : int;
No. 27226  
>>27224
Спасибо большое, Синьор!
No. 27227  
>>27226
Си, Синьор! Заходи если что.
No. 27254  
Безопасно ли в скрипте делать инкремент апдейтом в MySQL Innodb без транзакции?

INSERT IGNORE INTO mycounters (идентификатор, counter) VALUES ('$id', 0);
UPDATE mycounters SET counter = counter + 1 WHERE условиеПоИдентификатору;

Если одновременно два человека зайдут, что произойдёт? Могут ли два одновременных апдейта заинкрементить счетчик только один раз?

Никаких SET SESSION TRANSACTION ISOLATION LEVEL и т.п. перед апдейтом не делается.
Подключение к базе стандартное: dbi:mysql:название:localhost:3306.
Вроде бы, при таком подключении работает автокоммит с уровнем изоляции REPEATABLE READ.
No. 27258  
>>27254
Насколько я понимаю, для счетчика ты просто выделил отдельную табличку, и инкрементишь там колонку. Если так, то без транзакции:

>Если одновременно два человека зайдут, что произойдёт?
Счетчик заинкрементится 2 раза

>Могут ли два одновременных апдейта заинкрементить счетчик только один раз?
Насколько я знаю, в твоем случае - нет, вот такой инкремент как у тебя указан это атомарная операция

Тебе так и нужно, или ты хочешь чтобы было как-то по-другому?
No. 27259  
>>27258
>Счетчик заинкрементится 2 раза
>это атомарная операция
>Тебе так и нужно, или ты хочешь чтобы было как-то по-другому?
Так и нужно, спасибо.
No. 27263  
Дорогие пассажиры, я, желая стать фронтендеромна реакте, написал калькулятор и даже залил его на гитхаб. Где и как мне получить оценку своего умения?
No. 27264  
>>27263
Я вот, мечтая стать знаменитым автором популярного опенсурс проекта, вливаю реальные деньги в Директ, считая конверсией переходы в гитхаб, PyPI, страницу документации. Нормален ли я? Не думаю. Не будьте как я. Наверно в твоем случае лучше вкинуть сюда ссылку на свой гитхаб, смирившись с легким деаноном.
No. 27265  
>>27264
>Директ, считая конверсией переходы в гитхаб, PyPI, страницу документации.
ЯННП.
>Наверно в твоем случае лучше вкинуть сюда ссылку на свой гитхаб, смирившись с легким деаноном.
Что ж, я надеюсь, не зря.
https://github.com/Apusqispay/calculator
No. 27266  
>>27265
>ЯННП
Реклама в Яндекс.Директе с оплатой за конверсии, а конверсии у меня — это onmousedown и ontouchstart на некоторых гиперссылках на странице моего сайта, куда ведут рекламные объявления.

Пока один привлеченный человек, который хотя бы клонировал репозиторий, примерно в 500 рублей выходит.
No. 27267  
>>27266
В какой области проект? прост интересно
No. 27268  
>>27265
/dev совсем опустел?
No. 27269  
>>27267
Небольшой скрипт-обёртка над FFmpeg, который хорош в том, чтобы без присмотра объединять папку или папки с последовательностями кадров в видеоролики. Это был такой необычный способ организовывать видеонаблюдение, который возник скорее из-за того, что фиксируемые процессы были достаточно медленными, чтобы видеопоток с камер стал горой лишней информации. Однако даже редкие кадры потом надо хранить, и кидеокодеки идеально для этого подходят.
No. 27270  
>>27265

По поводу организации коммитов:

Ты создал приложение скорее всего как-то автоматически, получив много бойлерплейтного кода, затем внёс туда изменения и всё это выложил одним комитом. Теперь сложно сказать, где твои изменения, а где бойлерплейтный код. Это усложняет ревью. Хоть делать миллион коммитов также плохо, на будущее, лучше разделять комиты под автоматически созданный код, рефакторинг (какие-то переименования в проекте, особенно если их много сразу и есть возможность сделать это отдельно, что бывает не всегда), целевые изменения. С целевыми изменениями сложнее всего, ведь часто есть соблазн либо сделать две задачи параллельно, либо фиксировать каждое микроскопическое изменение. От второго помогает git rebase (действие называется squash, squashing).
No. 27272  
>>27270
Всё, написанное мной относится только к компоненту Calc.
Не понял про rebase, какой в нём толк, если я это один всё делал без веток?
No. 27273  
>>27272
Я просто его упомянул про обратную ситуацию, когда кто-то делает много коммитов (как раз без веток, просто подряд), а потом хочется некоторые коммиты (идущие подряд) объединить. Вот это как раз делается командой squash.
No. 27274  
photo_2023-09-18_13-51-11.jpg - (163.57KB, 1280×997)
27274
Я пилю свой проект, и столкнулся со странной штукой.
C# + .NET 7 + EF Core, Code First.

У меня есть БД SQLite, в которой хранятся сущности:

GUID ObjId
string BirdName
DateTime DetectionDate
double Confidence

Если я делаю через Web API реквест, мол, дай (или удали) мне запись с таким-то string ID, то при совпадении я получаю null в кач-ве ответа. Если поменять в модели тип ObjId с GUID на string и подкорректировать код, то всё работает корректно.

Нашёл issue на гитхабе похожее: https://github.com/dotnet/efcore/issues/19651

Так вот, какие проблемы с производительностью в плане поиска я встречу, если поменяю GUID на string? В базе 50000 записей, скажем. Железо - одноплатник на aarch64, 4 * Cortex-A53 1.2GHz, оперативки мало, 1 гигабайт. Диск - MicroSD карта.

И хочу получить советы, как лучше парсить, ну, 25к текстовых файлов весом до 10кб? Собирать в единый файл и парсить, или лучше по очереди? Или пофиг, всё равно не замечу разницы?
No. 27275  
>>27274
Ну, в SQLite нет типа GUID, и такое значение хранится скорее всего итак как строка или blob (сравнивается через memcmp).

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

Так или иначе, любой первичный ключ в SQLite, кроме INTEGER, будет колонкой с уникальным индексом B-Tree, которая возможно при построении запросов будет дергать еще внутренний rowid, который суть тоже B-Tree.

Я не специалист, но склоняюсь к тому, что разницы между блобом и строкой в качестве первичного ключа на стороне СУБД не будет.

А вот если преобразовывать между строкой и массивом двух long'ов для миллионов записей в сишарпе, возможно почувствовается, но загружать в ORM миллионы записей из базы вообще нежелательно. Если можно провести какую-то логику простым апдейтом на стороне СУБД, производительнее делать так.
No. 27276  
>>27274
> как лучше парсить, ну, 25к текстовых файлов весом до 10кб? Собирать в единый файл и парсить, или лучше по очереди?

Это шутка наверно? Конечно, бывают разные парсеры. Например, для XML есть SAX-парсеры, которые делают потоковый разбор и не требуют загрузки всего файла в память перед разбором. Допустим, у нас что-то вроде этого. В чем потенциальный профит объединения мелких файлов в один большой перед разбором? Разгрузить файловую систему?
No. 27277  
>>27273
Хорошо.
Но что насчёт самого кода?
No. 27278  
>>27276
Да нет, почему шутка? У меня обработка результатов (текстовые файлы мелкие от нейронки) за сутки и закидывание их в БД занимает секунд 8-10 на моём одноплатнике. Я делаю средствами языка чтение, хотя ради мемов сделал чтение вывода cat filename - конечно, быстрее средствами языка (streamReader и потом ReadToEnd) примерно в 2.5 раза.
А потенциальный профит, если подумать, никакой - всё равно что так заглядывать во все файлы и собирать в один, что так заглядывать внутрь файлов (только не парсить потом целый текстовый файл).

>>27275
Спасибо. Я вообще попробую к весне доделать приложение (фронтэнд хоть какой-то) и уже "в поле" его потестить весной ранней (март) - оставить в деревне с микрофоном у крыши на пару недель, чтоб слушало птичек и распознавало их по голосу. Но сначала надо сделать норм интерфейс, обработку результатов, инструкцию написать норм, все дела. Бэкенд есть, но вот использовать его крайне тяжело.
No. 27288  
У меня вопрос не сколько по языкам, сколько по треку самообучения и тому, в какую сторону двигаться сейчас.

Я изучаю .NET, C#. У меня есть проект личный, который мне интересен - ASP.NET Core + EF Core, но идея проекта не супер заезженная. А ещё у меня есть опыт работы сисадмином в 2.5 года, и интерес к ковырянию в линуксах и вообще железках - дома небольшой сервер крутится на aarch64: сервисы в контейнерах, всё за nginx, https, фаерволл. Как считаю, неплохо всё сделал.

И... я не знаю, куда двигаться, чтоб взяли какможно быстрее. В DevOps я знаю, что это не роль податься, или продолжать искать работу дотнетчиком?

Чот я прям в тупике: мне всё интересно, но куда именно двигаться, я не понимаю. Всё одинаково интернсно.

Пока что у меня такая мысль: я допиливаю до определённого состояния свой проект на дотнете и парралельно пишу резюме под DevOps, вкидываю на hh, а там как повезёт. Возьмут девопсом - будет супер, возьмут разработчиком - тоже неплохо.
No. 27289  
>>27288
>чтоб взяли какможно быстрее
Чтоб взяли как можно быстрее на работу.

По хорошему, мне Ansible надо попробовать и CI/CD поглубже изучить для того, чтобы попасть на позиции в городе/удалёнке.

Искать работу - это больно.
No. 27290  
>>27288
А дотнетите вы на линуксах? Если да, то как оно?
No. 27291  
>>27290
Дотнечу на линуксах, да.

Вроде боли нет особой. VSCode + dotnet cli для всего остального. Потом пушу в гитхаб, потом деплою себе на одноплатничек на армбиане.
No. 27298  
Побегал на собесы на сисадмина.
По сути, именно эникея: обслуживание компьютеров, немного серверов, которые уже настроены до меня. Тупая, монотонная работа, в общем. Но я её знаю, поэтому будет время учиться дальше и искать работу дальше.

Собесы делятся на три вида:
1. С тупыми вопросами.
>Чем отличается расшареный принтер у ПК от принтера, который подключён через сетевой кабель
Тем, что принтеру без ПК не нужен человек.
>Зачем нужен BIOS
Чтобы включить компьютер! Ответы про самодиагностику железок, настройки, boot order встречали ответ в духе "слишком глубоко копаешь"
>Чем отличается NTFS от FAT32
Ожидали получить ответ в духе "NTFS на дисках, FAT32 на флешках"
2. С вопросами уровня "почему были изобретены IP, ведь есть MAC-адреса?"
мой ответ про разделение и удобство не прошли, хотя, конечно, странный вопрос на техподдержку. и "Опиши, как идёт запрос к сайту от сетевой карты до DNS-сервера у провайдера? Считай, что попадание в кэш есть." Не помню, какой ответ ожидался, но там что-то про MAC в IP, потом как роутер общается с оборудованием провайдера и т.д.
3. С тупыми и умными вопросами вперемешку.
Таких собесов больше всего.%%

Пока что взял перерыв просто придти в себя, а так устраиваюсь на норм предложенную работку, пусть и эникеем. Сейчас джуном найти работу нереально, у меня просто кончились деньги.
No. 27299  
>>27298
> Зачем нужен BIOS
Это устаревшая технология, на смену которой пришла UEFI. Купить в случайном магазине компьютер с BIOS (без UEFI) нельзя уже лет десять.
No. 27301  
168728502991.webp - (446.68KB, 800×800)
27301
>>27299
>Это устаревшая технология, на смену которой пришла UEFI.
И это упоминал, но только толку... На глупый вопрос ожидают глупый ответ. Доказывать что-то на собесе человеку, который не хочет дискуссию вести - лучший способ провалить собеседование.

А так предложили эникеем на 45 тыс рублей/70 тыс рублей пойти, решил согласиться. Но вообще оставаться крутить хвосты компьютерам смысла нет, как и идти в DevOps не очень хочу, так что качать скиллы и прочее буду, как освоюсь.
No. 27302  
Чиочан, как в Дебиане задать переменные окружения, чтобы они были видны для всех пользователей и процессов?
Для рута работает прописать в .bashrc, для пользователей - нет, если пытаться удаленно через файловый менеджер пытаться подключаться и работать.
Куда-нибудь в rc.d, может быть?
No. 27303  
>>27302
https://help.ubuntu.com/community/EnvironmentVariables#System-wide_environment_variables

Скорее всего тебе нужен
/etc/environment
.
No. 27304  
>>27303
Пробовал, но почему-то не подхватывается.
No. 27305  
>>27304
В новой сессии-то пробовал? Уже работающие процессы, в том числе оболочки, никак не могут это подхватить.
Удалить сообщение []
Пароль  
[Mod]