دوره مقدماتی React 18
کتاب رایگان R Programming Succinctly
The R programming language on its own is a powerful tool that can perform thousands of statistical tasks, but by writing programs in R, you gain tremendous power and flexibility to extend its base functionality. Senior Succinctly series author and editor James McCaffrey shows you how in R Programming Succinctly.
- Getting Started
- Vectors and Functions
- Object-Oriented Programming
- Permutations and Combinations
- Advanced R Programming
دوره مبانی طراحی سیستمهای توزیع شده
gRPC Service with .NET 7
In this video we build a gRPC service with 5 methods: Create, Read (single), List (multiple), Update and Delete. We then employ JSON transcoding (a new feature added in .NET 7) to allow our gRPC service to act as a REST based API. This allows web-based endpoints to consume our service, while at the same time continuing to allow native gRPC clients to consume as well.
⏲️ Time Codes ⏲️
- 0:33 - Welcome
- 2:00 - gRPC Overview
- 5:08 - Scaffold the prject
- 9:58 - Test "greeter" service with Postman
- 12:32 - Add package dependencies
- 14:48 - Create the Model
- 16:38 - Create DB Context & migrations
- 22:37 - Define the protobuf file
- 32:39 - Build the first service method
- 40:55 - Test method with postman
- 42:52 - Read method
- 48:42 - List method
- 52:39 - Update method
- 59:14 - Delete method
- 1:03:24 - Add the annotation files
- 1:06:07 - Annotate the first gRPC method
- 1:09:26 - Annotate remaining methods
- 1:12:42 - Test with Postman
- 1:16;00 - Patreon supporter credits
سؤالی شده به این مضمون : "یه الگوریتم دارم که بر طبق اون باید اعداد تصادفی خیلی بزرگ تولید کنم، اونها رو جمع و ضرب کنم. اینکه چطوری باید از dll یا lib استفاده کنم رو بلد نیستم. از VS2008 استفاده میکنم..."
سؤال در مورد زبان CPP است. کتابخانهی استاندارد انجام اینگونه عملیات برای زبانهای C و CPP ، کتابخانهی OpenSSL است. البته شاید الان 100 کتابخانه دیگر را هم لیست کنید، اما کسانی که با مباحث رمزنگاری اطلاعات مدتی کار کرده باشند، بعید است سر و کارشان به این کتابخانه نیفتاده باشد و یک استاندارد در این زمینه به شمار میرود؛ همچنین به دلیل سورس باز بودن در اکثر سکوهای کاری موجود نیز قابل استفاده است. بنابراین فراگیری نحوهی کار کردن با آن یک مزیت به شمار میرود. قسمتی از این کتابخانهی معظم مرتبط است به کار با اعداد بزرگ. این مورد را هم جهت استفاده در الگوریتم RSA نیاز دارد.
برای استفاده از آن در ویندوز ابتدا باید OpenSSL را کامپایل کنید. کار پر دردسری است. به همین جهت یک سایت فقط به این موضوع اختصاص یافته و هربار آخرین نسخهی OpenSSL را برای ویندوز کامپایل میکند و در اختیار علاقمندان قرار میدهد : +
در حال حاضر یا باید Win32 OpenSSL v1.0.0a و یا Win64 OpenSSL v1.0.0a را دریافت کنید (برنامهی شما اگر 64 بیتی کامپایل شود، dll های 32 بیتی را نمیتواند بارگذاری کند و برعکس).
روش استفاده از کتابخانهی OpenSSL در ویژوال CPP :
الف) ابتدا فایلهای کامپایل شدهی فوق را دریافت و نصب کنید. اکنون برای مثال یک پوشهی OpenSSL-Win32 در کامپیوتر شما با محتویات این کتابخانه باید ایجاد شده باشد(اگر نسخهی 32 بیتی را دریافت کردهاید).
سپس به پوشهی OpenSSL-Win32\lib\VC آن مراجعه کنید. در اینجا فایلهای کتابخانهای جهت استفاده در ویژوال CPP قرار گرفتهاند. اگر از محتویات پوشه OpenSSL-Win32\lib\VC\static استفاده کنید، نیازی به توزیع فایلهای DLL این کتابخانه نخواهید داشت و اگر از کتابخانههای OpenSSL-Win32\lib\VC استفاده کنید، فایلهای dll را نیز حتما باید به همراه برنامهی خود توزیع نمائید.
سه نوع فایل در آن وجود دارند. ختم شده به MD ، MT و MDd که معانی آنها در مورد چند ریسمانی بودن یا خیر است (برگرفته شده از فایل faq.txt دریافتی):
Single Threaded /ML - MS VC++ often defaults to this for the release version of a new project.
Debug Single Threaded /MLd - MS VC++ often defaults to this for the debug version of a new project.
Multithreaded /MT
Debug Multithreaded /MTd
Multithreaded DLL /MD - OpenSSL defaults to this.
Debug Multithreaded DLL /MDd
ب) جهت سهولت کار، پوشهی OpenSSL قرار گرفته در مسیر OpenSSL-Win32\include را در آدرس زیر کپی نمائید:
C:\Program Files\Microsoft Visual Studio 10.0\VC\include
به این صورت حین استفاده از این کتابخانه نیازی به مشخص سازی محل قرارگیری فایلهای include نخواهد بود.
ج) اکنون یک پروژهی جدید Visual C++\Win32\Win32 console application را در VS.NET آغاز کنید؛ برای مثال به نام OpenSSLTest .
د) سپس به منوی پروژه، گزینهی خواص پروژه مراجعه کرده و مطابق تصاویر زیر، این فایلهای کتابخانهای را معرفی کنید (انتخاب MD یا MT یا MDd بر اساس runtime library انتخاب شده است که در تصاویر مشخص گردیده):
ه) اکنون یک مثال ساده در مورد ضرب دو عدد بزرگ به صورت زیر میتواند باشد:
#include "stdafx.h"
#include <openssl/bn.h>
#include <string.h>
void RotateBytes(unsigned char *in, int n)
{
unsigned char *e=in+n-1;
do {
unsigned char temp=*in;
*in++=*e;
*e-- =temp;
} while(in<e);
}
int _tmain(int argc, _TCHAR* argv[])
{
//دو عدد بزرگ جهت آزمایش
unsigned char testP[] = {0xD1,0x31,0x85,0x4D,0x00,0xD6,0x31,0x97,0x3A,0xFC,0xD2,0x27,0x02,0xEF,0xC2,0xA7};
unsigned char testA[] = {0xC7,0x1B,0x25,0x72,0x03,0xCB,0x72,0x03,0xCF,0x23,0x27,0x2D,0x00,0xD6,0x31,0x98};
//تبدیل آرایههای فوق به فرمت اعداد بزرگ
BIGNUM *a = BN_new();
//it should be in "big-endian" form
RotateBytes(testA, 16);
BN_bin2bn(testA, 16, a);
BIGNUM *p = BN_new();
//it should be in "big-endian" form
RotateBytes(testP, 16);
BN_bin2bn(testP, 16, p);
//ضرب این دو عدد در هم
BIGNUM *result = BN_new();
BN_CTX *ctx = BN_CTX_new();
BN_mul(result, a, p, ctx);
//نمایش نتیجه
//حاصل از چند بایت تشکیل شده؟
int num = BN_num_bytes(result);
if(num>0)
{
unsigned char *tmpdata;
if((tmpdata=(unsigned char *)malloc(num)))
memset(tmpdata, 0, num);
//تبدیل عدد با فرمت اعداد بزرگ به آرایهای از بایتها
BN_bn2bin(result, tmpdata);
RotateBytes(tmpdata, num);
for(int i=0; i<num; i++)
{
if(i%16==0) printf("\n");
printf("%02X ",tmpdata[i]);
}
if(tmpdata) free(tmpdata);
}
//آزاد سازی منابع
BN_free(a);
BN_free(p);
BN_CTX_free(ctx);
return 0;
}
در مورد شرح توابع کتابخانه OpenSSL به اینجا مراجع کنید : +
علت استفاده از تابع RotateBytes ، تغییر endian ورودی است.
تعریف Enums در Rust
Enumها در Rust، با استفاده از کلمهی کلیدی enum و به دنبال آن، نام enumeration تعریف میشوند. هر enum میتواند صفر یا بیشتر، مقادیر مرتبط با انواع دادههای مختلف را داشته باشد. در اینجا یک مثال ساده آورده شدهاست:
enum Direction { North, East, South, West, }
enum Shape { Circle(f64), Rectangle(f64, f64), Square(f64), }
Pattern Matching در Enums
** Pattern Matching ** در ادامه مطالب به صورت کامل صحبت خواهد شد .
قابلیت Pattern Matching به ویژه هنگام کار با enums مفید است. میتوانید از کلمهی کلیدی match برای destructure و مطابقت با انواع enum استفاده کنید که به شما امکان میدهد، کد مختصر و خوانایی را بنویسید. در اینجا یک مثال، با استفاده از Shape enum آورده شدهاست:
fn area(shape: Shape) -> f64 { match shape { Shape::Circle(radius) => std::f64::consts::PI * radius * radius, Shape::Rectangle(width, height) => width * height, Shape::Square(side) => side * side, } }
استفاده از Enum در Error Handling
use std::io::Read; use std::fs::File; use std::io; fn read_file_contents(file_path: &str) -> Result<String, io::Error> { let mut file = File::open(file_path)?; let mut contents = String::new(); file.read_to_string(&mut contents)?; Ok(contents) }
Enums و Optionality
struct Stack<T> { elements: Vec<T>, } impl<T> Stack<T> { fn new() -> Self { Stack { elements: Vec::new() } } fn push(&mut self, item: T) { self.elements.push(item); } fn pop(&mut self) -> Option<T> { self.elements.pop() } }
WebAssembly, or Wasm, is on its way to becoming the next big thing in software development, allowing us to develop more reusable code across programming stacks. It will also enable the deployment of smaller packages more securely. This talk will focus on the view of a .NET developer using WebAssembly in their projects, whether client-side, server-side, or plugins.
Agenda
0:00:00 – Introduction
0:01:44 – Presentation Start
0:04:36 – Wasm on the client
0:08:27 – Wasm on the server
0:11:51 – ASP.NET Core in Wasi
0:21:41 – Wasm in the cloud
0:32:38 – Wasm for plugins
0:36:07 – Wasm plugins samples
0:49:05 – .NET 8 and the future
0:55:08 – Who’s working on this?
1:03:13 – Outro