HNHacker News
TopNewBestAskShowJobs

asavinov

283 karma · joined July 10, 2016

https://github.com/asavinov - My projects

https://github.com/asavinov/intelligent-trading-bot Intelligent Trading Bot: Automatically generating signals and trading based on machine learning and feature engineering

submissionscomments
asavinov··on Fieldbook is shutting down
Sad to see it go. I had professional interest to Fieldbook because I had been developing a similar "spreadsheet"-like application intended for radically changing the way table table is processed - http://conceptoriented.com - and failed. Finally, I decided to move this (quite unique) technology to completely different area and re-implement it as a kind of major alternative to MapReduce focused on general-purpose batch and stream processing (mainly IoT and edge analytics): https://github.com/asavinov/bistro

I am curious to see what happens with other apps like airtable, rowshare or zenkit and the whole market. Will they be able to survive as independent companies (like Tableau or Qlik in self-service BI)?

asavinov··on Giving meaning to 100B analytics events a day with Kafka, Dataflow and BigQuery
> Giving meaning to ...

Ingesting such amounts of data is a challenge indeed. But problems will become much more complicated if it is necessary to perform complex analysis during data ingestion. Such analysis (not simply event pre-processing) can arise because of the following reasons:

* It is physically not possible to store this amount of events. For example, assume you collect them from devices and sensors

* It is necessary to make faster decisions, e.g., in mission critical applications

* It can be more efficient to do some analytics before storing data (as opposed to first storing data persistently and then loading it again for analysis)

Such analysis can be done by conventional tools like Spark Streaming (micro batch processing) or Kafka Streams (works only with Kafka). One novel approach is implemented in Bistro Streams [0] (I am an author). It is intended for general-purpose data processing including both batch and stream analytics but it radically differs from MapReduce, SQL and other set-oriented data processing frameworks. It represents data via functions and processes data via column operations rather than having only set operations.

[0] Bistro: https://github.com/asavinov/bistro

asavinov··on Featuretools – An open source framework for automated feature engineering
I have also been a similar to tool for automatically extracting (informative) features. What I am trying to understand is whether it is possible to store the learned feature definitions for later use. For example, I want to learn interesting features from a large data set and then I want to apply these feature to smaller data sets, say, for prediction.
asavinov··on Ask HN: Best way to build a data collection pipeline?
Bistro Streams is an open source light-weight stream analytics engine: https://github.com/asavinov/bistro

It is a general-purpose and highly configurable data processing engine which can be applied to many workloads and scenarios including data integration, data migration, ETL, big data processing etc.

asavinov··on Applied Category Theory
Functional Programming and Category Theory: http://nikgrozev.com/2016/03/14/functional-programming-and-c...
asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
> Bistro creates just a new column in an existing table.

What is new is that this column can use data from other tables - not necessarily this one. And eventually Bistro gets rid of joins and group-bys which are not difficult to understand but frequently their use is inappropriate, for example, in most cases, joins are used where we actually want to link two tables (new relation is not needed).

Note also that we cannot avoid set operations and creating tables. Therefore, Bistro also supports table creation. Yet, it does it in a functional way, that is, by defining a new columns.

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
Honestly, this looks like a query and analysis system that could be built on top of a column store so you don't need to deal with the storage part of the system yet. (I'm a big KBD+ fan).

I like this idea because it allows for reusing an existing engine and, what is important, integrate it with many different engines (which might have already quite sophisticated mechanisms of data managements). Yet, such an engine has to expose quite low-level operations with data. Also, there has to be support for user-defined functions (lambdas).

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
You are right - it is an MVP, and the goal is to choose a direction. In fact, I am still not sure in which direction to go:

* JavaScript data processing framework for in-browser data processing

* Python framework like pandas

* Big data processing framework like Spark

* Database management system

* Data integration system like typical ETL and BI

* Stream analytics like Kafka Streams

* IoT (light weigh) stream processing engine

* Something else?

I would be very thankful for any suggestion from people who know the market and (acute) needs of the customers. What is the best niche for this kind of technology?

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
Source code for this web-app and previous projects:

* UI (Angular 2): https://github.com/asavinov/sc-web

* REST server: https://github.com/asavinov/sc-rest

* Core engine: https://github.com/asavinov/sc-core - Bistro is a complete rewrite of this project

There is an (old) implementation of this idea in C#:

* UI (WPF): https://bitbucket.org/asavinov/dc-wpf

* Core engine (C#): https://bitbucket.org/asavinov/dce-csharp

And also some old Java implementation the engine in Java:

* https://bitbucket.org/asavinov/dc-core

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
Bistro is not about a physical model and columnar (physical) representation although it relies on it. It is about logical level of representation and processing.

There are at least three major questions when we want to introduce a new logical data model:

* How we define columns within one table. Conceptually, it is easy, e.g., SELECT x, y, c = a+b FROM T. Yet, even in this simple case we see a controversy: this statement will create a table but our goal is not to create a table - we want to create a column (function). Bistro uses calc operation for that purpose. But it is of course not new. In pandas, for example, one can use df.apply.

* How to connect several tables. RM, map-reduce and other set-oriented approaches use join which produces a new table. Here we have a similar controversy [1]: I do not want to produce a new table, it is not my goal. My goal is to link these two tables and this means creating a new column. Bistro introduces link operation for such columns.

* How to aggregate data. Here a typical operation is group-by. It is an eclectic operation which combines several other operations and such an approach also has some problems [2]. Bistro changes the way data is aggregated by introducing accumulate functions which get one input (not a subset) and return one output value. An accumulate function is called for each element of the group by updating the current aggregate instead of computing the aggregate by getting the whole group.

So linking and aggregation are what distinguishing Bistro from other approaches and frameworks to data processing including pandas, SQL and map-reduce.

[1] https://www.researchgate.net/publication/301764816_Joins_vs_...

[2] https://www.researchgate.net/publication/316551218_From_Grou...

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
> What is the use case?

This is what I am trying to understand myself :) Previously I have implemented this approach as a web-app (self-service tool for working with tables where users can define columns as formulas - similar to spreadsheets). Discussed here: https://news.ycombinator.com/item?id=14351461 But it is too difficult to implement (much more resources are needed) so I switched to developing a library.

Now I want to implement a server for in-stream analytics (an alternative to Kafka Streams). Hopefully, in the next version of Bistro. It will have quite significant portions of data processing logic in UDFs (retention policy, when to evaluate, how to add etc. when to do what).

> Does it support time series? How works you do a moving average or pivot table?

I am designing it now as a tool for stream processing (Bistro Streams) and hence it will support time series (each new row will get a time-stamp and the system will "know" how to deal with time).

Current approach to user-defined functions (Evaluator interface) does not support moving average or other rolling aggregations. New API will be defined. This task has high priority since it is very important for stream analytics.

Pivoting is conceptually more difficult because it is not an operation with data - it is an operation with schema (using data). Maybe some kind of ad-hoc solution will work.

asavinov··on Show HN: Bistro – A light-weight column-oriented data processing engine
At the physical (storage) level it is in-memory and organized as a column store, that is, internally it stores a list of tables (with no data) and a list of columns (each being a Java array).

It is definitely interesting and important to implement persistence (for example using Parquet or Arrow) as well as other mechanisms like sharding or replication (for big data processing, fault tolerance etc.) Yet, currently this direction has lower priority because the next task I want to focus on is in-stream analytics (an alternative to Kafka Streams).

In general, the whole approach is focused on the logical level of data modeling and processing, that is, the goal is to increase performance and simplicity of development. The general idea (and hypothesis) is that defining how data is being processed using column operations is easier, more intuitive, less error-prone and easier to maintain than using purely set-operations.

In other words, at logical level, it is an alternative to map-reduce, SQL, pandas and other models and frameworks where set-operations are used to process data.

asavinov··on Ask HN: What did you work on in 2017?
I finished Data Commander (MVP) - http://conceptoriented.com - A web-app for column-oriented data transformations.

After getting some feedback I decided to position this technology differently. Instead of exposing the functionality via web app, I started implementing a Java library http://github.com/asavinov/bistro - an alternative to map-reduce. In 2018 I am going to develop a server for IoT and stream analytics - an alternative to kafka stream analytics based on Bistro.

asavinov··on Ask HN: What were the most important new programming languages released in 2017?
especially if it is about programming languages which evolve for many years
asavinov··on What are the complex numbers, really?
I like this idea of representing inner (dot, scalar) product and outer product as one construct with two constituents which behaves like a complex number. This analogy with geometry makes complex numbers more realistic.
asavinov··on How should you build a high-performance column store for the 2020s?
An index for a column-store and row-store is (conceptually) the same. Why is different is

1. How data is represented. A database is a collection of column objects. For example, it is easy to create a column or delete a column.

2. How data is being processed (queried). The engine processes columns as objected managed by the system

asavinov··on Capsule Networks Explained
Here are some other posts explaining the nature of capsule networks, their goals and how they work:

- https://medium.com/@pechyonkin/understanding-hintons-capsule...

- https://hackernoon.com/what-is-a-capsnet-or-capsule-network-...

asavinov··on Eight years of Go
> ... while paying much less attention to the vocal minority's complaints (generics, package system, etc).

It is much more difficult not to add a feature than to add it, and the ability to reject even important feature requests is very important for the survival of a system in long term. This observation is formulated in "Getting Real" (https://gettingreal.37signals.com) as "Forget Feature Requests" and "Start With No".

asavinov··on Bitcoin mining heats homes for free in Siberia [video]
There is a startup which installs their servers in private homes and other buildings where they are used for heating. They essentially connect the market of server computing and heat.

[1] https://cloudandheat.com

[2] https://www.informationweek.com/cloud/heating-your-house-wit...

asavinov··on Near Future of Programming Languages [pdf]
I would say that it is a two-directional dependency:

  language constructs <--> design patterns
Programmers experiment with and accumulates various design patterns using existing languages. Then the most useful of them are implemented (frozen) as programming constructs. Then programmers experiment with these new programming constructs and come up with new design patterns. And so on.

In fact, these design patterns and language constructs come in (anti-phase) waves.

asavinov··on Near Future of Programming Languages [pdf]
> A focus on programming languages in my opinion, masks the real issues we face.

Indeed, major problems of programming languages can hardly be solved in the area of programming languages itself as it is being done now.

I would say that one needs a new programming or computing model so it is not about languages. At least it is my conclusion after 10+ years of research and attempts to develop such a new programming paradigm. And although I have quite significant progress (concept-oriented programming), the more I do and the deeper I go, the more fundamental problems I meet. And these problems are not about programming languages at all. It is more about "how a system works", "what is a system", "what is computing" etc.

asavinov··on Classification of the principal programming paradigms
> The idea of "programming paradigms" is not a useful way to talk about programming language design.

The term "paradigm" is too general indeed and therefore can be quite ambiguous in many situations because it covers different aspects like the underlying computing model or language design.

asavinov··on The Nobel Prize in Physics 2017
The idea of using laser interferometer for detecting gravitational waves was first proposed in 1962 (shortly after inventing lasers) by M. Gertsenshtein and V. Pustovoit [1]. So it took more than 50 years from the idea to its implementation.

[1] http://www.jetp.ac.ru/cgi-bin/dn/r_043_0605.pdf (in Russian, Abstract in English at the end).

asavinov··on What are covariance and contravariance?
Covariance can be thought of as a mechanism for overriding functions. Assume there is a (base) function

    f: X -> Y
We want to override it by providing a new mapping from U to V:

    f: U -> V
This mechanism is said to be covariant if the new function guarantees that

    If u <: x then v=f(u) <: y=f(x)
This means that for each more specific input u in U the function returns more specific (not more general) output v in V.
asavinov··on Show HN: Data Commandr – As Easy as a Spreadsheet, as Powerful as SQL
> How do I schedule my transformations so they happen on a recurring basis?

Currently formulas are evaluated only when the user explicitly presses Evaluate button (or using explicit API call).

The logic of automatic evaluations is work in progress and it is needed more for data integration or stream analytics. It is assumed that the formulas will be evaluated under certain conditions on regular intervals (say, one time per second), on certain events (after 10 appends) and so on.

> I would like to try the tool but keep getting a "Server Error" message

Hm, I have just checked and it works. It uses JSESSION so cookies must be enabled or may be some problem with the old session id so try to open new clean browser window.

It is MVP so there defenitely can be some technical problems. Sorry for that and thanks for testing it.

asavinov··on Show HN: Data Commandr – As Easy as a Spreadsheet, as Powerful as SQL
It could be a technological (column-oriented) alternative to what map-reduce in general and Spark with RDDs in particular are doing. It might be easier to define a data processing workflow as a number of column definitions rather than as a graph of collection transformations. And such a column transformation workflow could be also more efficient at run time.

Here is my implementation of this column-oriented approach as a Java library for server-side transformations: https://bitbucket.org/conceptoriented/dc-core

asavinov··on Show HN: Data Commandr – As Easy as a Spreadsheet, as Powerful as SQL
Data Commandr: http://conceptoriented.com (Version 0.6.0, 2017-05-14)

Data Commandr (DC) is a web application for working with tables. Its goal is to make complex operations with data tables as easy as working with classical spreadsheets (but it is not a spreadsheet application) for producing reports, data integration, data migration and other data wrangling tasks. Its main distinguishing feature is that it does not use traditional (set-oriented) queries but rather relies on column formulas to derive new data.

I would like to get your option about Data Commandr from three points of view:

- [As developers] How do you like the current UI and general design? How it can be improved?

- [As users] Can such a tool be useful for working with tables?

- [As investors] What other tasks can be solved by using this approach? For example, I want to pivot in the direction of stream analytics. Or it could be applied to tasks where Spark is normally used (DC might have much higher performance and much simpler data processing language.) Other applications: data dictionary and data catalogs.

Thank you in advance for testing the app and your feedback.

COMPARISON:

- [Spreadsheets] In spreadsheets, a cell is defined as a function of other cells so we get a functional model where the result of each cell (one value) is computed by evaluating other cell formulas. In contrast, DC uses columns instead of cells so that a model is a number of column formulas.

- [Set-oriented approaches] In set-oriented approaches (RM, Hadoop, Spark etc.), new data is derived by applying an operation to input sets and producing an output set. Data transformations are represented as a graph of set operations. In contrast, data transformations in DC are represented as a graph of function operations.

- [Research] Formally, Data Commandr relies on the concept-oriented model of data [2]. In particular, DC does not rely on such difficult to use and understand operations like join and group-by. Instead, it uses link columns [4] and accumulate functions [1], respectively.

- [Competitors] When I started this project [5] I knew only one similar product which is Power BI and its DAX language. Now there exist such relatively new products like airtable, fieldbook and rowshare.

[1] A. Savinov. From Group-By to Accumulation: Data Aggregation Revisited. Proc. IoTBDS 2017, 370-379, 2017. https://www.researchgate.net/publication/316551218_From_Grou...

[2] A. Savinov. Concept-Oriented Model: the Functional View. arXiv:1606.02237 [cs.DB] 2016. https://arxiv.org/abs/1606.02237

[3] A. Savinov. DataCommandr: Column-Oriented Data Integration, Transformation and Analysis. Proc. IoTBD 2016, 339-347. https://www.researchgate.net/publication/301764506_DataComma...

[4] A. Savinov. Joins vs. Links or Relational Join Considered Harmful. Proc. IoTBD 2016, 362-368. https://www.researchgate.net/publication/301764816_Joins_vs_...

[5] A. Savinov. ConceptMix: Self-Service Analytical Data Integration Based on the Concept-Oriented Model, Proc. DATA 2014, 78-84 https://www.researchgate.net/publication/265301356_ConceptMi...

asavinov··on Understanding deep learning requires re-thinking generalization
> Understanding deep learning requires re-thinking generalization

Deep learning is called deep because it is based on multiple levels of features corresponding to a hierarchy of notions. Of course, it can change how generalization as well as other operations are performed but the way generalization is done not a specific feature of deep learning.

asavinov··on Esoteric programming paradigms
(I can be wrong but) as far as I understand E is based on objects and messages as primary mechanisms, that is, we do not know where objects exist, how they are managed and how messages are transferred. Concept-oriented programming (COP) is a references-first approach while objects are defined as being functions of references, that is, object is a derived (secondary) element of the model and the goal is to be able to have full control over this mechanism (custom heap, custom garbage collection, custom access control and security model etc.)

What I see similar in object-capability model and COP is that they both try to treat object access as a highly important part of a system behavior. In COP, I used to write that it is more important what happens during access rather than in the object itself. Hence, being able to make these intermediate actions integral part of the program (and develop good PL for that purpose) is very important.

asavinov··on Esoteric programming paradigms
Would like to mention concept-oriented programming [1] which is work in progress but has highly ambitious goals of changing the way we think of programming. The initial idea is to make references active and customized elements of the program which can intercept all accesses to the represented objects. A new programming construct, called concept (hence the name of the approach), describes both behavior of references and behavior of objects. Objects exist in a hierarchy modeled by the concept hierarchy. IS-IN relation is used instead of the traditional IS-A. Also, concept-oriented programming distinguishes between incoming and outgoing methods, that is, every method has two versions: for external access and for internal access. More papers in [2].

[1] https://arxiv.org/abs/1501.00720 [2] https://www.researchgate.net/profile/Alexandr_Savinov

Disclaimer: I am the author of concept-oriented programming and data model

← PreviousPage 3 of 4Next →