• На каком этапе изучения Java стоит переходить на Kotlin Android?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Вы так спрашиваете, будто после перехода на Котлин, все источники информации о Java для вас закроются. Если будет чего-то не хватать, всегда ведь можно вернуться.
    А по существу вопроса: да можно переходите.
    Ответ написан
    2 комментария
  • Что нужно изучить чтобы писать красивые приложения под Android?

    BorLaze
    @BorLaze
    Java developer
    Посмотрел "Доктор Хаус".
    Возник вопрос, что нужно изучить, чтобы делать красивые операции на сердце?
    Ответ написан
    Комментировать
  • Как в Delphi XE создать JSON?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Это у тебя массив из объектов. А значит, мы создаем массив и добавляем в него объекты. Логично? По-моему - да.
    var
      JSA : TJSONArray;
      JS : TJSONObject;
    begin
      JSA := TJSONArray.Create;
    
      JS := TJSONObject.Create;
      JS.AddPair('foo', 'bar');
      JSA.Add(JS);
    
      JS := TJSONObject.Create;
      JS.AddPair('foo', 'bar');
      JSA.Add(JS);
    
      writeln(JSA.ToString);
    
      JSA.Free;
    
      readln;
    end.


    Добавляя элементы в JSA их не нужно самому удалять. Они становятся его частью.
    Ответ написан
    Комментировать
  • Как исправить ошибку E2066?

    OCTAGRAM
    @OCTAGRAM
    TSet = (Sorted, Reversed, Random);

    Это объявление сделало Random константой с более высоким приоритетом видимости, чем System.Random.

    Варианты решения:

    В новых Delphi можно написать (в начале кода)

    {$SCOPEDENUMS ON}

    и заменить

    if ArrType = TSet.Sorted then
    // …
    else if ArrType = TSet.Reversed then


    Тогда TSet.Random не сможет пересекаться с System.Random

    Можно, наоборот, при использовании System.Random указывать полностью квалифицированный идентификатор:

    ArrI[i] := System.Random(Row);

    Либо можно просто переименовать TSet.Random во что-то, что не в точности Random
    Ответ написан
    Комментировать
  • Компонент для изменения мета данных в JPG для Delphi 7?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    Крайне советую перейти на Delphi 10.3.3 CE. Среда бесплатная, удобнее д7, эффективнее и ещё десяток всякого.
    Есть пакетный менеджер GetIt. Очень много добавлено из коробки (типа дженериков, тасков, работы с json, xml, http+ssl), плюс всё это кроссплатформенное
    Ответ написан
    Комментировать
  • Правильно ли составлен путь к становлению android разработчиком?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Давай я отвечу на некоторые вопросы.
    Насколько быстро учится Kotlin при знании основ Java?

    Не знаю, что такое основы джава. Котлин как второй язык при недоизученном первом будет идти тяжело, это я тебе гарантирую. Всё у тебя в голове смешается в кашу и будет сложнее разбираться. Возьми один язык(Котлин) и выучи его нормально. Все истории про "я знал джаву и изучил котлин за день"(кстати, у меня примерно так и было - полдня чтения документации, полдня решения коанов), исходят от людей, которые достаточное время варятся в теме. Они знают джаву и могут быстренько изучить котлин и начать на нем писать. С учетом того, что ты писать не умеешь ни на чем, это будет в десятки-сотни раз дольше. Просто потому что опытные люди тоже это время потратили, но заранее.
    Ведь насколько я понимаю kotlin это сахарок

    Начни с уважительного отношения к предмету изучения. Ты не гуру разработки, чтобы так говорить. Котлиновский "сахарок" это значительный прорыв после джавы. Там все продумано и сделано очень классно.
    Не является ли разработка под мобилки "фронтендом в профиль" ?

    Что ты имеешь в виду? Разработка под мобилки сложнее вебовского фронтенда. Надо знать кучу особенностей платформ, гугл постоянно подкидывает всякую лажу в СДК. Там куча реальных сложностей. В то же время это нифига не фронтенд и не бекенд. Цикл жизни и разработки приложений сильно отличается.

    Я потому и спросил в комментарии - почему ты решил, что тебе надо заниматься этим?
    Ответ написан
    Комментировать
  • Какую платформу выбрать для десктопного приложения с учетом поддержки win XP,7,8,10?

    HemulGM
    @HemulGM Куратор тега Windows
    Delphi Developer, сис. админ
    Delphi здесь однозначно выигрывает. Шарп на XP не подойдет, т.к. будет тянуть кучу дотнет дерьма, которое на xp просто не встанет. Срр - слишком дорогая разработка в плане времени и потраченных ресурсов. Питон вообще для гуи не стоит использовать ни в каких вариантах.

    А Delphi позволит создать нативное приложение, которое будет работать как в XP так и в Win10. А если юзать FMX, то и на Android, Linux, MacOS.

    Помимо этого, Delphi лучше любого языка умеет работать с БД. Десятки провайдеров из коробки.
    Ответ написан
    3 комментария
  • Какую платформу выбрать для десктопного приложения с учетом поддержки win XP,7,8,10?

    OCTAGRAM
    @OCTAGRAM
    Да, XP всё же желательно исключить. В Vista добавили мониторы Хоара на уровне API и сокеты IPv6 сдвоили с IPv4 по типу Linux. Гипотетически можно было бы переключать реализации мониторов между XP'шным, но вот почему-то не сделали так разработчики ни в коммерческих компиляторах, ни в open source порта pthreads единого не было. С IPv6 та же история, можно было бы гипотетически, готовясь открыть соединение, получив от DNS список адресов IPv6 и IPv4, перемешав их, не зная заранее, какой сработает, подготовить два сокета, IPv4 и IPv6, как это делал Firefox, но куча остального софта вместо этого использовала кмк грязный хак, который есть в Linux, а в Vista этот грязный хак воспроизвели, и все кинулись его использовать вместо того, чтоб писать как положено. Ничего не поделать, слишком много проблем совместимости с XP.

    Компьютеры, как можно понять, новизной не отличаются. Я на таких работал. С# и Java безальтернативно навязывают трассирующую сборку мусора, и это просто кошмар с ними работать. Программам с трассирующей сборкой мусора нужно для хорошей работы в 5 раз больше оперативной памяти, чем занято их объектами. Можно поискать график, на котором будет катастрофическая деградация производительности, когда памяти всего лишь в 2 раза больше, чем занято. Ещё когда таких программ становится несколько, они по очереди в своп ходят, вытесняя друг друга из памяти. А ещё какой-нибудь касперский содержимое загружаемого свопа неукоснительно проверяет во избежание. Как же я настрадался в техподдержке.

    С C++ есть все шансы развести глюкотрон. Python сочетает лучшее из двух миров: и тормоза, и глюкотрон. Но глюкотрон по другой причине, из-за динамической типизации так называемой.

    А Delphi вполне себе рабочий инструмент. Против глюков есть типизация и проверки диапазонов, по умолчанию выключенные, но ведь можно включить. Сборки мусора нет. Контейнеры на счётчиках ссылок можно взять в Spring4D.
    Ответ написан
    4 комментария
  • Как правильно удалять элементы массива в LUA?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вместо object[#object+1]=x лучше писать table.insert(object, x)
    Это так, к слову.

    А удалять со сдвигом можно через remove:
    table.remove(object, i)
    Это приведёт к удалению элемента с индексом i, а также к смещению всех последующих элементов на 1 влево, чтобы в таблице в итоге не было дырки.

    Считается, что это не самый оптимальный способ работы с массивами. Но так как это встроенная функция, и сам Lua написан на C, то получается довольно быстро в пределах нескольких сотен элементов.

    С учётом того, что игровые объекты у вас будут появляться/удаляться не каждый тик, а очень редко, такой способ вполне хорош.

    =============================================

    В зависимости от задачи, можно по-разному оптимизировать её решение.

    Если важен быстрый поиск (по ключу), то лучше использовать уникальный ключ вместо ничего не значащего порядкового номера.
    object[x.id] = x

    Перебор всех объектов будет возможен через pairs. Правда, без гарантии того, в каком порядке будет перебор:
    for k,v in pairs(object) do

    Если при этом нужно где-то считать количество всех объектов, то это можно делать в отдельной переменной. При таком подходе можно даже в случае безликих индексов наращивать их до бесконечности, не парясь о дырках, а перебор через pairs. В любом случае подсчёт количества - не проблема. Есть два варианта, как можно это делать:
    а) Если количество нужно редко, а добавление/удаление происходит часто, то считать можно каждый раз заново:
    local cnt = 0
    for _ in pairs(object) do
      cnt = cnt + 1
    end

    б) Если же количество нужно считать часто, а добавление/удаление объектов происходит редко, то лучше обновлять счетчик при добавлении и удалении:
    objects_cnt = 0 --всегда содержит количество объектов
    
    --добавление
    object[x.id] = x;
    objects_cnt = objects_cnt + 1;
    
     --удаление
    object[x.id] = nil;
    objects_cnt = objects_cnt - 1;
    Ответ написан
    Комментировать
  • Как быстрее и качественнее читать код на языке Си?

    EgoRusMarch
    @EgoRusMarch
    Никак. Читать и думать. Нет никакой формулы счастья. Искусство неформализуемо =) К тому же какие-то сложные абстракции понять невозможно не зная при этом предметную область.

    Ты не поймёшь код, в котором есть какая-то структура данных или алгоритм, который ты не знаешь. Не поймёшь мультитрединг, если не знаешь как он устроен. Не поймешь как работает криптография, если не знаешь теории. И т.д. и т.п.
    Ответ написан
    Комментировать
  • Программа Win 10 Tweaker это вирус?

    @Mefist
    Купил версию PRO, потом провёл апгрейд компьютера, поменял материнку и процессор, в FAQ на сайте указано, что перенос можно выполнить 1 раз при обновлении компьютера, хотя программа привязывается к железу и нет никакой проблемы аннулировать активацию к старому и пере активировать на новое. Была версия 15.2 и приходит письмо на почту, что вышла версия 16 и что старая версия не будет обновляться и нужно скачать новую и в письме код активации. Скачиваю новую версию, выбираю пункт что у меня уже есть PRO и вместо предложения ввести код активации, мне предлагают купить опять PRO за 820р. никакой код, никуда ввести не предложила программа. Самое интересно, что старая версия 15.2 продолжает работать со статусом PRO, а новая просит покупки. Я обратился на почту к автору программы и указал о том, что у меня не активируется новая версия, а старая работает. На что получил ответ, что он не обязан был мне вообще делать повторную активацию, хотя она прописана в его же правилах, причём писал это использую не нормативную лексику в мой адрес. То, что автор скрывается от налоговой это понятно, хотя нет, не понятно, покупают по всей РФ и потенциальных покупателей очень много, можно было бы уже давно официально продавать программу. Вот поэтому он и делает что хочет, так как защита прав потребителей на него не распространяется. Меня это совершенно не касается, официально он работает или нет, да и всех пользователей то же. Мы платили деньги за лицензию и то, что её отбирают, вот это сюрприз.

    Не рекомендую связываться, хоть программа и хорошая, но автор делает что хочет и когда с вас повторно начнут просить денег неизвестно.
    Ответ написан
    1 комментарий
  • Исходники стандартной библиотеки?

    jcmvbkbc
    @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Как это понимать? Это что вся функция, которая нам устанавливает связь с сервером?

    Это заглушка, на случай, если нет другой реализации этой функции.
    Для linux другая реализация есть, она находится в sysdeps/unix/sysv/linux/connect.c, но всё что она делает -- это системный вызов, обёрнутый в манипуляции с pthread-cancellation.

    Можно посмотреть на реализацию системного вызова в ядре. Начать можно отсюда, это диспетчер системного вызова connect. Реализация connect для TCP/IPv4 находится здесь.
    Ответ написан
    Комментировать
  • Delphi 10.4.1 видит регистр XMM0-XMM7 но ругается на XMM8 и более, почему?

    @acwartz
    Тут должна быть ваша реклама.
    Все что после XMM7 это для x64. Вики.

    Переключите приложение в сборку под x64, а лучше оберните нужный кусок кода в соотв. условие:
    {$IFDEF CPUX86}
      asm
        // ...
      end;
      {$ENDIF CPUX86}
      {$IFDEF CPUX64}
      asm
        // ...
      end;
    {$ENDIF CPUX64}
    Ответ написан
    Комментировать
  • Как получить инфу c сайта на delphi7, и определить какой запрос ,если запрос на нем методом POST производиться?

    HemulGM
    @HemulGM Куратор тега Delphi
    Delphi Developer, сис. админ
    1. Поставь RAD STUDIO 10.3.3 CE
    2. Библиотека System.Net.HttpClient
    3. Делаешь запрос http.get/post получаешь данные
    Ответ написан
    3 комментария
  • Магия int при делении на float?

    SagePtr
    @SagePtr
    Еда - это святое
    Цифры странные берутся, когда в ячейке памяти хранится один тип, а printf ожидает увидеть другой, потому неправильно представляет его. Округлять или ещё как-нибудь преобразовывать типы за вас printf не будет, что ему скажут, то он и выведет.
    Ответ написан
    Комментировать
  • Не работает структура объявленная в заголовочном файле?

    @TheCalligrapher
    Так а что это такое вообще: htval.num = 10;?

    Это выглядит как инструкция (statement). В языках С и С++ инструкции могут находиться только внутри функций. Больше нигде. Это требование грамматики, т.е. элементарного синтаксиса этих языков. Зачем вы написали инструкцию в "чистом поле" за пределами функции? Это некорректно с точки зрения синтаксиса языка.

    Упрощенно выражаясь, в С и С++ код пишется внутри функций, а не снаружи.

    P.S. Ваш вопрос не имеет никакого отношения к "структуре, объявленной в заголовочном файле". Ни структуры, ни заголовочные файлы тут ни при чем.
    Ответ написан
    Комментировать
  • Стоит ли учить С/С++ если не планируешь писать на нём?

    bingo347
    @bingo347
    Ищу TypeScript разработчика
    Языки не нужно учить. Это крайне вредно. Ну заучите Вы синтаксис и базовые принципы, а что дальше? Программировать с этим Вы не сможете. Подход выучить ЯП Х не работает, как и не работает подход выучить естественный. Просто подумайте, кто быстрее заговорит на английском - тот кто выучит много слов и правил или тот кто поедет в США и будет вынужден там общаться? С языками программирования все то же самое.

    Теперь о C и C++
    C наверно самый простой ЯП, проще только ассемблер. Из высокоуровневых абстракций в нем только типы данных да структурное программирование (if, for, while, ...). Вы скорее всего уже с этим всем знакомы. Из нового разве что будет работа с указателями, опять же максимально простым способом - в лоб.
    C++ - обвешали простой C максимальным количеством высокоуровневых абстракций (все виды полиморфизма, ООП, замыкания, динамическая диспетчеризация и т.д.), что сделало его очень сложным. Вам понадобятся годы практики (практики, а не зубрежки!), чтобы просто понять, что здесь происходит. А скорее всего Вы просто бросите это дело, породив пару десятков UB в простейшей программе и на ровном месте.
    Ответ написан
    Комментировать
  • Как узнать статичная ли функция по ELF файлу?

    hakain
    @hakain Автор вопроса
    Немного знаю С/С++, Qt, и микроконтроллеры
    Похоже я сам нашел ответ на вопрос. Если вызвать команду objdump с опцией -t, то можно увидеть следующий вывод.
    $ objdump -t test | grep foo
    0000000000000000 l    df *ABS*	0000000000000000              foo.c
    000000000000064e l     F .text	0000000000000014              s_foo
    000000000000063a g     F .text	0000000000000014              foo

    В моем случае видно, что строки имеют флаги l и g.
    The symbol is a local (l), global (g), unique global (u), neither global nor local (a space) or both global and local (!). 
    A symbol can be neither local or global for a variety of reasons, e.g., because it is used for debugging, 
    but it is probably an indication of a bug if it is ever both local and global.

    По всей видимости static функции помечаются флагом l.
    Ответ написан
    Комментировать
  • Имеет ли cмысл после Си учить C#?/Сколько времени уйдёт изучение на язык Си?

    solotony
    @solotony
    покоряю пик Балмера
    у "с" и "с#" - общего только буква "с" в названии. и схожесть синтаксиса. назначение и приемы программирования у этих языков совершено различны.

    си - примитивный язык, замена ассемблера. с# - высокоуровневый язык, аналог Java от MS

    перед тем как решать ЧТО учить следует ответить на вопрос ЗАЧЕМ учить
    Ответ написан
    Комментировать
  • На что указывает указатель, на бит или байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В данном случае на объект класса string. Которого, кстати, в C нет.
    Ответ написан
    Комментировать