Daulet's DevBlog
1 subscriber
9 photos
8 files
8 links
LinksPlatform Development Blog
Download Telegram
Нашли причину segfault. Причина оказалось в том что декораторы при использовании динамического полиморфизма не обращались к базовым методам класса.
Синтаксис вызова базовых методов:
Class.Base::Update()
Channel photo updated
Channel name was changed to «Daulet's DevBlog»
Channel photo updated
cmake . -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DLINKS_PLATFORM_TESTS=TRUE
Random words epta
Конечно, вот как можно создать три миграции с помощью Artisan для описанных вами таблиц:

### Миграция 1: Создание таблицы "Жанры"
php artisan make:migration create_genres_table
Откройте сгенерированный файл миграции и добавьте следующий код:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateGenresTable extends Migration
{
public function up()
{
Schema::create('genres', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('genres');
}
}
### Миграция 2: Создание таблицы "Фильмы"
php artisan make:migration create_movies_table
Откройте сгенерированный файл миграции и добавьте следующий код:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMoviesTable extends Migration
{
public function up()
{
Schema::create('movies', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->enum('publication_status', ['published', 'unpublished'])->default('unpublished');
$table->string('poster_link')->nullable();
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('movies');
}
}
### Миграция 3: Создание таблицы связи "Фильмы с жанрами"
php artisan make:migration create_movie_genre_table
Откройте сгенерированный файл миграции и добавьте следующий код:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMovieGenreTable extends Migration
{
public function up()
{
Schema::create('movie_genre', function (Blueprint $table) {
$table->id();
$table->foreignId('movie_id')->constrained()->onDelete('cascade');
$table->foreignId('genre_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('movie_genre');
}
}
После создания миграций, выполните их, используя команду:
php artisan migrate
Теперь у вас будут созданы три таблицы в базе данных: "genres", "movies" и "movie_genre", соответственно.
Task about website.
Font: Roboto 400 Regular
Max width of container is 1240px.
First element is picture with 1240x380
Second element is navbar with 1240x92px, also:
Logo inside on left side 169.02x45px
Location address inside 165x36px
Phone number inside 151x36px
Social network links 4 logo 176x32px, every logo is 32x32px
Last item on the right is button 156x32px
Continue...
Давайте начнем с выполнения вашего задания. Для этого проекта мы создадим миграции, сиды, модели и контроллеры. Также добавим валидацию и загрузку изображений.

### Шаг 1: Создание миграций

1. Миграция для таблицы `genres`:
php artisan make:migration create_genres_table


2. Миграция для таблицы `movies`:
php artisan make:migration create_movies_table


3. Миграция для таблицы `genre_movie` (таблица связи):
php artisan make:migration create_genre_movie_table


Теперь заполним эти миграции.

database/migrations/xxxx_xx_xx_create_genres_table.php:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateGenresTable extends Migration
{
public function up()
{
Schema::create('genres', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('genres');
}
}


database/migrations/xxxx_xx_xx_create_movies_table.php:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMoviesTable extends Migration
{
public function up()
{
Schema::create('movies', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->boolean('is_published')->default(false);
$table->string('poster_url')->nullable();
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('movies');
}
}


database/migrations/xxxx_xx_xx_create_genre_movie_table.php:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateGenreMovieTable extends Migration
{
public function up()
{
Schema::create('genre_movie', function (Blueprint $table) {
$table->id();
$table->foreignId('genre_id')->constrained()->onDelete('cascade');
$table->foreignId('movie_id')->constrained()->onDelete('cascade');
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('genre_movie');
}
}


### Шаг 2: Создание сидов

Создадим сиды для тестового заполнения таблиц.

database/seeders/GenreSeeder.php:
use Illuminate\Database\Seeder;
use App\Models\Genre;

class GenreSeeder extends Seeder
{
public function run()
{
Genre::create(['name' => 'Action']);
Genre::create(['name' => 'Comedy']);
Genre::create(['name' => 'Drama']);
}
}


database/seeders/MovieSeeder.php:
use Illuminate\Database\Seeder;
use App\Models\Movie;

class MovieSeeder extends Seeder
{
public function run()
{
Movie::create([
'title' => 'Movie 1',
'is_published' => false,
'poster_url' => 'default_poster.png'
]);

Movie::create([
'title' => 'Movie 2',
'is_published' => true,
'poster_url' => 'default_poster.png'
]);
}
}


database/seeders/DatabaseSeeder.php:
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(GenreSeeder::class);
$this->call(MovieSeeder::class);
}
}


### Шаг 3: Создание моделей

app/Models/Genre.php:
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Genre extends Model
{
use HasFactory;

protected $fillable = ['name'];

public function movies()
{
return $this->belongsToMany(Movie::class);
}
}


app/Models/Movie.php:
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Movie extends Model
{
use HasFactory;

protected $fillable = ['title', 'is_published', 'poster_url'];

public function genres()
{
return $this->belongsToMany(Genre::class);
}
}
### Шаг 4: Создание контроллеров

app/Http/Controllers/GenreController.php:
namespace App\Http\Controllers;

use App\Models\Genre;
use Illuminate\Http\Request;

class GenreController extends Controller
{
public function index()
{
return Genre::all();
}

public function show($id)
{
return Genre::with('movies')->findOrFail($id);
}

// Other CRUD methods...
}


app/Http/Controllers/MovieController.php:
namespace App\Http\Controllers;

use App\Models\Movie;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class MovieController extends Controller
{
public function index()
{
return Movie::paginate(10);
}

public function show($id)
{
return Movie::with('genres')->findOrFail($id);
}

public function store(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'poster' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'
]);

$posterPath = $request->file('poster') ? $request->file('poster')->store('posters') : 'default_poster.png';

$movie = Movie::create([
'title' => $request->input('title'),
'poster_url' => $posterPath,
'is_published' => false
]);

return response()->json($movie, 201);
}

public function update(Request $request, $id)
{
$movie = Movie::findOrFail($id);

$request->validate([
'title' => 'required|string|max:255',
'poster' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'
]);

if ($request->hasFile('poster')) {
Storage::delete($movie->poster_url);
$posterPath = $request->file('poster')->store('posters');
$movie->poster_url = $posterPath;
}

$movie->title = $request->input('title');
$movie->save();

return response()->json($movie, 200);
}

public function destroy($id)
{
$movie = Movie::findOrFail($id);
Storage::delete($movie->poster_url);
$movie->delete();

return response()->json(null, 204);
}

public function publish($id)
{
$movie = Movie::findOrFail($id);
$movie->is_published = true;
$movie->save();

return response()->json($movie, 200);
}
}


### Шаг 5: Настройка маршрутов

routes/api.php:
use App\Http\Controllers\GenreController;
use App\Http\Controllers\MovieController;

Route::get('genres', [GenreController::class, 'index']);
Route::get('genres/{id}', [GenreController::class, 'show']);

Route::get('movies', [MovieController::class, 'index']);
Route::get('movies/{id}', [MovieController::class, 'show']);
Route::post('movies', [MovieController::class, 'store']);
Route::put('movies/{id}', [MovieController::class, 'update']);
Route::delete('movies/{id}', [MovieController::class, 'destroy']);
Route::post('movies/{id}/publish', [MovieController::class, 'publish']);


Это базовая структура для выполнения вашего задания. Вы можете дополнительно кастомизировать и улучшать код по мере необходимости.
Absolutely! Creating your own molecular dynamics (MD) engine like GROMACS or CP2K requires mastery across several disciplines: physics, chemistry, math, numerical methods, computer science, and software engineering. Here's a detailed roadmap from scratch to expert level:


---

🧭 PHASE 1 — Foundations (3–6 months)

🧠 Physics

Classical Mechanics (Lagrangian, Newtonian & Hamiltonian)

Recommended: “Classical Mechanics” by Goldstein or lectures by Walter Lewin (MIT)


Thermodynamics & Statistical Mechanics

Canonical ensembles, temperature/pressure control, Boltzmann distribution



🔢 Mathematics

Linear Algebra (matrices, eigenvalues, diagonalization)

Vector calculus (gradients, divergence, Laplacians)

Numerical methods (ODE solvers like Verlet, Runge-Kutta)

Optimization methods (e.g. steepest descent, conjugate gradients)


💻 Programming

C++ (required): classes, memory management, STL, performance

Python: scripting, data analysis (NumPy, matplotlib)

Basic data structures: arrays, lists, hash maps, trees



---

🧬 PHASE 2 — Basic MD Engine (6 months)

🔧 Classical MD Implementation

Implement a basic engine:

Force calculation (e.g. Lennard-Jones)

Periodic boundary conditions

Velocity Verlet integrator

Thermostat (Berendsen, Langevin)

Simple output to .xyz



🧪 Chemistry Background

Chemical bonding, molecular geometry

Force fields (bond, angle, dihedral potentials)

Atom types and topologies


📚 Study Existing MD Software

Study source code of:

LAMMPS (C++) — classical

GROMACS (C++) — high performance classical MD

CP2K (Fortran) — DFT and hybrid QM/MM




---

📊 PHASE 3 — Intermediate MD Engine (6–9 months)

🧠 Core Capabilities

Bonded interactions (bonds, angles, torsions)

Non-bonded interactions (Lennard-Jones, Coulomb, PME)

Neighbor lists and cell lists

Energy minimization (steepest descent)

Parallelization (OpenMP / MPI)


💽 File Formats

Read/write: .xyz, .gro, .pdb, .top, .mdp

Trajectory formats: .xtc, .dcd, .trr


📈 Visualization

Output files readable by VMD, Ovito, PyMOL



---

🧪 PHASE 4 — Ab Initio MD / QM Integration (6–12 months)

🧠 Quantum Chemistry Basics

Schrödinger equation

Basis sets (STO, GTO, plane wave)

DFT (Kohn-Sham equations, exchange-correlation)

Pseudopotentials


🧮 Implement or Interface With:

SCF loop for energy minimization

Semiempirical methods (e.g. MNDO, PM6)

DFT libraries: LibXC, libint, or interface with CP2K modules


🔀 Hybrid QM/MM

Define QM and MM regions

Link DFT solver to classical force evaluation



---

🧱 PHASE 5 — Software Engineering for MD Tools (6+ months)

🧩 Architecture & Optimization

Modular design: force_eval, integrator, topology, trajectory

Performance profiling and SIMD/vectorization

GPU acceleration (CUDA or OpenCL)

Scalable parallelism (MPI + domain decomposition)


Testing & Validation

Regression tests with known systems

Energy conservation and temperature distribution



---

🎓 Optional Advanced Topics

Enhanced sampling (metadynamics, umbrella sampling)

Coarse-grained MD

Path Integral MD (nuclear quantum effects)

Free energy calculations (WHAM, BAR, TI)



---

🧰 Tools & Libraries to Learn

Purpose Tools

Visualization VMD, Ovito, PyMOL
DFT libraries LibXC, libint, CP2K
Parallelism MPI, OpenMP, CUDA
Math Eigen, BLAS, LAPACK
File IO HDF5, NetCDF, GROMACS formats
Python API ASE (Atomic Simulation Environment), MDAnalysis



---

🧠 Suggested Projects Along the Way

1. Write a 1D Verlet integrator for a harmonic oscillator.


2. Build a Lennard-Jones MD for argon.


3. Implement rigid water (e.g. TIP3P) with constraints.


4. Simulate protein folding (with external FF).


5. Interface with LibXC and compute DFT total energy.




---

Final Goal

By the end of this roadmap, you should be able to write your own:

High-performance classical MD engine like GROMACS

Hybrid ab initio engine like CP2K (or at least implement core modules)


Would you like me to break this down into a weekly/monthly curriculum or suggest a book/course list to follow in order?