• Как поместить название задачи в ListView через WinApi?

    ApeCoder
    @ApeCoder
    Конструктор требует System::String :: а не WCHAR *

    gcnew ListViewItem(gcnew String(pe.szExeFile));
    Ответ написан
    Комментировать
  • Как лучше организовать структуру проекта (Сервер, БД, клиенты)?

    @InoMono
    Без конкретной постановки задачи - смысла нет.

    Ну да, в общем случае сервер, БД, мобильные клиенты. И что?
    Может ваша задача позволяет где то упростить себе жизнь и обойтись без какого то элемента.
    А может напротив задача потребует еще и кэширования и кластеризации/шардирования....
    Но без постановки задачи (ТЗ) этого не видно.

    И Что лучше использовать: MongoDB или PostgresQL.
    И стоит делать сервер на NodeJS или на JAVA писать..?

    Это как раз просто: использовать то, что лично ты (или нанятый тобой разработчик) лучше всего знает.
    Ответ написан
    Комментировать
  • Как правильно организовать иерархию классов и методов квадрата?

    @erlioniel
    Java Developer
    Самый простой (в лоб) подход будет сделать одну структуру. Я опущу все геттеры, сеттеры и прочие Java-штуки, просто чтобы оставить код максимально простым. В целом их использовать более чем стоит.

    class Rect {
        public int aX;
        public int aY;
        public int bX;
        public int bY;
        public int cX;
        public int cY;
        public int dY;
        public int dX;
    }


    И дальше воротить от этой структуры данных уже нужные себе вещи. Опять же я опущу все лишнее и оставлю только сам метод (например умножения).

    public Rect multiply(Rect source, float amount) {
            Rect result = new Rect();
            result.aX = source.aX * amount;
            result.aY = source.aY * amount;
            result.bX = source.bX * amount;
            result.bY = source.bY * amount;
            result.cX = source.cX * amount;
            result.cY = source.cY * amount;
            result.dX = source.dX * amount;
            result.dY = source.dY * amount;
            return result;
        }


    Если хочется более "объектно-ориентированной" структуры то нужно для начала понять какие объекты в ней будут реально обладать поведением. Ну то есть например в классических примерах с кошками-собаками-животными почему-то никто не стремится делать в кошке объект Язык, который будет отвечать за конкретный "Мяу". Тут так же, если точка (как объект) не несет сама по себе никакого функционала совсем не факт что она нужна. Соответственно первое что тут просится это собрать квадрат (или если уж на то пошло - многоугольник) как просто коллекцию ребер. Тогда получится что-то такое:

    class Edge {
        public float aX;
        public float aY;
        public float bX;
        public float bY;
    }
    
    class Poly extends ArrayList<Edge> {
        public Poly multiply(Poly source, float amount) {
            Poly result = new Poly();
            for (Edge edge : source) {
                Edge newEdge = new Edge();
                newEdge.aX = edge.aX * amount;
                newEdge.aY = edge.aY * amount;
                newEdge.bX = edge.bX * amount;
                newEdge.bY = edge.bY * amount;
                result.add(newEdge);
            }
            return result;
        }
    }


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

    class Dot {
        public float x;
        public float y;
    }
    
    class Edge {
        public Dot a;
        public Dot b;
    }
    
    class Poly extends ArrayList<Dot> {
        public List<Edge> edges = new ArrayList<>();
    
        public Poly multiply(Poly source, float amount) {
            Poly result = new Poly();
            // Map just to remember old dots bindings
            Map<Dot, Dot> newDots = new HashMap<>();
            for (Dot dot : source) {
                Dot newDot = new Dot();
                newDot.x = dot.x * amount;
                newDot.y = dot.y * amount;
                result.add(dot);
                newDots.put(dot, newDot);
            }
            
            for (Edge edge : edges) {
                Edge newEdge = new Edge();
                newEdge.a = newDots.get(edge.a);
                newEdge.b = newDots.get(edge.b);
                result.edges.add(newEdge);
            }
            
            return result;
        }
    }


    Как видно, добавление новой сущности сделало весь код сложнее, а клонирование объекта куда более комплексным. Хотя теперь возможно изменять точку и не думать о том что какие-то ребра будут забыты.

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

    Этот код дан исключетельно как ответ на вопрос и на подумать, не стоит так писать в реальных приложениях. Надеюсь ответ будет полезен ;)
    Ответ написан
    1 комментарий
  • Есть пример приложения Client-server на Java?

    @poslannikD
    Java/C/C++ Programmer
    Все сетевые взаимодействия(lan, enthernet, can и тд) реализуются через сокеты и не сетевые( когда к примеру двум приложениям работающим на одной машине нужно обменяться данными) реализуются тоже через сокеты.
    Сокеты на сервере, сокеты на клиенте. Между сокетами гоняете данные.
    Делайте по примеру чата, потом доработаете.
    Есть ли простые реализации с таблицами

    - таблицами в смысле ui, полно по интернету валяется. Присмотритесь к swing или javafx.
    - таблицами в смысле работа с бд, гляньте hibernate
    Ответ написан
    Комментировать
  • Есть пример приложения Client-server на Java?

    piatachki
    @piatachki
    Если на десктопе не нужно изменение данных в реальном времени, то можно использовать обычные http-запросы к серверу - Rest + Json. Легче заниматься отладкой, повод посмотреть в сторону Spring и Hibernate.

    Со стороны клиента - во время учёбы писал на JFX клиентское приложение, которое получало данные с сервера в JSON. Код, конечно, ужасен, за такое кочергой по лицу бьют, но сам механизм отправки запроса можно посмотреть :)

    Код сервера не сохранился, боюсь.

    Описание сущностей (Entities) лучше выносить в отдельный модуль, а не дублировать для клиента и сервера.
    Ответ написан
    Комментировать
  • Как сделать верстку меню поверх блока?

    @m1roku
    Начинающий
    1) меню потомок header - https://jsfiddle.net/b4meqsk6/
    2) меню потомок content (он же синий блок) - https://jsfiddle.net/xnn9h4ac/
    Ответ написан
    1 комментарий
  • Есть ли реальные open source проекты на NodeJS?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    https://ghost.org/
    keystonejs.com

    Хочу знать как правильно и качественно делать сервер.

    Погуглите статьи по словам «nodejs best practices», «habits of happy node hacker».
    Ответ написан
    Комментировать
  • Как лучше организовать структуру компонентов сайта React?

    AlexanderMint
    @AlexanderMint
    Web Developer
    Вот тут хорошо описаны различные варианты подходов
    Ответ написан
    Комментировать
  • Как сделать метод добавления элемента в массив класса?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Ответ написан
    Комментировать
  • Как сделать метод добавления элемента в массив класса?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    1) Забудьте про char*/char[] в вашей задаче это лишнее. Есть std::string.
    2) WriterData -> Writer. И лучше написать просто struct Writer {};
    3) Данные надо хранить в std::vector (или другом контейнере, этот вопрос должен обсуждаться отдельно), тогда и переменная count не понадобится. Вероятно это должен быть вектор std::shared_ptr.
    4) getWriters -> writers, и возврашать он должен вектор, не принимая никаких аргументов и быть const методом. Вопрос ещё, нужен ли вообще этот метод.
    5) insertWriter -> addWriter, принимать опять же два std::string const&. Возможно так же возвращать std::shared_ptr с только что созданным писателем, что не обязательно, смотрите по задаче.

    PS Вообще, devalone посоветовал вам двигаться в правильном направлении, т.е. почитать книжки по C++ и доки.
    Ответ написан
    Комментировать
  • Как изменить объекты через массив и id?

    AppFA
    @AppFA
    Frontend developer at Yandex
    Как-то так:
    Todo.update({
        idUser: iduser,
        iditem: {
            $in: arraylist
        }
    }, { del: '+' }, { multi: true });

    Воспользуйся оператором $in и прокинь туда весь массив, он обновит все записи id которых будет в arrayList, так же установи опцию multi - true, для того, чтобы обновить все документы.
    Ответ написан
    Комментировать
  • Что по вашему мнению стоит учить Vue.js или Angular?

    bingo347
    @bingo347
    Crazy on performance...
    ИМХО Vue
    Во-первых, он самый свежий и в нем учтены косяки многих других фреймворков
    Во-вторых, он самый производительный, шустрее можно сделать только на нативке, и то не всегда
    В-третьих, он довольно прост в освоении, у него самая адекватная документация с адекватными переводами на множество языков, включая русский
    В-четвертых, если уже знаете React, то быстро (лично мне хватило пары часов) въедете в основные принципы, так как в основе похожая система компонентов
    Ответ написан
    Комментировать
  • Что по вашему мнению стоит учить Vue.js или Angular?

    fnnzzz
    @fnnzzz
    front-end dev
    за ангуляром стоит гугл, за вью - один крошечный китаец
    Ответ написан
    3 комментария
  • Что по вашему мнению стоит учить Vue.js или Angular?

    Ангуляр развивается бешеными темпами. Первый превозносился, как золотой ключик, при выходе второго оказалось, что первый был.. не то. Второй даже раскрутиться толком не успел, как не вышел третий, и теперь говорят, что вот 4-й - это самое то.
    Vue не так давно вышел второй, и выглядит так, что третий будет нескоро - потому, что 2-й уже решает все свои задачи.
    Т.е. если хотите стильно, модно, молодежно, гнаться за самыми передовыми технологиями в виде всё новых версий Ангуляра - то он.
    Если для работы - то Vue.
    (для нервных: это, конечно, МЛМ)
    Ответ написан
    6 комментариев
  • Как реализовать грамотную проверку авторизации?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вы используете react-router? Если да, то тут все просто:
    1) роуты создаются с помощью функции, таким образом вы можете прокинуть в роутинг store
    ...
    import configRoutes from '../../routes'
    ...
    render() {
      return (
        <Provider store={store}>
          <Router history={routerHistory}>
            {configRoutes(store)}
          </Router>
        </Provider>
      )
    }


    2) Далее в роутинге, устанавливаете на "защищенные" компоненты onEnter hook:
    ...
    <Route path='/secret-area' component={SecretAreaContainer} onEnter={_ensureAuthenticated}>
    ...


    3) сама функция, смотрит есть ли в store необходимые данные:
    export default function configRoutes(store) {
      function _ensureAuthenticated(nextState, replace, callback) {
        const { dispatch } = store
        const { session } = store.getState()
        const { currentUser } = session // данные по юзеру
        let nextUrl
    
        if (!currentUser && localStorage.getItem('token')) {
            dispatch(getCurrentAccount())
          }
        } else if (!localStorage.getItem('token')) {
          nextUrl = location.pathname + location.search.replace('?', '&')
          replace('/signin')
        }
    
        callback()
      }
    
      // здесь ваши роуты


    Ок, по роутам готово.

    Теперь, по переадресации:
    - на success в логине, делаете редирект куда угодно:
    export function signIn(email, password) {
      return (dispatch, getState) => {
    
        dispatch({
          type: USER_SIGN_IN_REQUEST,
        })
    
        const params = {
          email,
          password,
        }
    
        httpPost(`${API_ROOT_V1}/api/authenticate`, params)
          .then((data) => {
            saveParamsToLS(data) // здесь токен можно сохранить, например
            dispatch(push('/account')) // ваш РЕДИРЕКТ, используется push из react-router-redux (что необязательно)
          })
          .catch((error) => {
            console.warn(`Sign in error: ${JSON.stringify(error)}`) //eslint-disable-line no-console
            dispatch({
              type: USER_SIGN_IN_FAILURE,
              error: error,
            })
          })
      }
    }


    и остается кейс с прямым заходом: вы должны разрулить это опять же в onEnter хуке в роутере. Так как у вас есть store, и вам доступны все данные из него, включая store.dispatch метод, добить пример не составит труда.
    Ответ написан
    3 комментария