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


Same here. Still on 0.18, no upgrade path as 70% of my deps never upgraded. Awaiting rewrite in vue/react/etc


You can just vendor those dependencies, that's what I did, but I only had one that didn't update. And that one was trivial to fix.


With Fourier you can analyze oscillatory characteristics of function (frequency and phase). With Laplace you can also analyze amplification/attenuation.


The Fourier transform, well, transforms a time-based phenomenon such as an alternating current sine wave into a frequency spectrum where you can observe the frequency spectrum components of the signal. A pure nice sine becomes a spike (delta function) located at a specific frequency. Music, as we observe it through our ears and can view it on an oscilloscope becomes moving spikes (lots of them :) in the frequency spectrum where the "amplitude" at a given frequency relates to the "amount" of that frequency in the music.

The behaviour of a filter is much easier to describe in the frequency spectral domain than it would be in the time domain.

Now to the direct current (DC) view. This cannot be handled by the Fourier transform -- at least the DC-part of the signal cannot be transformed to the frequency domain. As shown in the article, there were "steps", "ramps" and such. A typical scenario would be to describe what happens in your amplifier during startup, to describe how electrical circuits are behaving during startup before reaching the "running" state.

The Laplace transform will handle these types of scenarios, and can thus be used to study (or describe) systems during other types of transitions than the "steady state" when you are up and running.

Regarding filters, the Fourier transform describes things going on at the unit circle, while the Laplace transform can be used to study both the interior and exterior of the plane. In this sense, creating filters relates to locate "poles" and "zeros" in the plane (amplification and attenuation) which can be observed on the unit circle as the behaviour on periodic signals.


Why can DC not get fouriertransformed? Usually the f(p=0) is the DC component.


You need to switch your data representation to 0x88 [1] or bitbords [2] to get anything performant. You won't get anywhere with a class hierarchy

[1] https://www.chessprogramming.org/0x88 [2] https://www.chessprogramming.org/Bitboards


If someone just wants a library to power a chess UI this isn't really necessary. Either way I'd suggest the author finish off the current implementation until they can get perft and other automated tests up and running first.

That said, chess programming is a _wonderful_ education in Computer Science, and you'll be following in the footsteps of so many great figures in the industry. Understanding bitboards and how to work with them can take you all the way from the bit-twiddling chapters of The Art of Computer Programming, right up to recent advances in CPU architecture and instruction sets. Learning how search works will teach you both very low techniques and high level heuristics in performance optimisation. And of course you can go all all the way up to recent advances in evaluation from deep learning.


You need to consider the goals of a project before giving advice.


OP mentions chess AI and game analyzer. Those would benefit from an optimized data representation.


But both can also be written optimizing for simplicity and clarity at the cost of performance.

Competing with the state of the art is not an implicit goal for every project.


Perhaps they don’t need anything performant? You don’t need a bitboard for everything. (They’re also not always performant.)


Yea and you probably also need OpenCL or CUDA and several GPUs to get anything really “performant”. The basic OO model is good for its own purposes


If the API is well written, this is an implementation detail.


Well, it depends on the project goals. For a GUI app I can agree but good luck writing a chess engine where data representation is hidden behind an abstract interface.


Abstract as in using bit-boards or proper abstraction as in giving a clean interface to interact with a model and let the implementation worry about itself?


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

Search: