<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Na.Ka</title>
        <link>https://virgool.io/feed/@naka</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-10 15:09:54</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>Na.Ka</title>
            <link>https://virgool.io/@naka</link>
        </image>

                    <item>
                <title>16 تکنیک SQL که هر مبتدی باید بداند</title>
                <link>https://virgool.io/@naka/16-sql-techniques-jo4zc35jdacb</link>
                <description>در مقیاس 1 تا 10 مهارت های ذخیره سازی داده شما چقدر خوب است؟می خواهید بالاتر از 7/10 بروید؟ پس این مقاله برای شماست.SQL شما چقدر خوب است؟ آیا می خواهید در اسرع وقت برای یک مصاحبه شغلی آماده شوید؟این پست وبلاگ پیچیده ترین تکنیک های SQL انبار داده را با جزئیات توضیح می دهد. من از گویش استاندارد BigQuery SQL برای نوشتن چند فکر در مورد این موضوع استفاده خواهم کرد.1. جداول افزایشی و ادغامبه روز رسانی جدول مهم است. واقعاً مهم است. وضعیت ایده آل زمانی است که تراکنش هایی داشته باشید که کلید اصلی، اعداد صحیح منحصر به فرد و افزایش خودکار هستند. به روز رسانی جدول در این مورد ساده است:insert target_table (transaction_id)select transaction_id from source_table where transaction_id &gt; (select max(transaction_id) from target_table);این همیشه هنگام کار با مجموعه داده‌های طرحواره ستاره‌ای غیرعادی‌شده در انبارهای داده مدرن صدق نمی‌کند. ممکن است شما وظیفه داشته باشید که جلساتی را با SQL ایجاد کنید و/یا مجموعه داده‌ها را به‌صورت تدریجی تنها با بخشی از داده‌ها به‌روزرسانی کنید. Transaction_id ممکن است وجود نداشته باشد، اما در عوض شما باید با مدل داده سروکار داشته باشید که در آن کلید یکتا به آخرین  Transaction_id (یا مهر زمانی) شناخته شده بستگی دارد. برای مثال، user_id در مجموعه داده last_online به آخرین مهر زمان اتصال شناخته شده بستگی دارد. در این صورت شما می خواهید کاربران موجود را به روز کنید و کاربران جدید را وارد کنید.ادغام و به روز رسانی افزایشیمی توانید از MERGE استفاده کنید یا می توانید عملیات را به دو عمل تقسیم کنید. یکی برای به‌روزرسانی رکوردهای موجود با رکوردهای جدید و دیگری برای درج رکوردهای کاملاً جدید که خارج نمی‌شوند (وضعیت LEFT JOIN).MERGE عبارتی است که عموماً در پایگاه داده های رابطه ای استفاده می شود. Google BigQuery MERGE Command یکی از دستورات زبان دستکاری داده ها (DML) است. اغلب برای انجام سه عملکرد اصلی به صورت اتمی در یک عبارت واحد استفاده می شود. این توابع عبارتند از UPDATE، INSERT و DELETE.زمانی که دو یا چند داده با هم مطابقت داشته باشند می توان از عبارت UPDATE یا DELETE استفاده کرد.بند INSERT زمانی قابل استفاده است که دو یا چند داده متفاوت باشند و مطابقت نداشته باشند.بند UPDATE یا DELETE همچنین می تواند زمانی استفاده شود که داده های داده شده با منبع مطابقت نداشته باشند.این بدان معناست که فرمان ادغام Google BigQuery به شما امکان می دهد داده های Google BigQuery را با به روز رسانی، درج و حذف داده ها از جداول Google BigQuery خود ادغام کنید.این SQL را در نظر بگیرید:create temp table last_online as (
    select 1 as user_id
    , timestamp(&#039;2000-10-01 00:00:01&#039;) as last_online
)
;
create temp table connection_data  (
  user_id int64
  ,timestamp timestamp
)
PARTITION BY DATE(_PARTITIONTIME)
;
insert connection_data (user_id, timestamp)
    select 2 as user_id
    , timestamp_sub(current_timestamp(),interval 28 hour) as timestamp
union all
    select 1 as user_id
        , timestamp_sub(current_timestamp(),interval 28 hour) as timestamp
union all
    select 1 as user_id
        , timestamp_sub(current_timestamp(),interval 20 hour) as timestamp
union all
    select 1 as user_id
    , timestamp_sub(current_timestamp(),interval 1 hour) as timestamp
;

merge last_online t
using (
  select
      user_id
    , last_online
  from
    (
        select
            user_id
        ,   max(timestamp) as last_online

        from 
            connection_data
        where
            date(_partitiontime) &gt;= date_sub(current_date(), interval 1 day)
        group by
            user_id

    ) y

) s
on t.user_id = s.user_id
when matched then
  update set last_online = s.last_online, user_id = s.user_id
when not matched then
  insert (last_online, user_id) values (last_online, user_id)
;
select * from last_online
;2. شمارش کلماتانجام UNNEST() و بررسی اینکه آیا کلمه مورد نیاز شما در لیستی است که نیاز دارید ممکن است در بسیاری از موقعیت ها مفید باشد، یعنی تجزیه و تحلیل احساسات انبار داده:with titles as (
    select &#039;Title with word foo&#039; as title union all
    select &#039;Title with word bar&#039;
)
, data as (
select 
    title, 
    split(title, &#039; &#039;) as words 
from 
    titles
)
select * from data, unnest(words) words
where
    words in (&#039;bar&#039;)
;3. استفاده از دستور IF() خارج از دستور SELECTاین به ما فرصتی می دهد تا برخی از خطوط کد را ذخیره کنیم و از نظر کد شیواتر باشیم. معمولاً می‌خواهید این را در یک جستار فرعی قرار دهید و یک فیلتر در عبارت Where اضافه کنید، اما در عوض می‌توانید این کار را انجام دهید:with daily_revenue as (
select
      current_date() as dt
    , 100          as revenue
    union all
select
      date_sub(current_date(), interval 1 day) as dt
    , 100          as revenue
)
select
*
from daily_revenue
where
    if(revenue &gt;101,1,0) = 1
;مثال دیگری که چگونه از آن با جداول پارتیشن بندی شده استفاده نکنیم. این کار را نکن این مثال بدی است زیرا از آنجایی که پسوندهای جدول تطبیق احتمالاً به صورت پویا تعیین می شوند (بر اساس چیزی در جدول شما) برای اسکن کامل جدول هزینه دریافت خواهید کرد.SELECT *
FROM `firebase.events`
WHERE IF(condition,
         _TABLE_SUFFIX BETWEEN &#039;20170101&#039; AND &#039;20170117&#039;,
         _TABLE_SUFFIX BETWEEN &#039;20160101&#039; AND &#039;20160117&#039;)
;همچنین می توانید از آن در توابع HAVING و AGGREGATE استفاده کنید.4. استفاده از GROUP BY ROLLUPتابع ROLLUP برای انجام تجمیع در سطوح چندگانه استفاده می شود. این زمانی مفید است که باید با نمودارهای بعد کار کنید.کوئری زیر کل اعتبار هزینه شده در روز را بر اساس نوع تراکنش (is_gift) مشخص شده در بند Where برمی گرداند و همچنین کل هزینه شده برای هر روز و کل هزینه شده را در تمام تاریخ های موجود نشان می دهد.with data as (
    select
    current_timestamp() as ts           
    ,&#039;stage&#039;            as context_type 
    ,1                  as user_id      
    ,100                as credit_value 
    , true              as is_gift
union all
    select
    timestamp_sub(current_timestamp(), interval 24 hour) as ts           
    ,&#039;user&#039;             as context_type 
    ,1                  as user_id      
    ,200                as credit_value 
    ,false              as is_gift
union all
    select
    timestamp_sub(current_timestamp(), interval 24*2 hour) as ts           
    ,&#039;user&#039;             as context_type 
    ,3                  as user_id      
    ,300                as credit_value 
    ,true               as is_gift

)
, results as (
select 
     date(ts) as date 
    ,context_type
    ,sum(credit_value)/100 as daily_credits_spend
from data    

group by rollup(1, context_type)
order by 1
)

select
  date
  ,if(context_type is null, &#039;total&#039;, context_type) as context_type
  ,daily_credits_spend
from results
order by date
;5. تبدیل جدول به JSONتصور کنید باید جدول خود را به شی JSON تبدیل کنید که در آن هر رکورد عنصری از آرایه تودرتو است. این جایی است که تابع to_json_string() مفید می شود:with mytable as (
 select 1 as x, &#039;foo&#039; as y, true as z union all
 select 2, &#039;bar&#039;, false
)
select 
    concat(&amp;quot{&amp;quot, &amp;quot\&amp;quotMyTable\&amp;quot:&amp;quot, &amp;quot[&amp;quot, string_agg(to_json_string(t), &amp;quot,&amp;quot), &amp;quot]&amp;quot, &amp;quot}&amp;quot)
from mytable as t
;سپس می توانید از آن در هر جایی استفاده کنید: تاریخ ها، قیف های بازاریابی، شاخص ها، نمودارهای هیستوگرام و غیره.6. استفاده از PARTITION BYبا توجه به ستون های user_id، date و total_cost. برای هر تاریخ، چگونه ارزش کل درآمد را برای هر مشتری نشان می‌دهید در حالی که همه ردیف‌ها را حفظ می‌کنید؟ شما می توانید به این شکل دست پیدا کنید:select
     date
    ,user_id
    ,total_cost
    ,sum(total_cost) over (partition by date,user_id) as revenue_per_day
from production.payment_transaction
;7. میانگین متحرکاغلب اوقات توسعه دهندگان BI وظیفه دارند میانگین متحرک را به گزارش ها و داشبوردهای فوق العاده خود اضافه کنند. این ممکن است نمودار خطی MA 7، 14، 30 روز در ماه یا حتی سال باشد. حالا چطور آن کار را انجام بدهیم؟with dates as (
select
    dt
from 
    unnest(generate_date_array(date_sub(current_date(), interval 90 day), current_date(), interval 1 day)) as dt
)

, data as (
    select dt
        , CEIL(RAND()*1000) as revenue -- just some random data.
    from
        dates
)
select
  dt
, revenue
, AVG(revenue) OVER(ORDER BY unix_date(dt) RANGE BETWEEN 6 PRECEDING AND CURRENT ROW) as seven_day_moving_average
from data
;8. آرایه های تاریخزمانی که با حفظ کاربر کار می‌کنید یا می‌خواهید برخی از مجموعه داده‌ها را برای مقادیر گمشده، یعنی تاریخ‌ها بررسی کنید، واقعاً مفید می‌شود. BigQuery تابعی به نام GENERATE_DATE_ARRAY دارد:select
 dt
from 
    unnest(generate_date_array(&#039;2019–12–04&#039;, &#039;2020–09–17&#039;, interval 1 day)) as dt
;9. Row_number()این برای دریافت جدیدترین اطلاعات از داده‌های خود، یعنی آخرین رکورد به‌روزرسانی‌شده و غیره یا حتی حذف موارد تکراری مفید است:with reputation_data as (
select
      1     as user_id
    , 100   as reputation
    , 1     as reputation_level
    , timestamp_sub(current_timestamp(), interval 3 hour) as ts
union all
select
      1     as user_id
    , 101   as reputation
    , 1     as reputation_level
    , timestamp_sub(current_timestamp(), interval 2 hour)
union all
select
      1     as user_id
    , 200   as reputation
    , 2     as reputation_level
    , timestamp_sub(current_timestamp(), interval 1 hour)
)
select *
from reputation_data a
qualify row_number() over (partition by a.user_id order by a.ts desc) = 1
;10. NTILE()یک تابع شماره گذاری دیگر. اگر یک برنامه تلفن همراه دارید، برای نظارت بر مواردی مانند مدت زمان ورود در چند ثانیه بسیار مفید است. به عنوان مثال، من برنامه خود را به Firebase متصل کرده ام و وقتی کاربران وارد سیستم می شوند، می توانم ببینم چقدر طول کشیده است.این تابع، ردیف‌ها را بر اساس ترتیب ردیف‌ها به سطل‌های ثابت_صحیح_expression تقسیم می‌کند و شماره سطل 1 را که به هر سطر اختصاص داده می‌شود، برمی‌گرداند. تعداد ردیف ها در سطل ها می تواند حداکثر تا 1 متفاوت باشد. مقادیر باقیمانده (باقیمانده تعداد ردیف‌ها تقسیم بر سطل) یک عدد برای هر سطل توزیع می‌شود، که با سطل 1 شروع می‌شود. اگر iftext_integer_expression NULL، 0 یا منفی ارزیابی شود، یک خطا ارائه می‌شود.select (case when tile = 50 then &#039;median&#039; when tile = 95 then &#039;95%&#039; else &#039;5%&#039; end) as tile
    , dt
    , max(cast( round(duration/1000) as numeric)/1000 ) max_duration_s
    , min(cast( round(duration/1000) as numeric)/1000 ) min_duration_s

from (
    select 
         trace_info.duration_us duration
        , ntile(100) over (partition by (date(event_timestamp)) order by trace_info.duration_us) tile
        , date(event_timestamp) dt

    from firebase_performance.my_mobile_app 
    where 
        date(_partitiontime) &gt;= parse_date(&#039;%y%m%d&#039;, @ds_start_date) and date(_partitiontime) &lt;= parse_date(&#039;%y%m%d&#039;, @ds_end_date)
        and 
        date(event_timestamp) &gt;= parse_date(&#039;%y%m%d&#039;, @ds_start_date)
        and 
        date(event_timestamp) &lt;= parse_date(&#039;%y%m%d&#039;, @ds_end_date)
    and lower(event_type) = &amp;quotduration_trace&amp;quot
    and lower(event_name) = &#039;logon&#039;
) x
WHERE tile in (5, 50, 95)
group by dt, tile
order by dt
;11. رتبه / تراکم_رتبهبه آنها توابع شماره گذاری نیز می گویند. من تمایل دارم از DENSE_RANK به عنوان تابع رتبه‌بندی پیش‌فرض استفاده کنم، زیرا از رتبه‌بندی بعدی در دسترس نمی‌گذرد در حالی که RANK این کار را می‌کند. مقادیر رتبه های متوالی را برمی گرداند. می توانید از آن با پارتیشنی استفاده کنید که نتایج را به سطل های مجزا تقسیم می کند. سطرها در هر پارتیشن اگر مقادیر یکسانی داشته باشند رتبه های یکسانی را دریافت می کنند. مثال:with top_spenders as (
    select 1 as user_id, 100 as total_spend, 11   as reputation_level union all
    select 2 as user_id, 250 as total_spend, 11   as reputation_level union all
    select 3 as user_id, 250 as total_spend, 11   as reputation_level union all
    select 4 as user_id, 300 as total_spend, 11   as reputation_level union all
    select 11 as user_id, 1000 as total_spend, 22   as reputation_level union all
    select 22 as user_id, 1500 as total_spend, 22   as reputation_level union all
    select 33 as user_id, 1500 as total_spend, 22   as reputation_level union all
    select 44 as user_id, 2500 as total_spend, 22   as reputation_level 

)

select 
    user_id
    , rank() over(partition by reputation_level order by total_spend desc) as rank
    , dense_rank() over(partition by reputation_level order by total_spend desc) as dense_rank
from
    top_spenders
;نمونه ای دیگر با قیمت محصولات:with products as (
    
    select
        2                    as product_id      
        , &#039;premium_account&#039;  as product_type    
        , 100                as total_cost   
    union all
    select
        1                    as product_id      
        , &#039;premium_group&#039;    as product_type
        , 200                as total_cost
    union all
    select
        111                  as product_id      
        , &#039;bots&#039;             as product_type    
        , 300                as total_cost      
    union all
    select
        112                  as product_id      
        , &#039;bots&#039;             as product_type    
        , 400                as total_cost      
    union all
    select
        113                  as product_id      
        , &#039;bots&#039;             as product_type    
        , 500                as total_cost      
    union all
    select
        213                  as product_id      
        , &#039;bots&#039;             as product_type    
        , 300                as total_cost      
  
)
select * from (
	select
		  product_id
		, product_type
		, total_cost as product_price
		, dense_rank () over ( 
			partition by product_type
			order by total_cost desc
		) price_rank 
	from
		products
) t
where price_rank &lt; 3
;12. Pivot / unpivotPivot سطرها را به ستون تغییر می دهد. این همه کاری است که انجام می دهد. Unpivot برعکس عمل می کند.select * from
(
  -- #1 from_item
  select 
     extract(month from dt) as mo         
    ,product_type    
    ,revenue   
  from (
    select
        date(current_date()) as dt              
        , &#039;premium_account&#039;  as product_type    
        , 100                as revenue   
    union all
    select
        date_sub(current_date(), interval 1 month) as dt
        , &#039;premium_group&#039;    as product_type
        , 200                as revenue
    union all
    select
        date_sub(current_date(), interval 2 month) as dt
        , &#039;bots&#039;             as product_type
        , 300                as revenue
  )
)
pivot
(
  -- #2 aggregate
  avg(revenue) as avg_revenue_
  -- #3 pivot_column
  for product_type in (&#039;premium_account&#039;, &#039;premium_group&#039;)
)
;13. First_value / last_valueاین تابع مفید دیگری است که به دریافت یک دلتا برای هر ردیف در برابر مقدار اول / آخر در آن پارتیشن خاص کمک می کند.with top_spenders as (
    select 1 as user_id, 100 as total_spend, 11   as reputation_level union all
    select 2 as user_id, 150 as total_spend, 11   as reputation_level union all
    select 3 as user_id, 250 as total_spend, 11   as reputation_level union all
    select 11 as user_id, 1000 as total_spend, 22   as reputation_level union all
    select 22 as user_id, 1500 as total_spend, 22   as reputation_level union all
    select 33 as user_id, 2500 as total_spend, 22   as reputation_level 

)
, data as (
    select
        user_id
        ,total_spend
        ,reputation_level
        ,first_value(total_spend)
    over (partition by reputation_level order by total_spend desc
    rows between unbounded preceding and unbounded following) as top_spend
  from top_spenders
)

select
    user_id
    ,reputation_level
    ,total_spend
    ,top_spend          as top_spend_by_rep_level
    ,total_spend - top_spend as delta_in_usd
from data
;14. یک جدول را به Array of structs تبدیل کنید و آنها را به UDF منتقل کنیداین زمانی مفید است که شما نیاز به اعمال یک تابع تعریف شده توسط کاربر (UDF) با منطق پیچیده برای هر ردیف یا جدول دارید. همیشه می توانید جدول خود را به عنوان آرایه ای از اشیاء TYPE STRUCT در نظر بگیرید و سپس هر یک از آنها را به UDF ارسال کنید.بستگی به منطق شما داره به عنوان مثال، من از آن برای محاسبه زمان انقضای خرید استفاده می کنم:select 
     target_id
    ,product_id
    ,product_type_id
    ,production.purchase_summary_udf()(
        ARRAY_AGG(
            STRUCT(
                target_id
                , user_id
                , product_type_id
                , product_id
                , item_count
                , days
                , expire_time_after_purchase
                , transaction_id 
                , purchase_created_at 
                , updated_at
            ) 
            order by purchase_created_at
        )
    ) AS processed

from new_batch
;به روشی مشابه می توانید جداول را بدون نیاز به استفاده از UNION ALL ایجاد کنید. به عنوان مثال، من از آن برای تمسخر برخی از داده های آزمایشی برای تست های واحد استفاده می کنم. به این ترتیب فقط با استفاده از Alt+Shift+Down در ویرایشگر خود می توانید آن را بسیار سریع انجام دهید.select * from unnest([
        struct
        (     
            1                                 as user_id
        ,   111                               as reputation
        ,   timestamp(&#039;2021-12-16 13:00:01&#039;)  as update_time
        
        ),

        (
            2                                 --as user_id
        ,   111                               --as reputation
        ,   timestamp(&#039;2011-12-16 13:00:01&#039;)  --as update_time
        ),

        (
            3                                 --as user_id
        ,   111                               --as reputation
        ,    timestamp(format_timestamp(&amp;quot%Y-%m-%d 12:59:01 UTC&amp;quot ,timestamp(date_sub(current_date(), interval 0 day))))   --as update_time
        )
        ]
    ) as t15. ایجاد قیف رویداد با استفاده از FOLLOWING و UNBUNDED FOLLOWINGمثال خوب ممکن است قیف های بازاریابی باشد. مجموعه داده شما ممکن است حاوی رویدادهایی از یک نوع باشد که به طور مداوم تکرار می شوند، اما در حالت ایده آل شما می خواهید هر رویداد را با رویداد بعدی از نوع متفاوت زنجیر کنید. این ممکن است زمانی مفید باشد که برای ایجاد مجموعه داده قیف نیاز به دریافت لیستی از چیزی دارید، مانند رویدادها، خریدها و غیره. کار با PARTITION BY به شما این فرصت را می دهد که همه رویدادهای بعدی را بدون توجه به تعداد آنها در هر پارتیشن گروه بندی کنید.with d as (
select * from unnest([
  struct(&#039;0003f&#039; as user_pseudo_id, 12322175 as user_id, timestamp &#039;2020-10-10 16:46:59.878 UTC&#039; as event_timestamp, &#039;join_group&#039; as event_name),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 16:50:03.394 UTC&#039;,&#039;set_avatar&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:02:38.632 UTC&#039;,&#039;set_avatar&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:09:38.645 UTC&#039;,&#039;set_avatar&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:10:38.645 UTC&#039;,&#039;join_group&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:15:38.645 UTC&#039;,&#039;create_group&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:17:38.645 UTC&#039;,&#039;create_group&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:18:38.645 UTC&#039;,&#039;in_app_purchase&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:19:38.645 UTC&#039;,&#039;spend_virtual_currency&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:19:45.645 UTC&#039;,&#039;create_group&#039;),
  (&#039;0003&#039;,12,timestamp &#039;2022-10-10 17:20:38.645 UTC&#039;,&#039;set_avatar&#039;)
  ]
  ) as t)

  , event_data as (
SELECT 
    user_pseudo_id
  , user_id
  , event_timestamp
  , event_name
  , ARRAY_AGG(
        STRUCT(
              event_name AS event_name
            , event_timestamp AS event_timestamp
        )
    ) 
    OVER(PARTITION BY user_pseudo_id ORDER BY event_timestamp ROWS BETWEEN 1 FOLLOWING AND  UNBOUNDED FOLLOWING ) as next_events

FROM d
WHERE
DATE(event_timestamp) = &amp;quot2022-10-10&amp;quot 

)
select
    user_pseudo_id
  , user_id
  , event_timestamp
  , event_name
  , (SELECT 
        event_name FROM UNNEST(next_events) next_event
    WHERE t.event_name != event_name
    ORDER BY event_timestamp  LIMIT 1
    -- change to ORDER BY event_timestamp desc if prev event needed
  ) next_event
  , (SELECT 
        event_timestamp FROM UNNEST(next_events) next_event
    WHERE t.event_name != event_name
    ORDER BY event_timestamp  LIMIT 1
    -- change to ORDER BY event_timestamp desc if prev event needed
  ) next_event_ts

from event_data t
;16. Regexpدر صورت نیاز به استخراج چیزی از داده های بدون ساختار، مانند نرخ های fx، گروه بندی های سفارشی و غیره، از آن استفاده می کنید. کار با نرخ تبدیل ارز با استفاده از regexp این مثال را با داده های نرخ ارز در نظر بگیرید:-- One or more digits (\d+), optional period (\.?), zero or more digits (\d*).
with object as
(select  &#039;{&amp;quotaed&amp;quot:3.6732,&amp;quotafn&amp;quot:78.45934,&amp;quotall&amp;quot:110.586428}&#039; as rates)

, data as (
select &amp;quotusd&amp;quot as base_currency,
  regexp_extract_all(rates, r&#039;&amp;quot[^&amp;quot]+&amp;quot:\d+\.?\d*&#039;) as pair
from object
)
, splits as (
select base_currency, pair, split(pair, &#039;:&#039;) positions 
from data cross join unnest (pair) as pair
)
select base_currency, pair,  positions[offset(0)] as rate_currency,  positions[offset(1)] as rate
from splits  
;کار با نسخه های برنامه با استفاده از regexp گاهی اوقات ممکن است بخواهید از regexp برای دریافت نسخه‌های اصلی، نسخه‌های منتشر شده یا مود برای برنامه خود و ایجاد یک گزارش سفارشی استفاده کنید:with events as (
  select  &#039;open_chat&#039; as event_name, &#039;10.1.0&#039; as app_display_version union all
  select  &#039;open_chat&#039; as event_name, &#039;10.1.9&#039; as app_display_version union all
  select  &#039;open_chat&#039; as event_name, &#039;9.1.4&#039; as app_display_version union all
  select  &#039;open_chat&#039; as event_name, &#039;9.0.0&#039; as app_display_version
)
select
     app_display_version
    ,REGEXP_EXTRACT(app_display_version, &#039;^[^.^]*&#039;) main_version
    ,safe_cast(REGEXP_EXTRACT(app_display_version, &#039;[0-9]+.[0-9]+&#039;) as float64) release_version
    ,safe_cast(REGEXP_EXTRACT(app_display_version, r&amp;quot^[a-zA-Z0-9_.+-]+.[a-zA-Z0-9-]+\.([a-zA-Z0-9-.]+$)&amp;quot) as int64) as mod_version
from events
;نتیجهSQL ابزار قدرتمندی است که به دستکاری داده ها کمک می کند. امیدواریم این موارد استفاده از SQL از بازاریابی دیجیتال برای شما مفید باشد. این در واقع یک مهارت مفید است و می تواند در بسیاری از پروژه ها به شما کمک کند. این قطعه‌های SQL زندگی من را بسیار آسان‌تر کرد و تقریباً هر روز در محل کار از آن استفاده می‌کنم. بیشتر، SQL و انبارهای داده مدرن ابزارهای ضروری برای علم داده هستند. ویژگی‌های گویش قوی آن امکان مدل‌سازی و تجسم داده‌ها را به راحتی فراهم می‌کند.از آنجا که SQL زبانی است که انبارهای داده و متخصصان هوش تجاری از آن استفاده می کنند، اگر می خواهید داده ها را با آنها به اشتراک بگذارید، انتخاب بسیار خوبی است. این رایج ترین راه برای برقراری ارتباط با تقریباً هر راه حل انبار داده / دریاچه در بازار است.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Fri, 17 Feb 2023 01:12:31 +0330</pubDate>
            </item>
                    <item>
                <title>سیستم مدیریت کیفیت چیست؟</title>
                <link>https://virgool.io/@naka/qms-kxkawfr8azak</link>
                <description>امروزه اغلب سازمان ها پی برده اند كه ارتقا کیفیت کالا و خدمات شرط لازم و ضروری برای بقا و حضور در بازار و رقابت جهانی و دستيابی به اهدافي مانند مشتری محوری، سودآوری و كاهش هزينه‌ها است. از این رو اغلب شركت‌ ها برای بهبود وضعيت خود در بازار رقابتی تلاش می كنند كه اين اصول را در درون سازمان خود پیاده كنند. این موفقیت می تواند در سایه استقرار و برقرار نگهداشتن سیستم مدیریتی باشد که برای بهبود پیوسته سازمان طراحی شده است و در عین حال به نیازهای مشتریان درون سازمانی و برون سازمانی توجه می کند. برای استقرار سیستم مدیریت کیفیت بر اساس استانداردهای ایزو، باید وضعیت موجود، نقاط ضعف، نقاط قوت و تطابق سازمانی را شناسایی و با این استانداردها مقایسه کرد. بهمدام دوره آموزش مجازی کاملی با عنوان آموزش سیستم مدیریت کیفیت را برای شما تهیه دیده پیشنهاد می کنیم حتما مشاهده کنید.تعریف سیستم مدیریت کیفیت (QMS)سیستم مدیریت کیفیت به انگلیسی : Quality management system که اغلب به نام QMS نیز شناخته می شود، مجموعه ای از سیاست ها، فرآیندها، روش های ثبت شده و سوابق است. این مجموعه اسناد مجموعه ای از قوانین داخلی را تنظیم می کند که بر پایه چگونگی ایجاد و ارایه محصول یا خدمات خود به مشتریان حاکم خواهد بود.مهم ترین اهداف سیستم مدیریت کیفیت به طور خلاصه موارد زیر می باشد:●    بهبود مستمر فرایندها، محصولات و خدمات سازمان●    نگهداری و بهبود سطح رضایت ذینفعان سازمان از جمله مشتریان●    ایجاد نگرش فرایندی و تمرکز بر نتایج به جای تمرکز بر اشخاص و واحدهای سازمانی●    تعیین بستری برای تسهیل در رسیدن به چشم اندازها، ماموریت ها، استراتژی ها، اهداف و برنامه های عملیاتی سازمانسیستم مدیریت کیفیت ISO 9001سیستم مدیریت کیفیت ISO 9001 شناخته شده ترین استاندارد مدیریتی در جهان می باشد که در سال ۲۰۱۵ ویرایش جدیدی (پنجمین نسخه) از آن توسط سازمان بین المللی استانداردسازی ارایه گردیده است. این استاندارد را می توان شناخته شده ترین استاندارد در سطح جهان دانست که تا سال 2019 در بیش از 1.100.000 سازمان در بیش از 150 کشور پیاده سازی و گواهی شده است.گواهینامه ISO 9001توانایی سازمان شما در برآورده کردن خواسته های مشتری و حتی فراتر از انتظارات را نشان می دهد. بنابراین، بسیاری از خریداران به دنبال استقرار نظام مدیریت کیفیت و دریافت گواهینامه ISO 9001 در تامین کنندگان خود هستند تا ریسک خرید محصولات یا خدمات نامناسب را از بین ببرند. شرکتی که دارای مجوز ISO 9001 شده است با به حداقل رساندن میزان خطا و تلفات و افزایش بهره وری، پیشرفت های چشمگیری در بازده سازمانی و کیفیت محصول داشته است.مراحل پیاده سازی سیستم مدیریت کیفیتپیاده سازی سیستم مدیریت کیفیت ISO 9001  ویرایش 2015 همانند سایر سیستم‌ های مدیریتی دارای مراحلی می‌ باشد:●   مرحله اول پیاده سازی ایزو 9001 شناخت سیستم مدیریت کیفیت است.در این مرحله وضعیت موجود سیستم مدیریت کیفیت در سازمان به وسیله تیم مشاور در طی بازدید از بخش های مختلف سازمان مشخص می شود. با مسوولین  فرآیندهای مختلف مصاحبه می شود و سپس اقدامات مورد نیاز برای استقرار و پیاده سازی الزامات استاندارد ایزو 9001 تدوین می شود. گزارش تهیه شده در این مرحله بسیار مهم بوده و مسیر استقرار سیستم مدیریتی را در سازمان تعیین می کند. در این مرحله دو موضوع اصلی بایستی تعیین شود.1)    میزان نیاز به تهیه مستندات سیستم مدیریت کیفیت2)    زیرساخت های مورد نیاز برای استقرار سیستم●    مرحله دوم آموزش ISO 9001 استدر این مرحله با توجه به تعداد پرسنل سازمان و سطح تحصیلات ایشان، بایستی آموزش مفاهیم سیستم مدیریت کیفیت و الزامات استاندارد برای کارکنان سازمان برنامه ریزی و اجرا شود. در رابطه با آموزش سیستم مدیریت کیفیت ما در بهمدام نیز سعی کردیم در کوتاه ترین زمان ممکن آموزش مجازی ISO 9001:2015  را به بهترین نحو ممکن آماده نماییم تا مدیران، کارشناسان، کارآموزان و علاقه مندان به حوزه سیستم های مدیریتی، بتوانند به راحتی و بصورت کاملا کاربردی با الزامات استاندارد آشنا شوند. در این دوره آموزشی که بصورت مجازی و در قالب فیلم های آموزشی می باشد با الزامات و تک تک بندهای ایزو 9001 آشنا خواهید شد (معمولا در دوره های حضوری فرصت بیان تک تک بندها نیست)،  به این ترتیب با بندها و الزامات جدید استاندارد نیز آشنا می شوید .●    مرحله سوم مستندسازی ایزو استدر این مرحله سیستم مدیریت کیفیت بر مبنای الزامات ISO 9001  طراحی می شود. فرایند های مورد نیاز سازمان متناسب با  اندازه سازمان و پیچیدگی فرآیند ها توسط سازمان یا با همراهی تیم مشاور تدوین می شود. این سیستم ها در قالب مستنداتی شامل شناسنامه‌ی فرایندها، ریسک و فرصت‌های سازمانی، روش‌های اجرایی، دستورالعمل ها، فرم‌ها، فرآیندها، خط مشی کیفیت، طرح کیفیت، نظامنامه کیفیت و … طراحی می شود.سازمان بايستی مستندات و از جمله سوابق مرتبط مورد نياز برای ايجاد، بكارگيری و برقرار نگهداشتن سيستم مديريت كيفيت و همچنين برای پشتيبانی از اجرای اثربخش و كارای فرآيندهای سازمان را مشخص كند. ماهيت و گستره مستندات بايستی الزامات مربوط به قراردادها، قوانين و مقررات و همچنين نيازها و انتظارات مشتريان و ساير طرف‌ های ذينفع را برآورده نموده و متناسب با سازمان باشد. مستندات می تواند به هر شكل يا نوع از هر رسانه متناسب با نيازهای سازمان باشد. به منظور فراهم نمودن مستنداتی كه بتوانند نيازها و انتظارات طرف ‌های ذينفع را برآورده سازد، مديريت بايد موارد زير را مورد توجه قرار دهد:الزامات قراردادی از جانب مشتری و ساير طرف ‌های ذينفعپذيرش استاندارد های بين ‌المللی، ملی، منطقه ‌ای و بخش ‌های صنعتیالزامات مربوط با قوانين و مقررات ذيربطتصميمات اتخاذ شده توسط سازمانمنابع اطلاعاتی برون سازمانی مرتبط با ارتقای شايستگی سازمانیاطلاعات مربوط به نيازها و انتظارات طرف ‌های ذينفع●    مرحله چهارم اجرای سیستم مدیریت کیفیت ایزو 9001 استمستنداتی که در مرحله قبلی طراحی شده است، به وسیله مسوولین فرآیندها اجرا شده و مشاور بر اجرای مستندات سازمان نظارت می کند. در این مرحله در صورت نیاز ممکن است تغییراتی اعمال شود.در این مرحله برای اطمینان از عملکرد سیستم بایستی فرایند ممیزی داخلی در سازمان طرح ریزی و اجرا شود. طرح ریزی ممیزی داخلی سیستم های مدیریت بر مبنای استاندارد بین المللی ISO 19011:2018 می باشد.●    قدم پنجم، ممیزی، ثبت بین المللی و صدورگواهینامه‌ی سیستم مدیریت کیفیت استپس از انجام ممیزی داخلی ایزو 9001، مشکلات موجود شناسایی شده و اقدامات لازم برای برطرف سازی عدم انطباق ها انجام می شود. ممیزی صدور گواهینامه سیستم مدیریت کیفیت بر اساس استاندارد بین المللی ISO 19011:2018    انجام می شود. در صورتی که سازمان بتواند تمامی الزامات سیستم مدیریت کیفیت را به درستی طرح ریزی و اجرا کند، گواهینامه بین المللی QMS برای سازمان از طرف شرکت های معتبر و مورد تایید نهادهای ناظر در سطح جهانی، صادر می شود.اعتبار گواهینامه‌ی سیستم مدیریت کیفیت ایزو 9001گواهینامه های سیستم مدیریت کیفیت ایزو 9001 بمدت 3 سال اعتبار دارد. در طی مدت سه سال در دوره های زمانی برنامه ریزی شده ای توسط شرکت گواهی دهنده ممیزی های مراقبتی از سازمان صورت می گیرد. این ممیزی های مراقبتی برای حصول اطمینان از حفظ و ارتقا سیستم مدیریت کیفیت در سازمان انجام می شود.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Fri, 17 Feb 2023 00:27:16 +0330</pubDate>
            </item>
                    <item>
                <title>برای ثبت شرکت از کجا شروع کنیم ؟</title>
                <link>https://virgool.io/@naka/%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AB%D8%A8%D8%AA-%D8%B4%D8%B1%DA%A9%D8%AA-%D8%A7%D8%B2-%DA%A9%D8%AC%D8%A7-%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D9%86%DB%8C%D9%85-arazk88jdlfv</link>
                <description>تمامی شرکتها و مؤسسات غیر تجاری برای شروع فعالیت خود باید در اداره ثبت شرکتها به ثبت برسند تا دارای شخصیت حقوقی گردند، بنابراین ثبت شرکت ها الزامی است  و دولت می بایست حدالمقدور در تشکیل آن ها نظارت نماید تا وسیله ای برای سواستفاده نباشد.مرجع ثبت شرکت ها در تهران &quot; اداره ثبت شرکت ها و مالکیت صنعتی &quot; که از دوایر اداره ثبت اسناد املاک است ، می باشد و در خارج از تهران &quot; اداره ثبت اسناد و املاک &quot; مرکز اصلی شرکت و نقاطی که اداره یا دایره ثبت اسناد وجود ندارد ، دفتر خانه اسناد رسمی و اگر مرجع مذکور ، وجود نداشته باشد دفتر دادگاه محل است.در ذیل، به توضیحات کامل راجع به ثبت شرکت های تجاری خواهیم پرداخت. شایان ذکر است ،چنانچه در هر یک از مراحل ثبت شرکت با مشکل مواجه شدید می توانید از کارشناسان متعهد بهره جویید.برای ثبت شرکت چه باید کرد ؟1- عموم شرکت ها در ایران شرکت با مسئولیت محدود و شرکت سهامی خاص می باشد.برای ثبت هر یک از آن ها توجه به نکات ذیل حائز اهمیت است :شرکت با مسئولیت محدوددر شرکت با مسئولیت محدود ، حداقل شرکا 2 نفر ، حداقل سرمایه 100.000 تومان و حداقل هیات مدیره یا مدیران 1 نفر یا بیشتر است. میزان مسئولیت هر یک از شرکا ، «به میزان سهم الشرکه هر شریک» است.شرکت سهامی خاص :در شرکت سهامی خاص، حداقل شرکا 3 نفر ، حداقل سرمایه 100.000 تومان و حداقل هیات مدیره یا مدیران 3 نفر است. میزان مسئولیت هر یک از انواع شرکت های تجاری ، «به میزان مبلغ اسمی سهام هر شریک» است.ارائه گواهی پرداخت حداقل 35% سرمایه شرکت از بانکی که حساب شرکت در شرف تاسیس در آن جا باز شده است در هنگام ثبت الزامی است.تذکر : در صورتی که مقداری از سرمایه ی شرکت آورده ی غیر نقدی باشد (اموال منقول و غیر منقول) ارائه ی تقویم نامه کارشناس رسمی دادگستری الزامی است و در صورتیکه اموال غیر منقول جزء سرمایه شرکت قرار داده شود ارائه ی اصل سند مالکیت ضروری است.2-  در اداره ثبت شرکت ها ، فرم نمونه ی اسناد ثبت شرکت ، موجود است . می توان این فرم های نمونه را از اداره مذکور تهیه و تکمیل کرد. ذیل تمام اوراق می بایست توسط همه شرکا ( موسسین ) امضا شود.از جمله این فرم ها اظهارنامه ثبت شرکت است که از اوراق بهادار بوده و باید از اداره مذکور تهیه گردد. برای دریافت اظهارنامه مزبور باید تقاضانامه ای دایر بر قصد تاسیس شرکت تنظیم شود و به امضا برسد. همزمان فرم صورتجلسه مجمع عمومی موسس عادی و صورتجلسه هیات مدیره هم آماده شده وجود دارد که می بایست اخذ و امضا شود.اخذ مجوز در صورت مجوزی بودن موضوعفعالیت هایی که قبل از ثبت شرکت باید از مراجع ذیصلاح مجوز اخذ نمایند 23 موضوع کلی می باشند که می بایست قبل از ثبت شرکت ، نزد مرجع ثبت شرکت ها از مراجع ذیصلاح مجوز اخذ گردد.( برای کسب اطلاعات بیشتر در این رابطه لطفاَ رجوع کنید به موضوعات نیازمند اخذ مجوز در ثبت شرکت )پنج نام را برای شرکت خود انتخاب کنید .نام های انتخابی می بایست واژه ی بیگانه نبوده ، فاقد سابقه ثبت بوده و دارای معنا و مطابق با فرهنگ اسلامی باشد.انتخاب نام شرکت یکی از مهم ترین اقداماتی است که در مسیر ثبت شرکت انجام می شود ، نام شرکت باید معرف ایده و کسب و کار شما باشد.به سامانه اداره ثبت شرکت ها مراجعه نمایید.جهت ثبت شرکت ، می بایست به پایگاه اینترنتی اداره کل ثبت شرکت ها به نشانی http://irsherkat.ssaa.ir  مراجعه کنید. ( قسمت پذیرش درخواست ثبت شرکت )فرمی پیش روی شما ظاهر می شود که باید مرحله به مرحله آن را تکمیل کنید و مدارک مورد نیاز را در آن بارگذاری نمایید. اطلاعات مربوط به متقاضی نخستین موضوعی است که در این فرم ها باید درج شود. ( شامل نام متقاضی ،نام خانوادگی متقاضی ، تابعیت متقاضی ، سمت متقاضی ، شماره ملی متقاضی ، شماره همراه متقاضی )پس از تکمیل اطلاعات خواسته شده در سامانه ، چنانچه اطلاعات را به درستی وارد نموده باشید ، در مرحله بعد می بایست مدارک مورد نیاز را از طریق باجه های پست به صورت سفارشی به آدرس ذکر شده در تاًییدیه ی پذیرش ارسال فرمایید.مدارکی که بعد از تکمیل مراحل ثبت از طریق پست می بایست ارسال گردد :1)  دو نسخه از مدارکی که توسط اعضاء امضا شده.2) کپی مدارک شناسایی افراد.3) گواهی عدم سوء پیشینه ی کیفری اعضا.4) یک برگه ازتأیید نام و برگه ی رسید پذیرش اینترنتی.در صورت کامل بودن مدارک تقدیمی ، کارشناس اداره ثبت شرکت ها اقدام به تهیه پیش نویس آگهی ثبت نموده و به متقاضیان ثبت یا یکی از شرکا یا وکیل رسمی شرکت تحویل می دهد.سپس امضایی دال بر &quot; ثبت با سند برابر است &quot; از شرکا یا وکیل رسمی شرکت اخذ می گردد.سپس دو نسخه آگهی به امضای رییس اداره رسیده و یک نسخه از تمامی مدارک در پرونده شرکت ، ضبط و نسخه دوم جهت نگهداری در شرکت به متقاضی داده می شود و این سند &quot; سند ثبت شرکت &quot; است.با توجه به ماده 6 نظامنامه قانون تجارت ، وزارت عدلیه و ماده 197 قانون تجارت در ظرف مدت یک ماه از تاریخ ثبت شرکت، باید خلاصه شرکت نامه و منضمات آن ، توسط اداره ثبت در روزنامه رسمی جمهوری اسلامی ایران و یکی از جراید کثیرالانتشار مرکز اصلی شرکت به خرج خود شرکت ، منتشر می شود.پس از ثبت شرکت یکی از کارهایی که میتواند به بهبود بازدهی شرکت شما کمک کند. و باعث کسب درامد بیشتر شود دریافت گواهینامه های ایزو مرتبط با کسب و کارتان است. برای این منظور میتوانید با شرکت طاها مدیران عصر ماندگار ارتباط بگیرید تا با کمک مشاوران با تجربه به آسانی استاندارد های ایزو را پیاده سازی کنید و گواهینامه دریافت کنید.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Thu, 02 Feb 2023 13:41:24 +0330</pubDate>
            </item>
                    <item>
                <title>مدل هفت لایه ای OSI از سازمان استاندارد جهانی ایزو</title>
                <link>https://virgool.io/@naka/osi-model-wak4ofxp6ph1</link>
                <description>موسسه بین المللی استاندارد (ISO) در اواخر دهه 70 میلادی ، مدل 7 لایه  OSI يا Open Systems Interconnection ( اتصال سیستم های باز ) را پیشنهاد کرد. این مدل از همان ابتدا مورد استقبال قرار نگرفت و بصورت یک مدل مفهومی و برای آموزش دانشجویان باقی ماند . در این مقاله هدف معرفی اجمالی مدل OSI  و مقایسه آن با مدل کاربردی TCP/IP  می باشد.در این استاندارد کل وظایف و خدمات یک شبکه در هفت لایه تعریف شده است.لایه ۱- لایه فیزیکی   Physical layerلایه۲- لایه پیوند داده ها   Data link layerلایه۳-لایه شبکه   Network Layerلایه۴-لایه انتقال   Transport Layerلایه۵-لایه جلسه Session Layerلایه۶-لایه ارائه (نمایش Presentation Layerلایه۷_لایه کاربرد   Application Layerطراحی لایه ای شبکه را می توان با برنامه نویسی ماجولار مقایسه کرد، بدین نحو که روالهای حل یک مسئله به اجرای کوچکتری شکسته می شود و برای آن زیر برنامه نوشته می شود. در توابع صدازننده ی این زیر برنامه ها جزئیات درونی آنها اهمیت ندارد و بلکه فقط نحوه صدازدن آنها و پارامترهای مورد نیاز ورودی به زیر برنامه و چگونگی برگشت نتیجه به صدازننده ، مهم است.از لایه های پایین به بالا ، سرویس های ارائه شده (با تکیه بر سرویسی که لایه های زیرین ارائه می کنند.) پیشرفته تر می شود.یاین مدل به منظور تعریف یک استاندارد جهانی و فراگیر ارائه شد و گمان می رفت که تمام شبکه ها بر اساس این مدل در هفت لایه طراحی شوند ، به گونه ای که در دهه هشتاد سازمان ملی علوم در آمریکا عنوان کرد که در آینده فقط از این استاندارد حمایت کرد ، ولی در عمل ، طراحان شبکه به این مدل وفادار نماندند. مثلا شرکت ناول مدل پنج لایه ای خودش را بکار گرفت و در اینترنت مدل TCP/IP فراگیر شد. در اینجا به دلایل شکست مدل OSI نخواهیم پرداخت زیرا پاره ای از این عوامل از مسائل غیر عملی (همانند انتشار رایگان اصل برنامه های TCP/IP توسط دانشگاه برکلی ) نشأت می گیرد و محل بحث و مناقشه است. در مجموع این مدل ، مرجع بسیار کامل و مناسبی برای بحث در دروس دانشگاهی است.در ادامه به اختصار وظایف هر لایه در مدل OSI   را تعریف خواهیم کرد.۱ - لایه فیزیکیوظیفه اصلی در لایه ی فیزیکی، انتقال بیتها بصورت سیگنال الکتریکی و ارسال آن بر روزی کانال می باشد. واحد اطلاعات در این لایه بیت است و بنابراین این لایه هیچ اطلاعاتی از محتوای پیام ندارد و تنها بیتهای ۰و ۱را ارسال یا دریافت می کند. پارامترهایی که باید در این لایه مورد نظر باشند عبارتند از:ظرفیت کانال فیزیکی و نرخ ارسالنوع مدولاسیونچگونگی کوپلاژ با خط انتقالمسائل مکانیکی و الکتریکی مانند نوع کابل، باند فرکانسی و نوع رابط ( کانکتور) کابل.در این لایه که تماماً سخت افزاری است، مسائل مخابراتی در مقایسه بیتها، تجربه و تحلیل شده و طراحی های لازم انجام می شود. طرح شبکه می تواند برای طراحی این لایه ، از استاندارد های شناخته شده انتقال همانند RS-232و RS-422  و RS -423و… که سخا افزار آنها موجود است. استفاده کند.این لایه هیچ وظیفه ای در مورد تشخیص و ترمیم خطا ندارد.۲ - لایه پیوند داده هاوظیفه این لایه آن است که با استفاده از مکانیزمهای کشف و کنترل خطا، داده ها را روی یک کانال انتقال که ذاتأ دارای خطا است بدون خطا و مطمئن به مقصد برساند. در حقیقت می توان وظیفه این لایه را بیمه ی اطلاعات در مقابل خطاهای احتمای دانست؛ زیرا ماهیت خطا به گونه ای است که قابل رفع نیست ولی می توان تدابیری اتحاذ کرد که فرسنده از رسیدن یا نرسیدن صحیح اطلاعات به مقصد مطلع شده و در صورت بروز خطا مجددأ اقدام به ارسال اطلاعات کند؛ با چنین مکانیزمی یک کانال دارای خطا به یک خط مطمئن و بدون خطا تبدیل خواهد شد.یکی دیگر از وظایف لایه ی پیوند داده ها آن است که اطلاعات ارسالی از لایه بالاتر را به واحد های استاندارد و کوچک تری شکسته و ابتدا و انتهای آن از طریق نشانه های خاصی که Delimiter نامیده می شود ، مشخص نماید. این قالب استاندارد که ابتدا و انتهای ان دقیقأ مشخص شده، فریم نامیده می شود؛ یعنی واحد اطلاعات در لایه ی دوم فریم است.کشف خطا که از وظایف این لایه می باشد می تواند از طریق اضافه کردن بیتهای کنترل خطا مثل بیتهای Parity chock و checksum و CRC انجام شود.یکی دیگر از وظایف لایه ی دوم کنترل جریان یا به عبارت دیگر تنظیم جریان ارسال فریم ها به گونه ای است که یک دستگاه کند هیچ گونه فریمی را به خاطر آهسته بودن از دست ندهد.یکی دیگر از وظایف این لایه آن است که وصول داده ها یا عدم رسید داده ها را به فرستنده اعلام کند.در بخش های قبل اشاره کردیم که بسیاری از شبکه ها از کانال اشتراکی استفاده می کنند و ارسال همزمان دو ایستگاه منجر به تصادم ( اختلاط سیگنال انتقال ) و خرابی داده ها خواهد شد. یکی دیگر از وظایف این لایه آن است که قراردادهایی را برای جلوگیری از تصادم سیگنال ایستگاه هایی که از کانال اشتراکی استفاده می کنند ، وضع کنند چرا که فرمان ارسال داده بر روی کانال مشترک از لایه ی دوم صادر می شود این قراردادها در زیر لایه ای به نام MAS تعریف شده است.وقتی یک واحد اطلاعاتی تحویل یک ماشین متصل به کانال فیزیکی در شبکه شد، وظیفه ی این لایه پایان می یابد از دیدگاه این لایه ، ماشینهائی که به کانال فیزیکی در شبکه متصل نمی باشند ، در دسترس نیستند.کنترل سخت افزار لایه ی فیزیکی به عهده این لایه است .فراموش نکنید که وظایف این لایه نیز با استفاده از سخت افزارهای دیجیتال انجام می شود.۳ - لایه شبکهدر این لایه اطلاعات به صورت بسته هایی سازماندهی می شود و برای انتقال مطمئن تحویل لایه ی دوم می شود. با توجه به آنکه ممکن است بین دو ماشین در شبکه مسیرهای گوناگونی وجود داشته باشد، لذا این لایه وظیفه دارد هر بسته اطلاعاتی را پس از دریافت به مسیری هدایت مند تا آن بسته بتواند به مقصد برسد. در این لایه باید تدابیری اندیشیده شود تا ازدحام (یعنی ترافیک بیش از اندازه ی بسته ها در یک مسیریاب یا مرکز سوئیچ ) جلوگیری شده و از ایجاد بن بست ممانعت بعمل بیاورد.هر مسیریاب می تواند به صورت ایستا و غیر هوشمند بسته ها را مسیریابی مند. همچنین می تواند به صورت پویا و هوشمند برای بسته ها مسیر انتخاب نماید. در این لایه تمام ماشینهای شبکه دارای یک آدرس جهانی و منحصر به فرد خواهند بود که هر ماشین بر اساس این آدرس ها اقدام به هدایت بسته ها به سمت مقصد خواهد رفت.این لایه ذاتا « بدون اتصال» است یعنی پس از تولید یک بسته ی اطلاعاتی در مبدأ، بدون هیچ تضمینی در رسیدن آن بسته به مقصد، بسته شروع به طی مسیر در شبکه می کند. وظایف این لایه به سیستم نامه رسانی تشبیه شده است؛ یک پاکت محتوی نامه پس از آنکه مشخصات لازم بر روی آن درج شد، به صندوق پست انداخته می شود، بدون آنکه بتوان زمان دقیق رسیدن نامه و وجود گیرنده ی نامه را در مقصد ، از قبل حدس زد در ضمن ممکن است نامه به هر دلیلی گم شود یا به اشتباه در راهی بیفتد که مدتها در مسیر بماند و زمانی به گیرنده ی آن برسد که هیچ ارزشی نداشته باشد.در این لایه تضمینی وجود ندارد وقتی بسته ای برای یک ماشین مقصد ارسال می شود آن ماشین آماده ی دریافت آن بسته باشد و بتواند آنرا دریافت کند. در ضمن هیچ تضمینی وجود ندارد وقتی چند بسته متوالی برای یک ماشین ارسال می شود به همان ترتیبی که بر روی شبکه ارسال شده، در مقصد دریافت شوند همچنین ممکن است که وقتی بسنه ای برای یک مقصد ارسال می گردد، به دلیل دیر رسیدن از اعتبار ساقط شده و مجدداً ارسال شود و هر دو بسته ( جدید و قدیم ) باهم برسند این مسائل در لایه ی باالاتر قابل حل خواهد بود.هر چند وظایف این لایه می تواند بصورت نرم افزاری پیاده شود ولی برای بالاتر رفتن سرعت عمل شبکه، می توان برای این لایه یک کامپیوتر خاص طراحی نمود تا در کنار سخت افزار لایه های زیرین ، بسته ها را روی شبکه ردو بدل کند.۴ - لایه انتقالدر این لایه بر اساس خدمات لایه ی زیرین، یک سرویس انتقال بسیار مطمئن و « اتصال گرا » ارائه می شود.تمام مشکلاتی که در لایه ی شبکه عنوان شد در این لایه حل و فصل می شود.قبل از ارسال بسته ها، نرم افزار این لایه اقدام به ارسال یک بسته ی ویژه می نماید تا مطمئن شود که ماشین گیرنده آماده ی دریافت اطلاعات است.جریان ارسال اطلاعات شماره گذاری شده تا هیچ بسته ای گم نشود یا دو بار دریافت نشود.ترتیب جریان بسته ها حفظ می شود.در این لایه پروسه های مختلفی که بر روی یک ماشین واحد اجرا شده اند، آدرس دهی می شوند به نحوی که هر پروسه بر روی یک ماشین واحد، به عنوان یک هویت مستقل داده های خود را ارسال یا دریافت نماید.واحد اطلاعات در ایت لایه قطعه است. از وظایف دیگر این لایه می توان به موارد زیر اشاره کرد:تقسیم پیامهای بزرگ به بسته های اطلاعاتی کوچک تربازسازی بسته های اطلاعاتی و تشکیل یک پیام کاملشماره گذاری بسته های کوچکتر جهت باز سازیتعیین و تبیین مکانیزم و نامگذاری ایستگاه هایی که در شبکه اند.وظایف این لایه (و لایه های بعدی) با استفاده از نرم افزار پیاده سازی می شود و فقط بر روی ماشینهای نهایی (ماشینهای کاربران) وجود دارد و مراکز سوئیچ به وظایف این لایه احتیاجی ندارند (مگر در موارد خاص) این لایه در فصلی مجزا بررسی خواهد شد.۵ -لایه جلسهوظیفه این لایه فراهم آوردن شرایط یک جلسه (نشست) همانند ورود به سیستم از راه دور احراز هویت طرفین ، نگداری این نشست و توانایی از سرگیری یک نشست در هنگام قطع ارتباط می باشد.در این لایه نیز واحد اطلاعات پیام است. وظایف این لایه را می توان در موارد زیر خلاصه کرد:بر قراری و مدیریت یک جلسهشناسایی طرفینمشخص نمودن اعتبار پیامهااتمام جلسهحسابداری مشتری ها۶لایه ی ارائه نمایشدر این لایه معمولاً کارهایی صورت می گیرد که اگرچه بنیادی و اساسی نیستند ولیکن به عنوان نیاز های عمومی تلقی می شوند. مثلا:فشرده سازی فایلرمز نگاری برای ارسال داده های محرمانهرمز گشاییتبدیل کد ها به یکدیگر که دو ماشین از استانداردهای مختلفی برای متن استفاده می کنندمثل تبدیل متون EBCDIC به ASCII و بالعکس7 - لایه کاربرددر این لایه، استاندارد مبادله ی پیام بین نرم افزارهائی که در اختیار کاربر بوده و به نحوی با شبکه در ارتباطند، تعریف می شود. لایه کاربرد شامل تعریف استانداردهایی نظیر انتقال نامه های الکترونیکی، انتقال مطمئن فایل، دسترسی به بانکهای اطلاعاتی راه دور، مدیریت شبکه و انتقال صفحات وب است.در مدل لایه ای شبکه، وقتی یک برنامه کاربردی در لایه ی آخر اقدام به ارسال یک واحد اطلاعات می نماید. سرآیند لازم به آن اضافه شده و از طریق صدا زدن توابع سیستمی استاندارد به لایه ی زیرین تحویل داده می شود. لایه ی زیر نیز پس از اضافه کردن سر آیند لازم، آنرا به لایه ی پایین تحویل میدهید و این روند تکرار می شود تا آن واحد اطلاعات روی کانال فیزیکی ارسال شود. در مقصد پس از دریافت یک واحد اطلاعات از روی خط فیزیکی، تحویل لایه ی بالاتر شده و در هر لایه پس از تحلیل و پردازش لازم، سرآیند اضافه شده را حذف و به لایه ی بالاتر تحویل می دهد.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Sat, 28 Jan 2023 21:00:15 +0330</pubDate>
            </item>
                    <item>
                <title>FlexBox چیست ؟ ماژولی مبتنی بر CSS برای طراحی های یک بعدی</title>
                <link>https://virgool.io/@naka/flexbox-in-css-zb0snvnmaxcd</link>
                <description>FlexBox چیست؟طراحی سایت بسیار جذاب و ساده است و امروزه افراد زیادی قادر هستند سایت شخصی خود را بدون نیاز به برنامه نویسان حرفه‌ای طراحی کنند. برای یک طراحی خوب، تسلط به CSS ضروری به نظر می‌رسد زیرا امکانات زیادی در طراحی به شما می‌دهد. در این مطلب به سراغ یکی از ماژول‌های مهم CSS می‌رویم و یاد می‌گیریم که FlexBox چیست؟ و چه کاربردی در طراحی سایت دارد.FlexBox چیست؟FlexBox یکی از ماژول‌های CSS 3 است که کار را در طراحی وب بسیار ساده کرده و نمای تازه‌ای به صفحات HTML می‌بخشد. این ماژول، مدلی برای طراحی‌های تک‌بعدی و نمایش عناصر موجود در صفحه‌ی وب است که برای نصب آن به وابستگی (Dependency) خاصی نیازی نیست.طراحی صفحات برای نمایش آیتم‌های یک ستونه و یا دو ستونه کار سختی نیست اما با افزایش این بخش‌ها، کار کمی مشکل می‌شود که این مشکل، با استفاده از ماژول FlexBox به راحتی قابل حل است. FlexBox در طراحی‌های واکنش‌گرا (Responsive) کارایی زیادی دارد؛ چرا که با چیدن آیتم‌ها (Flex Item) درون یک سطر یا ستون در قالب نگه‌دارنده (Flex Container)، به طور خودکار عناصر طراحی را با اندازه‌ی صفحه منطبق کرده و مشکلاتی مانند Float یا WhiteSpace را برطرف می‌کند.بدین ترتیب با استفاده از ماژول FlexBox می‌توان طراحی چند سطری و یا چند ستونی را با زحمت کمتری انجام داد و بهتر آن را مدیریت کرد.تفاوت CSS Grid با FlexBox چیست؟هرکدام از این ماژول‌ها برای طراحی واکنش‌گرای صفحات به کار می‌روند و حتی در کنار یکدیگر قابل استفاده هستند. FlexBox و Grid شباهت‌های زیادی دارند و دو مورد از بهترین مدل‌های طراحی محسوب می‌شوند اما تفاوت‌هایی نیز دارند که قابل اهمیت است. مانند:تنظیم سطر و ستون ها:یکی از تفاوت‌های اصلی FlexBox با CSS Grid در مورد بعد است. ما در صفحه‌ی وب معمولا عناصر را به دو حالت تک‌بعدی و دوبعدی در نظر می‌گیریم. مثلا منو‌ی سایت ما را نگاه کنید، این منو به عنوان یک عنصر تک بعدی شناخته می‌شود، یعنی در یک مسیر یا یک جهت قرار گرفته است (فقط در جهت محور طول). برای پیاده‌سازی چنین چیزی بهتر است از FlexBox استفاده کنیم، البته با CSS Grid هم این کار شدنی است اما FlexBox با کد کمتر و کیفیت بهتر این کار را انجام می‌دهد.در طرف مقابل ساختار دو بعدی را داریم. مثلا منوی بالای صفحه با منوی کنار صفحه یک سایت را کنار یکدیگر به عنوان یک عنصر دوبعدی در نظر بگیرید. یعنی اِلمان‌ها در دو بعد یا دو جهت قرار گرفته اند. در این حالت استفاده از CSS grid توصیه می‌شود. چون سرعت کار را بالا برده و خروجی بهتری می‌دهد.اولویت در محتوا یا طراحی:اگر قبل از طراحی محتوای سایت خود را بدانید، استفاده از FlexBox مزیت بزرگی خواهد بود. اما به علت پیچیدگی تعیین اندازه‌ی آیتم‌ها در FlexBox، اگر ابتدا قصد طراحی صفحات را دارید تا بعداً نوع محتوای آن را تعیین کنید، استفاده از CSS Grid اهمیت بیشتری پیدا می‌کند.پیچیدگی تعیین اندازه‌ی المان‌های طراحی:FlexBox در واقع عنوانی اختصاری و برگرفته از Flexible Box یا جعبه‌ی منعطف است؛ به این معنی که آیتم‌ها با هر اندازه‌ای می‌توانند درون آن، جا بگیرند. این مسئله هم یکی از نقاط قوت این ابزار است و هم اینکه باعث پیچیدگی تعیین اندازه‌ی آیتم‌ها می‌شود. در حالی که CSS Grid در چنین مواردی کمتر شما را به زحمت می‌اندازد.نباید فراموش کرد که هیچ کدام از این دو ماژول بر دیگری برتری ندارد و هر کدام در جای خود مناسب و کاربردی هستند. باید با توجه به نیاز، بهترین و مناسب‌ترین ماژول را انتخاب کرد. همچنین می‌توان به طور همزمان از FlexBox و CSS Grid استفاده کرد تا کار با قالب بندی و Layout آسان‌تر شود. با استفاده از کتابخانه‌ی Grid-Flexbox می‌توان از این قابلیت استفاده کرد و هر قالبی را به سادگی به وجود آورد.برای مقایسه‌ی بهتر ترازبندی در CSS Grid و Flexbox ، می‌توان از سایت Alignment Cheatsheet استفاده کرد. در این سایت این دو با هم مقایسه شده است و تفاوت‌ها و شباهت‌های آن‌ها با تصاویر و مثال‌های متنوع مشخص شده است.میزان پشتیبانی مرورگرها از Flexbox:طراحان همیشه به پشتیبانی مرورگرها دقت کرده و صبر می‌کنند تا پشتیبانی مرورگر‌ها از FlexBox به اندازه‌ی کافی بالا برود تا با خیال آسوده از آن استفاده کنند. میزان پشتیبانی مرورگر‌ها از FlexBox در این سایت قابل مشاهده است.نکته‌ی قابل توجه این است که FlexBox دارای سه syntax یا نگارش است؛ در سال 2009 اولین نگارش FlexBox انتشار یافت و در ادامه در سالهای 2011 و2012 دو نگارش دیگر عرضه شدند. در این سه نگارش، بیشتر خاصیت‌ها با هم فرق دارند:برای اینکه مرورگر‌های قدیمی هم از FlexBox پشتیبانی کنند، باید از دو نگارش قدیمی FlexBox نیز استفاده کنیم. همچنین بعضی از خاصیت‌ها را برای اینکه برخی مرورگرها پشتیبانی کنند، باید از پیشوند‌ها استفاده کنیم. مثلا برای اینکه به یک المان نگهدارنده مقدار flex را به ویژگی display اختصاص دهیم (در مقاله‌ی آموزش جامع Flexbox در مورد این المان بیشتر توضیح خواهیم داد) باید کد زیر را بنویسیم:.container{
  display: -webkit-box;      /* OLD - iOS 6-, Safari 3.1-6 */
  display: -moz-box;         /* OLD - Firefox 19- (buggy but mostly works) */
  display: -ms-flexbox;      /* TWEENER - IE 10 */
  display: -webkit-flex;     /* NEW - Chrome */
  display: flex;
}همان‌طور که در بالا معلوم است در این حالت برای تنها یک خاصیت، باید 5 خط کد نوشت. می‌توان برای تمیز شدن و مدیریت این تعاریف از  CSS Preprocessor(پیش پردازنده‌های CSS) استفاده  کرده و تمام خاصیت‌های FlexBox در نگارش‌های مختلف را در یک فایل SCSS به صورت mixin تعریف کنیم. کد زیر بخشی از این فایل را نشان می‌دهد://Order
@mixin order($value) {
	-webkit-box-ordinal-group: $value;   /* OLD - iOS 6-, Safari 3.1-6 */
	-moz-box-ordinal-group: $value;      /* OLD - Firefox 19- */
	-ms-flex-order: $value;              /* TWEENER - IE 10 */
	-webkit-order: $value;               /* NEW - Chrome */
	order: $value;  
}
// JUSTIFY CONTENT METHODS
// justify-content: [flex-]start;
@mixin justify_content_start() {
	-webkit-box-pack: start; 
	-moz-box-pack: start;
	-ms-flex-pack: start;
	-webkit-justify-content: flex-start;
	justify-content: flex-start;
}
// justify content center (main axis centering)
@mixin justify_content_center() {
	-webkit-box-pack: center; 
	-moz-box-pack: center;
	-ms-flex-pack: center;
	-webkit-justify-content: center;
	justify-content: center;
}فایل SCSS اشاره شده را داخل استایل اصلی import کرده و سپس با استفاده از mixinهای این فایل، یک صفحه‌ی واکنش‌گرای ساده را می‌نویسیم:/* SCSS Code */ 
@import &amp;quot_flexbox&quot;// Import Flexbox.scss
.container{
	@include display_flex;
	@include flex_direction_row;
	@include flex_wrap_wrap;
	.item{
		@include flex(1);
		&amp;.header{
			@include flex(100%);
		}
		&amp;.aside{
			@include flex(0 200px);
			height: 150px;
		}
		&amp;.main{
			@include flex(1 auto);
		}
		&amp;.footer{
			@include flex(100%);
		}
	}
}
@media screen and (max-width: 950px) {	
	.container .item{
		&amp;.header{
			@include order(1);
		}
		&amp;.aside{
			@include flex(1 auto);
			&amp;.aside1{@include order(3);}
			&amp;.aside2{@include order(4);}
		}
		&amp;.main{
			@include order(2);
			@include flex(1 100%);
		}
		&amp;.footer{@include order(5);}
	}
}
@media screen and (max-width: 600px) {	
	.container .item{
		&amp;.aside{
			@include flex(100%);
		}
	}
}&lt;!-- HTML Code --&gt;
&lt;div class=&amp;quotcontainer&amp;quot&gt;
	&lt;div class=&amp;quotitem item1 header&amp;quot&gt;header&lt;/div&gt;
	&lt;div class=&amp;quotitem item2 aside aside1&amp;quot&gt;aside1&lt;/div&gt;
	&lt;div class=&amp;quotitem item3 main&amp;quot&gt;main&lt;/div&gt;
	&lt;div class=&amp;quotitem item4 aside aside2&amp;quot&gt;aside2&lt;/div&gt;
	&lt;div class=&amp;quotitem item5 footer&amp;quot&gt;footer&lt;/div&gt;
&lt;/div&gt;مزایای استفاده از FlexBox چیست؟FlexBox نسبت به ابزارهای قبل از خود مثل float که قبلا به طور گسترده توسط طراحان وب استفاده می‌شد، اجازه می‌دهد کدهای استانداردتری نوشته‌ شود که در مرورگرهای مختلف به خوبی کار کنند. این ماژول به جای تمرکز روی راه‌حل‌های پیچیده یا استفاده از ترفندهایی مثل CSS Hacks روی شفافیت طراحی تمرکز دارد.یکی از مشکلات رایج float این است که با اضافه کردن اِلمان و محتوای جدید به یک بخش از سطر یا ستون، ممکن است لایه بندی ما به هم ریخته و کل آن بخش خراب شود. FlexBox دارای ویژگی‌های بیشتری است که طراحی را آسان‌تر می‌کند. در مقاله‌‌ی آموزش جامع Flexbox، چگونگی استفاده از این ویژگی‌ها را خواهیم آموخت. این ویژگی‌ها عبارتند از:قراردادن المان‌ها کنار یکدیگر یک ردیف بدون نیاز به تعیین اندازه‌ی دقیق پهنا و هم‌تراز سازی نسبت به المان نگهدارندهتغییر ترتیب المان‌ها به آسانی امکان‌پذیر است.اگر برای عنصرهایی که در یک خط قرار گرفتن جای کافی نباشد به راحتی عنصر آخر به صورت خودکار در ردیف بعد قرار می‌گیرد. همچنین تعیین اندازه‌ی یک المان نسبت به اندازه‌ی المان نگهدارنده به‌صورت واکنش‌گرا ممکن است.پشتیبانی از چیدمان معکوس (درمورد این ویژگی در آموزش‌ جامع FlexBox بیشتر صحبت خواهیم کرد.)شروع کدنویسی با FlexBox:بعد از بررسی اینکه مزایای استفاده از FlexBox چیست، در این بخش قصد داریم تا یک منوی کناری و یک جعبه‌ی رنگ را طراحی کنیم. توجه داشته باشید که این مثالها تنها برای درک بهتر کارکرد FlexBox آورده شده‌اند و در آموزش جامع FlexBox به معرفی و نحوه‌ی استفاده از ویژگی‌های معمول FlexBox می‌پردازیم.طراحی منوی کناری:برای شروع، می‌خواهیم یک منوی کناری یا sidebar با استفاده از FlexBox به شکل زیر طراحی کنیم:در گام اول ویژگی‌های صفحه و متن نوشته شده در صفحه را تعریف می‌کنیم.* {
  margin: 0;
  padding: 0;
  }
html, body {
    height: 100%;
  }
body {
    font: 12px/1 &#039;Montserrat&#039;, sans-serif;
    color: #333;
    background: #333;
    overflow-x: hidden;
  }
 h1 {
    margin: 120px 0 15px;
    font-size: 28px;
    font-weight: 400;
  }در گام دوم ویژگی‌های مربوط به المان نگهدارنده را تعریف می‌کنیم:.flex-container {
    display: flex;
    min-height: 100%;
  }
.sidebar {
    position: absolute;
    width: 220px;
  }در گام سوم، ویژگی‌های درون منوی کناری را طراحی می‌کنیم:.content {
    flex: 1;
    padding: 30px;
    background: #eee;
    box-shadow: 0 0 5px black;
  }
.content.wide {
    transform: translate3d(220px, 0, 0);
}
.nav li a {
    position: relative;
    display: block;
    padding: 15px 15px 15px 50px;
    font-size: 12px;
    color: #eee;
    border-bottom: 1px solid #222;
  }در گام آخر، بدنه‌ی فرم را تعریف می‌کنیم. المان‌های موردنیاز ما عبارتند از: یک المان نگهدارنده که درون آن یک منوی کناری و یک صفحه نمایش قرار دارند. در درون منوی کناری سه گزینه برای تغییر صفحه داریم و در درون صفحه نمایش یک پیغام چاپ می‌کنیم.&lt;body&gt;
&lt;div class=&#039;flex-container&#039;&gt;
	  &lt;div class=&#039;sidebar&#039;&gt;
	    &lt;div class=&#039;title&#039;&gt;
	      Sidebar
	    &lt;/div&gt;
	    &lt;ul class=&#039;nav&#039;&gt;
	      &lt;li&gt;
	        &lt;a&gt;Dashboard&lt;/a&gt;
	      &lt;/li&gt;
	      &lt;li&gt;
	        &lt;a&gt;Settings&lt;/a&gt;
	      &lt;/li&gt;
	      &lt;li&gt;
	        &lt;a&gt;Logout&lt;/a&gt;
	      &lt;/li&gt;
	    &lt;/ul&gt;
	  &lt;/div&gt;
	  &lt;div class=&#039;content wide&#039;&gt;
	    &lt;h1&gt;Flexbox Off Canvas Menu&lt;/h1&gt;
	  &lt;/div&gt;
	&lt;/div&gt;
&lt;/body&gt;و به همین سادگی توانستیم با FlexBox یک منوی کناری طراحی کنیم.جمع بندی:در این مطلب آموختیم که FlexBox چیست؟ و چه کاربردهایی دارد. برخلاف flexbox که روی طراحی تک بعدی تمرکز دارد، به کمک CSS grid می‌توان به خوبی لایه‌های دوبعدی را به صورت سطری و ستونی طراحی کرد. مرورگرهای مختلفی FlexBox را پشتیبانی کرده و نگرانی خاصی راجع به پشتیبانی مرورگرها از این ماژول وجود ندارد. در ادامه نیز در مورد مزایای استفاده از FlexBox صحبت کردیم. البته باید توجه داشت که برای یک طراحی خوب، استفاده از هر دو مدل CSS Grid و FlexBox ضروری است؛ چراکه هر دو امکانات جداگانه‌ای در اختیار طراح وب قرار می‌دهند. FlexBox در طراحی یک بعدی بسیار کارایی دارد و از طرف دیگر، CSS Grid در طراحی چندبعدی و برای تنظیم آیتم‌های سطرها و ستون‌ها ضروری است.لازم به ذکر است که این موارد برای کسانی کارایی دارد که با طراحی وب، برنامه‌نویسی فرانت‌اند و به‌ویژه CSS آشنا باشند.  همچنین اگر تجربه یا سوالی در کار با FlexBox دارید، با ما به اشتراک بگذارید.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Fri, 27 Jan 2023 12:33:56 +0330</pubDate>
            </item>
                    <item>
                <title>CSS Grid Layout چیست و چه کاربردی در طراحی وب دارد؟</title>
                <link>https://virgool.io/@naka/css-grid-layout-lc9k7i9puw5y</link>
                <description>CSS یا Cascading Style Sheets به ما کمک می‌کند ظاهر مورد علاقه خود را برای سایت طراحی کنیم. برای درک اهمیت CSS کافی است که یک سایت را فقط با HTML و بدون CSS مشاهده کنید؛ آن‌وقت متوجه می‌شوید که نبود CSS در صفحات وب به چه شکلی خودش را نشان خواهد داد. در این مقاله با flexbox و CSS grid، دو ابزاری که کمک می‌کنند تا با استفاده از CSS صفحات وب را به آسانی و با سرعت بالا طراحی کنیم، آشنا می‌شوید. تفاوت‌های آن‌ها را با یکدیگر بررسی کرده و در نهایت، یک فرم ورود به سایت و صفحه خدمات را طراحی خواهید کرد.CSS grid چیست؟یک ماژول در CSS است که به توسعه‌دهندگان وب کمک می‌کند طرح‌های پیچیده واکنش‌گرا (یا Responsive) را راحت‌تر پیاده‌سازی کنند. grid این امکان را می‌دهد که هنگام طراحی صفحات وب بتوان صفحه را به بخش‌های مختلف تقسیم کرد؛ به‌گونه‌ای که این بخش‌ها با یکدیگر تداخل نداشته باشند.باید توجه داشت که به جز CSS grid روش‌های دیگری هم برای کنترل بخش‌های مختلف یک صفحه وب وجود دارد مانند: جداول (tables)، مدلهای جعبه‌ای (box model) و CSS flexbox که هرکدام دارای مزایا و معایب مخصوص به خود هستند. البته استفاده از جداول در طراحی منسوخ شده و دیگر استفاده نمی‌شود.تفاوت CSS grid با flexbox در چیست؟یکی از تفاوت‌های اصلی CSS grid با flexbox در مورد بعد است. ما در صفحه وب معمولا عناصر را به 2 حالت تک بعدی و دو بعدی در نظر می‌گیریم. یک عنصر تک بعدی یعنی در یک مسیر یا یک جهت قرار گرفته است (فقط در جهت محور طول) . برای پیاده سازی چنین چیزی بهتر است از flexbox استفاده کنیم، البته با CSS grid هم این کار شدنی است اما flexbox با کد کمتر و کیفیت بهتر این کار را انجام می‌دهد.در طرف مقابل ساختار دو بعدی را داریم. مثلا منوی بالای صفحه با منوی کنار صفحه یک سایت را کنار یکدیگر به عنوان یک عنصر دوبعدی در نظر بگیرید. یعنی اِلمان‌ها در دو بعد یا دو جهت قرار گرفته اند. در این حالت استفاده از CSS grid توصیه می‌شود. چون سرعت کار را بالا برده و خروجی بهتری می‌دهد.نباید فراموش کرد که هیچ کدام از این دو ماژول بر دیگری برتری ندارد و هر کدام در جای خود مناسب و کاربردی هستند. باید با توجه به نیاز، بهترین و مناسب‌ترین ماژول را انتخاب کرد. همچنین می‌توان به طور همزمان از CSS grid و flexbox استفاده کرد تا کار با قالب بندی و Layout آسان‌تر شود. با استفاده از کتابخانه Grid-Flexbox می‌توان از این قابلیت استفاده کرد و هر قالبی را به سادگی به وجود آورد.برای مقایسه بهتر ترازبندی در CSS Grid و Flexbox ، می‌توان از سایت Alignment Cheatsheet استفاده کرد. در این سایت این دو با هم مقایسه شده است و تفاوت‌ها و شباهت‌های آن‌ها با تصاویر و مثال‌های متنوع مشخص شده است.آیا CSS grid جزء استانداردهای وب حساب می‌شود؟هر چند CSS grid به عنوان یکی از استانداردهای وب شناخته نشده است، اما از اکتبر سال 2017 به بعد مرورگرهای گوگل کروم، فایرفاکس، سافاری، اپرا و Microsoft edge همگی از CSS grid پشتیبانی می‌کنند. W3C مسئولیت تدوین استانداردهای جدید وب را به عهده دارد و این کنسرسیوم استفاده از CSS grid را توصیه کرده است.برنامه نویسانی وب که دوست دارند قالب آن‌ها حتی در مرورگرهای قدیمی مثل IE هم به خوبی نمایش داده شود، می‌توانند از Modernizr استفاده کنند. Modernizr یک کتابخانه جاوا اسکریپت برای نمایش صحیح HTML5 و CSS3 در مرورگرهای مختلف است.مزایای استفاده از CSS gridCSS grid نسبت به ابزارهای قبل از خود مثل float و position در CSS که قبلا به طور گسترده توسط طراحان وب استفاده می‌شد، طرح‌بندی نامتقارن‌تری ارائه می‌کند. همینطور css grid اجازه می‌دهد کدهای استانداردتری نوشته‌ شود که در مرورگرهای مختلف به خوبی کار کنند. این ماژول به جای تمرکز روی راه‌حل‌های پیچیده یا استفاده از ترفندهایی مثل CSS Hacks روی شفافیت طراحی تمرکز دارد.یکی از مشکلات رایج float این است که با اضافه کردن اِلمان و محتوای جدید به یک بخش از صفحه، ممکن است لایه بندی ما به هم ریخته و کل صفحه خراب شود. این اتفاق به این دلیل رخ می‌دهد که اِلمان‌های صفحه‌ی ما از ارتفاع‌های مختلفی برخوردار هستند و از آنجایی که flexbox از لایه‌های انعطاف پذیر پشتیبانی می‌کند، می‌توان با کمک آن، صفحات پیچیده را به آسانی طراحی کرد. البته مشکلات خاصی هم وجود دارد که در مقالات بعدی آن‌ها را بررسی خواهیم کرد. لذا در بسیاری از مواقع CSS grid منعطف‌تر بوده و استفاده از آن راحت‌تر می‌باشد، همینطور با نوشتن کدهای کمتر می‌توان کار بیشتر انجام داد.سایر مزایای استفاده از CSS grid عبارتند از:اندازه‌های ثابت و منعطفتعیین محل المان‌هاتقسیم به بخش‌های کوچک‌تر برای نگهداری محتواکنترل ترازبندیکنترل برخورد المان‌های مختلف با یکدیگر و پشتیبانی از همپوشانیشروع کدنویسی با CSS gridبعد از یادگیری مفاهیم اولیه، در این بخش به طراحی دو نمونه قالب فرم ورود و صفحه خدمات می‌پردازیم.فرم ورودبرای شروع، می‌خواهیم یک فرم ورود (تنها با استفاده از CSS grid) به شکل زیر طراحی کنیم:در گام اول فواصل فرم از کناره‌های صفحه را تعریف می‌کنیم.* {
  box-sizing: border-box;
}
body {
  padding-top: 20%;
}
.login,h1{
  width:80%;
  margin: 0 auto;
}در گام دوم رنگ، اندازه متن و سایر ویژگی‌های موردنظر عنوان فرم را تعریف می‌کنیم.h1 {
  background-color: rgba(1, 216, 227, 0.8);
  border-top-right-radius: 5px;
  border-top-left-radius: 5px;
  padding: 10px;
  font-size: 24px;
  line-height: 1.4;
}در گام سوم، رنگ و سایر ویژگی‌های بدنه فرم را طراحی می‌کنیم..login {
  background-color: rgba(191, 216, 227, .4);
  border: 1px solid rgba(191, 216, 227, .8);
  border-bottom-right-radius: 5px;
  border-bottom-left-radius: 5px;
  padding: 10px;
  margin-bottom: 10px;
}در گام چهارم، ورودی‌ها را طراحی می‌کنیم. توجه داشته باشید که برای پنهان‌کردن رمزعبور کافی است نوع المان ورودی را از نوع [password] بگذاریم..login &gt; div {
  padding: 5px 0;
}
input[type=&amp;quotsubmit&amp;quot] {
  border: 1px solid rgba(191, 216, 227, .8);
  border-radius: 5px;
  color: #fff;
  background-color: rgb(54, 134, 169);
  font-size: 110%;
}
input[type=&amp;quottext&amp;quot],
input[type=&amp;quotpassword&amp;quot] {
  border: 1px solid rgba(191, 216, 227, .8);
  padding: 5px;
  border-radius: 5px;
  font-size: 110%;
  width: 100%;
}در گام پنجم فواصل داخلی فرم و اندازه‌ی متن لینک فراموش‌کردن رمزعبور را تنظیم می‌کنیم:.login &gt; div {
  padding: 5px 0;
}
.actions a {
  font-size: 80%;
}در گام آخر نیز تنظیمات مربوط به Grid را اضافه می‌کنیم:body {
    display: grid;
    align-content: center;
    justify-content: center;
 }
 .login &gt; div {
  display: grid;
  grid-template-columns: 1fr 2fr;
   align-items: center;
}
.login &gt; div.actions {
  grid-template-columns: 1fr 2fr 1fr;
}حال به سراغ بخش HTML فرم رفته و موارد مورد نیاز را تعریف می‌کنیم.  المان‌های ما عبارتند از: دو فیلد ورودی که هرکدام دارای یک عنوان برای خود هستند، یک دکمه‌ی ارسال و یک لینک برای فراموشی رمزعبور. همچنین فرم ما دارای یک بخش عنوان و یک بخش بدنه هست که نیازی نیست در فایل HTML به طور جداگانه تعریف شود و با معرفی نوع کلاس به فرم، تنظیمات کدشده خود فراخوانی می‌شوند. لذا داریم:&lt;body&gt;
&lt;h1&gt;Login Form&lt;/h1&gt;
&lt;form class=&amp;quotlogin&amp;quot action=&amp;quot&amp;quot method=&amp;quotpost&amp;quot&gt; 
    &lt;div&gt;&lt;label for=&amp;quotusername&amp;quot&gt;Username&lt;/label&gt;
      &lt;input type=&amp;quottext&amp;quot name=&amp;quotusername&amp;quot id=&amp;quotusername&amp;quot&gt;&lt;/div&gt;
    &lt;div&gt;&lt;label for=&amp;quotpassword&amp;quot&gt;Password&lt;/label&gt;
      &lt;input type=&amp;quotpassword&amp;quot name=&amp;quotpassword&amp;quot id=&amp;quotpassword&amp;quot&gt;&lt;/div&gt;
    &lt;div class=&amp;quotactions&amp;quot&gt;
      &lt;input type=&amp;quotsubmit&amp;quot name=&amp;quotlogin&amp;quot value=&amp;quotLogin&amp;quot&gt; &lt;a href=&amp;quot/forgot&amp;quot&gt;I forgot my password&lt;/a&gt;
    &lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;و به همین سادگی توانستیم با CSS grid یک فرم ورود طراحی کنیم.جمع بندیدر این مطلب آموختیم که CSS grid چیست و چه کاربردهایی دارد. CSS grid layout قدرتمند‌ترین سیستم لایه بندی در CSS است. برخلاف flexbox که روی طراحی تک بعدی تمرکز دارد، به کمک CSS grid می‌توان به خوبی لایه‌های دوبعدی را به صورت سطری و ستونی طراحی کرد. مرورگرهای مختلفی CSS grid را پشتیبانی کرده و نگرانی خاصی راجع به پشتیبانی مرورگرها از این ماژول وجود ندارد. در مورد مزایای استفاده از CSS grid صحبت کردیم و در آخر با یک مثال کدنویسی آن را شروع کردیم. قبل از شروع آموزش جامع CSS Grid، شاید بهتر باشد به سایت responsivedesign نیز سری بزنید تا ببینید چگونه می‌توان یک جدول تناوبی را تنها با CSS Grid طراحی کرد.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Fri, 27 Jan 2023 12:15:12 +0330</pubDate>
            </item>
                    <item>
                <title>20 تفاوت کلیدی بین C++ و جاوا در سال 2023</title>
                <link>https://virgool.io/@naka/java-vs-cpp-in-2023-s1f7wxpnorsp</link>
                <description>C++ همچنین با نام C with Classes شناخته می شد که یک زبان برنامه نویسی شی گرا با هدف عمومی است. Bjarne Stroustrup این زبان را در سال 1979 در آزمایشگاه Bell توسعه داد. C++ در مقابل جاوا به شما کمک می کند تا تفاوت اساسی بین هر زبان را درک کنید. این یک زبان برنامه نویسی چند پارادایم است زیرا از هر دو زبان برنامه نویسی رویه ای و شی گرا پشتیبانی می کند. C++ دارای ویژگی زبان برنامه نویسی C و کلاس ها و اشیاء برای انواع داده های تعریف شده توسط کاربر است. C++ با برنامه های گرافیکی، سیستم عامل ها، برنامه های دسکتاپ، برنامه های کاربردی با کارایی بالا، به عنوان مثال، کاوشگرهای فضایی، تجارت الکترونیک، ساعت های هوشمند، توسعه بازی، سیستم توزیع ابری، پایگاه های داده، کامپایلرها و غیره استفاده می شود. این وبلاگ در C++ در مقابل جاوا به شما کمک می کند تا در مورد تفاوت بین C++ و Java و اساس ویژگی های مختلف بیاموزید. C++ توسط شرکت های بزرگ فناوری مانند مایکروسافت، آی بی ام، گوگل، متا، آمازون و غیره استفاده می شود. C++ دارای ویژگی های زبان شی گرا مانند Encapsulation، Polymorphism، Inheritance و غیره است. C++ دارای ویژگی های زبان شی گرا مانند Encapsulation، Polymorphism، Inheritance و غیره است. اما بدون داشتن کلاس ها و اشیاء، کد C++ را می توان کامپایل کرد، از این رو به عنوان یک زبان نیمه شی گرا نیز شناخته می شود. در حال حاضر، این نه تنها پسوند زبان برنامه نویسی C است، بلکه با به روز رسانی های مدرن و کارایی بالا به یک زبان برنامه نویسی محبوب و پرتقاضا تبدیل شده است.تاریخچه C++C++ یک زبان برنامه نویسی است که Bjarne Stroustrup در سال 1979 در حالی که روی Ph.D خود کار می کرد آن را توسعه داد. پایان نامه در آزمایشگاه بل. استروستروپ در تلاش بود تا پسوندی برای زبان برنامه نویسی C ایجاد کند که امکان برنامه نویسی شی گرا را فراهم کند. او این پسوند را «C با کلاس‌ها» نامید، اما در نهایت به C++ معروف شد. ++C به عنوان یک پسوند C طراحی شده است، اما همچنین شامل بسیاری از ویژگی های جدید است که در C یافت نمی شوند. اینها شامل پشتیبانی از برنامه نویسی شی گرا، مدیریت استثنا و قالب ها و سایر موارد می شود. C++ یک زبان تایپ ایستا است، به این معنی که نوع متغیر باید در زمان کامپایل شناخته شود. در طول سال ها، C++ به یک زبان محبوب برای طیف گسترده ای از برنامه ها، از جمله سیستم عامل ها، درایورها، مرورگرها و محاسبات با کارایی بالا تبدیل شده است. این در بسیاری از زمینه های علوم کامپیوتر از جمله شبیه سازی های علمی و مهندسی، تجزیه و تحلیل داده ها و یادگیری ماشین استفاده می شود. C++ توسط سازمان بین المللی استاندارد (ISO) استاندارد شده است و به طور مرتب به روز می شود تا آخرین پیشرفت های زبان را منعکس کند. جدیدترین نسخه C++ C++20 است که در سال 2020 منتشر شد. تاریخچه جاواجاوا یک زبان برنامه نویسی و پلتفرم محاسباتی است که اولین بار توسط Sun Microsystems در سال 1995 منتشر شد. این برنامه توسط جیمز گاسلینگ و تیمی از توسعه دهندگان در Sun Microsystems با هدف ایجاد زبانی ساده تر و قدرتمندتر از سایر زبان های برنامه نویسی در آن زمان توسعه داده شد.جاوا به گونه ای طراحی شده است که ساده، شی گرا و بسیار قابل حمل باشد، که نوشتن و اجرای کد بر روی دستگاه ها و پلتفرم های مختلف را آسان می کند. همچنین با پشتیبانی داخلی از ارتباطات شبکه و رمزگذاری داده، ایمن طراحی شده است.یکی از ویژگی های کلیدی جاوا استفاده آن از مفهوم &quot;ماشین مجازی&quot; است که به برنامه های جاوا اجازه می دهد تا بر روی هر دستگاهی که یک ماشین مجازی جاوا (JVM) نصب شده باشد، اجرا شود. این بدان معناست که کد جاوا می تواند یک بار نوشته شود و سپس بر روی هر دستگاهی که از JVM پشتیبانی می کند بدون کامپایل مجدد کد برای هر پلتفرم اجرا شود.از زمان انتشار اولیه، جاوا به یکی از محبوب ترین زبان های برنامه نویسی در جهان تبدیل شده است، میلیون‌ها توسعه‌دهنده از آن برای ساخت طیف گسترده‌ای از برنامه‌های کاربردی، از برنامه‌های وب و موبایل گرفته تا سیستم‌های پشتیبان و برنامه‌های کاربردی سازمانی در مقیاس بزرگ استفاده می‌کنند. همچنین به عنوان یک زبان آموزشی در بسیاری از برنامه های علوم کامپیوتر استفاده می شود و یک انتخاب محبوب برای مبتدیانی است که برنامه نویسی می آموزند.ویژگی های زبان C++زبان شی گرا (OOPs): C++ یک زبان شی گرا است به این معنی که دارای ویژگی هایی مانند کلاس ها، اشیا، چندشکلی، وراثت، کپسوله سازی، انتزاع، پنهان کردن داده ها و غیره است. OOP ها به حل موثر مشکلات کمک می کنند، از افزونگی داده ها جلوگیری می کنند و انعطاف پذیری کد را تضمین می کنند. تابع Lambda: زبان C++ از تابع ناشناس به نام عبارت lambda پشتیبانی می کند. نحو تابع لامبدا به صورت زیر است:[capture](parameters) -&gt; return_type { function_body }تخصیص حافظه استاتیک و دینامیک: در C++ حافظه را می توان در طول زمان کامپایل که تخصیص ایستا است و به صورت پویا یعنی در طول زمان اجرا تخصیص داد. بسیاری از اوقات، برنامه نویس از مقدار حافظه مورد نیاز برای ذخیره اطلاعات خاص در متغیر تعریف شده آگاه نیست، بنابراین در این حالت، اندازه حافظه مورد نیاز را می توان در زمان اجرا تعریف کرد. حافظه تخصیص یافته پویا را می توان با استفاده از توابع malloc()، calloc()، realloc() و غیره تخصیص داد.سریع و قدرتمند: زبان C++ مبتنی بر کامپایلر، کدها را سریعتر اجرا می کند. همچنین، شامل بسیاری از توابع داخلی، انواع داده و غیره است که C++ را به یک زبان قدرتمند و اولین انتخاب برای برنامه نویس تبدیل می کند.ایجاد قالب: در C++ از الگوها برای برنامه نویسی عمومی استفاده می شود، یعنی از قالب برای ایجاد کلاس، توابع عمومی و غیره استفاده می شود که برای انجام وظایف خاص برای بیش از یک نوع داده استفاده می شود.مقدمه ای بر جاواجیمز گاسلینگ جاوا را در Sun Microsystems توسعه داد و در 23 می 1995 منتشر شد. زبان برنامه نویسی جاوا توسط هزاران شرکت توسعه نرم افزار و میلیون ها توسعه دهنده در سراسر جهان استفاده می شود. امروزه جاوا یکی از محبوب ترین زبان ها برای توسعه نرم افزارهای کاربردی و حل مشکلات دنیای واقعی است. جاوا یک زبان شی گرا سطح بالا است که از ویژگی WORA – Write Once و Run Anywhere پشتیبانی می کند، به این معنی که کد جاوا کامپایل شده را می توان بر روی همه پلتفرم ها بدون نیاز به کامپایل مجدد اجرا کرد.طبق صفحه اصلی جاوا، بیش از 1 میلیارد رایانه و 3 میلیارد تلفن همراه از برنامه نویسی جاوا برای توسعه برنامه استفاده می کنند.ویژگی های زبان جاوامستقل از پلتفرم: جاوا یک زبان مستقل از پلتفرم است، به این معنی که می توانید یک بار بنویسید و در هر جایی اجرا کنید (WORA). کد جاوا کامپایل شده را می توان بر روی هر ماشینی بدون هیچ تغییری اجرا کرد. جمع‌آوری خودکار زباله: جاوا یک زبان جمع‌آوری زباله است، ماشین مجازی جاوا (JVM) به طور خودکار بلوک‌های حافظه را توزیع می‌کند و برنامه‌نویسان نیازی به حذف دستی آنها ندارند، مانند مورد C و C++.زبان شی گرا (OOPs): جاوا یک زبان شی گرا خالص است. این ویژگی‌هایی مانند کپسوله‌سازی، چندشکلی، وراثت، انتزاع، پنهان کردن داده‌ها و غیره را پشتیبانی می‌کند. در جاوا، همه چیز یک شی است.چندنخی: جاوا از multi threading پشتیبانی می کند، به این معنی که چندین کار یا عملکرد یک برنامه می توانند به صورت موازی اجرا شوند. به حداکثر استفاده از منابع کمک می کند و برنامه ها را می توان به صورت متوالی و به موقع اجرا کرد.سیستم مدیریت حافظه: جاوا یک سیستم مدیریت حافظه قوی ارائه می دهد که به حذف خطاها و بررسی کد هم در زمان کامپایل و هم در زمان اجرا کمک می کند.تفاوت بین C++ و جاواجدول زیر به شما کمک می کند تا تفاوت بین C++ و Java را درک کنید.نمونه ای از C++ و برنامه جاواجمع دو عدد در c++#include &lt;iostream&gt; 
using namespace std; 
void main() {
 int a, b, sum=0;
 cout &lt;&lt; &amp;quotEnter the value for two integers: &quot;
 cin &gt;&gt; a &gt;&gt; b; // sum of two numbers in stored in variable sum
 sum = a + b; // prints the sum of two numbers
 cout &lt;&lt; a &lt;&lt; &amp;quot + &amp;quot &lt;&lt;  b  &lt;&lt; &amp;quot = &amp;quot &lt;&lt; sum;
 return 0;
}جمع دو عدد در javaimport java.util.Scanner;  // Importing the Scanner class
class Addition {
   public static void main (String[] args) {
     int x, y, sum=0;
     Scanner myObj = new Scanner(System.in); // Creating a Scanner object
     System.out.println(&amp;quotEnter the first number:&amp;quot);
     x = myObj.nextInt();    // Take the user input
     System.out.println ( &amp;quot Enter the second number:&amp;quot );
     y = myObj.nextInt();   // Take the user input
     sum = x + y;          // Calculate the sum of two numbers x + y
     System.out.println (&amp;quotSum is: &amp;quot + sum);    // Print the sum
   }
}شباهت های C++ و جاواشباهت های متعددی بین C++ و جاوا و همچنین تفاوت های قابل توجهی وجود دارد. برخی از شباهت های اصلی این دو زبان عبارتند از: هر دو C++ و Java زبان های برنامه نویسی شی گرا هستند، به این معنی که هر دو از استفاده از اشیاء و کلاس ها برای سازماندهی کد و داده پشتیبانی می کنند.هر دو زبان از چندشکلی، وراثت، و کپسوله سازی که مفاهیم کلیدی در برنامه نویسی شی گرا هستند پشتیبانی می کنند.هر دو زبان از یک نحو مشابه استفاده می‌کنند، با پرانتزهای فرفری ({}) برای محصور کردن بلوک‌های کد و نقطه ویرگول (;) برای نشان دادن پایان یک عبارت استفاده می‌شود.هر دو زبان، زبان های کامپایل شده هستند، به این معنی که کد قبل از اجرا به دستورالعمل های قابل خواندن توسط ماشین تبدیل می شود.برخی از تفاوت های اصلی بین C++ و جاوا شامل موارد زیر است:C++ یک زبان کامپایل شده است که به گونه ای طراحی شده است که به سخت افزار نزدیک تر باشد، در حالی که جاوا یک زبان کامپایل شده است که در بالای ماشین مجازی اجرا می شود. این بدان معناست که کد جاوا معمولاً کندتر از کد ++C است، اما قابل حمل‌تر نیز است، زیرا می‌تواند روی هر دستگاهی که یک ماشین مجازی جاوا (JVM) نصب شده باشد اجرا شود.C++ امکان استفاده از اشاره گرها و مدیریت دستی حافظه را فراهم می کند، در حالی که جاوا از نشانگرها پشتیبانی نمی کند و از جمع آوری خودکار زباله برای مدیریت حافظه استفاده می کند.جاوا یک کتابخانه استاندارد بزرگتر و مجموعه ای از ویژگی های داخلی قوی تری نسبت به C++ دارد که استفاده از آن را برای کارهای خاص آسان تر می کند.به طور کلی، C++ و Java هر دو زبان برنامه نویسی قدرتمندی هستند که نقاط قوت و ضعف منحصر به فرد خود را دارند. انتخاب بین دو زبان اغلب به نیازهای خاص یک پروژه و ترجیحات برنامه نویس بستگی دارد.توسعه دهندگان واقعاً چگونه از جاوا استفاده می کنند؟جاوا یک زبان برنامه نویسی پرکاربرد است که اغلب توسط توسعه دهندگان برای ساخت انواع مختلف برنامه ها استفاده می شود. برخی از روش های رایج استفاده از جاوا توسط توسعه دهندگان عبارتند از:برنامه های کاربردی وب: جاوا اغلب برای ساخت اجزای سمت سرور برنامه های کاربردی وب استفاده می شود. این یک انتخاب محبوب برای ساخت برنامه های کاربردی وب به دلیل قابلیت حمل، مقیاس پذیری و ویژگی های امنیتی است.برنامه های موبایل: جاوا یک انتخاب محبوب برای ساخت برنامه های موبایل اندروید است. این زبان اصلی است که توسط سیستم عامل اندروید پشتیبانی می شود و توسط بسیاری از توسعه دهندگان برای ساخت برنامه های بومی اندروید استفاده می شود.برنامه های دسکتاپ: جاوا همچنین برای ساخت برنامه های دسکتاپ مستقل که می توانند بر روی سیستم های ویندوز، مک و لینوکس اجرا شوند، استفاده می شود.سیستم های Backend: جاوا اغلب برای ساختن سیستم های Backend برنامه های کاربردی سازمانی در مقیاس بزرگ، مانند سیستم های پایگاه داده و سرورهای منطق تجاری استفاده می شود.سیستم های جاسازی شده: جاوا همچنین برای توسعه سیستم های جاسازی شده، مانند سیستم های کنترل خودرو، هوانوردی و صنعتی استفاده می شود.به طور کلی، جاوا یک زبان همه کاره است که توسعه دهندگان در طیف گسترده ای از زمینه ها برای ساخت انواع مختلف برنامه های کاربردی از آن استفاده می کنند.C++ چگونه در دنیای واقعی استفاده می شود؟C++ یک زبان برنامه نویسی قدرتمند و پرکاربرد است که اغلب در برنامه های مختلف در دنیای واقعی استفاده می شود. برخی از روش های رایج استفاده از C++ عبارتند از:سیستم عامل: C++ اغلب برای ساخت اجزای اصلی سیستم عامل ها مانند هسته، درایورها و کتابخانه های سیستم استفاده می شود.برنامه های دسکتاپ: C++ برای ساخت برنامه های دسکتاپ مستقل که می توانند بر روی سیستم های ویندوز، مک و لینوکس اجرا شوند استفاده می شود. اغلب برای برنامه هایی استفاده می شود که نیاز به عملکرد بالا دارند، مانند بازی های گرافیکی فشرده یا نرم افزارهای ویرایش ویدیو.سیستم‌های جاسازی شده: C++ اغلب برای ساختن نرم‌افزار برای سیستم‌های تعبیه‌شده، مانند سیستم‌های کنترل خودرو، هوانوردی و صنعتی استفاده می‌شود.مرورگرهای وب: C++ برای ساخت اجزای اصلی بسیاری از مرورگرهای وب از جمله کروم و فایرفاکس استفاده می شود.محاسبات با کارایی بالا: C++ اغلب در برنامه های علمی و فنی که نیاز به عملکرد بالا دارند، مانند شبیه سازی و تجزیه و تحلیل داده ها استفاده می شود.به طور کلی، C++ یک زبان همه کاره است که در طیف گسترده ای از زمینه ها برای ساخت انواع مختلف برنامه های کاربردی استفاده می شود. این به ویژه برای برنامه هایی که به درجه بالایی از عملکرد یا کنترل سطح پایین نیاز دارند، مناسب است.مزایا و معایب C++++C یک زبان برنامه نویسی پرکاربرد است که مزایا و معایب زیادی دارد. برخی از مزایای اصلی C++ شامل موارد زیر است:عملکرد: C++ یک زبان کامپایل شده است که به گونه ای طراحی شده است که نزدیک به سخت افزار باشد، که آن را به انتخاب خوبی برای برنامه هایی که نیاز به عملکرد بالایی دارند تبدیل می کند.کنترل: C++ سطح بالایی از کنترل بر سخت افزار و نرم افزار را به برنامه نویسان می دهد و به آنها امکان می دهد کد خود را برای پلتفرم های خاص بهینه کنند و از ویژگی های سطح پایین مانند اشاره گرها و مدیریت حافظه دستی استفاده کنند.سازگاری: C++ با طیف گسترده ای از پلتفرم ها و سیستم عامل ها از جمله ویندوز، مک، لینوکس و بسیاری دیگر سازگار است.اکوسیستم: C++ دارای یک جامعه بزرگ و فعال از توسعه دهندگان و یک اکوسیستم قوی از کتابخانه ها و ابزار است.برخی از معایب اصلی C++ شامل موارد زیر است:پیچیدگی: C++ یک زبان پیچیده است که به منحنی یادگیری شدید نیاز دارد و یادگیری آن را برای مبتدیان دشوارتر از برخی از زبان‌های دیگر می‌کند.عدم ایمنی: C++ دارای ویژگی‌های ایمنی داخلی مانند بررسی خودکار محدودیت‌ها یا جمع‌آوری زباله نیست، که می‌تواند آن را بیشتر مستعد خطاها و آسیب‌پذیری‌های امنیتی کند.عدم قابلیت حمل: کد ++C اغلب در پلتفرم های مختلف قابل حمل نیست، و توسعه دهندگان را ملزم می کند که نسخه های جداگانه کد خود را برای هر پلتفرم بنویسند و نگهداری کنند.به طور کلی، C++ یک زبان برنامه نویسی قدرتمند و پرکاربرد است که برای برنامه هایی که نیاز به کنترل با عملکرد بالا یا سطح پایین دارند، مناسب است. با این حال، یادگیری و استفاده از آن نسبت به برخی از زبان‌های دیگر دشوارتر است و برخی از ویژگی‌های ایمنی و قابل حمل موجود در زبان‌های دیگر را ندارد.مزایا و معایب جاواجاوا یک زبان برنامه نویسی پرکاربرد با چندین مزایا و معایب است. برخی از مزایای اصلی جاوا شامل موارد زیر است:قابلیت حمل: جاوا به گونه ای طراحی شده است که بسیار قابل حمل باشد، با کدی که می تواند روی هر دستگاهی که یک ماشین مجازی جاوا (JVM) نصب شده است اجرا شود. این باعث می شود که یک بار کد بنویسید و آن را روی دستگاه ها و پلتفرم های مختلف اجرا کنید.امنیت: جاوا دارای پشتیبانی شبکه داخلی و پشتیبانی از رمزگذاری داده است که آن را به انتخاب خوبی برای ساخت برنامه های کاربردی امن تبدیل می کند.اکوسیستم: جاوا دارای یک جامعه بزرگ و فعال از توسعه دهندگان و یک اکوسیستم قوی از کتابخانه ها و ابزار است.سادگی: جاوا به گونه ای طراحی شده است که یادگیری و استفاده از آن آسان باشد، با یک نحو ساده و یک کتابخانه استاندارد بزرگ.برخی از معایب اصلی جاوا شامل موارد زیر است:عملکرد: کد جاوا به طور کلی کندتر از کد بومی است، زیرا در بالای یک ماشین مجازی اجرا می شود. این می تواند آن را برای انواع خاصی از برنامه هایی که به درجه بالایی از عملکرد نیاز دارند مناسب تر کند.عدم کنترل: جاوا به برنامه نویسان به اندازه زبان هایی مانند C++ بر سخت افزار و نرم افزار کنترل نمی دهد، که می تواند بهینه سازی کد برای پلتفرم های خاص یا استفاده از ویژگی های سطح پایین را دشوارتر کند.مدیریت حافظه: جاوا از جمع‌آوری خودکار زباله برای مدیریت حافظه استفاده می‌کند که می‌تواند کارآمدی کمتری نسبت به مدیریت دستی حافظه در زبان‌هایی مانند C++ داشته باشد.به طور کلی، جاوا یک زبان برنامه نویسی محبوب و پرکاربرد است که به دلیل قابلیت حمل و نقل و ویژگی های امنیتی شناخته شده است. یادگیری و استفاده از آن نسبتاً آسان است، اما ممکن است بهترین انتخاب برای برنامه‌هایی نباشد که به عملکرد بالا یا کنترل سطح پایین نیاز دارند.نتیجهبنابراین، همانطور که تفاوت بین c++ و java را دیدیم، متوجه شدیم که شرکت های فناوری برتر از هر دو زبان استفاده می کنند و یادگیری این زبان ها بسیار مفید خواهد بود. افرادی که در زمینه توسعه نرم افزار فعالیت می کنند یا می خواهند در صنعت نرم افزار کار کنند، اساساً جاوا را به دلیل انعطاف پذیری، تنوع، قالب ها، جمع آوری خودکار زباله و ساخت جاوا برای برنامه های کاربردی مبتنی بر وب و غیره ترجیح می دهند. در حالی که افرادی که به دنبال شغل خود در توسعه بازی، برنامه نویسی سطح پایین، برنامه نویسی سیستم، ساخت سیستم عامل و غیره هستند، C++ را به دلیل سرعت، عملکرد، نزدیک بودن به سخت افزار و غیره ترجیح می دهند. </description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Wed, 25 Jan 2023 17:42:17 +0330</pubDate>
            </item>
                    <item>
                <title>چگونه در 6 مرحله گواهینامه ایزو 9001 را دریافت کنیم؟</title>
                <link>https://virgool.io/@naka/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%AF%D8%B1-6-%D9%85%D8%B1%D8%AD%D9%84%D9%87-%DA%AF%D9%88%D8%A7%D9%87%DB%8C%D9%86%D8%A7%D9%85%D9%87-%D8%A7%DB%8C%D8%B2%D9%88-9001-%D8%B1%D8%A7-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%DA%A9%D9%86%DB%8C%D9%85-rkstxvsd0hef</link>
                <description>ایزو 9001 یکی از استانداردهای سیستم مدیریت کیفیت در محدوده استانداردهای ایزو 9000 است. همانطور که ویکی پدیا بیان می کند، &quot;خانواده استانداردهای سیستم‌های مدیریت کیفیت ایزو 9000 برای کمک به سازمان‌ها طراحی شده‌اند که در حین رعایت الزامات قانونی و مقررات مربوط به یک محصول یا برنامه، اطمینان حاصل کنند که نیازهای مشتریان و سایر ذینفعان را برآورده می‌کنند.&quot;گواهینامه ایزو 9001 سیستم های کیفی مورد نیاز را برای سازمان شما فراهم می کند تا پایه ای برای رضایت مشتری بهتر، انگیزه کارکنان و بهبود مستمر ایجاد کند. این برای همه اندازه ها و انواع سازمان ها مناسب است و به آن کمک می کند تا رقابت کنند و راه ها را برای فرصت های تجاری جدید باز کند.آیا می خواهید برای سازمان خود گواهی ایزو 9001 دریافت کنید؟ در اینجا یک راهنمای ساده برای کمک به دریافت گواهینامه ایزو9001 بدون دردسر وجود دارد:مرحله 1: تخصیص منابع برای صدور گواهینامه.مرحله 2: تجزیه و تحلیل ایرادات را انجام دهید. مرحله 3: توسعه و ممیزی داخلی سیستم.مرحله 4: یک دوره آموزشی رسمی در مورد ایزو 9001 شرکت کنید. مرحله 5: یک حسابرس معتبر انتخاب کنید. مرحله 6: گواهینامه را دریافت کنید.مرحله 1: تخصیص منابع برای صدور گواهینامهدریافت گواهینامه ایزو 9001 مستلزم تعهد مدیریت ارشد و تخصیص صحیح منابع است. برای تحقق آن باید به خوبی حمایت شود. شما باید بفهمید که آیا منابع کافی برای انجام این کار را خودتان خواهید داشت یا از یک مشاور کمک بگیرید. برای سازمان های بزرگ، استخدام یک مشاور عالی خواهد بود تا بتوانید بدون خطا این کار را انجام دهید.مرحله 2: تجزیه و تحلیل ایرادات را انجام دهید.تجزیه و تحلیل ایرادات برای درک وضعیت پایه شما بسیار مهم است. برای دریافت گواهینامه ایزو 9001، باید بررسی کنید که سازمان شما در حال حاضر در چه جایگاهی قرار دارد و شکاف هایی که برای دریافت گواهی باید برطرف کنید.متداول ترین سوالاتی که در مورد ایزو 9001 پرسیده می شود عبارتند از:چه مدت طول خواهد کشید؟چقدر سخته؟شامل چه چیزی است؟چقدر هزینه دارد؟از آنجایی که سازمان‌های مختلف اندازه، افراد مختلف و محیط‌های کاری متفاوت دارند، هیچ راه واحدی برای پاسخ به سؤالات وجود ندارد. سازمان ها باید تحلیل مناسبی برای یافتن این پاسخ ها انجام دهند. پیش ارزیابی برای مقایسه سیستم مدیریت کیفیت فعلی در مقایسه با استاندارد ایزو مهم است.مرحله 3: توسعه و ممیزی داخلی سیستم.برای دریافت گواهینامه باید سیستم خود را تا سطح استاندارد ایزو توسعه دهید. این به معنای توسعه فرآیندهای جدید، کنترل‌های کیفی جدید و سیاست‌های جدید سازمانی مطابق با استانداردهای ایزو است.قبل از اینکه به شخص ثالث اجازه دهید سیستم شما را بازرسی کند، باید مطمئن شوید که سازمان شما استانداردهای صدور گواهینامه ایزو9001 را برآورده می کند. به همین دلیل است که حسابرسی داخلی گام مهمی قبل از درخواست برای صدور گواهینامه است.مرحله 4: یک دوره آموزشی رسمی در مورد ایزو 9001 شرکت کنید. اگر فرآیند صدور گواهینامه را به تنهایی انجام می دهید، خوب است که درک کاملی از تمام الزامات یک گواهینامه ایزو داشته باشید. اینجاست که یک دوره آموزشی ایزو 9001 می تواند بسیار مفید باشد.اکادمی طاها مدیران عصر ماندگار بهترین دوره در صنعت را ارائه می دهد که به شما کمک می کند تا مراحل و روش های کسب گواهینامه ایزو9001 را بیاموزید.مرحله 5: یک حسابرس معتبر انتخاب کنید.برای دریافت گواهینامه ایزو 9001 باید سیستم کیفیت مدیریت سازمان خود را توسط یک حسابرس معتبر بررسی کنید. بسیاری از نهادهای صدور گواهینامه معتبر وجود دارند که گواهینامه ها را ارائه می دهند. بررسی کنید که کدام یک محبوب است و با منابع شما مطابقت دارد. این نهادها تمام زمینه‌های سیستم مدیریت کیفیت شما را ارزیابی می‌کنند و در صورت نیاز به پر کردن شکاف با شما در میان می‌گذارند.مرحله 6: گواهینامه را دریافت کنید.زمانی که حسابرس معتبر احساس کند که سیستم مدیریت کیفیت شما مطابق با الزامات استاندارد ایزو 9001 است، گواهینامه را دریافت خواهید کرد. این گواهینامه به مدت سه سال اعتبار دارد و برای تمدید گواهینامه باید سیستم را حفظ کنید.حتی پس از دریافت گواهینامه، باید به طور مستمر فرآیندها را بهبود بخشید تا به طور مداوم تمام الزامات را برآورده کند. برای این کار، دانش کامل گواهینامه ایزو 9001 ضروری است.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Tue, 24 Jan 2023 19:31:25 +0330</pubDate>
            </item>
                    <item>
                <title>ISO - سازمان بین المللی استاندارد</title>
                <link>https://virgool.io/@naka/iso-%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86-%D8%A8%DB%8C%D9%86-%D8%A7%D9%84%D9%85%D9%84%D9%84%DB%8C-%D8%A7%D8%B3%D8%AA%D8%A7%D9%86%D8%AF%D8%A7%D8%B1%D8%AF-ts5kjrdxlgwp</link>
                <description>ایزو چیست؟ایزو (سازمان بین المللی استاندارد) یک فدراسیون جهانی از سازمان های استاندارد ملی است.ایزو یک سازمان غیردولتی است که متشکل از نهادهای استاندارد از بیش از 160 کشور است که یک نهاد استاندارد نماینده هر کشور عضو است. برای مثال مرکز تایید صلاحیت ایران نماینده ایران است.اعضای ایزو سازمان‌های استاندارد ملی هستند که در توسعه و ارتقای استانداردهای بین‌المللی برای فناوری، فرآیندهای آزمایش علمی، شرایط کاری، مسائل اجتماعی و موارد دیگر همکاری می‌کنند. ایزو و اعضای آن سپس اسنادی را که جزئیات این استانداردها را نشان می دهند می فروشند.مجمع عمومی ISO مرجع تصمیم گیری آن است. این سازمان متشکل از نمایندگان اعضا و رهبران منتخب به نام افسران اصلی است. دفتر مرکزی این سازمان در ژنو، سوئیس است، جایی که یک دبیرخانه مرکزی بر عملیات نظارت دارد.استانداردهای ایزو چگونه تدوین می شوند؟سازمان بین المللی استاندارد یک فرآیند شش مرحله ای برای تدوین استانداردها دارد. مراحل شامل موارد زیر است: مرحله پیشنهاد. اولین گام در توسعه یک استاندارد جدید زمانی شروع می شود که انجمن های صنعتی یا گروه های مصرف کننده درخواستی ارائه دهند. کمیته ایزو مربوطه تعیین می کند که آیا واقعاً استاندارد جدیدی لازم است یا خیر.مرحله مقدماتی. یک گروه کاری برای تهیه پیش نویس کاری استاندارد جدید تشکیل می شود. این کارگروه متشکل از کارشناسان موضوع و ذینفعان صنعت است. هنگامی که پیش نویس رضایت بخش تشخیص داده شود، کمیته مادر گروه کاری تصمیم می گیرد که کدام مرحله بعدی رخ دهد.مرحله کمیته. این یک مرحله اختیاری است که طی آن اعضای کمیته اصلی پیش نویس استاندارد را بررسی و نظر می دهند. هنگامی که کمیته در مورد محتوای فنی پیش نویس به اجماع رسید، می تواند به مرحله بعدی حرکت کند.مرحله استعلام پیش نویس استاندارد. در این مرحله، پیش نویس استاندارد بین المللی (DIS) نامیده می شود. برای نظرات و در نهایت رای دادن بین اعضای ایزو توزیع می شود. اگر DIS در این مرحله بدون هیچ تغییر فنی تایید شود، ایزو آن را به عنوان استاندارد منتشر می کند. در غیر این صورت به مرحله تایید منتقل می شود.مرحله تایید پیش نویس استاندارد. به عنوان پیش نویس نهایی استاندارد بین المللی (FDIS) به اعضای ایزو ارائه می شود. آنها به تایید استاندارد جدید رای می دهند. مرحله انتشار. اگر اعضای ایزو استاندارد جدید را تایید کنند، FDIS به عنوان یک استاندارد رسمی بین المللی منتشر می شود.اعضای شرکت کننده ایزو در مورد تاییدیه های استاندارد رای می دهند. یک استاندارد باید از حداقل دو سوم اعضای شرکت کننده رای مثبت و حداکثر از یک چهارم اعضای شرکت کننده رای منفی دریافت کند.گواهینامه ایزو چیست؟از آنجایی که گواهینامه به استانداردهای ISO مربوط می شود، گواهینامه تضمینی است که یک نهاد گواهی کننده در مورد اینکه یک سرویس، محصول یا سیستم الزامات استاندارد را برآورده می کند. در حالی که ایزو استانداردها را توسعه می دهد، نهادهای صدور گواهینامه شخص ثالث مطابقت با آن استانداردها را تأیید می کنند.بر اساس ایزو ، عبارت &quot;گواهینامه ایزو &quot; هرگز نباید برای نشان دادن اینکه یک محصول یا سیستم توسط یک سازمان گواهینامه مطابق با استاندارد ایزو تایید شده است استفاده شود. در عوض، ISO پیشنهاد می‌کند که به محصولات یا سیستم‌های دارای گواهی با استفاده از شناسایی کامل استاندارد ایزو مراجعه کنید.به عنوان مثال، ISO توصیه می کند به جای &quot;ISO certified&quot; از عبارت &quot;ISO 9001:2015 Certified&quot; استفاده کنید. این به طور کامل استاندارد مورد تایید را مشخص می کند، از جمله نسخه -- در این مورد، نسخه ISO 9001 منتشر شده در سال 2015.در حالی که ایزو کار گواهینامه ها را انجام نمی دهد، کمیته ارزیابی انطباق آن بر روی استانداردهای مربوط به فرآیند صدور گواهینامه کار می کند. کسب و کارها چگونه گواهی ISO می گیرند؟فرآیند دریافت گواهینامه استاندارد ایزو می تواند گران، زمان بر و به طور بالقوه برای کسب و کار مختل باشد. قبل از هر اقدامی برای دریافت گواهینامه، تعیین نیاز به گواهینامه می تواند مهمترین قدم باشد.اولین قدم برای دریافت گواهی، تعیین اینکه آیا گواهینامه ارزش هزینه‌های آن را دارد یا خیر. برخی از دلایلی که سازمان ها به دنبال صدور گواهینامه هستند عبارتند از:ملزومات قانونی. برخی از کسب و کارها و محصولات به گواهی مطابقت با استانداردهای رایج نیاز دارند.استانداردهای تجاری. هنگامی که صدور گواهینامه یک الزام قانونی نیست، محصولات و خدماتی که دارای گواهینامه حداقل استانداردها هستند برای برخی از صنایع ضروری است.الزامات مشتری. حتی در مواردی که یک استاندارد صنعتی یا الزامات قانونی برای صدور گواهینامه وجود دارد، برخی از مشتریان مانند سازمان‌های دولتی ممکن است گواهینامه را ترجیح دهند یا به آن نیاز داشته باشند.سازگاری بهبود یافته. صدور گواهینامه می تواند به سازمان های بزرگ کمک کند تا تضمین کیفیت ثابتی را در واحدهای تجاری و همچنین در سراسر مرزهای بین المللی ارائه دهند.رضایت مشتری. مشتریان سازمانی که از یک محصول یا خدمات در زمینه ها و کشورهای مختلف استفاده می کنند، از عملکرد ثابت قدردانی می کنند. انطباق با استانداردها همچنین می تواند به سازمان دارای گواهینامه در حل مسائل مشتریان کمک کند.فرآیند صدور گواهینامه برای استانداردهای ایزو بسته به استاندارد و سازمان گواهی دهنده متفاوت است. برای استانداردهای رایج، سازمان ها ممکن است نیاز داشته باشند ابتدا یک مرجع صدور گواهینامه مناسب را بررسی و انتخاب کنند. توصیه‌هایی برای مراحلی که باید برای دریافت گواهینامه استاندارد مدیریت کیفیت ایزو، ISO 9001:2015 دنبال کنید، شامل موارد زیر است:درک استاندارد ایزوشناسایی مناطق مشکل دار، جایی که عملیات مطابق با الزامات ایزو نیست.به طور رسمی فرآیندها، رویه‌ها و برنامه‌هایی را برای بهبود مناطق مشکل‌دار مستند کنید.اجرای استانداردهای ایزوانجام ممیزی داخلی برای بررسی انطباق با استاندارد قبل از حسابرسی رسمیتحت ممیزی انطباق رسمی یا فرآیند صدور گواهینامه قرار گرفتن.در ایران شرکت های مشاوره در تمام این مراحل به شما کمک میکنند تا بتوانید به گواهینامه خود دست پیدا کنید. طاها مدیران عصر ماندگار یکی از این شرکت هاست که با مشاوران با تجربه میتواند در تک تک این مراحل همراه شما باشد.تاریخچه ایزوایزو جانشین فدراسیون بین المللی انجمن های استاندارد ملی (ISA) است که از سال 1928 تا 1942 فعالیت می کرد. در سال 1946، پس از جنگ جهانی دوم، اعضای ISA و کمیته هماهنگی استانداردهای سازمان ملل متحد جلسه ای را در مورد استانداردهای بین المللی برگزار کردند. کار آنها منجر به تشکیل ISO به عنوان یک سازمان غیردولتی در سال بعد شد. ایزو اولین استاندارد خود را با نام ISO/R 1:1951 (دما استاندارد مرجع برای اندازه گیری طول صنعتی) در سال 1951 منتشر کرد. این استاندارد اکنون با نام ISO 1:2016 شناخته می شود. تا سال 2021، ایزو بیش از 24000 استاندارد را منتشر کرده بود.طبق نظر ایزو، ISO مخفف نیست. این کلمه ای است که از یونانی isos به معنی &quot;برابر&quot; گرفته شده است که ریشه پیشوند iso- است که در مجموعه ای از اصطلاحات مانند ایزومتریک (با اندازه یا ابعاد مساوی) و ایزونومی (برابری قوانین) به کار می رود. یا افراد در برابر قانون). نام ISO در سراسر جهان برای نشان دادن سازمان استفاده می شود، بنابراین از مجموعه ای از اختصارات که از ترجمه &quot;سازمان بین المللی استانداردسازی&quot; به زبان های ملی مختلف اعضا حاصل می شود، اجتناب می شود. با اینحال هر کشوری که باشد، شکل کوتاه نام سازمان همیشه ISO است.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Tue, 24 Jan 2023 10:28:21 +0330</pubDate>
            </item>
                    <item>
                <title>PostgreSQL - پیشرفته ترین پایگاه داده منبع باز جهان</title>
                <link>https://virgool.io/@naka/postgresql-the-worlds-most-advanced-open-source-database-yr4dwiyuiuoa</link>
                <description>Postgres چیست؟اگر اخیراً به آگهی‌های شغلی نگاه کرده‌اید، ممکن است دیده باشید که بسیاری از آنها اکنون به دنبال تجربه Postgres هستند، زیرا بسیاری از شرکت‌های فناوری در حال تغییر به سمت Postgres یا راه‌اندازی یک stack جدید هستند. چرا امثال برخی از غول های فناوری مانند TripAdvisor، Reddit و Instagram همه بر روی Postgres هستند؟ Postgres به نوعی شبیه پایتون است، شما می توانید هر کاری انجام دهید، دلایل زیادی مانند منبع باز دارد، یک جامعه بسیار سخت کار که به آن طیف وسیعی از انعطاف پذیری داده است.تاریخچه: پروژه PostgreSQL در سال 1986 به سرپرستی پروفسور مایکل استون بریکر در دانشگاه کالیفرنیا، برکلی آغاز شد. این پروژه در ابتدا POSTGRES نام داشت، در مورد پایگاه داده قدیمی انگرس که در برکلی نیز توسعه یافته بود. هدف POSTGRES اضافه کردن کمترین ویژگی های مورد نیاز برای پشتیبانی کامل از انواع داده ها بود. در سال 1996، این پروژه به PostgreSQL تغییر نام داد تا پشتیبانی آن از زبان جستجوی SQL نشان داده شود (اگرچه PostgreSQL هنوز معمولاً به عنوان Postgres مخفف می شود). یک جامعه اختصاصی و متنوع از مشارکت کنندگان - گروه توسعه جهانی PostgreSQL - به انتشار منظم و عمده و جزئی پروژه پایگاه داده رایگان و منبع باز ادامه می دهد.چرا Postgres؟به دلیل پشتیبانی از OOP در Postgres، آرایه Multidimensions در دسترس است.کد منبع PostgreSQL تحت یک مجوز منبع باز در دسترس است و به شما آزادی استفاده، تغییر و اجرای آن را بدون پرداخت هزینه به شما می دهد. PostgreSQL هیچ هزینه ای برای صدور مجوز ندارد، که خطر استقرار بیش از حد را از بین می برد. جامعه اختصاصی مشارکت کنندگان و علاقه مندان PostgreSQL به طور منظم باگ ها و رفع اشکالات را پیدا می کنند که به امنیت کلی سیستم پایگاه داده کمک می کند. PostgreSQL یک پایگاه داده رابطه ای پیشرفته و منبع باز است که از پرس و جوی SQL (رابطه ای) و JSON (غیر رابطه ای) پشتیبانی می کند. برای شرایطی که ساختار داده مشخصی نداریم کارآمد خواهد بود. می توانید نوع داده جدید خود را ایجاد کنید. قابلیتی که MySQL و MariaDB فاقد آن هستند زیرا شی گرا نیستند.امروزه اکثر برنامه ها از داده های جغرافیایی حساس استفاده می کنند. سالها توسط Postgres پشتیبانی می شود. اگرچه MySQL و MariaDB اخیراً از این پشتیبانی می کنند، اما کار با آنها هنوز به آسانی Postgres نیست.Postgres vs MySQLشروع کار با Postgres الزامات Postgres (نسخه 15)ساخت GNUشما به یک کامپایلر C نیاز دارید (نسخه های اخیر GCC توصیه می شود)اطلاعات بیشتر در https://www.postgresql.org/docs/12/install-requirements.htmlنصب و کامپایلابتدا یک مسیر برای نصب Postgres انتخاب کنید، سپس از GitHub کلون کنید و شاخه را به 12 تغییر دهید.اکنون، کامپایل و نصب کنید.</description>
                <category>Na.Ka</category>
                <author>Na.Ka</author>
                <pubDate>Sun, 22 Jan 2023 11:13:30 +0330</pubDate>
            </item>
            </channel>
</rss>