لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 07/25/21 في كل الموقع
-
لدي مجموعة بيانات من المسافات تسمى dists. أريد تحديد المسافات التي تكون بين قيمتين. لقد كتبت السطر التالي للقيام بذلك: dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))] لكن بالرغم من ذلك أحصل على نفس النتيجة وكأني أستعمال الشرط التالي: (np.where(dists <= r + dr)) إذا قمت بتنفيذ الأوامر بالتسلسل باستخدام متغير مؤقت ، فإنه يعمل بشكل جيد. لماذا لا يعمل الكود أعلاه ، وكيف يمكنني تشغيله؟1 نقطة
-
لنفترض أن لدي المصفوفة التالية: arr = numpy.array([[1, 2], [3, 4], [5, 6]]) عندما أستعمل arr[n] أحصل على صف بالكامل، [1, 2] مثلًا، كيف يمكنني أن أصل إلى أول خانة في كل عمود وأحصل على [1, 3, 5]؟ وهل هذا الأمر (إستخدام الأعمدة بدلًا من الصفوف) يؤثر على أداء السكريبت؟1 نقطة
-
عندما أقوم بإستدعاء ملف csv كالتالي: df = pd.read_csv('data.csv') يظهر لي هذا الخطأ: /Users/Fahmy/anaconda/envs/py27/lib/python2.7/site-packages/pandas/io/parsers.py:1130: DtypeWarning: Columns (4,5,7,16) have mixed types. Specify dtype option on import or set low_memory=False. ما علاقة dtype بـ low_memory أليست dtype نوع في مكتبة numpy؟ ولماذا يخبرني بجعل low_memory تساوي false؟ لم أفهم كيف يساعد هذا الأمر في حل المشكلة؟1 نقطة
-
ما هي الوظائف التي تؤهلني إليها دورة علوم الحاسوب؟1 نقطة
-
مرحبا, هل يوجد طريقة لجلب mac address باستخدام Laravel او لا يمكن ذلك؟1 نقطة
-
يمكن الوصول ل mac address الخاص بجهاز المستخدم في حال كان متصلا بنفس الشبكة، يستخدم للتميز بين الأجهزة المتصلة على نفس الشبكلة مثلا wifi داخلية أو Ethernet وهو غير متاح للشبكات الخارجية، إن كنت تريد mac address الخاص بالمخدم يمكن تنفيذ: <?php echo exec('getmac'); ?> أو <php system('getmac'); ?> أو <?php $mac = system('arp -an'); echo $mac; ?> في لارافيل: <php Route::get('/getmacshellexec',function() { $shellexec = shell_exec('getmac'); dd($shellexec); } ); Route::get('/getmacexec',function() { $shellexec = exec('getmac'); dd($shellexec); } ); يمكن استخدام الدوال: <?php function getMAcAddressExec() { return substr(exec('getmac'), 0, 17); } echo getMAcAddressExec(); function getMAcAddressShellExec() { return substr(shell_exec('getmac'), 159,20); } echo getMAcAddressShellExec(); لايمكن لجافاسكربت الوصول ل mac address الموضوع حساس و متعلق بالحماية ولن تعمل في معظم المتصفحات يمكن أن تعمل في انترنت اكسبلورر IE باستخدام ActiveXObject: function showMacAddress() { var obj = new ActiveXObject("WbemScripting.SWbemLocator"); var s = obj.ConnectServer("."); var properties = s.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration"); var e = new Enumerator(properties); var output; output = '<table border="0" cellPadding="5px" cellSpacing="1px" bgColor="#CCCCCC">'; output = output + '<tr bgColor="#EAEAEA"><td>Caption</td><td>MACAddress</td></tr>'; while (!e.atEnd()) { e.moveNext(); var p = e.item(); if (!p) continue; output = output + '<tr bgColor="#FFFFFF">'; output = output + '<td>' + p.Caption; +'</td>'; output = output + '<td>' + p.MACAddress + '</td>'; output = output + '</tr>'; } output = output + '</table>'; document.getElementById("box").innerHTML = output; } showMacAddress(); <div id='box'></div>1 نقطة
-
1 نقطة
-
كيف أستطيع تحويل قيمة قادمة من api بهاذا الشكل "category": "1,2,3" إلى هذا الشكل "category": [1,2,3] حتى أستطيع المرور على كل قيم المصفوفة ومقارنتها بالقيمة التي لدي؟1 نقطة
-
نلاحظ أنه لدينا سلسلة نصية، نريد تقطيعها حسب الفاصلة، ثم نحول كل عدد منها لرقم (هو حاليا نص) ثم نعيد جمع الناتج لقائمة example .split(',') // تقطيع السلسة .map((String text) => int.parse(text)) // تحويل لأعداد .toList(), // تحويل لقائمة حيث أن example هو رد السيرفر أي قيمة الحقل category1 نقطة
-
<?php if (isset($error) && !empty($error)) { ?> <div class="alert alert-danger"> <strong>خطأ!</strong> <?= $error ?> </div> <?php } ?> كيف اجعل هاته alert المربوطة ب php تظهر لما اضغط على زر submite الفورم في حالة الخطا هل استعمل الجافا سكريبت ام مادا <input type="text" id="message" value=""> <br> <button type="button" onclick="alert(message.value)">Generate Text</button>1 نقطة
-
هل حاولت الاتصال من متصفح آخر؟ أو إغلاق المتصفح الحالي و إعادة تشغيله؟ حاول إطفاء الشبكة (مثلا الواي فاي) وأعد الاتصال أو إعادة تشغيل الحاسوب. ربما قمت بتثبيت أي إضافات للمتصفح منها خاص ب VPN أو استعملت برنامج من هذا النوع، هنالك عدة احتمالات للمشكلة..1 نقطة
-
مواصفات اللات توب الخاص بى جيدة على ويندوز لكنى اريد ان اقوم بتسطيب hackintosh واتسائل ان كانت مواصفات اللاب سوف تتحمل ال hackintosh هذه هى المواصفات البروسيسر DELL Latitude E6320 - i7 2640M 2.8 GHz الرامات 16 جيجا بايت الهارد 500 جيجا بايت وهو عادى ليس ssd هل هذه المواصفات كافية ام لا ؟؟1 نقطة
-
اعتقد أن هذه المواصفات جيدة كفاية لتشغيل، نظام التشغيل hackintosh حيث يعتبر المعالج جيد ولكنه جيل قديم نوعاً ما مساحة الرام كافية جداً ويفضل أن يكون المعالج الرسومي جيد حتى لا تواجه أي مشاكل وتعتبر المواصفات المطلوبة لهذا النظام ليست بالكبيرة ولكن إذا كنت تعمل جيداً على نظام التشغيل windows فلن تواجه أي مشاكل في استخدام hackintosh1 نقطة
-
1 نقطة
-
باقي الملفات الموجودة هي ملفات تكميلية للواجهة و لكن يمكنك الاعتماد على الاكواد الخاصة ب tabbar و widget الخاصة بعرض المنتجات.1 نقطة
-
شكرا جدا أستاذ بلال، لكن يبدو أن هناك نقص في الملفات بما أنها تحتوي على أكواد كثيرة تعتمد على ملفات أخرى، هل يمكنك إرسال المشروع كامل حتى أستطيع أخذ الفكرة منه1 نقطة
-
هناك طريقة وهي استخدام StreamController بحيث هي طريقة من طرق إدارة الحالة في فلاتر. و الأمر معقد جداً و يجب أن تكون على دراية جيدة بكيفية استخدام StreamController. لاحظ بأنه يجب أن تقوم بتعلم StreamController حتى تفهم الإجابة جيداً لأنه في الوهلة الأولى ستجد أن الأمر قد يكون فيه صعوبة يمكنك إنشاء ملف وليكن مسؤول عن التنصت على أي حدث جديد و يعكسه على الواجهة أي يقوم بتنفيذ هذا الحدث على الواجهة و الميزة في ذلك إنها تقوم بتنفيذ الحدث بدون اللجوء إلى بناء نفسها من الصفر و هذا الملف فليكن اسمه StreamProductsBloc.dart ويمكننا تعريف عدة متغيرات في هذا الملف بهذا الشكل List<ProductsModel>? products; final StreamController<List<ProductsModel>> _productsController = StreamController<List<ProductsModel>>.broadcast(); final StreamController<int> _categoryController = StreamController<int>.broadcast(); Stream<List<ProductsModel>> get productsStream => _productsController.stream; StreamSink<int> get fetchProducts => _categoryController.sink; Stream<int> get getProductsForCategoriescategory => _categoryController.stream; APIService? apiService; int categoryID = 0; List<ProductsModel>? products; بحيث أول شيء نقوم بتعريف الكلاس مودل الخاص بالمنتجات. final StreamController<List<ProductsModel>> _productsController = StreamController<List<ProductsModel>>.broadcast(); و من ثم نقوم بتعريف StreamController ليقوم بالتحكم في العملية , ويتم توفير واجهات مختلفة لإنشاء تدفقات أحداث متنوعة. final StreamController<int> _categoryController = StreamController<int>.broadcast(); وحدة تحكم حيث يمكن الاستماع إليه أكثر من مرة . Stream<List<ProductsModel>> get productsStream => _productsController.stream; ثم نقوم بالحصول على البث للمراقبة. StreamSink<int> get fetchProducts => _categoryController.sink; ثم نقوم بإدخال حدث إضافي عن طريق StreamSink. StreamProductsBloc() { //this.categoryID = categoryID; this.products = []; apiService = APIService(); _productsController.add(products!); _categoryController.add(this.categoryID); _categoryController.stream.listen(_fetchCategoriesFromApi); } Future<void> _fetchCategoriesFromApi(int category) async { this.products = await apiService!.getProductsForCategories(category); _productsController.add(this.products!); } @override void dispose(){ _productsController.close(); _categoryController.close(); } نقوم بإنشاء دالة جلب بيانات التصنيف عند تمرير id التصنيف و نقوم بإرجاع جميع المنتجات و من ثم نقوم بإضافة هذه البيانات إلى وحدة التحكم. Future<void> _fetchCategoriesFromApi(int category) async { this.products = await apiService!.getProductsForCategories(category); _productsController.add(this.products!); } ثم نقوم بإضافة المنتجات و id التصنيف إلى وحدة التحكم في دالة StreamProductsBloc ثم نقوم بمراقبة الحدث عن طريق استخدام listen StreamProductsBloc() { //this.categoryID = categoryID; this.products = []; apiService = APIService(); _productsController.add(products!); _categoryController.add(this.categoryID); _categoryController.stream.listen(_fetchCategoriesFromApi); } ثم نقوم بإنشاء ملف واجهة عرض البيانات وليكن مثلاً باسم products_screen.dart و نقوم أولاً بإنشاء نسخة جديدة من الملف الذي قمنا بإنشائه مسبقاً StreamProductsBloc streamProductsBloc = StreamProductsBloc(); ثم ننشأ عدة متغيرات و نعرف TabController لوضع التصنيفات في هذه TabController bool get wantKeepAlive => true; HelperApi helperApi = new HelperApi(); int currentIndex = 0; late TabController _tabController; ثم نقوم بصنع Widget خاصة بعرض التصنيفات في TabController Widget _categories(List<CategoryModel> categoryModel, BuildContext context) { _tabController = TabController( initialIndex: 0, length: categoryModel.length, vsync: this, ); return Scaffold( appBar: AppBar( title: Text(S.of(context).products), bottom: TabBar( indicatorColor: Color(0XFF117182), indicatorWeight: 5, controller: _tabController, tabs: _tabs(categoryModel), isScrollable: true, onTap: (int index) { streamProductsBloc.fetchProducts .add(this.productsCategories[index].id!); }, ), ), body: Container( child: StreamBuilder( stream: streamProductsBloc.productsStream, builder: (context, AsyncSnapshot<List<ProductsModel>>? snapshot) { switch (snapshot!.connectionState) { case ConnectionState.none: // ignore: todo // TODO: Handle this case. return Center( child: CircularProgressIndicator(), ); case ConnectionState.waiting: // ignore: todo // TODO: Handle this case. return ShimmerGrid(); case ConnectionState.done: case ConnectionState.active: // ignore: todo // TODO: Handle this case. if (snapshot.hasError) { return Center( child: ShimmerGrid(), ); } else { if (!snapshot.hasData) { return ShimmerGrid(); } else { return _drawProducts(snapshot.data!, context); } } } }, ), ), ); } لاحظ أننا نقوم بجلب منتجات كل تصنيف عند الضغط عليها عن طريق استخدام id هذا التصنيف streamProductsBloc.fetchProducts.add(this.productsCategories[index].id!); و من ثم نقوم بإضافة هذا الحدث إلى streamProductBloc . ثم نقوم برسم Widget الخاص بالمنتجات Widget _drawProducts(List<ProductsModel> products, BuildContext context) { final cart = Provider.of<Cart>(context, listen: false); var initModel = Provider.of<InitModel>(context, listen: false,); var auth = Provider.of<AuthProvider>(context, listen: false); return Consumer<WishListProvider>( builder: (BuildContext context, wishListData, child) { return Container( padding: EdgeInsets.only(top: 24), child: Column( children: [ Flexible( child: GridView.builder( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 200, childAspectRatio: 1 / 2, crossAxisSpacing: 20, mainAxisSpacing: 20), itemCount: products.length, itemBuilder: (context, index) { return Card( clipBehavior: Clip.hardEdge, elevation: 0.9, child: AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 375), child: SlideAnimation( verticalOffset: 50.0, child: FadeInAnimation( child: Padding( padding: const EdgeInsets.all(8.0), child: InkWell( onTap: () { _gotoSingleProduct(products[index], context); }, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( // ignore: unnecessary_null_comparison child: Stack( children: [ (products[index].images![0].src != null) ? Image.network( products[index].images![0].src!, width: MediaQuery .of(context) .size .width, height: MediaQuery .of(context) .size .height, fit: BoxFit.cover, ) : Image.asset( "assets/images/1.jpeg", width: MediaQuery .of(context) .size .width, height: MediaQuery .of(context) .size .height, fit: BoxFit.fill, ), Positioned.directional( textDirection: Directionality.of( context), child: Container( margin: EdgeInsets.symmetric( horizontal: 12.0, vertical: 10.0), decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(50.0)), child: IconButton( icon: Icon( Icons.favorite_outline), onPressed: () { //wishListData.getCount(products[index].id!, auth.id!); wishListData.addNewWishList( price: products[index] .price! .toString(), product: products[index] .name!, image: products[index] .images![0] .src!, productId: products[index] .id, userId: auth.id); ScaffoldMessenger.of(context) .showSnackBar( SnackBar( content: Text( S .of(context) .add_product_to_wishlist, ), duration: Duration( seconds: 2), ), ); }, iconSize: 20.0, ), ), ) ], ) ), Padding( padding: const EdgeInsets.all(8.0), child: Text( products[index].name!.substring(0, 10), style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold, fontSize: 18.0, ), ), ), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text(initModel.currency! + products[index].price!, style: TextStyle( color: Colors.black, fontSize: 15.0, ), ), ), IconButton( icon: Icon( Icons.add_shopping_cart_outlined), onPressed: () { //if(auth.status == Status.Authenticated){ cart.addItem( products[index].id.toString(), 10.0, products[index].name!.toString(), products[index].images![0].src!, 1, products[index].id.toString()); ScaffoldMessenger.of(context) .hideCurrentSnackBar(); ScaffoldMessenger.of(context) .showSnackBar( SnackBar( content: Text( S .of(context) .product_added_to_the_cart, ), duration: Duration(seconds: 2), action: SnackBarAction( label: S .of(context) .undo, onPressed: () { cart.reomveSingleItem( products[index] .id .toString()); }, ), ), ); }, ), ], ), Text(products[index].stockStatus!, style: TextStyle( color: Colors.orange, fontWeight: FontWeight.bold, fontSize: 15, ),), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ RatingBar.builder( initialRating: products[index] .ratingCount! .toDouble(), minRating: 1, direction: Axis.horizontal, allowHalfRating: true, itemSize: 15.0, itemCount: 5, itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemBuilder: (context, _) => Icon( Icons.star, color: Colors.amber, ), onRatingUpdate: (rating) { print(rating); }, ), Text(products[index] .ratingCount! .toDouble() .toString()), ], ), ], ), ), ), ), ), ), ); }, ), ), ], ), ); }); } List<Tab> _tabs(List<CategoryModel> categoryModel) { List<Tab> tabs = []; for (CategoryModel category in categoryModel) { tabs.add(Tab( text: category.name, )); } return tabs; } وهذه كامل الملفات , ملف stream_products.dart import 'dart:async'; import '../../common/api_service.dart'; import '../../pages/contracts/contracts.dart'; import '../../models/Product.dart'; class StreamProductsBloc implements Disposable { List<ProductsModel>? products; final StreamController<List<ProductsModel>> _productsController = StreamController<List<ProductsModel>>.broadcast(); final StreamController<int> _categoryController = StreamController<int>.broadcast(); Stream<List<ProductsModel>> get productsStream => _productsController.stream; StreamSink<int> get fetchProducts => _categoryController.sink; Stream<int> get getProductsForCategoriescategory => _categoryController.stream; APIService? apiService; int categoryID = 0; StreamProductsBloc() { //this.categoryID = categoryID; this.products = []; apiService = APIService(); _productsController.add(products!); _categoryController.add(this.categoryID); _categoryController.stream.listen(_fetchCategoriesFromApi); } Future<void> _fetchCategoriesFromApi(int category) async { this.products = await apiService!.getProductsForCategories(category); _productsController.add(this.products!); } @override void dispose(){ _productsController.close(); _categoryController.close(); } } و ملف الواجهة ملف products_screen.dart import 'package:bistore/providers/auth.dart'; import 'package:bistore/services/wishlist_provider.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_rating_bar/flutter_rating_bar.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:provider/provider.dart'; import '../../models/init_model.dart'; import '../../widgets/shimmer/shimmer_grid.dart'; import '../../generated/l10n.dart'; import '../../models/cart_model.dart'; import '../products/single_product.dart'; import '../../models/Product.dart'; import '../../models/category.dart'; import '../../utils/helper_api.dart'; import '../../pages/home/stream_products.dart'; class Products extends StatefulWidget { const Products({Key? key}) : super(key: key); @override _ProductsState createState() => _ProductsState(); } class _ProductsState extends State<Products> with AutomaticKeepAliveClientMixin, TickerProviderStateMixin { @override bool get wantKeepAlive => true; HelperApi helperApi = new HelperApi(); int currentIndex = 0; late TabController _tabController; var refreshKey = GlobalKey<RefreshIndicatorState>(); StreamProductsBloc streamProductsBloc = StreamProductsBloc(); late List<CategoryModel> productsCategories; @override void initState() { // ignore: todo // TODO: implement initState super.initState(); HelperApi().fetchCategories(1); } @override void dispose() { // ignore: todo // TODO: implement dispose super.dispose(); _tabController.dispose(); streamProductsBloc.dispose(); } @override // ignore: must_call_super Widget build(BuildContext context) { return FutureBuilder<List<CategoryModel>>( future: helperApi.fetchCategories(1), builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: return Center( child: Text('No Connection'), ); case ConnectionState.waiting: case ConnectionState.active: return Scaffold( body: Center( child: CircularProgressIndicator(), ), ); case ConnectionState.done: if (snapshot.hasError) { print(snapshot.error); } else { if (!snapshot.hasData) { print('Data Not Found'); } else { this.productsCategories = snapshot.data; streamProductsBloc.fetchProducts .add(this.productsCategories[0].id!); return _categories(snapshot.data, context); } } break; } return Container(); }, ); } Widget _categories(List<CategoryModel> categoryModel, BuildContext context) { _tabController = TabController( initialIndex: 0, length: categoryModel.length, vsync: this, ); return Scaffold( appBar: AppBar( title: Text(S.of(context).products), bottom: TabBar( indicatorColor: Color(0XFF117182), indicatorWeight: 5, controller: _tabController, tabs: _tabs(categoryModel), isScrollable: true, onTap: (int index) { streamProductsBloc.fetchProducts .add(this.productsCategories[index].id!); }, ), ), body: Container( child: StreamBuilder( stream: streamProductsBloc.productsStream, builder: (context, AsyncSnapshot<List<ProductsModel>>? snapshot) { switch (snapshot!.connectionState) { case ConnectionState.none: // ignore: todo // TODO: Handle this case. return Center( child: CircularProgressIndicator(), ); case ConnectionState.waiting: // ignore: todo // TODO: Handle this case. return ShimmerGrid(); case ConnectionState.done: case ConnectionState.active: // ignore: todo // TODO: Handle this case. if (snapshot.hasError) { return Center( child: ShimmerGrid(), ); } else { if (!snapshot.hasData) { return ShimmerGrid(); } else { return _drawProducts(snapshot.data!, context); } } } }, ), ), ); } Widget _drawProducts(List<ProductsModel> products, BuildContext context) { final cart = Provider.of<Cart>(context, listen: false); var initModel = Provider.of<InitModel>(context, listen: false,); var auth = Provider.of<AuthProvider>(context, listen: false); return Consumer<WishListProvider>( builder: (BuildContext context, wishListData, child) { return Container( padding: EdgeInsets.only(top: 24), child: Column( children: [ Flexible( child: GridView.builder( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 200, childAspectRatio: 1 / 2, crossAxisSpacing: 20, mainAxisSpacing: 20), itemCount: products.length, itemBuilder: (context, index) { return Card( clipBehavior: Clip.hardEdge, elevation: 0.9, child: AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 375), child: SlideAnimation( verticalOffset: 50.0, child: FadeInAnimation( child: Padding( padding: const EdgeInsets.all(8.0), child: InkWell( onTap: () { _gotoSingleProduct(products[index], context); }, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( // ignore: unnecessary_null_comparison child: Stack( children: [ (products[index].images![0].src != null) ? Image.network( products[index].images![0].src!, width: MediaQuery .of(context) .size .width, height: MediaQuery .of(context) .size .height, fit: BoxFit.cover, ) : Image.asset( "assets/images/1.jpeg", width: MediaQuery .of(context) .size .width, height: MediaQuery .of(context) .size .height, fit: BoxFit.fill, ), Positioned.directional( textDirection: Directionality.of( context), child: Container( margin: EdgeInsets.symmetric( horizontal: 12.0, vertical: 10.0), decoration: BoxDecoration( color: Colors.grey[200], borderRadius: BorderRadius.circular(50.0)), child: IconButton( icon: Icon( Icons.favorite_outline), onPressed: () { //wishListData.getCount(products[index].id!, auth.id!); wishListData.addNewWishList( price: products[index] .price! .toString(), product: products[index] .name!, image: products[index] .images![0] .src!, productId: products[index] .id, userId: auth.id); ScaffoldMessenger.of(context) .showSnackBar( SnackBar( content: Text( S .of(context) .add_product_to_wishlist, ), duration: Duration( seconds: 2), ), ); }, iconSize: 20.0, ), ), ) ], ) ), Padding( padding: const EdgeInsets.all(8.0), child: Text( products[index].name!.substring(0, 10), style: TextStyle( color: Colors.black, fontWeight: FontWeight.bold, fontSize: 18.0, ), ), ), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text(initModel.currency! + products[index].price!, style: TextStyle( color: Colors.black, fontSize: 15.0, ), ), ), IconButton( icon: Icon( Icons.add_shopping_cart_outlined), onPressed: () { //if(auth.status == Status.Authenticated){ cart.addItem( products[index].id.toString(), 10.0, products[index].name!.toString(), products[index].images![0].src!, 1, products[index].id.toString()); ScaffoldMessenger.of(context) .hideCurrentSnackBar(); ScaffoldMessenger.of(context) .showSnackBar( SnackBar( content: Text( S .of(context) .product_added_to_the_cart, ), duration: Duration(seconds: 2), action: SnackBarAction( label: S .of(context) .undo, onPressed: () { cart.reomveSingleItem( products[index] .id .toString()); }, ), ), ); }, ), ], ), Text(products[index].stockStatus!, style: TextStyle( color: Colors.orange, fontWeight: FontWeight.bold, fontSize: 15, ),), Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ RatingBar.builder( initialRating: products[index] .ratingCount! .toDouble(), minRating: 1, direction: Axis.horizontal, allowHalfRating: true, itemSize: 15.0, itemCount: 5, itemPadding: EdgeInsets.symmetric(horizontal: 4.0), itemBuilder: (context, _) => Icon( Icons.star, color: Colors.amber, ), onRatingUpdate: (rating) { print(rating); }, ), Text(products[index] .ratingCount! .toDouble() .toString()), ], ), ], ), ), ), ), ), ), ); }, ), ), ], ), ); }); } List<Tab> _tabs(List<CategoryModel> categoryModel) { List<Tab> tabs = []; for (CategoryModel category in categoryModel) { tabs.add(Tab( text: category.name, )); } return tabs; } void _gotoSingleProduct( ProductsModel singleProductModel, BuildContext context) { Navigator.push( context, MaterialPageRoute( builder: (context) => SingleProduct(singleProductModel)), ); } } class ProductsList extends StatelessWidget { final List<ProductsModel> productsModel; ProductsList({Key? key, required this.productsModel}) : super(key: key); @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: ListView.builder( scrollDirection: Axis.vertical, itemCount: productsModel.length, itemBuilder: (context, index) { return Text('${productsModel[index].name}'); }, ), ), ], ); } }1 نقطة
-
هذا أمر مهم في بعض الحالات عندما نستخدم الطبقات التلاففية، يمكنك القيام بذلك في كيراس من خلال model.layers[index].output حيث أنها تقوم بإعطاء خرج أي طبقة من خلال تمرير رقم الطبقة أي ال index الخاص بها. ومن خلالها يمكنك الحصول على طلبك وهو خرج كل طبقة كالتالي: from keras import backend as K #placeholder إدخال ال in = model.input # مخرجات كل الطبقات outputs = [layer.output for layer in model.layers] # تابع التقييم functor = K.function([in , K.learning_phase()], outputs ) # الاختبار test = np.random.random(input_shape)[np.newaxis,...] layer_outs = functor([test, 1.]) print layer_outs ولمحاكاة عملية التسرب (أقصد التنعيم وتحديداً ال Dropout هنا)، استخدم learning_phase كـ 1. في layer_outs وإلا استخدم 0. حيث أننا نحتاجها في حال احتوى النموذج على طبقة Dropout أو batchnorm كما تعلم.1 نقطة
-
1 نقطة
-
يوجد اكثر من طريقة لتقسيم مصفوفة في numpy: 1) اذا كانت المصفوفة احادية الابعاد 1-D: لو عندنا مصفوفة احادية كالتالي: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) يمكن تقسيمها الي 5 مصفوفات متساوية باستخدام الكود: import numpy as np np.split(x, 5) ويكون الناتج: [array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])] 2) تقسيم مصفوفة في ثناية الابعاد 2-D: في السؤال المطروح، اذا كان لدينا المصفوفة : [[1,2,3,4], [5,6,7,8]] يمكن تقسيمه عن طريق الكود التالي: X = np.array([[1,2,3,4], [5,6,7,8]]) X_new = np.split(a,2,axis=1) يمكن كذلك تقسيمها لعدد من المصفوفات غير متساوية الحجم اذا اردنا عن طريق استخدام ال indices: np.split(X, [2,3,3]) هذا سوف يقسمهم الي 3 مصفوفات، اولهما تحتوي على عنصرين والثانيه والثالثة تحتوي كل منهما على ثلاث عناصر كالتالي: [array([1, 2]), array([3, 4, 5]), array([6, 7, 8])] هذا يوفر امكانية التقسيم حتى لقطع غير متساوية وبشكل عام يمكن استخدام np.split كالتالي: numpy.split(arary, indices, axis=0) >>>array: ادخال المصفوفة المارد تقسيمها >>>indices: عدد المصفوفات المراد القسيم اليها، يمكن ايضا ادخال عدد من الارقام (كما في المثال السابق) لتقسيمها لقطع غير متساوية >>>axis: المحور الذي يراد التقيم عليه، افتراضيا 0 وهو يمثل الصفوف او 1 وهو يمثل الاعمدة1 نقطة
-
ضمن activity_main إن قمت بتغيير الزر من Button> إلى <androidx.appcompat.widget.AppCompatButton سيعمل ويأخذ لون الخلفية المتدرج.1 نقطة
-
يجب أن تكون قادرًا على تقسيم المصفوفة إلى "كتل" باستخدام reshape و swapaxes: def blockshaped(arr, nrows, ncols): h, w = arr.shape assert h % nrows == 0, "{} rows is not evenly divisble by {}".format(h, nrows) assert w % ncols == 0, "{} cols is not evenly divisble by {}".format(w, ncols) # إرجاع المصفوفة المقسمة return (arr.reshape(h//nrows, nrows, -1, ncols) .swapaxes(1,2) .reshape(-1, nrows, ncols)) حيث يقوم بتحويل c c = np.arange(24).reshape((4,6)) print(c) # [[ 0 1 2 3 4 5] # [ 6 7 8 9 10 11] # [12 13 14 15 16 17] # [18 19 20 21 22 23]] إلى print(blockshaped(c, 2, 3)) # [[[ 0 1 2] # [ 6 7 8]] # [[ 3 4 5] # [ 9 10 11]] # [[12 13 14] # [18 19 20]] # [[15 16 17] # [21 22 23]]]1 نقطة
-
في نمباي يمكنك القيام بذلك من خلال التابع split كالتالي: import numpy as np a = np.array([[1,2,3,4], [5,6,7,8]]) a1 = np.split(a,2,axis=1) التابع split يقوم بقسّم مصفوفة إلى مصفوفات فرعية متعددة. وله الشكل التالي: numpy.split(ary, indices_or_sections, axis=0) # ary: المصفوفة المراد تقسيمها إلى مصفوفات فرعية # indices_or_sections: التقسيمات. ويقبل عدد صحيح أو مصفوفة ببعد واحد # axis: تمثل المحورالذي نريد التقسيم على أساسه وافتراضياً يساوي 0 بالنسبة للوسيط الثاني الخاص بالتقسيمات، فإذا كانت التقسيمات عدداً صحيحاً N ، فسيتم تقسيم المصفوفة إلى مصفوفات N متساوية على طول المحور.1 نقطة
-
يُعَد الفوتوشوب برنامجًا مُسليًا وكثيرَ الخيارات، حيث تستطيع من خلاله تصميم لوحات فنية عديدة، بتأثيرات جذابة وبدقة عالية، لذلك سنطلق العِنان لمخيلتنا ونبدأ بتجربة فنية بديعة. سنتعلّم في هذا المقال كيفية إدخال بحر إلى زجاجة باستخدام التقنيات العديدة لأنماط الدمج Blending mode والمرشحات Filters، وكذا مختلف تقنيات الفوتوشوب العملية، بحيث نحصل على تلاعب جميل بالصور يكون مشروحًا بسرعة وسهولة. وسنتعلّم أيضًا العديد من المعلومات المميزة والتقنيات المبهرة. وإن أردت الرقي بمهاراتك التصميمية إلى مستوىً أفضل، فهذا المقال موجه لك وسيكون مفيدًا لك في ذلك. سيحتاج هذا التصميم صورًا كثيرة، لذا جهّز مجموعةً من الصور مثل الموجودة بالأسفل، والتي يمكنك الحصول على صور مشابهة لها في مواقع تخزين الصور Stock photos websites. أدرج صورةً لزجاجة في ساحة العمل، وأزل أي شعار موجود عليها. سمِّ هذه الطبقة "زجاجة"، واضغط عليها مرتين من أجل فتح إعدادات الطبقة Layer Style، ثم اسحب منزلق المزج Blending حتى تقلل من الشفافية. غيّر لون الزجاجة من Image > Adjustments > Photo Filter. ولتعديلٍ أفضل لدرجة اللون اختر Image > Adjustments > Selective Color. أدرج صورةً لغطاء من الفلين وضَعه في فوهة الزجاجة. أضف قناعًا Mask لطبقة غطاء الفلين ليبدو وكأن جزءًا منها داخل الزجاجة، بعد ذلك ارسم على القناع بفرشاة ذات تعتيم 50% حتى تخفي جزءً من الغطاء ضمن الزجاجة. خفّف الإضاءة بسحب خط منحنيات الإضاءة للأسفل من Image > Adjustments > Curves. واجعل أجزاء الزجاجة الملامسة للماء داكنةً، وذلك عن طريق سحب الخط كما في الصورة الموالية. الماء وسطح المحيط حدّد لأي مستوى في الزجاجة ترغب ملئ الماء به. لوّن الماء بفرشاة زرقاء وفق الشكل الذي رسمته، ثم غيّر نمط الدمج Blend mode إلى Multiply. لمنح الماء تأثير الشفافية عبر اختراق الضوء له، أنشئ تدرجًا في الألوان من الفاتح إلى الداكن. بعد ذلك انسخ جزءًا من صورة بحر إلى ساحة العمل، وامسح الأجزاء الإضافية فيها ليبقى فقط سطح البحر الملائم لعملنا. امنح السطح تأثير التقوّس بالضغط على الطبقة مرتين لفتح إعداداتها، ثم إضافة تأثير ظلّين الأول خارجي Drop Shadow والثاني داخلي Inner Shadow، واضبطهما كما في الصورة الموالية. غيّر صبغة لون سطح الماء Hue من Adjustments > Hue/Saturation، ثم غيرّ تألقه من Adjustments > Curves إلى ما يلائم عملنا. يمكننا إضافة تأثير ارتطام أمواج البحر بسطح الزجاجة باستخدام أجزاء من صورة بحر هائج، وأدرجها مع إخفاء الأجزاء غير اللازمة. الصياد والمركب أدرج صورةً لصياد ثم غيّر أبعادها ومكانها. أخفِ أجزاء الصورة غير المطلوبة، وعدّل ألوانها لتلائم باقي العناصر من Adjustments > Curves. خفّف التعتيم إلى نحو 75% مما يعطي تأثيرًا بوجودها تحت الزجاج. أكمل الجزء السفلي من المركب بالاستعانة بصورة لمركبٍ آخر، وأخف الأجزاء غير الملائمة، مع وضعها بطريقة يبدو من خلالها الجزآن مركبًا واحدًا، ثم غيّر التعتيم إلى 30%. يبدو المجداف طويلًا وبالتالي غير مكتمل، لذا علينا رسمه يدويًا، وعند الانتهاء استخدم أداة الحرق Burn Tool لإضافة ظلال تمنح المجداف عمقًا. طيور النورس وتفاصيل البحر أدرج صورةً لطيور نورس في ساحة العمل. ولدمج الصورة سريعًا، عدّل نمط الدمج. امسح الأجزاء الإضافية غير اللازمة بتلوينها بالأسود ضمن قناع Mask على الطبقة. أدرج صورة دلافين وألغِ إشباعها اللوني. غيّر نمط الدمج إلى Overlay. امسح الأجزاء الزائدة. أدرج صورةً لقناديل بحر بنفس الطريقة التي أُضيفت بها الدلافين. أدرج صورةً لشعب مرجانية، وحرّكها إلى قاع الزجاجة. امسح أجزاءً منها كما هو موضّح، ثمّ امنح الطبقة ظلًّا خارجيًا بالنقر عليها مرتين Layer Styel > Drop Shadow، ثم اضبط الإعدادات كما في الصورة الموالية. سنملأ المنطقة الفارغة أسفل المرجان ببعض الرمال، ثم نحددها بأداة التحديد Select Tool ونلوّنها بالأبيض، بعد ذلك غيّر لون المقدمة Foreground color ولون الخلفية Background color إلى درجتين من اللون البني، ثم من شريط الأدوات بالأعلى اختر Filter > Add Noise، أضف تمويهًا Blur أو زد وضوح الصورة Sharpen بحسب ما تفضل. يمكنك إضافة أصداف ونجم البحر فوق الرمال لإبراز المزيد من التفاصيل. الفقاعات ارسم دائرةً واضحة الحواف بفرشاة قاسية Hard brush، ثم أزل المركز بفرشاة ناعمة Soft brush كما في الصورة، وبعد الانتهاء أدرجها مثل فرشاة جديدة من خلال تحديد مساحة تحوي الشكل المطلوب، ثم اختر Edit > Define Brush Preset. اضبط إعدادات الفرشاة كما في الصورة، ثم ابدأ برسم الفقاعات، وأضف بعضها حول كل من الشعاب المرجانية والمجداف وذيل الدلفين. أشعة الضوء والهالة المحيطة ما سنفعله باختصار هو إدراج السُحُب عبر Filter > Render > Clouds وFilter > Render > Difference Clouds، وتطبيق تأثير التمويه Blur filter عليها، ثم إزالة الأجزاء الإضافية، وتغيير نمط الدمج إلى Overlay وتخفيف التعتيم Opacity. والخطوات ذاتها بالنسبة لأشعة الضوء. عناصر إضافية إدراج خلفية باهتة لسماء وغيوم. أخفِ الأجزاء الواقعة خارج الزجاجة، وخفّف التعتيم إلى 20%. ولكسر الزجاجة، أدرج صورةً كالآتية. ضعها في موقع مناسب بتحريكها Edit > Free Transform، وامنحها تأثير الالتفاف من Edit > Puppet Wrap، حتى تصل إلى شكل كالتالي: امسح الأجزاء الزائدة عن حواف الزجاجة. وغير نمط الدمج إلى Soft Light. ضاعف الطبقة وحرّك الطبقة الجديدة بضع بكسلات للأسفل، مما يعطي انطباعًا بسماكة الزجاجة. وبالعودة إلى طبقة الزجاجة، امسح جزءًا منها يوافق الكسر. أدخل أشعة شمس من فتحة الكسر وذلك بتحديد مسار الأشعة، ثم اختر Image > Adjustments > Curves واضبط الإعدادات كما في الصورة. عند الانتهاء يمكننا إضافة ظل للزجاجة، لهذا ارسم شكلًا بيضويًّا وتأكد من تحديده، واختر Select > Modify > Feather، ثم أدرج طبقةً جديدةً ولوّن التحديد السابق باللون الأسود، مع التعديل على الموقع والتعتيم حتّى تصل إلى التأثير المرغوب. زِد الظلال وانعكاسات الضوء على سطح الزجاجة، وبهذه الخطوة ينتهي عملنا. بخصوص الصورة النهائية فقد أضفنا يدًا إلى المشهد ككل لمنح المشاهد استيعابًا للأحجام، بحيث يُدرك أنها زجاجة سحرية صغيرة. ولإنهاء العمل غيّرنا أبعاد الصورة وزدنا الوضوح مع تطبيق تصحيحات بسيطة للألوان، وأضفنا خلفيةً بديلةً ممكنةً. نتمنى أن الدرس قد مفيدًا وممتعًا. ترجمة -وبتصرّف- للمقال Create A Tiny World In A Bottle Photoshop Tutorial. اقرأ أيضًا تصميم ملصق فضاء ذو أسلوب قديم مع أضواء ملونة بالفوتوشوب تصميم ملصق لشعار فيلم Deadpool ببرنامج الفوتوشوب1 نقطة
-
1 نقطة
-
هناك عدة طرق للقيام بذلك، وتختلف باختلاف زمن التنفيذ كما في الرسم البياني الذي قدمته Reem. إليك أفضل الطرق للقيام بذلك: import numpy as np a = np.array([ [1, 2,], [3, 4] ]) n=1 b = np.random.random((n,a.shape[1])) # طريقة1 np.ascontiguousarray(np.vstack([a.T, b]).T) # طريقة 2 np.c_[a, b.T] # طريقة 4 # تكديس المصفوفات في تسلسل عمودي (حسب الصف). np.vstack([a.T, b]).T # 5 طريقة # سلسلة من المصفوفات على طول محور موجود np.concatenate([a.T, b]).T # 6 طريقة # 1D إضافة مصفوفة # يتم إضافتها كعمود np.column_stack([a, b.T]) # 7 تكديس المصفوفات في تسلسل أفقي أي حسب الصف np.hstack([a, b.T]) #append و insert يمكن أيضاً استخدام التابع # لكنهما أقل سرعة # الخرج """ array([[1. , 2. , 0.11709763], [3. , 4. , 0.65841792]]) """ مثال عن concatenate لتوضيح عمله: # numpy.concatenate((a1, a2, ...), axis=0, dtype=None) a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) np.concatenate((a, b), axis=0) """array([[1, 2], [3, 4], [5, 6]]) """ np.concatenate((a, b.T), axis=1) """array([[1, 2, 5], [3, 4, 6]])""" np.concatenate((a, b), axis=None) """array( [1, 2, 3, 4, 5, 6] )""" استخدام hstack و vstack يبدو الحل الأسرع (التخزين بشكل contiguous أي تخزين المصفوفات بشكل متجاور بشكل عام بعتبر أسرع من ناحية إجراء العمليات عليه لكن هذه الطرق-أقصد stack بأنواعها- لاتخزن المصفوفات بشكل متجاور، لذا نستخدم التابع ascontiguousarray لتحويلها لكن هذا سيكلفنا المزيد من الوقت وهذا مايتضح لنا في الرسم البياني الذي قدمته Reem، لذا لا أفضله). أفضل استخدام concat أو column_stack فهو مريح أكثر ومناسب وسرعته مناسبة كما ترى في الرسم البياني الذي أرفقته Reem1 نقطة
-
الكود بسيط عليك فقط المحاولة، لذا جرب بنفسك وأرسل (((الكود))) لنا و سنساعدك في إصلاحه وتوجيهك للحل الصحيح.1 نقطة