LINUX.ORG.RU
ФорумTalks

Вышла в свет «компьютерщик 0.1»

 , ,


2

4

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

  • Добавление нового клиента и добавление о проделанной работе.
  • Просмотр выполненных работ клиента.
  • Сведения о заработке.
  • Создания таблиц для правильной работы программы.
  • Интуитивно понятный интерфейс.
  • Поиск по ключевым словам.

Перед началом работы нужно создать базу данных «programmer», пользователя «programmer» и пароль «programmer». Потом запустить программу и нажать на кнопку «Создать таблицы». И всё, можно приступать к работе. Для каждой работы можно установить процент, который тебе обещают выплатить. В «Заработок» можно посмотреть сколько заработал ты, сколько компания, и сколько всего было выплачено клиентами.

Подробности

Перемещено Aceler из opensource



Последнее исправление: u0atgKIRznY5 (всего исправлений: 2)
Ответ на: комментарий от d_a

который не работает по факту.

Работает. Но с новыми аккаунтами.

В некромодерации ничего хорошего нет.

Deleted
()
Ответ на: комментарий от theNamelessOne

Как правильно инъекцию провести, чтобы программа не вылетела. Я так то знаю что это такое. Но не пользовался. Напиши строку, а лучше сначала у себя проверь, чтобы сработало сначала у тебя, а потом у меня. А то я начинаю думать, что ты тоже только знаешь о sql-injection, но ниразу не проводил инъекцию.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от redgremlin

Это фирменный стиль программирования ТС.

Ага, я в курсе его стиля. Он строго выдерживает этот стиль во всем.

andreyu ★★★★★
()
Ответ на: комментарий от theNamelessOne

Раз уж ты запел насчёт инъекций? То вот например такой был да Robert'); drop table clients;--, а если я символ ' заменю на ноль, тогда строка будет передаваться только Robert, есть ли ещё способы инъекций?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

А то я начинаю думать, что ты тоже только знаешь о sql-injection, но ниразу не проводил инъекцию.

Ох лол, ну ладно.

theNamelessOne ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

То вот например такой был да Robert'); drop table clients;--, а если я символ ' заменю на ноль, тогда строка будет передаваться только Robert

Тебе нужно не просто заменять один символ на другой, а либо экранировать весь пользовательский ввод вручную (хуже), либо использовать prepared statements (лучше). Для этого во всех библиотеках есть стандартные средства, например, экранирование и prepared statement для MySQL. А вот это — костыли и полумеры.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)
Ответ на: комментарий от theNamelessOne

либо использовать prepared statements

Prepared statements это читерство. С ними любой может написать нормальный код. Настоящие программисты экранируют строки вручную. Mysql_real_escape_string — для слабаков.

i-rinat ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Я уже давно добавил вот такой код

«Давно», лол, за сорок минут до моего сообщения.

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

theNamelessOne ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Кстати, я сам не сишник, но разве в Си для функции, которая не принимает аргументов, по стандарту не должна быть сигнатура return_type func(void);? И вроде бы с пользовательским вводом использовать sprintf вместо snprintf — не есть хорошо? Ты не боишься переполнений буфера?

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

не есть хорошо? Ты не боишься переполнений буфера?

Не боюсь.

  • Считать не надо сколько нужно для буфера.
  • Для каждого gtk entry есть ограничение, где нужно вписать значение. Даже если заполнить все строки, то их не хватит, чтобы переполнить буфер.

по стандарту не должна быть сигнатура return_type func(void);?

Ну я бы её использовал, если бы в коде нужно было бы выйти из функции, чтобы не продолжать выполнение. Но если не надо прежде временно выходить, то и return не обязательно, но про стандарт я незнаю.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от theNamelessOne

Про дизайн базы данных я даже боюсь заикаться.

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

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

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

Не понял, зачем тут для каждого клиента своя таблица, но для таких вещей используют джойны и внешние ключи. Но вот то, что у тебя 16 булевых полей с названиями punkt* — вот это явный признак того, что с БД у тебя всё плохо. Так что почитать какую-нибудь литературу, в которой будут системно объяснять особенности проектирования БД и лежащию за ними реляционную алгебру, я сильно рекомендую.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Я как то читал какую то книгу, но не дочитал даже половины. Но вспоминаю то, что было очень полезная информация, как создавать базы, как распределять данные по таблицам на примере школы вроде сначала. Блин. Я бы её может быть почитал бы, но не помню как она называется. А ты бы что порекомендовал?

Всё же я думаю что punkt* это нормально, потому как не важно как пункт называется, главное чтобы он хранил нужное значение и отдавал в массив. Так с ним легче обращаться, написал кучу punkt в select, и не надо париться.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от Meyer

Да, укради еще пивас-студио (если они не дают бесплатно лицензии для энтузиастов СПО), лишним не будет.

Для энтузиастов СПО есть же Coverity Scan, на которую даже молиться в комментариях не надо.

hobbit ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

GTK - это библиотека сугубо для UI. Qt - целый фреймворк, там и GUI, и сеть, и БД те же и дохрена ещё.

Например, твой исходник привязан к MySQL. Если тебе понадобится сделать ещё поддержку SQLite, придётся либо писать много повторяющегося кода, либо городить СУБД-независимую абстракцию. В Qt такая абстракция уже есть, QtSql. СУБД поддерживаются через драйверы. Удобная связь с отображением через SQL-модели.

(На практике, конечно, не всё так шоколадно. Я делал проект, работающий в SQLite и PostgreSQL. Некоторые SQL-запросы таки отличались синтаксисом, а для логики, которая в PostgreSQL отрабатывала на стороне сервера, пришлось делать клиентскую реализацию на C++. Но в целом унификация и облегчение очень заметное.)

hobbit ★★★★★
()
Ответ на: комментарий от Meyer

LGPL вроде позволяет только динамически линковать

Это распространённое заблуждение. Достаточно дать пользователю возможность перелинковать проект с другой версией Qt, для чего можно, например, предоставить объектные файлы. Но на самом деле это мало когда актуально. Если исполняемых файлов и библиотек, использующих Qt, в проекте больше 1-2, динамическая линковка уже оказывается более экономной.

hobbit ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Вот и думаю, что ты отстаиваешь свою позицию, потому что полюбил красоту эффектов и пожирания памяти на 2 гига, когда как на gtk требует 324 мегабайта.

Мой кутешный проект (который, скажем так, сильно побольше сабжа будет) с загруженной адресной книгой из телефона занимает 8,5 Мб ОЗУ. Да, это 32-разрядная сборка со статически собранной Qt 4.8.6 - но думаю, что даже если умножить на 2 (грубо), то ни о каких сотнях мегабайт и тем более гигах речи не идёт.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)

Code-style фиксеры есть под C? Нужно подправить отступы в некоторых местах, читать сложно. Также почему не разбить код на несколько модулей?

Ну и вынеси настройки подключения к БД куда-то в переопределяемое место, хотя бы в теже аргументы или .env файл.

duck
()
Ответ на: комментарий от duck

Ну и вынеси настройки подключения к БД куда-то в переопределяемое место,

Не нужно.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Ах virt...

Посмотрел, кстати, 64-разрядную сборку своей программы на федоре. У меня VIRT равен 504080.

Но у меня как-то сомнения есть, что оценивать работу программы надо по VIRT. %MEM показывает 0,5, а полпроцента от 8 гигов - это 40 мегабайт, близко к тому, что выводит RES (44368). Ещё ради интереса надо своп отключить и посмотреть, что изменится.

По-хорошему, надо на Qt делать аналог твоей программы с таблицами и на нём сравнивать.

hobbit ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Может быть что нибудь другое на qt напишу.

А вот это, кстати, хорошая идея. А то срачи GTK vs QT на ЛОРе идут регулярно, но такое ощущение, что человека, хорошо прошарившего ОБА тулкита, у нас нет.

Возвращаясь к размерам: ещё надо понимать, что GTK является аналогом Qtшных модулей QtGUI и QtWidgets, соответственно, объём библиотек GTK надо сравнивать именно с этими двумя модулями, а не с Qt в целом.

hobbit ★★★★★
()
Ответ на: комментарий от morse

Да ладно, вдруг он только школьник из 7"Б" класса?

peregrine ★★★★★
()
Ответ на: комментарий от ox55ff

А мне кажется, что для такого даже bash бы сгодился, а python так вообще верх идеала.

peregrine ★★★★★
()
Ответ на: комментарий от Deleted

У меня почта вообще кончается на рандомные цифры, судя по ним мне уже 300 лет или около того.

peregrine ★★★★★
()
Ответ на: комментарий от te111011010

идиоты, сэр. Потом читаешь Властелина Колец и там, то Торбинсы, то Сумкины, то Бэггинсы. ИМХО слать нафиг надо всех, кто пытается что-то сделать своим и только своим символом.

peregrine ★★★★★
()
Ответ на: комментарий от DELIRIUM

Тоже идиоты. Это же так хорошо запоминается.

peregrine ★★★★★
()
Ответ на: комментарий от duck

Code-style фиксеры есть под C?

Целая туча, например, clang'овский.

EXL ★★★★★
()
Ответ на: комментарий от ox55ff

https://doc.qt.io/qt-5.10/qtqml-index.html

А что у gtk в аналогах? Ничего?

Здрасьте, приехали.

Когда это GTK+ у нас превратился во фреймворк из тулкита? Может ты ещё спросишь, а где в GTK+ аналоги Qt Multimedia, Qt SQL или Qt Network?

Программы с GTK+-интерфейсом напрямую опираются на всякие gstreamer, libmysql, GIO и GLib. Тогда как программы на Qt опираются на эти вот прослойки Qt Multimedia, Qt SQL, Qt Network которые потом опираются точно так же на gstreamer, libmysql и GLib (да-да, все Qt-приложения в современных дистрибутивах зависят от Gnome Lib).

Мне ли тебе (ты же вроде кодер?) вообще объяснять разницу между фреймворком и тулкитом? GTK+ можно сравнивать лишь с модулями Qt Widgets и Qt Gui.

А если тебе нужен аналог QML под GTK+, то наверное стоит смотреть в сторону GNOME'овского St или что они там используют для отображения своих JavaScript-элементов в гномощели. Ну или в ту же Vala.

EXL ★★★★★
()
Ответ на: комментарий от EXL

А если тебе нужен аналог QML под GTK+, то наверное стоит смотреть в сторону GNOME'овского St

Процесс с интерфейсом пользователя предлагается полностью переписать, избавившись от применения тулкита St (Shell Toolkit) в пользу штатного API GTK+. https://www.opennet.ru/opennews/art.shtml?num=47565

Ну или в ту же Vala.

Транслятор в сишечку. С этого кресты начинались, но потом ушли. Видимо не всё гладко в датском королевстве. А если хочется c#, то нужно использовать c#, а не костыли. К тому же биндинги для gtk там есть.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Процесс с интерфейсом пользователя предлагается полностью переписать, избавившись от применения тулкита St (Shell Toolkit) в пользу штатного API GTK+

Видимо это как переписать с QtQuick на QtWidgets. Наверное производительность этого St их не устраивает.

Транслятор в сишечку

Очень здравое решение, благодаря этому GUI-программы на Vala очень отзывчивы. Возможно под влиянием Vala Qt-разработчики создали специальный Qt Quick Compiler: http://doc.qt.io/QtQuickCompiler/

Compiled Qt Quick is an elegant solution to these problems: .qml files as well as accompanying .js files can be translated into intermediate C++ source code. After compilation with a traditional compiler, the code is linked into the application binary. This entirely eliminates the need of deploying QML source code, it reduces the application startup time and allows for a much faster execution on platforms that do not permit Just-in-time compilation.

А если хочется c#, то нужно использовать c#, а не костыли. К тому же биндинги для gtk там есть.

А если хочется синтаксического сахара и отзывчивости GUI и UX на C? Правильно, тогда нужна Vala.

Впрочем, по степени нужности ни QtQuick/QML, ни Vala не достигли каких-либо успехов. Крупный бизнес как сидел на голом GTK+ и QtWidgets, так и продолжает там сидеть.

Только энтузиасты попилывают свои поделочки и дистрибутивчики на Vala (Plank, Geary, Shotwell, Pantheon DE) и QtQuick/QML (KDE Plasma 5, Cool Retro Term и... что там ещё?).

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от peregrine

Ну с переводами ещё ладно. Но, если изначально придумывается название, то его обычно пытаются делать благозвучным (за исключением случаев, когда неблагозвучность является художественным замыслом).

te111011010
()
Ответ на: комментарий от duck

Автор, прогони код через clang код-стайл фиксер

Если ты имел ввиду заменить clang на gcc и скомпилировать, то я так сделал. Посмотрел на предупреждения. Всё нормально.

u0atgKIRznY5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.