Pull to refresh
39
0
Kumarunster @Kumarunster

User

Send message
а кто-нибудь, покажите пример с хорошей архитектурой без фрэймворков. Я серьезно, хотелось бы расширить горизонты, поучится у мастеров ножевого боя…
на сайте используется ангулар-модуль ngProgressLite (https://github.com/voronianski/ngprogress-lite). Не знаю насчет кастомизации, документация не выглядит достаточно полной.

Мы используем практически везде angular-loading-bar (https://github.com/chieffancypants/angular-loading-bar). Он сам запускается при http-запросах после 100 мс. Можно задать и большую границу при конфигурации приложения, все очень удобно.
посмотрите на «человеческий» JSON: hjson.org
К своему стыду должен признатъся, что полностью статью не осилил.

Но по не совсем большому опыту UI-тестов и после долгих мучений с селениумом, остановились на selenide.org/. Супер полезная вещь. Гоняем каждую ночь около 130 тестов. Он хоть и является своего рода враппером селениума, но очень сильно облегчает написание понятных, коротких и четких тестов. Создатели кстати тоже присутствуют на хабре: asolntsev См. также видео на вимео: vimeo.com/60614493
Вопрос топикстартеру: вы что-нибудь конкретное с помощью vert.x делали/делаете?

Если да, может дадите более развернутый коментарий, для чего имеет смысл его использовать? По моему личному впечатлению он не очень хорошо подходит для разработки более менее большого веб-приложения. Очень много нужно придумывать/писать инфраструктурного кода, чтобы симулировать что-то наподобие managed beans, session management, трансакции, как таковой не существует template engine… Ок, можно вроде каким-то хаком подключить Spring, но вроде тоже как-то не совсем понятно.

Я пытаюсь на базе Yoke Framework (http://pmlopes.github.io/yoke/) сделать небольшое веб приложение, и к сожалению, прихидтся изощрятся, чтобы тривиальные вещи работали (к примеру templating с локализацией).
С превиликим удовольствием купил бы книгу, бумажную. Может даже три-четыре, знакомым на подарки. Но пересылка стоит в 1,5 раза дороже самой книги!
не по теме вопрос, но может знающие люди подскажут.

На моем Note II появилась страшная и довольно глубокая царапина, больше половины экрана. Она, зараза, становится все больше и больше. Что делать? Есть варианты замены экрана?

Блин, аппарату месяц. К сравнению с Milestone за три года практически ничего не стало…
:) это я специально привел неточность, так как с вероятностью 100% «стартарпер» будет проведен вокруг пальца оценкой инвестора (он попытается взять большую долю за меньшие деньги),

Есть такое понятие, как оценка компании и есть минимум два способа оценить долю инвестора. Это так называемые Pre-Money/Pre-Invest и Post-Money/Post-Invest:

Пример:

Pre-Money
Стартарпер 1.000 Т€ — 77%
Инвестор 300 Т€ — 23%
Всего 1.300 Т€ — 100%

Post-Money
Стартарпер 700 Т€ — 70%
Инвестор 300 Т€ — 30%
Всего 1.000 Т€ — 100%

как видим на этом примере, за одну и туже инвест.-сумму можно получить разницу в ту или иную пользу в несколько процентов. И это естественно, что инвестор захочет провести Post-Money оценку…

Так же существует еще куча всяких нюансов и трюков с помощью которых стартарпер лишается практически всего и переходит в стадию рабства… Но это уже в принципе из разряда пугалок. Смысл во всем этом в том, чтобы идти на поиск инвестиций с четким пониманием, что от тебя захочет инвестор и какие возможности для «торговли» (и рычаги влияния) имеются у стартапа.
Ну просто какой-то непрофессиональный подход со стороны организаций, которые вы контактировали… в том смысле, что не отвечают на заявки, или пропадают.

Мы в одно время сделали громадную ошибку, что начали имея практически ничего не умеющий прототип искать инвесторов, чтобы найти деньги на «следующий год». И все попытки были безуспешные, пока мы наконец не поняли, как работают венчурные инвесторы и какие стартапы им действительно (могут быть) интересны.

Вкратце (ситуация на западе, в России/Украине думаю, что примерно также, т.к. деньги работают везде примерно одинаково):

image

1) венчурный инвестор имеет фонд, допустим примерно 100 миллионов в условной валюте. Фонд состоит из денег/инвестиций партнеров венчурного инвестора (банки, страховки, инвест.компании и др. фонды), которые диверсифицируют свои деньги и маленькую часть вкладывают в такие высокорисковые инструменты. От этих вложений эти так называемые Limited Partners ожидают 20-30% в год, что дает примерное увеличение капитала через 10 лет (срок фонда инвестора) в 10 раз. Важная ремарка в этом месте: несмотря на то, что инвестор «венчурный» эти 20-30 процентов практически гарантируются партнерам.

2) 100 милл. фонд управляются примерно 5тью инвест-менеджерами, которые непосредственно вкладывают от 3 до 5 миллионов в стартапы/бизнесы. Каждый из этих менеджеров в состоянии работать за раз лишь с ограниченным кол-вом проектов. Они отбирают кандидатов (на входе примерно 1000 проектов), проводят основательный Due Dilligence и участвуют в операционной деятельности компаний.

3) Теперь самое интересное. Ожидается, что от каждой компании в фазе Desinvest вернется назад примерно 50 миллионов. Эти ожидания обоснованы теорией вероятности, т.к все-таки не все компании могут быть проданы за такие суммы, но цель для всех компаний одна: вернуть половину инвестфонда с одной компании, чтобы даже и при разорении половины бизнесов и партнеры в след. фонд инвестировали и чтобы сам инвестор смог хорошо жить.

4) Выводы для стартапов: допустим, инвестор дает 5 Мио за 33%. Это значит, что он оценил стартап в 20 миллионов. Через пять-семь лет он будет выводить деньги с ожиданием получить за свою долю 50 мио. Значит, ваш бизнес должен оценочно вырасти за 200 и быть настолько привлекательным, чтобы кто-нибудь смог выкупить долю инвестора.*)

К сожалению не каждая бизнес модель способна показать такой перформанс. Так же не имеет смысла просить меньше 5 мио, так как для инвестора нет никакой разницы: 3 или 5, мороки одинаково много, а больше они врядли могут дать, так как тоже должны диверсифицировать фонд.

В общем мы для себя из этого извлекли уроки, в кратком тезисе которые гласят:
— Если нужно меньше 5 мио, не иди к венчурным инвесторам, потерянное время
— Если твой бизнес план, при самом консервативном планировании не показывает взрывного роста, за пять лет, то соватся к венчурным инвесторам потерянное время, т.к инвестор оценивает в первую очередь потенциал роста.
— Если все таки будешь решительно ходитъ по инвесторам, ты ничего не сделаешь для своего проекта, но поднимешь скиллы в финансах и будешь понимать как работает венчурный инвестор… :)

*) все цифры примерны, существует еще много нюансов в оценке компаний, типа pre invest/post invest. итд. Но пример, я думаю понятен.
Супер!

Прям как у нас в проекте и на собеседованиях с кандидатами:) Вы в очередной раз подняли мне настроение. Спасибо.
уважемые изобретатели, а имеется лабораторный прототип? Ну хотя бы чтоб лампочка в 1,5 вольта горела.
спасибо, надо попробовать. В прошлом/позапрошлом годах стояла задача обрабатывать ODF-документы на сервере. Отложили на «потом», так как к тому времени ничего похожего как POI и JExcel для ODF не было.
не подскажет кто-нибудь похожий API на Яве для ODF-документов (OpenOffice, LibreOffice)?
Не совсем понятно, микро-хабр отключили что-ли?
Его больше не будет?
администрация хабра разочаровывает…
чем вы им так насолили?

попробую написать в саппорт, чтобы разблокировали топик. пусть общественность «за- или отхабривает».
а как посмотреть, запись вроде как в черновиках…
нет не посчитают, пишите, это очень полезная информация
проходил случайно мимо, никак не могу не оставить комментарий :)

все последущее, несмотря на категоричность является исключительно личным мнением (хоть и проверенным во многих проектах) не претендующим на истину в последней инстанции

1.) никогда никогда никогда не используйте ordinals в «перeчислениях» в Яве. Это очень опасно, так как значения (literals) часто меняются. Если где-то используется порядковое значение как ключ, то это очень плохой знак, можно даже сказать, плохой дизайн системы. Гораздо лучше использовать в перичислениях собственные идентификаторы, основанные на предметной области, хотя бы строковые. Пример:

public enum CustomerStatusType implements MyEnum {
ACTIVE("ACT", "Active"),
DELETED("DEL", "Deleted"),
SUSPENDED("SUS", "Suspended");

private String id;
private String description;

private CustomerStatusType(String id, String description) {
this.id = id;
this.description = description;
}

@Override public String getId() {return this.id;}
@Override public String getDescription() {return this.description;}
public static CustomerStatusType getInstanceById(String id) {...}
}


Если этот энум расширить, к примеру добавить до ACTIVE статус CREATED(«CRT», «Created»), то порядковое значение «старых» элементов изменится, но не их идентификаторы. При использовании порядкового значения (ordinal) как идентификатора, произойдет неименуемый крах. Несомненно лучше использовать getId и getInstanceById.

2) EclipseLink и Hibernate позволяют использовать так называемые CustomMapper (UserType). С их помощью можно добится «прозрачного» писания и считывания идентификаторов в базу. К тому же иногда бывает, что нужно сохранять не одно значение, а список. Желательно этот список сохранять как список идентификаторов в одной строке, а не как foreign keys в n-to-m-relation-таблице.

Короткий пример использования, насчет реализации должен к сожалению отослать к документации Hibernate или EclipseLink, там есть примеры.

@Entity
public class Customer {

@Type(type = "example.EnumerationIdMapper", 
parameters = { @Parameter(name = "classname", value = "example.CustomerStatusType") })
@Column(name = "status", nullable = false)
private CustomerStatusType status;

@Type(type = "example.EnumerationIdListMapper", 
parameters = { @Parameter(name = "classname", value = "example.CustomerStatusType") })
@Column(name = "statuses", nullable = true)
private List<CustomerStatusType> statuses;

}

/**
* пример 
*/
public class EnumerationIdMapper implements UserType, ParameterizedType
...
    protected Class myEnum = null;
    protected Method getInstanceById =null;

    /**
     * @see org.hibernate.usertype.UserType#nullSafeGet(ResultSet, java.lang.String[],
     *      java.lang.Object)
     */
    public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner)
            throws HibernateException, SQLException {
        MyEnum targetObject = null;
        try {
            String id = resultSet.getString(names[0]);
            if (!resultSet.wasNull()) {
                targetObject = (MyEnum) this.getInstanceById.invoke(
                        myEnum, new Object[] { id.trim() });
            }
       catch (Exception e) {
         // do something...
        }
        return targetObject;
    }

    /**
     * @see org.hibernate.usertype.UserType#nullSafeSet(PreparedStatement, java.lang.Object, int)
     */
    public void nullSafeSet(PreparedStatement statement, Object value, int index)
            throws HibernateException, SQLException {
        if (value == null) {
            statement.setNull(index, Types.VARCHAR);
        } else {
            statement.setString(index, ((MyEnum) value).getId());
        }
    }

    /**
     * @see org.hibernate.usertype.ParameterizedType#setParameterValues(java.util.Properties)
     */
    public void setParameterValues(Properties properties) {
        if (properties == null) {
            return;
        }
        String className = properties.getProperty("classname");
        if (className == null || className.length() == 0) {
            return;
        }
        try {
            ClassLoader cl = Thread.currentThread().getContextClassLoader();
            Class<?> clazz = cl.loadClass(className);
            this.myEnum = (Class<T>) clazz.asSubclass(Enum.class);
            this.getInstanceById = myEnum.getMethod("getInstanceById",
                    new Class[] { String.class });
        } catch (ClassNotFoundException cnfe) {
            throw new HibernateException("class not found", cnfe);
        }
    }

...
}



Ну и плюс можно использовать JPQL.:

Query query = em.createQuery("select c from Customer c where c.status:=statusValue");
query.setParameter("statusValue", CustomerStatusType.ACTIVE);


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

В моем случае, вы меня, как потенциального заказчика проиграли. Вряд ли я когда-нибудь загляну на вашу страничку.

В любом случае: делайте ваше дело! Упорства и успехов!
1
23 ...

Information

Rating
Does not participate
Location
Германия
Date of birth
Registered
Activity