Hacker Newsnew | past | comments | ask | show | jobs | submit | asm89's commentslogin

PHP in Browser has done this: https://oraoto.github.io/pib/.


What I find interesting about the Elasticsearch story is the success it has given that the core product (the search server) is completely open source.


My fear is that with money comes an 'Enterprise' edition.


I don't think the "open core" model is in their best interests. Look at a company like Zenoss, where their OSS version is their biggest competitor. It doesn't make sense for ES to do that.

Now marvel[1] is where they've started monetizing and I'm sure they make a good bit of money from "professional services" teaching companies how to deploy ES at scale. Hopefully they pull it off, as the world needs a good competitor to splunk. ES has the backend tech, but kibana has a loooooong way before it rivals the interface for searching splunk. Here's to hoping!

[1] http://www.elasticsearch.org/overview/marvel/download/


Marvel is quite interesting. It is a product everyone _could_ build on their own (basically, it is Kibana over their own metrics data), but at that price point, there is no reasonable reason to do so.


I was in a class with the founders a few months ago - for whatever it's worth, they're vehemently opposed to segregating functionality like this.

Their plans are to offer support, and make their bones that way. Elasticsearch is a complex enough product at scale that this would probably be quite lucrative.


ElasticSearch is a sufficiently complex system that can be implemented in a ton of different ways to solve a ton of different problems. I'm sure there are more than enough consulting gigs floating around for them make a good bit of money both on actual consulting and selling additional software packages.


What would be so bad about an enterprise edition? Many companies require extra support and would pay for the enterprise edition and wouldn't even consider the product without this option.


Elastic Search make their money from Enterprise support licenses. There are so many ways of installing it , scaling and optimizing depending on application. Don't forget the training around. You have IBs like Goldman Sachs using it for log analytics. So the services around that are needed and real. I don't think they will need an enterprise version.


The name looked familiar and it's indeed inspired by the Faker library for PHP: https://github.com/fzaninotto/Faker

Another interesting library that is build on top of Faker is Alice. It allows you to define complex fixtures in .yml: https://github.com/nelmio/alice


Aren't they all kind of inspired by the original Perl implementation? I use the Ruby one for testing.

Something kind of similar and worth thinking about is this:

http://en.wikipedia.org/wiki/QuickCheck


I was just about to comment the same thing about QuickCheck. Arbitrary data galore.

I've only done serious work with QuickCheck in Haskell but here's the python implementation I've played with: https://pypi.python.org/pypi/pytest-quickcheck/


> Aren't they all kind of inspired by the original Perl implementation?

The original Perl implementation is Data::Faker (https://metacpan.org/pod/Data::Faker). The earliest version available on CPAN appears to be from 2005.


Wondering how effective this is for getting a competitor website to block for example the google crawler. Maybe that's the motive.


Rotterdam, The Netherlands - Full time - Senior PHP Developer - Qandidate.com

Come and join our team in our quest to build the best recruitment software in the universe...and beyond ;-)

You will be working at our head office in Rotterdam, developing Qandidate.com, diverse internal back-office applications, internal and external API's.

You get to work with experienced colleagues with a strong vision on web development and software architecture, giving you a full intellectual challenge every day. One day of your work week will be dedicated to R&D, prototyping and researching new processes, techniques and tools to move the development of Qandidate.com to the next level. If you want to push your web development knowledge to the next level, come join us!

# At Qandidate.com we use the following (and this list is growing):

  - LAMP + Elasticsearch
  - Symfony2 / Yii (legacy)
  - Git and GitHub
  - IRC
  - Test driven development
  - Constantly investigating new stuff like DDD / CQRS / Event sourcing / devops / ...
  - Our architecture is moving to decoupled applications, working together to provide the platform that runs Qandidate.com.
# What do we ask from you?

  - You have a Bachelor’s or Master’s degree in Computer Science (or equivalent)
  - Strong object oriented programming skills
  - Experience with developing with a framework such as Symfony2, Yii, or Zend2
  - Experience with test driven development
# What do we offer you?

We offer an excellent salary, an Option plan (SAR’s) and additional incentives every 6 months when we hit our company targets. Think of a day at the spa, dinner for two at a Michelin star restaurant or designer sunglasses of choice. We also have a pension scheme and if you like socializing, you’ll be pleased to know that there are plenty of outings and get-togethers taking place!

Meet your new colleagues! http://qandidate.com/tag/meet-the-team/

# We also offer:

  - 25 holidays days;
  - flexible working hours;
  - time and budget for training;
  - communal lunch every Tuesday;
  - laptop with SSD and 16GB RAM + docking station and two 24” screens at your desk;
  - 20% time for R&D;
  - great coffee ;-)
# About Qandidate.com

Qandidate.com is the new and free recruitment system for those companies looking to improve and take direct control over their recruitment activities. Designed for in-house recruitment, Qandidate.com offers customers an alternative to Outlook and Excel by providing a refreshingly easy-to-use online recruitment system. Qandidate.com provides all the information and tools they need to create an effortless recruiting process. Customers can track and manage their applicants anytime, anywhere. All for free!

Interested? Drop me a mail at iam.<my hn nick>@gmail.com.


The draft was released earlier this month. There was an interesting discussion about it back then too: https://news.ycombinator.com/item?id=6012525

At the same time I also submitted another article that I still think is interesting and relevant as of today: https://news.ycombinator.com/item?id=6014976


Longer explanation of why there is no SSL in Varnish can be found here: https://www.varnish-cache.org/docs/trunk/phk/ssl.html.


I agree on the Multiple Users being very useful. I have a user for my private browsing, one for company related user accounts and more.

The benefit for me is that this does not only work for for Google related products (gmail/analytics), but also for other products you use. In our case Outlook Web Access, but also for example Trello and GitHub.


They might look tacky in first place, but I assume they are related to the dollar signs in the stacktraces of code with threading and anonymous functions. :)

    ...
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply$mcII$sp(IdentityVerifier.scala:19)
    ...
    at com.company.UserCreatorMain$1.run(UserCreatorMain.java:37)
    ...


Agreed.

I look at Scala stacktraces fairly often (but not that often, because static typing) and I didn't get the dollar signs until I read the blurb on their page. Notice that Scala doesn't replace S with $ as they're done, but rather puts $s around words. I think it would be better to use a headline like

Make Sense of your $Scala$$stack.trace


It's hard to give a TL;DR on the whole library, but case classes can be used with for example pattern matching (https://github.com/lihaoyi/macropy#pattern-matching).

The following code:

  with patterns:
      Foo(x, Bar(3, z)) << Foo(4, Bar(3, 8))
The constructor after the << will be matched with the part before <<. It will only match if the first argument of "Bar" is 3. If that's the case, x and z will be bound to 4 and 8.

Does this help? :)


I'm sure there's a use-case for this, but I'm not coming up with one off the top of my head. This comes across as an extremely rare type of problem to encounter.

What's the purpose of only binding x and z if the first argument of Bar matches? What if it doesn't match? Is an exception thrown? Are x,z just None?

[Note: I'm talking about the example, not the @case decorator, which does seem useful]

Edit:

After reading the library examples, the explanation above is not entirely clear:

  with patterns:
      Foo(x, Bar(3, z)) << Foo(4, Bar(3, 8))
here's the rest of the example:

    print x   # 4
    print z   # 8
I was thinking that somehow a new Foo instance was created only when the pattern matched. (Oh, and an exception is thrown when the match fails)


Author here. The `<<` operator is being abused to mean "bind", so the right side is a normal expression (constructing a Foo and Bar) and the left side matches it to a particular "shape".

The purposes of pattern matching is to replace code that looks like this:

    if  (isinstance(tree, BinOp)
            and type(tree.left) is Name
            and type(tree.op) is Mod
            and tree.left.id in module.expr_registry):
        ...
with code that looks like this

    if BinOp(Name(id), Mod(), body) << tree 
            and id in module.expr_registry:
        ...
Which looks much nicer, and more clearly says what you want: that `tree` "looks like" a particular shape.

EDIT: Here's another example. Turning this:

    if  ((isinstance(tree, ClassDef) or isinstance(tree, FunctionDef))
            and len(tree.decorator_list) == 1
            and tree.decorator_list[0]
            and type(tree.decorator_list[0]) is Name
            and tree.decorator_list[0].id in module.decorator_registry):
        ...
into:

    if  ((isinstance(tree, ClassDef) or isinstance(tree, FunctionDef))
            and [Name(id)] << tree.decorator_list 
            and id in module.decorator_registry):
        ...
Doesn't quite work yet, but we're getting there


Personally, I find those to be better 'real world' examples. I would suggest including them in the docs. Thanks for the explanation!


With pattern matching, the term on the left is a destructuring of the term on the right. Using a static instance like that isn't what you normally do in practice, but rather something like:

    myfoo = Foo(4, Bar(3, 8))
    with patterns:
        Foo(x, Bar(3, z)) << myfoo
        
So in this case, the assertion will only pass if the Foo contains a Bar in the second slot, and that Bar contains a 3 in its first slot, while also binding the 4 and 8 to their own names, x and z respectively.


That's known as destructuring-bind: http://www.lispworks.com/documentation/HyperSpec/Body/m_dest...

Is that a macro created by this library or a feature of the library?

Edit: I did some reading and it looks to be a feature macro of the library.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: