Telerik Forums
UI for Xamarin Forum
0 answers
81 views

The RadSideDrawer Drawer content is not fully visible for Android Low resolution devices. With the below same code for iOS there is not problem for any resolutions. And correct layout & incorrect layout snapshot also attached for the issue. Please help on this.

<Grid AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" Margin="0,0,0,0" Grid.Row="1">
                        <telerikPrimitives:RadSideDrawer x:Name="drawer" HeightRequest="{Binding DisplayHeight}"
                                                        DrawerLocation="Bottom"
                                                        DrawerTransitionType="SlideInOnTop"
                                                        AreGesturesEnabled="True"
                                                        BackgroundColor="Transparent"
                                                        DrawerClosing="drawerClose" >
                            <!--telerikPrimitives:RadSideDrawer.HeightRequest>
                                        <OnPlatform x:TypeArguments="Thickness"
                                            iOS="16,6"
                                            Android="16,0,16,30">
                                        </OnPlatform>
                                    </-->
                            <telerikPrimitives:RadSideDrawer.MainContent AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
                                <Grid BackgroundColor="Transparent">
                                    <Grid.Margin>
                                        <OnPlatform x:TypeArguments="Thickness"
                                            iOS="16,0,16,73"
                                            Android="16,0,16,75">
                                        </OnPlatform>
                                    </Grid.Margin>
                                    <telerikDataControls:RadListView x:Name="listView" ItemTapped="ListView_ItemTapped"
                                        ItemsSource="{Binding UserDevices, Mode=TwoWay}" NativeControlLoaded="RadListView_NativeControlLoaded"
                                        NativeControlUnloaded="RadListView_NativeControlUnloaded" BackgroundColor="Transparent"
                                        ItemTemplate="{StaticResource ListViewItemTemplate}"
                                        IsLoadOnDemandEnabled="True" LoadOnDemandMode="Automatic"
                                        GroupHeaderTemplate="{StaticResource ListViewGroupHeaderTemplate}"
                                        GroupHeaderStyle="{StaticResource ListViewGroupHeaderStyle}">

                                        <telerikDataControls:RadListView.GroupDescriptors>
                                            <telerikListView:PropertyGroupDescriptor PropertyName="CategoryText" SortOrder="Ascending"/>
                                        </telerikDataControls:RadListView.GroupDescriptors>

                                        <telerikDataControls:RadListView.LayoutDefinition>
                                            <telerikListView:ListViewGridLayout HorizontalItemSpacing="7" SpanCount="2" VerticalItemSpacing="7" ItemLength="104"/>
                                        </telerikDataControls:RadListView.LayoutDefinition>

                                        <telerikDataControls:RadListView.SelectedItemStyle>
                                            <telerikListView:ListViewItemStyle BackgroundColor="#FFE8E8E8" 
                                                                               BorderColor="#FFFFFFFF" />
                                        </telerikDataControls:RadListView.SelectedItemStyle>
                                    </telerikDataControls:RadListView>

                                    <telerikPrimitives:RadBusyIndicator x:Name="BusyIndicator"
                                                AnimationContentHeightRequest="100"
                                                AnimationContentWidthRequest="100"
                                                AnimationType="Animation9"
                                                InputTransparent="{Binding IsNotBusy}"
                                                AnimationContentColor="DarkSlateGray"
                                                IsBusy="{Binding IsBusy}" >

                                                <controls:RadBusyIndicator.Animations>
                                                <common:RadDoubleAnimation  Easing="Linear"
                                                                            PropertyPath="Rotation"
                                                                            RepeatForever="True"
                                                                            Target="{Reference Name=image}"
                                                                            From="0"
                                                                            To="360" />
                                                </controls:RadBusyIndicator.Animations>
                                                <controls:RadBusyIndicator.BusyContent>
                                                    <Image x:Name="image"
                                                            HeightRequest="200"
                                                            HorizontalOptions="Center"
                                                            VerticalOptions="Center"
                                                            WidthRequest="200">
                                                    </Image>
                                                </controls:RadBusyIndicator.BusyContent>
                                    </telerikPrimitives:RadBusyIndicator>
                                </Grid>
                            </telerikPrimitives:RadSideDrawer.MainContent>
                            <telerikPrimitives:RadSideDrawer.DrawerContent AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="60"/>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
                                    <Grid.Margin>
                                        <OnPlatform x:TypeArguments="Thickness"
                                            Android="0,0,0,28">
                                            <!--iOS="0,0,0,40"-->
                                        </OnPlatform>
                                    </Grid.Margin>
                                    <StackLayout Orientation="Horizontal" BackgroundColor="#EDECE8" HorizontalOptions="FillAndExpand" Grid.Row="0"
                                                    VerticalOptions="CenterAndExpand" Opacity="0.9" Focused="drawerClose" IsTabStop="False">
                                        <StackLayout HorizontalOptions="StartAndExpand" Orientation="Horizontal" >
                                            <ImageButton x:Name="deviceIcon" Source="Blind_1.png" VerticalOptions="Center" HorizontalOptions="Center" Margin="10,10,0,10" HeightRequest="40" WidthRequest="40" Clicked="EditDevice_Clicked" BackgroundColor="Transparent"/>
                                            <StackLayout Orientation="Vertical" VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand">
                                                <Label x:Name="deviceName" Text="" FontAttributes="Bold" FontSize="17" TextColor="Black" Margin="0,2,0,0" LineBreakMode="NoWrap"/>
                                                <Label x:Name="deviceStatus" Text="50%" FontAttributes="None" FontSize="14" TextColor="#676767" Margin="0,-7"/>
                                                <Label x:Name="deviceRoomName" Text="" FontAttributes="None" FontSize="12" TextColor="#676767" Margin="0,0,0,0" />
                                            </StackLayout>
                                        </StackLayout>
                                        <StackLayout HorizontalOptions="EndAndExpand" TranslationX="40" x:Name="editImageButton">
                                            <Grid>

                                                <AbsoluteLayout Grid.Column="0">
                                                    <ImageButton Source="edit.png" BackgroundColor="Transparent" HorizontalOptions="EndAndExpand" VerticalOptions="CenterAndExpand" Margin="27,18,0,0"
                                                    Grid.Column="0" Grid.Row="0" Clicked="EditDevice_Clicked" WidthRequest="24" HeightRequest="24" />
                                                </AbsoluteLayout>
                                                <AbsoluteLayout Grid.Column="0">
                                                    <ImageButton CommandParameter="{Binding .}" Clicked="EditDevice_Clicked" BackgroundColor="Transparent" WidthRequest="50" HeightRequest="60" 
                                                    Grid.Column="0" Grid.Row="0" AbsoluteLayout.LayoutBounds="1,0,50,60"  AbsoluteLayout.LayoutFlags="PositionProportional" HorizontalOptions="EndAndExpand"
                                                                VerticalOptions="CenterAndExpand" Margin="0,0,0,0" />
                                                </AbsoluteLayout>
                                            </Grid>
                                        </StackLayout>
                                        <StackLayout HorizontalOptions="EndAndExpand">
                                            <Grid>
                                                <AbsoluteLayout Grid.Column="0">
                                                    <ImageButton Source="cancel.png" BackgroundColor="Transparent" HorizontalOptions="EndAndExpand" VerticalOptions="CenterAndExpand" Margin="7,18,0,0"
                                                    Grid.Column="0" Grid.Row="0" Clicked="drawerClose" WidthRequest="24" HeightRequest="24" />
                                                </AbsoluteLayout>
                                                <AbsoluteLayout Grid.Column="0">
                                                    <ImageButton CommandParameter="{Binding .}" Clicked="drawerClose" BackgroundColor="Transparent" WidthRequest="50" HeightRequest="60" 
                                                    Grid.Column="0" Grid.Row="0" AbsoluteLayout.LayoutBounds="1,0,50,60"  AbsoluteLayout.LayoutFlags="PositionProportional" HorizontalOptions="EndAndExpand"
                                                                VerticalOptions="CenterAndExpand" Margin="0,0,0,0" />
                                                </AbsoluteLayout>
                                            </Grid>
                                        </StackLayout>
                                    </StackLayout>

                                    <StackLayout x:Name="bottomSlidePanel" Margin="0,-6,0,-9" Opacity="1" BackgroundColor="White" Grid.Row="1"/>

                                    <StackLayout x:Name="slideBottomSection" Orientation="Vertical" BackgroundColor="Transparent" Grid.Row="2" Margin="0,2,0,0" VerticalOptions="EndAndExpand">
                                        <Label x:Name="lblGray" BackgroundColor="#E5E4DF" HorizontalOptions="FillAndExpand" HeightRequest="32" Opacity="0.9" />
                                        <StackLayout  x:Name="stacFavSet" Orientation="Horizontal" VerticalOptions="Center" Opacity="1" BackgroundColor="White" Margin="0,-6" HeightRequest="44">
                                            <Label Text="{translate:Translate Favorite}" TextColor="Black" FontSize="17" FontAttributes="None" VerticalOptions="CenterAndExpand" Margin="25,-6,0,-6"/>
                                            <Switch x:Name="favSet" Style="{StaticResource SwitchStyle}" Toggled="Fav_ButtonClicked"/>
                                        </StackLayout>

                                        <StackLayout Orientation="Vertical" VerticalOptions="Center" Opacity="1" BackgroundColor="White" HeightRequest="44">
                                            <Button Text="{translate:Translate Edit}" Clicked="EditDevice_Clicked" Focused="EditDevice_Clicked" Style="{StaticResource GoldButton}"/>
                                        </StackLayout>
                                    </StackLayout>
                                </Grid>
                            </telerikPrimitives:RadSideDrawer.DrawerContent>
                        </telerikPrimitives:RadSideDrawer>
                                            </Grid>

Thanks                                                         
Sujit
Top achievements
Rank 1
 asked on 29 Jun 2023
3 answers
246 views

Hello,

I can't check it by myself, so I ask it here :)

Yesterday I updated Visual Studio (PC) to 16.7.4, including Xamarin.IOS 14.0.0.0, and my app doesn't work anymore. Views including SideDrawer fail to load, with this exception : Object reference not set to an instance of an object (Run on physical iPhone 8 / iOS 13)

The same project, with the same but version of telerik libs, compiled last Friday with VS 16.7.2 (Xamarin.iOS 13.20.2.2) works fine. Android runs are OK too.

Does anyone else have this bug or it's on my side only ? I prefer not tu upgrade to iOS 14 on the iPhone, if possible...

 

Thank you :)

Bra
Top achievements
Rank 1
Veteran
 answered on 05 Oct 2020
5 answers
103 views

We are unable to reproduce this crash, but our App.Center Analytics is reporting this error from some, but not all, of our customers

Version 2019.2.708

Crash::

 

System.NullReferenceException: Object reference not set to an instance of an object

 

IOrderedTraversalController.UpdateTraversalOrder ()
VisualElementRenderer`1[TElement].UpdateParentPageTraversalOrder ()
VisualElementRenderer`1[TElement].OnElementPropertyChanged (System.Object sender, System.ComponentModel.PropertyChangedEventArgs e)
(wrapper delegate-invoke) <Module>.invoke_void_object_PropertyChangedEventArgs(object,System.ComponentModel.PropertyChangedEventArgs)
BindableObject.OnPropertyChanged (System.String propertyName)
Element.OnPropertyChanged (System.String propertyName)
Element.set_Parent (Xamarin.Forms.Element value)
RadViewContainer.DetachInnerView ()
RadViewContainer.set_View (Xamarin.Forms.View value)
SideDrawerRenderer.RetireViewContainer (Telerik.XamarinForms.Common.Android.RadViewContainer viewContainer)
SideDrawerRenderer.RetireMainContent ()
SideDrawerRenderer.RetireViewContainers ()
SideDrawerRenderer.OnElementDetached (Telerik.XamarinForms.Primitives.RadSideDrawer oldElement)
AndroidRendererBase`2[S,T].Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
Platform+DefaultRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
PageRenderer.Dispose (System.Boolean disposing)
Object.Dispose ()
FragmentContainer.OnDestroyView ()
Fragment.n_OnDestroyView (System.IntPtr jnienv, System.IntPtr native__this)
(wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.74(intptr,intptr)

 

Didi
Telerik team
 answered on 22 Jan 2020
2 answers
105 views

Hi, i am tasked to do a cross platform mobile app for iOS and Android.

 

i need to create a SideDrawer which contain search filters. the button to activate this side drawer based on the design is supposed to be sticky on bottom left of the app.

wondering is it possible to be done on both platform and any sample for guide on how to do it?

Didi
Telerik team
 answered on 13 Aug 2019
1 answer
63 views

I have been trying to get this example to work in my project using the content view and the content page both are getting me the same errro about the RadSideDrawer cannot be added to a collection of type IGridList. In My project I have a MainPage.xaml with a MasterDetailPage tag selected to the MenuPage.axml. Can you please let me know why I am getting this error.

https://www.telerik.com/blogs/getting-started-with-radsidedrawer-for-xamarin-forms

Lance | Manager Technical Support
Telerik team
 answered on 27 Feb 2019
7 answers
352 views

I need to add a side drawer to an app that has a Xamarin Forms TabbedPage as it's main page - I am aiming for the same navigation as e.g. the Twitter app on Android.

However the MainContent property of the RadSideDrawer is of type View instead of Page so I cannot set it to a TabbedPage instance.

-> Is it possible to use a TabbedPage with RadSideDrawer? If yes, how?

If this is not possible, would the standard Xamarin Forms MasterDetailPage, offer an alternative?
It has Master and Detail properties of type Page and it is used to create a side drawer in e.g. the Hanselman.Forms app (although not on a TabbedPage).

Nethra
Top achievements
Rank 1
 answered on 03 Jan 2019
11 answers
344 views

This is for UWP.

I have a SideDrawer and inside main content of side drawer I have a list view which I am binding from code behind. Now when I launch application, it renders fine, each row of list if occupying full width. Now when I maximize application, each row is now not resizing to full width. Again when I restore window size back to original, sometime it restores back to original state and sometime last column is not visible.

If I remove RadSideDrawer from xaml, its able to resize the elements well on maximize and restore.

I have created a sample application for this behavior and below is the xaml and codebehind file.

https://github.com/pbijvani/test/blob/master/MainPage.xaml

https://github.com/pbijvani/test/blob/master/MainPage.xaml.cs

 

attaching screenshot to show behavior.

https://github.com/pbijvani/test/blob/master/first_launch.PNG

https://github.com/pbijvani/test/blob/master/maximize.PNG

https://github.com/pbijvani/test/blob/master/restore_back.PNG

 

Appreciate any help on this.

Daniel
Top achievements
Rank 1
 answered on 20 Dec 2018
2 answers
44 views

Hi,

I am getting an error with the SideDrawer after updating to the latest version of Xamarin Forms, the issue seems to occur when the back button is clicked and the SideDrawer is visible, we also have a TabbedPage in our app and if you click the same tab as is visible when the SideDrawer is visible it causes the same crash.

We use Azure mobile app centre, so all the information for the crash is below:

Xamarin.Forms Version - 3.3.0.912540

Telerik.UI Version - 2018.3.1018.1, we had the same issue with previous build too 2018.2.620.2 but tried upgrading.

 

Error is:

VisualElementRenderer`1[TElement].UpdateTabStop ()
System.NullReferenceException: Object reference not set to an instance of an object

Threads:

VisualElementRenderer`1[TElement].UpdateTabStop ()
IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element)
RadPlatform.RetireRenderer (Xamarin.Forms.VisualElement visualElement)
RadViewContainer.ClearContainer ()
RadViewContainer.Dispose (System.Boolean disposing)
NSObject.Dispose ()
SideDrawerRenderer.OnElementDetached (Telerik.XamarinForms.Primitives.RadSideDrawer oldElement)
IosRendererBase`2[S,T].OnElementChanged (Xamarin.Forms.Platform.iOS.ElementChangedEventArgs`1[TElement] e)
VisualElementRenderer`1[TElement].SetElement (TElement element)
VisualElementRenderer`1[TElement].Dispose (System.Boolean disposing)
ViewRenderer`2[TView,TNativeView].Dispose (System.Boolean disposing)
NSObject.Dispose ()
DisposeHelpers.DisposeModalAndChildRenderers (Xamarin.Forms.Element view)
Platform.HandleChildRemoved (System.Object sender, Xamarin.Forms.ElementEventArgs e)
Element.OnDescendantRemoved (Xamarin.Forms.Element child)
Element.OnDescendantRemoved (Xamarin.Forms.Element child)
Element.OnChildRemoved (Xamarin.Forms.Element child)
VisualElement.OnChildRemoved (Xamarin.Forms.Element child)
Page.OnInternalRemoved (Xamarin.Forms.VisualElement view)
Page.InternalChildrenOnCollectionChanged (System.Object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
ObservableCollection`1[T].OnCollectionChanged (System.Collections.Specialized.NotifyCollectionChangedAction action, System.Object item, System.Int32 index)
ObservableCollection`1[T].RemoveItem (System.Int32 index)
Collection`1[T].Remove (T item)
NavigationPage+<Xamarin-Forms-INavigationPageController-RemoveAsyncInner>d__69.MoveNext ()
TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task)
TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task)
TaskAwaiter`1[TResult].GetResult ()
NavigationRenderer+<UpdateFormsInnerNavigation>d__75.MoveNext ()
TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task)
TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task)
TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task)
TaskAwaiter.GetResult ()
NavigationRenderer+ParentingViewController+<DidMoveToParentViewController>d__41.MoveNext ()
AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state)
NSAsyncSynchronizationContextDispatcher.Apply ()
(wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate)
UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName)
Application.Main (System.String[] args)

n/a
Top achievements
Rank 1
 answered on 24 Oct 2018
1 answer
106 views

Hi,

In Xamarin Forms, the SideDrawer is appearing in Android but not appearing in iOS Simulator for which i looked into this earlier thread [Thread Link] but even after doing so mentioned in that thread as a fix, the SideDrawer still doesn't appear in the iOS Simulator please help me with this issue.

XAML Snippet :

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:telerikDataControls="clr-namespace:Telerik.XamarinForms.DataControls;assembly=Telerik.XamarinForms.DataControls"
             xmlns:telerikListView="clr-namespace:Telerik.XamarinForms.DataControls.ListView;assembly=Telerik.XamarinForms.DataControls"
             xmlns:telerikPrimitives="clr-namespace:Telerik.XamarinForms.Primitives;assembly=Telerik.XamarinForms.Primitives"
             x:Class="APP.LPage">
    
    <StackLayout BackgroundColor="White" Spacing="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

        <telerikPrimitives:RadSideDrawer x:Name="drawer" DrawerLength="250" >
            <telerikPrimitives:RadSideDrawer.MainContent>

                <StackLayout x:Name="LPageStack1" >
                    <telerikDataControls:RadListView x:Name="ViewBinding" ItemsSource="      {Binding Source}" SelectionMode="Single" SelectionGesture="Tap" HeightRequest="250">
                        <telerikDataControls:RadListView.ItemTemplate>
                            <DataTemplate>
                                <telerikListView:ListViewTemplateCell>
                                    <telerikListView:ListViewTemplateCell.View>

                                        <StackLayout Orientation="Horizontal" VerticalOptions="FillAndExpand">
                                            <Label x:Name="ListCust" Text="{Binding Customer}" FontSize="Large" HorizontalOptions="StartAndExpand" HorizontalTextAlignment="Center"/>
                                            <Label x:Name="ListWO" Text="{Binding WorkOrder}" FontSize="Large" HorizontalOptions="EndAndExpand" HorizontalTextAlignment="Center"/>
                                        </StackLayout>

                                    </telerikListView:ListViewTemplateCell.View>
                                </telerikListView:ListViewTemplateCell>
                            </DataTemplate>
                        </telerikDataControls:RadListView.ItemTemplate>
                    </telerikDataControls:RadListView>
                </StackLayout>

            </telerikPrimitives:RadSideDrawer.MainContent>
            <telerikPrimitives:RadSideDrawer.DrawerContent>

                <StackLayout VerticalOptions="CenterAndExpand">
                    <Button Text="Button 1"  />
                    <Button Text="Button 2"  />
                    <Button Text="Button 3"  />
                    <Button Text="Button 4"  />

                </StackLayout>

            </telerikPrimitives:RadSideDrawer.DrawerContent>
        </telerikPrimitives:RadSideDrawer>
    </StackLayout>
</ContentPage>

 

Lance | Manager Technical Support
Telerik team
 answered on 02 Jul 2018
1 answer
54 views

Relevant System Information:

- Using .NETStandard 2.0 Library

- Compile using Android 7.1

- Miminum android version 4.0.3

- Target Android version 5.1

- Xamarin Forms 2.4.18342

- Telerik UI for Xamarin R1 2018

I am trying to set the MainContent of the SideDrawer in a similar fashion to the "tagit" application from Telerik. I am using a Listview in the sidedrawer to drive the view switching. Whenever I set the main content I get the following exception:

Type: Java.Lang.IllegalStateException

Message: The specified child already has a parent. You must call removeView() on the child's parent first.

UWP doesn't seem to have the same issue, just android. The weirdest part is that the main content seems to load just fine after the exception is handled. Does anybody else receive this error when setting the main content? 

 

Nikolay Demirev
Telerik team
 answered on 08 May 2018
Top users last month
horváth
Top achievements
Rank 2
Iron
Iron
Steve
Top achievements
Rank 2
Iron
Erkki
Top achievements
Rank 1
Iron
Mark
Top achievements
Rank 2
Iron
Iron
Veteran
Jakub
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?