• Как распарсить JSON ответ VK.api?

    Наболее удобно будет парсить вот таким способом.
    spoiler
    package main
    
    import (
    	"encoding/json"
    	"log"
    )
    
    type RawResponse struct {
    	Response []json.RawMessage `json:"response"`
    }
    
    type Response struct {
    	Id          int          `json:"id"`
    	FromId      int          `json:"from_id"`
    	ToId        int          `json:"to_id"`
    	Date        int          `json:"date"`
    	PostType    string       `json:"post_type"`
    	Text        string       `json:"text"`
    	SignerId    int          `json:"signer_id"`
    	IsPinned    int8         `json:"is_pinned"`
    	Attachment  Attachment   `json:"attachment"`
    	Attachments []Attachment `json:"attachments"`
    }
    
    type Attachment struct {
    	Type  string `json:"type"`
    	Photo *Photo `json:"photo"`
    	Link  *Link  `json:"link"`
    }
    
    type Photo struct {
    	Pid        int    `json:"pid"`
    	Aid        int    `json:"aid"`
    	OwnerId    int    `json:"owner_id"`
    	UserId     int    `json:"user_id"`
    	Src        string `json:"src"`
    	SrcBig     string `json:"src_big"`
    	SrcSmall   string `json:"src_small"`
    	SrcXbig    string `json:"src_xbig"`
    	SrcXxbig   string `json:"src_xxbig"`
    	Width      int    `json:"width"`
    	Height     int    `json:"height"`
    	Text       string `json:"text"`
    	Created    int    `json:"created"`
    	Access_key string `json:"access_key"`
    }
    
    type Link struct {
    	Url         string `json:"url"`
    	Title       string `json:"title"`
    	Description string `json:"description"`
    	ImageSrc    string `json:"image_src"`
    	ImageBig    string `json:"image_big"`
    }
    
    func main() {
    	raw := []byte(`{"response":[2468,{"id":5513,"from_id":-58014516,"to_id":-58014516,"date":1453516206,"post_type":"post","text":"Мир вам и ближним вашим!<br><br>Оправдываться - грех. Прп. авва Исайя поучал: \"Венец добродетелей - любовь; венец страстей - оправдание грехов своих\". Вместо оправданий будем говорить - \"прости\".<br><br>Братия Троицкой Селенгинской обители","signer_id":235194773,"is_pinned":1,"attachment":{"type":"photo","photo":{"pid":404037784,"aid":-7,"owner_id":-58014516,"user_id":100,"src":"http:\/\/cs631329.vk.me\/v631329773\/eefe\/8qL1uNcH-Kg.jpg","src_big":"http:\/\/cs631329.vk.me\/v631329773\/eeff\/IvmP9O8aFLc.jpg","src_small":"http:\/\/cs631329.vk.me\/v631329773\/eefd\/B6ADu5ntll0.jpg","src_xbig":"http:\/\/cs631329.vk.me\/v631329773\/ef00\/bfMgaBRpBcI.jpg","src_xxbig":"http:\/\/cs631329.vk.me\/v631329773\/ef01\/qcrVhaq--Ic.jpg","width":1000,"height":666,"text":"","created":1453470652,"access_key":"053e6253631cae5038"}},"attachments":[{"type":"photo","photo":{"pid":404037784,"aid":-7,"owner_id":-58014516,"user_id":100,"src":"http:\/\/cs631329.vk.me\/v631329773\/eefe\/8qL1uNcH-Kg.jpg","src_big":"http:\/\/cs631329.vk.me\/v631329773\/eeff\/IvmP9O8aFLc.jpg","src_small":"http:\/\/cs631329.vk.me\/v631329773\/eefd\/B6ADu5ntll0.jpg","src_xbig":"http:\/\/cs631329.vk.me\/v631329773\/ef00\/bfMgaBRpBcI.jpg","src_xxbig":"http:\/\/cs631329.vk.me\/v631329773\/ef01\/qcrVhaq--Ic.jpg","width":1000,"height":666,"text":"","created":1453470652,"access_key":"053e6253631cae5038"}},{"type":"link","link":{"url":"http:\/\/selenginskii-monastery.cerkov.ru\/sms-rassylka-monastyrya-pouchenie-dnya\/pouchenie-dnya-373\/","title":" » Поучение дня","description":"","image_src":"http:\/\/cs631418.vk.me\/v631418773\/c773\/OMWEVcI7cno.jpg","image_big":"http:\/\/cs631418.vk.me\/v631418773\/c775\/PbCrn5A8iuA.jpg"}}],"comments":{"count":0},"likes":{"count":77},"reposts":{"count":9}}]}`)
    
    	var raw_res RawResponse
    	err := json.Unmarshal(raw, &raw_res)
    	if err != nil {
    		log.Fatal("Error parsing json: ", err)
    	}
    
    	var res Response
    	err = json.Unmarshal(raw_res.Response[1], &res)
    	if err != nil {
    		log.Fatal("Error parsing json: ", err)
    	}
    
    	log.Printf("%+v", res)
    	log.Println(res.Attachments[0].Photo.Pid)
    	log.Println(res.Attachments[1].Link.Title)
    }


    Решаем проблему первого массива с помощью json.RawMessage, а проблему attachments с помощью указателей на структуры. Если в JSON поле будет отсутствовать, указатель будет равен nil.
    Ответ написан
    2 комментария
  • Какую литературу/ресурсы посоветуете для решившего открыть компанию в сфере ИТ в России?

    Singaporian
    @Singaporian
    Я понимаю, что вопрос был не в том, стоит ли заниматься, а в том, что почитать. И тем не менее: две причины, почему вам придется отложить эту затею на несколько лет.
    1) Ваша мотивация - недовольство размером куска директора. Вы все еще живете его жизнью, а значит не самодостаточны.
    2) Вы концентрируетесь на второстепенных вопросах, которых на самом деле в бизнесе не встретите (внезапно, но это так).

    Возможно вы умный человек, но вам нужно дойти до более зрелого состояния, чтобы начать своё дело.
    Ответ написан
    Комментировать
  • Как составить план проектирования проекта?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    Идея/концепция к проектированию не относится, это отдельный предварительный этап. Для проектов побольше, и в общем случае, проектирование включает такие шаги, многие из которых, конечно, можно пропустить или сократить до минимума, если задача не сложная:
    1. Системный анализ и изучение предметной области
    2. Формирование требований к разрабатываемой системе
    3. Архитектуная задача, которая сводится к простой формуле: разделять, называть и связывать подсистемы
    3.1. Декомпозиция сложных задач
    3.2. Слои (построение слоев абстракций)
    3.3. Планирование топологии системы, программной и серверной инфраструктур
    3.4. Решение вопроса интеграции подсистем, программные интерфейсы, контракты и связывание
    3.5. Интеграция с унаследованными приложениями
    3.6. Минимизация изменений, для случаев, когда постоянно происходят изменения в предметной области
    4. Выбор инструментов решения
    4.1. Выбор парадигм программирования и языков
    4.2. Выбор технологий и платформ
    4.3. Выбор моделей данных, алгоритмов и библиотек
    4.4. Выбор топологий и протоколов
    4.5. Выбор паттернов программирования
    5. Предварительные исследования
    5.1. Проверка гипотез, эксперименты
    5.2. Изучение особенностей технологий
    5.3. Прототипирование
    6. Задачи обеспечения надежности
    6.1. Планирование безопасности и защиты от несанкционированного доступа
    6.2. Планирование отказоустойчивости
    6.3. Планирование мер по обслуживанию системы в режиме эксплуатации
    6.4. Задачи высоких нагрузок, балансировки и масштабирования, если таковые предполагаются
    7. Организация процесса разработки
    7.1. Жизненный цикл программной системы
    7.2. Конвенции кода, соглашения и стандарты
    7.3. Оценка необходимых временных и финансовых ресурсов для разработки системы
    7.4. Календарный план
    7.5. Анализ и минимизация рисков, выявление слабых мест технологий и коллектива
    7.6. Закрепление принципов управления процессом разработки и корректировки задания в процессе
    8. Сборка технического задания из результатов всех предыдущих пунктов
    Ответ написан
    2 комментария
  • Как составить план проектирования проекта?

    Tavion
    @Tavion
    front-end developer
    Я немного дополню предыдущий ответ:
    1. Идея проекта - тут первоочередным является постановка целей проекта и вытекающих из этих целей задач. Ключевой вопрос на этом этапе "чтобы что?". Исходя из целей задач вам будет гораздо проще построить остальную часть проекта.

    2 и 3 должны отвечать на вопрос как и какими данными вы будете оперировать в этом проекте.

    4 и 5 я бы поменял местами - сначала проектирование интерфейса, потом прототипирование проекта в целом. Потом обкатка прототипа (тестирование), потом реализация, потом тестирование реализации.

    7 - вы должны ответить на вопрос как вы будете отслеживать реализацию поставленных перед проектом целей и задач.
    Ответ написан
    Комментировать
  • Как составить план проектирования проекта?

    TwerTrue
    @TwerTrue
    Молодой и неопытный разработчик
    1. Идея проекта
    2. Сбор данных
    3. Структура дынных
    4. Прототипирование
    5. Принципы юзабилити
    6. Тестирование
    7. Метрики и статистика
    Ответ написан
    2 комментария
  • Как лечится кризис начинающего программиста?

    kumaxim
    @kumaxim
    Web-программист
    Господин начинающий, у Вас извращенный подход к программированию в целом.
    Программа - это способ более эффективно решить какую-то задачу... способ достижения какой-то заданной цели с меньшим количеством ресурсов.

    Возьмем, как пример, тот же бух.учет на предприятии. Как Вы думаете, почему 1С Бухгалтерия так широко распространилась в РФ и СНГ? Эта программа позволяет бухгалтеру в 2-3 клика мышки сформировать отчет для регулятора(ФНС, ПФР и т.д.), вместо того чтобы человеку сидеть руками искать платежные поручения, вычислять налоги и т.п. Софт просто подтягивает выписку из банка, анализирует ее и выдает готовую для печати бумажку, что экономит бухгалтеру сильно много времени. Расчет заплатанный налогов и отчеты в соц.фонды это вообще красота - 8 кликов мышкой и все готово :-)

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

    И вот, далее Вы для себя определитесь, какая Ваша основная цель? Какой Ваш основной посыл обществу?

    Личной мой посыл - "Я помогаю людям экономить: время, деньги, нервы и т.д.".

    Как я это делаю?
    У меня сначала был маленький интернет-магазин по продаже катализаторов для бензина(в поиск "кондиционеры метала для а/м"). При соблюдении определенных условий, расход топлива на малометражках снижался от 20% до 45%
    Вторым моим проектам было небольшое мобильное приложение для отслеживания хода исполнительного производства в ФССП(для взыскательней, уже сдохло). Мне и моим знакомым(не юристы) это экономило достаточно много времени на ругань с приставами, чего они должны делать и т.д. Кто сталкивался с этой службой должен знать эффективность и оперативность их работы, особенно в регионах...
    Сейчас я пишу небольшой конструктор сайтов, который поможет одной дружественной мне веб-студии сильно оптимизировать процесс создания низкобюджетных сайтов визиток

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

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

    Если говорить о чисто практических инструментах(функции стандартной библиотеки, фреймворки и т.д.)... Лично я могу считать себя профессионалом в какой бы то ни было технологии, ни когда я прочитал 1-2 книги и/или написал 1,5 задачи оттуда же. С таким уровнем я не могу сказать что я знаю язык/технологию в принципе, просто знаком - да, но я ее не знаю. Считать себя профессионалом я могу после того как решу не менее сотни задач, используя эту технологию и написал не менее 1 млн строк кода, именно написал, а не сгенерировал rake/gii/artisan или чем-то там еще.

    Вам же я желаю не останавливаться, развивайтесь. Мастерство приходит с опытом.

    P.S.: от холиваров на тему 1С прошу всех воздержаться
    Ответ написан
    11 комментариев
  • Copyright только maintainer'a проекта в open source это нормально?

    printf
    @printf
    Ем детей.
    Сейчас многие «большие» проекты пишут Copyright Vasily and other contributors, или просто Copyright 2015 This Project's contributors. Это можно отдельным коммитом предложить, т.к. справедливо же.
    Ответ написан
    Комментировать
  • Где можно получить опыт аналитики данных на реальных проектах?

    @Acaloradova
    QA
    Если Вам или кому-то из "читателей" еще актуально: нам нужны люди на гипотезы и исследования юзеров на опенсорс проект, оплаты никакой, зато реальный проект и команда :)
    Ответ написан
    2 комментария
  • Изучение Java: мотивация, перспективы, краткий план?

    @Einsteinnew
    Тема интересная и меня самого давно занимает, я с очень похожими вводными данными 31 год, два высших, да не тех - учу java на протяжении 9 месяцев, уже сформировалось определенное видение как именно максимально продуктивно обучаться. Как раз занимаюсь поисками единомышленников и на среднесрочную перспективу планирую осваивать Канаду))
    Оставляю свою электронку, p.pydzirov@mail.ru, пиши
    поделюсь теми граблями на которые я уже наступил )))
    Ответ написан
    1 комментарий
  • Имеет ли важность для Java EE работодателя опыт работы Android разработчиком?

    @WhoMe
    Я полтора года назад устраивался на должность Junior Java EE разработчиком в Москве.
    У меня не то что опыта Java EE разработки не было, у меня не было даже трудовой книжки.
    В резюме так и написал: мол опыта Java EE нет, но про Java слышал, про спринги всякие читал,
    ну и приложил ссылочку на свой репозиторий на гитхабе с опенсорс-библиотечкой на Java (ничего особенного, простая обертка над API сайта, день-два работы).

    По моим ощущениям, если у тебя нет опыта в Java EE, то у тебя нет опыта в Java EE и им пофиг че ты делал до этого.
    У меня на собеседовании даже не спрашивали что я писал (кроме вышеуказанной библиотеки), какие проекты делал (до этого я немного фрилансил на php)
    и с чего я решил что знаю Java. Дали бумажный тест по Java и SQL. Потом побеседовали по основам java: коллекции, потоки, синхронизация и т.д.
    по базам: типы связей (один-к-одному/один-ко-многим/многие-ко-многим), транзакции, ACID и в таком духе, ну и в общем плане: процессы, потоки, http-протокол.
    Видимо я не слишком сильно плавал в вопросах, а может их просто устроили мои скромные запросы по ЗП (скромничать, кстати, не советую, выйдет боком, но это уже другая история).
    Меня взяли.

    Вместо постскриптума.
    За неделю работы там я узнал больше чем за пару месяцев самостоятельного изучения спринга и Java EE в целом.
    Java EE на самом деле очень обширная область, а Java SE это так, верхушка айсберга.
    Мозги реально кипели от объема поступаемых новых данных, попутно приходилось дома читать книжки и добирать основы где не хватало.
    Еще смешное, в Java EE на 5 строк java кода приходилось строк 20 xml конфигурации :D Видимо поэтому не особо гоняют по самой Java. Больше времени тратишь на настройку и свзку всяких фреймворков и серверов.

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

    Отвечая на Ваш вопрос(имхо, по моим ощущения и по опыту чтения форумов): опыт Android-разработчика _преимуществ перед_ Java EE-работодателем вам особых не даст.
    Android платформа с Java EE имеет мало общего, но хуже от него само собой не будет.

    Извините за многобукаф, Остапа понесло.
    Ответ написан
    Комментировать
  • Интерактивное изучение Java - возможно ли?

    Nidora
    @Nidora
    Бонус 200 руб всем новым клиентам! VDS - 149 руб
    Мне понравился вот такой вариант. Там обучение и решение задач предоставлены очень интересно.
    Ответ написан
    3 комментария
  • Как выполнить javascript-код в песочнице на сервере?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Есть такой неймспейс "vm", см. nodejs.org/api/vm.html В нем методы: vm.createContext(sandbox), vm.createScript(code, scriptName). Так же в нем класс Script и у него методы: script.runInThisContext(), script.runInNewContext(sandbox). В общем, можно создать песочницу, у которой даже не будет доступа к require, и пробросить в нее только те функции, что нужны для безопасного выполнения скрипта. Потом обернуть выполнение скрипта в Domain, см. nodejs.org/api/domain.html И тогда уж все будет точно безопасно, и доступ ко внешнему миру будет у скрипта закрыт и если он свалится, то через domain можно поймать, и global он своими данными не засрет, т.е. песочницу можно убить и создать новую, даже не перезапуская процесс ноды. Пример использования можно подсмотреть тут: https://github.com/tshemsedinov/impress/blob/maste... Там есть некоторые хитрости, например, как сделать примесь своих функций к базовым классам в песочнице и подобное.
    Ответ написан
    Комментировать