សួស្តីអ្នកទាំងអស់គ្នា! ខ្ញុំចង់ចែករំលែកបទពិសោធន៍របស់ខ្ញុំក្នុងការអភិវឌ្ឍន៍បណ្ណាល័យប្រភពបើកចំហ និយាយអំពីដំណើរការដែលពាក់ព័ន្ធ និងជម្រុញអ្នកឱ្យបង្កើតគម្រោងផ្ទាល់ខ្លួនរបស់អ្នក។
នៅនិទាឃរដូវ ពេលកំពុងមើលស្ទ្រីមមួយរបស់ Yegor Bugaenko — ខ្ញុំត្រូវបានបំផុសគំនិតដោយគំនិតនៃការអភិវឌ្ឍន៍ប្រភពបើកចំហ។ Yegor បានអះអាងថាប្រសិនបើអ្នកចង់ទៅលើសពីការក្លាយជាអ្នកអភិវឌ្ឍន៍ធម្មតា ហើយក្លាយជាអ្នកឯកទេសដែលចង់បាន និងពិសេសជាងនេះ អ្នកត្រូវបង្កើតអ្វីមួយដោយខ្លួនឯង។ មិនថាវាជាសៀវភៅ ប្លុក បណ្ណាល័យ ឬសូម្បីតែក្របខ័ណ្ឌក៏ដោយ គម្រោងបែបនេះអនុញ្ញាតឱ្យអ្នកលេចធ្លោក្នុងចំណោមអ្នកអភិវឌ្ឍន៍ជាច្រើនទៀត ជាពិសេសនៅក្នុងទីផ្សារព័ត៌មានវិទ្យានាពេលបច្ចុប្បន្ននេះ។ នេះមិនត្រឹមតែបង្ហាញពីវិជ្ជាជីវៈរបស់អ្នកប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងបង្ហាញពីការចូលរួមយ៉ាងពិតប្រាកដក្នុងការអភិវឌ្ឍន៍វិស័យនេះផងដែរ។
ទាំងអស់នេះបានធ្វើឱ្យខ្ញុំគិត៖ តើខ្ញុំពិតជាលេចធ្លោយ៉ាងណាក្នុងចំណោមអ្នកអភិវឌ្ឍន៍ផ្សេងទៀត? ទោះបីជាធ្វើការជាច្រើនឆ្នាំក្នុងផ្នែក IT និងចូលរួមក្នុងគម្រោងផ្សេងៗក៏ដោយ ក៏ខ្ញុំនៅតែមិនមានអ្វីផ្ទាល់ខ្លួនរបស់ខ្ញុំ — អ្វីមួយដែលអាចបង្ហាញពីភាពពិសេស និងវិជ្ជាជីវៈរបស់ខ្ញុំ។
ខ្ញុំបានពិនិត្យមើលគម្រោងសត្វចិញ្ចឹមចាស់របស់ខ្ញុំឡើងវិញនៅលើ GitHub ប៉ុន្តែភ្លាមៗបានដឹងថាគ្មាននរណាម្នាក់ក្នុងចំណោមពួកគេពិតជាមានសារៈសំខាន់នោះទេ។ ដូច្នេះហើយ ទើបខ្ញុំសម្រេចចិត្តចាប់ផ្តើមពីដំបូង ហើយបង្កើតអ្វីថ្មី។ ពោរពេញដោយការលើកទឹកចិត្ត និងភាពរីករាយ ខ្ញុំចាប់ផ្តើមគិតអំពីអ្វីដែលខ្ញុំអាចសរសេរបាន ដែលនឹងមានតម្រូវការ យ៉ាងហោចណាស់ក្នុងចំណោមទស្សនិកជនតូចមួយ ហើយវានឹងត្រូវគ្នានឹងជំនាញរបស់ខ្ញុំ។
ពីរឬបីថ្ងៃ ខ្ញុំបានវិភាគគំនិតសម្រាប់គម្រោងប្រភពបើកចំហររបស់ខ្ញុំ។ កាលណាខ្ញុំពិចារណាកាន់តែច្រើន វាហាក់ដូចជាអ្វីៗទាំងអស់ត្រូវបានសរសេររួចហើយ ហើយថាអ្វីដែលមិនទាន់ដឹង មិនអាចសម្រេចបានតែម្នាក់ឯង។ ខ្ញុំសូមនិយាយភ្លាមៗ៖ នេះជាទស្សនៈយល់ច្រឡំ។ កុំអោយវាបំផ្លាញសក្តានុពលរបស់អ្នក។ បាទ ច្រើនត្រូវបានបង្កើតរួចហើយ ប៉ុន្តែនោះមិនមែនជាហេតុផលដើម្បីបោះបង់ និងបោះបង់គំនិតបង្កើតអ្វីមួយដោយខ្លួនឯងនោះទេ។
ឥឡូវនេះខ្ញុំនឹងពន្យល់ពីមូលហេតុ៖
ទិដ្ឋភាពសំខាន់បំផុតនៃការបង្កើតអ្វីដែលថ្មីគឺត្រូវកំណត់បញ្ហាពិតប្រាកដ និងផ្តល់ដំណោះស្រាយ។ នេះអាចជាបញ្ហាប្រឈមសកល ឬជាបញ្ហាតូចតាច ប៉ុន្តែសំខាន់ដែលត្រូវការការកែលម្អ។ វាមានសារៈសំខាន់ណាស់ក្នុងការយល់ដឹងអំពីការលំបាកដែលអ្នកអភិវឌ្ឍន៍ផ្សេងទៀត ឬអ្នកប្រើប្រាស់ធម្មតាជួបប្រទះ និងរបៀបដែលអ្នកអាចជួយពួកគេឱ្យយកឈ្នះលើបញ្ហាប្រឈមទាំងនេះ។
បន្ទាប់ពីការឆ្លុះបញ្ចាំងបន្ថែមទៀត ខ្ញុំមានអារម្មណ៍ថាចង់បង្កើតអ្វីមួយដែលមានប្រយោជន៍សម្រាប់សហគមន៍ .NET ដែលជាបណ្ណាល័យតូចមួយដែលអាចជួយសម្រួលដល់ការអភិវឌ្ឍន៍គម្រោង។ ដោយសារការផ្តោតសំខាន់របស់ខ្ញុំគឺ .NET ខ្ញុំបានសម្រេចចិត្តផ្តោតទៅលើអ្វីដែលខ្ញុំដឹង និងធ្វើបានល្អ។ គំនិតមួយដែលបានគិតគឺបង្កើតបណ្ណាល័យសម្រាប់តាមដានព្រឹត្តិការណ៍បញ្ចូលពីក្តារចុច និងកណ្តុរ។
មួយខែមុននោះ ពេលកំពុងធ្វើការលើកម្មវិធីកុំព្យូទ័រសម្រាប់ Windows ខ្ញុំបានប្រឈមមុខនឹងភារកិច្ចតាមដានការចុចគ្រាប់ចុចនៅលើក្តារចុចដើម្បីអនុវត្តសកម្មភាពជាក់លាក់។ ចំនុចសំខាន់គឺថាវាត្រូវការដើម្បីដំណើរការដោយមិនគិតពីថាតើកម្មវិធីរបស់យើងសកម្មឬអត់។ ដោយសារមិនមានដំណោះស្រាយដែលត្រៀមរួចជាស្រេចនៅពេលនោះ ខ្ញុំបានប្រើការហៅទូរសព្ទ P/Invoke ដើម ហើយសម្រេចបានលទ្ធផលដែលចង់បានដោយជោគជ័យ។ នៅពេលនោះ ខ្ញុំមិនបានគិតថាអ្នកអភិវឌ្ឍន៍ផ្សេងទៀតក៏អាចប្រឈមមុខនឹងបញ្ហានេះដែរ ហើយបណ្ណាល័យតូចមួយដែលដោះស្រាយបញ្ហានេះអាចមានប្រយោជន៍ណាស់។
បាទ វាមិនមែនជាបណ្ណាល័យដែលនឹងផ្លាស់ប្តូរជីវិតរបស់នរណាម្នាក់នោះទេ ប៉ុន្តែវាជាជំហានដំបូងឆ្ពោះទៅរកការបង្កើតអ្វីមួយផ្ទាល់ខ្លួនរបស់ខ្ញុំ។ វាជាឱកាសមួយដើម្បីទទួលបានបទពិសោធន៍ដ៏មានតម្លៃ និងចំណាយពេលវេលាចូលរួមក្នុងអ្វីមួយដែលខ្ញុំពិតជាងប់ងល់ ដែលជាមូលហេតុដែលខ្ញុំសម្រេចចិត្តធ្វើសកម្មភាព។
ជំហានដំបូងគឺការបំផុសគំនិតសម្រាប់មុខងារដែលបណ្ណាល័យរបស់ខ្ញុំនឹងមាន។ ខ្ញុំចង់ឱ្យសមត្ថភាពរបស់វាទូលំទូលាយតាមដែលអាចធ្វើទៅបាន ខណៈដែលនៅសល់អាចចូលប្រើប្រាស់បាន និងងាយស្រួលប្រើ។ គោលដៅរបស់ខ្ញុំគឺសម្រាប់អ្នកប្រើប្រាស់មិនត្រូវសរសេរកូដលើសពី 3-5 ជួរនៅក្នុងសេណារីយ៉ូភាគច្រើននោះទេ។
ក្នុងអំឡុងពេលដំណើរការបំផុសគំនិត ខ្ញុំបានបង្កើតឡើងនូវគំនិតដែលថា វាមិនត្រឹមតែអាចតាមដានការបញ្ចូលប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងអាចគ្រប់គ្រងវាបានទៀតផង។ ជាឧទាហរណ៍ ដោយប្រើលេខកូដ មនុស្សម្នាក់អាចក្លែងធ្វើការចុចប៊ូតុង ឬការបន្សំគ្រាប់ចុច ផ្លាស់ទីទស្សន៍ទ្រនិចកណ្ដុរ បិទគ្រាប់ចុចមួយចំនួន ដើម្បីកុំឱ្យប្រព័ន្ធឆ្លើយតបទៅនឹងការចុចរបស់ពួកគេ ឬសូម្បីតែផ្លាស់ប្តូរការចងគ្រាប់ចុច។ មុខងារទាំងអស់នេះត្រូវបានអនុវត្តបន្តិចម្តងៗតាមរយៈការធ្វើបច្ចុប្បន្នភាព។
ដរាបណាខ្ញុំបញ្ចប់សំណុំនៃលក្ខណៈពិសេសនោះ ខ្ញុំបានចាប់ផ្តើមការអភិវឌ្ឍយ៉ាងក្លៀវក្លា។ ការសរសេរកូដមិនមានការពិបាកជាពិសេសនោះទេ ប៉ុន្តែខ្ញុំបានផ្តោតលើរចនាសម្ព័ន្ធ និងភាពស្អាតស្អំរបស់វា ដើម្បីឱ្យអ្នកអភិវឌ្ឍន៍ផ្សេងទៀតអាចយល់បានយ៉ាងងាយស្រួលនូវអ្វីដែលបានធ្វើ និងមូលហេតុ។ ក្នុងអំឡុងពេលនៃដំណើរការអភិវឌ្ឍន៍ ខ្ញុំបានធ្វើការ refactoring ជាសកលជាច្រើនដង ផ្លាស់ប្តូរអង្គការ និងឈ្មោះ ក៏ដូចជាការស្រង់ផ្នែកនៃកូដទៅជាថ្នាក់ដាច់ដោយឡែក។ ខ្ញុំបានយកចិត្តទុកដាក់ជាពិសេសចំពោះការបំបែកកូដដែលពឹងផ្អែកលើវេទិកា (ដូចដែលខ្ញុំបានគ្រោងនឹងបង្កើតដំណោះស្រាយឆ្លងវេទិកានាពេលអនាគត) ពីកូដបណ្ណាល័យខ្លួនឯង។ វានឹងរារាំងតម្រូវការក្នុងការសរសេរកូដមូលដ្ឋានទាំងមូលឡើងវិញនៅពេលផ្លាស់ទីឆ្ងាយពី P/Invoke ។ ខ្ញុំក៏បានឆ្លៀតពេលបន្ថែមមតិយោបល់ XML ដើម្បីឱ្យអ្នកប្រើប្រាស់បណ្ណាល័យអាចយល់ពីអ្វីដែលវិធីសាស្ត្រ ឬថ្នាក់នីមួយៗធ្វើ។
បន្ទាប់ពីបញ្ចប់កំណែដំបូងនៃបណ្ណាល័យ ខ្ញុំបានបង្ហោះវាទៅ NuGet (ប្រព័ន្ធគ្រប់គ្រងកញ្ចប់សម្រាប់វេទិកា .NET ស្រដៀងនឹង npm ឬ pip) ។ ខ្ញុំចង់ទទួលបានមតិកែលម្អខ្លះដើម្បីយល់ថាតើអ្នកណាម្នាក់មានចំណាប់អារម្មណ៍លើគម្រោងនេះ និងទិសដៅមួយណាដែលខ្ញុំគួរធ្វើបន្ទាប់។ មុនពេលផ្សព្វផ្សាយបណ្ណាល័យរបស់ខ្ញុំ ខ្ញុំបានសម្រេចចិត្តបង្កើតឯកសារ README នៅក្នុងឃ្លាំង GitHub រួមទាំងព័ត៌មានអំពីគោលដៅរបស់បណ្ណាល័យ និងការណែនាំខ្លីៗអំពីរបៀបប្រើប្រាស់វា។
ខ្ញុំបានសម្រេចចិត្តស្វែងរកអ្នកប្រើប្រាស់ដំបូងរបស់ខ្ញុំនៅលើ Reddit ។ បន្ទាប់ពីស្វែងរកសហគមន៍ដែលសមស្របមួយចំនួន ខ្ញុំបានសរសេរប្រកាសខ្លីមួយដែលមានចំណងជើងថា " Open Source C# Library for Handling Keyboard/Mouse Events in Windows UI Apps " វាតានតឹងបន្តិច ហើយនិយាយដោយស្មោះត្រង់ ខ្ញុំមិនរំពឹងថានឹងមានលទ្ធផលគួរឱ្យកត់សម្គាល់នោះទេ។ ទោះយ៉ាងណាក៏ដោយ គួរឱ្យភ្ញាក់ផ្អើល វាបានបង់ផ្តាច់។ ការបង្ហោះមួយទទួលបានការមើលប្រហែល 14,000 និងប្រហែល 30 មតិយោបល់ជាមួយនឹងមតិវិជ្ជមាន។ វាជាអារម្មណ៍ដ៏មិនគួរឱ្យជឿដែលខ្ញុំចង់ឱ្យអ្នករាល់គ្នាអាចជួបប្រទះ៖ ការដឹងថាពេលវេលាដែលចំណាយលើគម្រោងនេះមិនឥតប្រយោជន៍នោះទេ។ ថ្វីត្បិតតែខ្ញុំមិនបានបង្កើតអ្វីដែលប្លែក ប៉ុន្តែខ្ញុំយល់ថាមានមនុស្សដែលយល់ថាវាមានប្រយោជន៍ពិតប្រាកដ ហើយមានឆន្ទៈគាំទ្រការខិតខំប្រឹងប្រែងរបស់ខ្ញុំ។
បន្ទាប់ពីការប្រមូលមតិកែលម្អទាំងអស់ ខ្ញុំបានសម្រេចចិត្តបន្តការអភិវឌ្ឍន៍ និងរក្សាទំនាក់ទំនងជាមួយអ្នកប្រើប្រាស់ដែលចាប់អារម្មណ៍បំផុតដែលបានបញ្ចេញមតិយោបល់។ ខ្ញុំបានប្រាស្រ័យទាក់ទងយ៉ាងសកម្មជាមួយពួកគេ ហើយបានស្តាប់សំណើរបស់ពួកគេសម្រាប់មុខងារដែលពួកគេចង់ឃើញ។ ក្នុងខែបន្ទាប់ ខ្ញុំបានចេញផ្សាយការអាប់ដេតតូចៗជាច្រើន ហើយបន្ទាប់មកផ្តោតលើការទាក់ទាញអ្នកប្រើប្រាស់។
នៅលើ GitHub មានប្រភេទឃ្លាំងពិសេសមួយហៅថា "អស្ចារ្យ" - ទាំងនេះគឺជាបណ្តុំនៃតំណភ្ជាប់ និងធនធានដែលបានចងក្រងលើប្រធានបទជាក់លាក់ ឧទាហរណ៍ awesome-dotnet ។ គោលដៅរបស់ខ្ញុំគឺផ្សព្វផ្សាយបណ្ណាល័យរបស់ខ្ញុំនៅក្នុងឃ្លាំងនីមួយៗទាំងនេះ។ ទោះបីជានេះមិនមែនជាកិច្ចការងាយស្រួលក៏ដោយ — បណ្ណាល័យដែលមានផ្កាយ 10-15 នៅលើ GitHub មិនទាក់ទាញចំណាប់អារម្មណ៍ច្រើនទេ — ខ្ញុំនៅតែអាចចូលទៅក្នុងពួកគេជាច្រើន។ នេះបានបង្កើនចរាចរណ៍អ្នកប្រើយ៉ាងខ្លាំង ហើយទាក់ទាញការចាប់អារម្មណ៍មកលើគម្រោងរបស់ខ្ញុំ។
ក្នុងអំឡុងពេលនៃការអភិវឌ្ឍន៍បន្ថែមទៀត ខ្ញុំបានជួបប្រទះកិច្ចការតូចៗជាច្រើន ដែលពេលខ្លះខ្ញុំខ្វះនូវបំណងប្រាថ្នា និងថាមពលដើម្បីបញ្ចប់។ ដូច្នេះ ខ្ញុំបានសម្រេចចិត្តទាញយកអត្ថប្រយោជន៍មួយនៃអត្ថប្រយោជន៍នៃការអភិវឌ្ឍន៍ប្រភពបើកចំហ - ទាក់ទាញអ្នកចូលចិត្តដែលមានឆន្ទៈជួយក្នុងកិច្ចការទាំងនេះ។ ដើម្បីធ្វើដូច្នេះ ខ្ញុំបានងាកទៅរកសេវា Up-for-Grabs ដែលផ្តល់បញ្ជីនៃឃ្លាំងប្រភពបើកចំហជាមួយនឹងបញ្ហាសកម្មសម្រាប់អ្នកដែលចង់រួមចំណែក។ បន្ទាប់ពីបន្ថែមឃ្លាំងរបស់ខ្ញុំ និងបង្កើតបញ្ហាជាច្រើន ខ្ញុំបានទទួលសំណើសុំជំនួយភ្លាមៗ។
បន្ទាប់ពីបណ្ណាល័យរបស់ខ្ញុំត្រូវបានទាញយកច្រើនជាងមួយពាន់ដង ខ្ញុំបានសម្រេចចិត្តធ្វើការយ៉ាងសកម្មលើឯកសារនេះ។ ចាប់តាំងពីការអាប់ដេតលើកដំបូង មុខងាររបស់បណ្ណាល័យបានកើនឡើងយ៉ាងខ្លាំង ហើយឧទាហរណ៍នៅក្នុងឯកសារ README មិនគ្រប់គ្រាន់ទៀតទេ។ ក្នុងចំណោមជម្រើសដែលអាចធ្វើបានទាំងអស់ ខ្ញុំបានជ្រើសរើសសាមញ្ញបំផុត និងអាចចូលប្រើបានបំផុត៖ ខ្ញុំបានបង្កើតឯកសារ Markdown ដាច់ដោយឡែក ហើយរៀបរាប់លម្អិតអំពីថ្នាក់ទាំងអស់ដែលផ្តល់ដោយបណ្ណាល័យ។ ខ្ញុំក៏បានសម្រេចចិត្តសរសេរការណែនាំតូចមួយសម្រាប់អ្នកប្រើប្រាស់កម្រិតខ្ពស់ដែលចង់ប្រើប្រាស់សមត្ថភាពរបស់បណ្ណាល័យឱ្យបានពេញលេញ។ ជាការភ្ញាក់ផ្អើលរបស់ខ្ញុំ បុរសម្នាក់ដែលមានជំនាញក្នុងការសរសេរឯកសារបច្ចេកទេសបានមករកខ្ញុំ ហើយផ្តល់ជំនួយរបស់គាត់។ គាត់បានជួយខ្ញុំក្នុងការរៀបចំរចនាសម្ព័ន្ធសម្ភារៈឱ្យបានត្រឹមត្រូវ និងពិពណ៌នាយ៉ាងត្រឹមត្រូវនូវរាល់ព័ត៌មានលម្អិត។ ដោយមានជំនួយពីគាត់ យើងបានបញ្ចប់កិច្ចការនេះយ៉ាងឆាប់រហ័ស។
ការអភិវឌ្ឍន៍ប្រភពបើកចំហគឺជាឱកាសដ៏ល្អមួយដើម្បីជួប និងពង្រីកបណ្តាញរបស់អ្នកជាមួយអ្នកសរសេរកម្មវិធីផ្សេងទៀត។ រហូតមកដល់ពេលនេះ មនុស្ស 9 នាក់មកពីប្រទេសផ្សេងៗគ្នាបានចូលរួមចំណែកក្នុងបណ្ណាល័យនេះ រួមទាំងសហរដ្ឋអាមេរិក អូស្ត្រាលី អាហ្សង់ទីន កាណាដា អាល្លឺម៉ង់ ប៉ូឡូញ និងប្រទេសផ្សេងៗទៀត។ ពួកគេបានជួយក្នុងការសរសេរមុខងារ ការធ្វើតេស្តឯកតា និងឯកសារ។ លើសពីនេះទៅទៀត វាគឺជាការផ្លាស់ប្តូរបទពិសោធន៍ដ៏អស្ចារ្យ និងការទំនាក់ទំនងដ៏រីករាយ។ ប្រហែលជាជាមួយនឹងអ្នករួមចំណែកមួយចំនួន យើងអាចចាប់ផ្តើមគម្រោងថ្មីជាមួយគ្នា។
ទោះបីជាមានការងារ និងការប្តេជ្ញាចិត្តផ្សេងទៀតក៏ដោយ ខ្ញុំចង់បន្តការអភិវឌ្ឍន៍ និងចេញផ្សាយកំណែពេញលេញជាមួយនឹងលក្ខណៈពិសេសដែលខ្ញុំជឿថាគួរតែរួមបញ្ចូលនៅក្នុងបណ្ណាល័យ។ ផែនការអនាគតរបស់ខ្ញុំរួមមានការធ្វើឱ្យវាឆ្លងកាត់វេទិកា និងបំបែកវាចេញពីក្របខ័ណ្ឌ UI ជាក់លាក់។
សរុបសេចក្តីមក ខ្ញុំចង់សង្ខេបរាល់អ្វីដែលខ្ញុំបាននិយាយ។ កុំខ្លាចក្នុងការសាកល្បងអ្វីដែលថ្មី ហើយកុំនៅស្ងៀម។ ប្រសិនបើអ្នកពិតជាស្រឡាញ់ការសរសេរកម្មវិធី ហើយចង់រីកចម្រើនជាអ្នកអភិវឌ្ឍន៍ សូមព្យាយាមបង្កើតអ្វីមួយដោយខ្លួនឯង មិនថាជាបណ្ណាល័យតូច ឬសេវាកម្មនោះទេ។ អ្នកមិនដឹងថាវាអាចនាំទៅណាទេ។ ពេញមួយការអភិវឌ្ឍន៍បណ្ណាល័យនេះ ខ្ញុំបានរកឃើញភាពសប្បាយរីករាយមិនត្រឹមតែក្នុងការសរសេរកម្មវិធីប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងបានជួបមនុស្ស និងបង្កើតទំនាក់ទំនងថ្មីៗទៀតផង។ ខ្ញុំមានគម្រោងបន្តចូលរួមក្នុងការអភិវឌ្ឍន៍ប្រភពបើកចំហ មិនត្រឹមតែតាមរយៈការជំរុញគម្រោងផ្ទាល់ខ្លួនរបស់ខ្ញុំប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងតាមរយៈការរួមចំណែកដល់បណ្ណាល័យសហគមន៍ផងដែរ នេះក៏ជាបទពិសោធន៍ដ៏ល្អផងដែរ។
សម្រាប់អ្នកដែលចង់ចាប់ផ្តើមចូលរួមក្នុងការអភិវឌ្ឍប្រភពបើកចំហ ខ្ញុំសូមណែនាំ ការណែនាំ នេះ !
ប្រសិនបើអ្នកចូលចិត្តការបង្ហោះនេះ ខ្ញុំនឹងដឹងគុណប្រសិនបើអ្នកអាចគាំទ្រ បណ្ណាល័យ ជាមួយផ្កាយនៅលើ GitHub!