Telerik Forums
UI for Silverlight Forum
3 answers
49 views

Hello,

We use RadDock & RadBusyIndicator extensively throughout our product and have run into an issue where the RadBusyIndicator is disappearing or isn't respecting IsBusy when true. If the PersistenceManager is used to set the layout of the RadDock which contains a RadBusyIndicator, after which the indicator can no longer be set to IsBusy through bindings. It can however be set directly on the property. It's as if the binding is unhooked or as if the data context is lost, even though debugging show they seem to be still wired up.

How can we address this issue?

Thank you,
Patrick

PS I opened a support ticket as well.

Plamen
Top achievements
Rank 1
 answered on 09 Mar 2017
6 answers
84 views
Hi Telerik,
  Is there any specific way to move BusyContent to down or up as Vertical scrollba r  changed..
 By default BusyContent is shown center of Content but what if content more that visible portion of monitor.
This is very common scenarion that tester tested. & it's a obioues.
 
I am sure that telerik has answer to this issue.

Please help me out..  It will be greatfull to all  of us..

Thanks in advance ...

Thanks,
Ganesh Jagdale. 
Vahan
Top achievements
Rank 1
 answered on 25 Mar 2015
17 answers
214 views
My QA testers were able to trigger an error I can't account for that ended up with an 'Animation target not specified' InvalidOperationException thrown from deep within the RadBusyIndicator's animation:

 Message=Exception has been thrown by the target of an invocation.
  StackTrace:
       at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
       at System.Delegate.DynamicInvokeImpl(Object[] args)
       at System.Delegate.DynamicInvoke(Object[] args)
       at CaseInfoViewxaml_2.BindingOperation(Object BindingState, Int32 , Action )
  InnerException: System.InvalidOperationException
       Message=Animation target not specified.
       StackTrace:
            at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData)
            at MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name)
            at MS.Internal.XcpImports.Storyboard_Begin(Storyboard storyboard)
            at Telerik.Windows.Controls.Animation.AnimationManager.Play(FrameworkElement target, String animationName, Action completeCallback, Boolean animateSelf, Object[] args)
            at Telerik.Windows.Controls.RadBusyIndicator.SetPropertiesAccordingIsBusy()
            at Telerik.Windows.Controls.RadBusyIndicator.OnIsBusyChanged(DependencyPropertyChangedEventArgs e)
            at Telerik.Windows.Controls.RadBusyIndicator.OnIsBusyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            at Telerik.Windows.PropertyMetadata.PropertyChangeHook.OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
            at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
            at System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
            at System.Windows.Data.BindingExpression.SendDataToTarget()
            at System.Windows.Data.BindingExpression.SourcePropertyChanged(PropertyPathListener sender, PropertyPathChangedEventArgs args)
            at System.Windows.PropertyPathListener.ReconnectPath()
            at System.Windows.Data.Debugging.BindingBreakPoint.<>c__DisplayClass4.<BreakOnSharedType>b__3()

We're using the Windows 8 theme.  From what I can tell the SetPropertiesAccordingIsBusy method is attempting to start the "Hide" animation.  That animation includes a storyboard that tries to fade the visibility of the nested 'Indicator' grid.  All of that is pretty statically find inside the telerik.windows.controls.xaml.

Is this a bug?  Is there something I could've done to have caused this?
Georgi
Telerik team
 answered on 26 Nov 2014
3 answers
78 views
Iam using MVVM with Silverlight RIA Services i load data from server and use BI to show the status of loading when data load completely i made BI to false otherwise true but sometimes on successfully data loading  BI stuck on screen and does not go away this issue occur not every time but sometimes and i don't know the exact solution. 
Kalin
Telerik team
 answered on 06 Oct 2014
1 answer
62 views
We have the same problem discussed in the below blog
http://blogs.telerik.com/blogs/13-06-12/animating-the-radbusyindicator-while-the-ui-thread-is-frozen.
Our busy indicatory is freezing when UI is busy.  The only difference is that we are using ellipses busy indicator, instead of the donut one.  I added the enableGpuAcceleration parameter, and added the following code to our class that inherits from RadBusyIndicator:
 public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            var dots = this.ChildrenOfType<UIElement>();
            foreach (var dot in dots)
            {
                dot.CacheMode = new BitmapCache();
            }
        }

However, I don't see any difference, the dots still freeze about as often as they used to without the changes.  I have used both Chrome and IE browser to try it.
Please advise.
Konstantina
Telerik team
 answered on 14 Aug 2014
17 answers
267 views
Hello,

I've detected an strange issue/bug that i'm quite sure it's related to BusyIndicator. My applications uses several BusyIndicators to notify user whenever a remote acces is done. After all data is loaded, with no action performed by the user I can see in task manager that iexplorer process hosting the silverlight application consumes a bit of cpu. Application is doing nothing!!! I've run a perfomance profiler that tells me that application is doing nothing and is consuming 0% of cpu, however I can see in task manager that application is consuming 1-2% of cpu (my PC is a quad core i7 processor, on older PCs, cpu consumption may arrive at 10-15%). Removing all BusyIndicators, no cpu usage is shown in task manager when nothing is done.

You can see this same behavior in your silverlight demo application. Just navigate to BusyIndicator/FirsLook example. Initially this example show an empty scheduler, in this situation, the application's cpu usage is 0%. Then, click to "Load Appointments" button, a, normal, cpu usage peak is shown in task manager when appointments are retrieved, but after an interval you will observe that application is consuming permanently cpu (1%) in my case.
Martin Ivanov
Telerik team
 answered on 19 Jun 2014
9 answers
264 views
Hi telerik,

 My requirement is to add a close button to hide the busy indicator which is means cancel the busy. Can you show me an example?


Thanks
Syed
Top achievements
Rank 1
 answered on 11 Mar 2014
2 answers
63 views
Hi,
 when I want to use the BusyIndicator like this:

RadBusyIndicator busyIndicator = new RadBusyIndicator();
busyIndicator.SetValue(ContentProperty, this.LayoutRoot);

But it doesn't work,an exception will be thrown。
So i want to ask that  how to Set the Content Dynamically??
 
Thanks
JOSE LOPEZ
Top achievements
Rank 1
 answered on 31 Jan 2014
5 answers
67 views

Hi...


We are building an application using RadTabManager.  On one specific view, the RadBusyIndicator runs well up until a certain time. 



Here's the code for the view : no rocket science here...  The BusyIndicator IsBusy property is binded to IsLoading property of my view model.  I added a small label (textblock) where the visibility is binded to the same attribute and it works just fine at any time. 



I try to understand the issue.  I guess that it's not related to the IsLoading property of my view model, as I would face the same issue with my textblock. 



Maybe someone could give me an advise on how to debug that situation?



Thanks for your help



<Grid>
      <Grid.ColumnDefinitions>
          <ColumnDefinition  />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
          <RowDefinition Height="Auto" />
          <RowDefinition Height="*" />
          <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
 
      <!-- Header with hyperlink -->
      <frameworkControls:HeaderControl Grid.Row="0"
                                       HeaderImageSource="{Binding Path=HeaderImage}"
                                       TopLeftAlignText="{Binding Path=RessourceInfo.Description}"
                                       BottomLeftAlignText="{Binding Path=SelectedTimesheetType, Converter={StaticResource EnumDescriptionConverter}}"
                                       TopRightAlignText="{Binding Path=PeriodDescription}" />
 
      <!--Timesheet header-->
      <userControls:TimesheetHeader Grid.Row="1" Margin="5,0,5,0" />
 
      <!--Timesheet detail-->
      <ContentControl Grid.Row="1" Margin="5,0,5,0"
                      regions:RegionManager.RegionName="{Binding Path=ViewId, Converter={StaticResource ChildRegionNameConverter}, ConverterParameter=TimesheetEntryListRegion}"
                      Style="{StaticResource ContentControlStyle}" />
 
      <!--BrokenRules-->
      <frameworkControls:FlattenedBrokenRulesControl Grid.Row="2" MaxHeight="150" />
 
      <!--Wait control-->
      <telerik:RadBusyIndicator Grid.Row="0" Grid.RowSpan="3"
                                IsBusy="{Binding Path=IsLoading, Mode=OneWay}"
                                BusyContent="{Binding LoadingText}" />
 
 
      <TextBlock Grid.Row="0" Text="{Binding LoadingText}" FontSize="18"  Visibility="{Binding Path=IsLoading, Converter={StaticResource visibilityConverter}}" />
 
 
  </Grid>


Vladi
Telerik team
 answered on 20 Jan 2014
2 answers
258 views
Hi,

Who can explain to me why my application is very slow when I set a DropShadow to the RadBusyIndicator ?
As soon as I remove the effect, everything is absolutely speedy !

Telerik : 2013.3.1016.1050
Silverlight 5 of course

Here's the xaml (Style followed by the declaration)

Style :

<LinearGradientBrush x:Key="BusyIndicatorBackground" EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="White" Offset="0"/>
    <GradientStop Color="#A9DCDADA" Offset="1"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="BusyIndicatorBorderBrush" Color="#FFD0D0D0"/>
<LinearGradientBrush x:Key="BusyIndicatorIndeterminateBackground" EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="#FFFFC92B" Offset="0"/>
    <GradientStop Color="#FFFFF7A9" Offset="1"/>
    <GradientStop Color="#FFFFFBCD" Offset="0.254"/>
    <GradientStop Color="#FFFFC92B" Offset="0.5"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="BusyIndicatorIndeterminateBorderBrush" Color="#FFFFC92B"/>
<RadialGradientBrush x:Key="BusyIndicatorIndeterminateCommetFill" Center="0.5,-0.23" GradientOrigin="0.8,0.25" RadiusY="0.68" RadiusX="0.68">
    <GradientStop Color="#BFFFFFFF" Offset="0"/>
    <GradientStop Color="#00FFFFFF" Offset="1"/>
    <GradientStop Color="#21FFFFFF" Offset="0.65"/>
</RadialGradientBrush>
<SolidColorBrush x:Key="BusyIndicatorProgressBackground" Color="#FFFEE05E"/>
<Style x:Key="BusyIndicatorProgressBarStyle" TargetType="telerik:RadProgressBar">
    <Setter Property="Margin" Value="15 15 15 5"/>
    <Setter Property="Maximum" Value="100"/>
    <Setter Property="Orientation" Value="Horizontal"/>
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="telerik:RadProgressBar">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Determinate"/>
                            <VisualState x:Name="Indeterminate">
                                <Storyboard RepeatBehavior="Forever">
                                    <ObjectAnimationUsingKeyFrames Duration="00:00:00" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="IndeterminateDonut">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" Storyboard.TargetName="IndeterminateDonut">
                                        <SplineDoubleKeyFrame KeyTime="00:00:01" Value="360"/>
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Path x:Name="IndeterminateBackgroundDonut" Fill="{StaticResource BusyIndicatorIndeterminateBackground}" Height="44" RenderTransformOrigin="0.5 0.5" Stroke="{StaticResource BusyIndicatorIndeterminateBorderBrush}" Width="44">
                        <Path.Data>
                            <GeometryGroup FillRule="EvenOdd">
                                <EllipseGeometry Center="22 22" RadiusY="20" RadiusX="20"/>
                                <EllipseGeometry Center="22 22" RadiusY="14" RadiusX="14"/>
                            </GeometryGroup>
                        </Path.Data>
                    </Path>
                    <Path x:Name="IndeterminateDonut" Fill="{StaticResource BusyIndicatorIndeterminateCommetFill}" Height="44" RenderTransformOrigin="0.5 0.5" Visibility="Collapsed" Width="44">
                        <Path.Data>
                            <GeometryGroup FillRule="EvenOdd">
                                <EllipseGeometry Center="22 22" RadiusY="20" RadiusX="20"/>
                                <EllipseGeometry Center="22 22" RadiusY="14" RadiusX="14"/>
                            </GeometryGroup>
                        </Path.Data>
                        <Path.RenderTransform>
                            <TransformGroup>
                                <RotateTransform/>
                            </TransformGroup>
                        </Path.RenderTransform>
                    </Path>
                    <Grid x:Name="ProgressBarTrack" Height="24" RenderTransformOrigin="0.5 0.5" Width="24">
                        <Grid.Clip>
                            <EllipseGeometry Center="12 12" RadiusY="12" RadiusX="12"/>
                        </Grid.Clip>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RenderTransform>
                            <RotateTransform Angle="-90"/>
                        </Grid.RenderTransform>
                        <Rectangle x:Name="SkipValueSpacer"/>
                        <Rectangle x:Name="ProgressBarIndicator" Grid.Column="1" Fill="{StaticResource BusyIndicatorProgressBackground}"/>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<SolidColorBrush x:Key="BusyIndicatorBusyOverlayBrush" Color="#88FFFFFF"/>
<Style x:Key="RadBusyIndicatorStyle" TargetType="telerik:RadBusyIndicator">
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="DisplayAfter" Value="00:00:00.1"/>
    <Setter Property="Background" Value="{StaticResource BusyIndicatorBackground}"/>
    <Setter Property="BorderBrush" Value="{StaticResource BusyIndicatorBorderBrush}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="ProgressBarStyle" Value="{StaticResource BusyIndicatorProgressBarStyle}"/>
    <Setter Property="telerik:AnimationManager.AnimationSelector">
        <Setter.Value>
            <telerik:AnimationSelector>
                <telerik:FadeAnimation AnimationName="Hide" Direction="Out" TargetElementName="Indicator"/>
                <telerik:FadeAnimation AnimationName="Show" Direction="In" TargetElementName="Indicator"/>
            </telerik:AnimationSelector>
        </Setter.Value>
    </Setter>
    <Setter Property="OverlayStyle">
        <Setter.Value>
            <Style TargetType="Rectangle">
                <Setter Property="Fill" Value="{StaticResource BusyIndicatorBusyOverlayBrush}"/>
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="telerik:RadBusyIndicator">
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="VisibilityStates">
                            <VisualState x:Name="Hidden">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Indicator">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Collapsed</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Overlay">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Collapsed</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Visible">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Indicator">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Overlay">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="BusyStatusStates">
                            <VisualState x:Name="Idle">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(Control.IsEnabled)" Storyboard.TargetName="Content">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <System:Boolean>True</System:Boolean>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ProgressBar">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Collapsed</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="0" Storyboard.TargetProperty="IsIndeterminate" Storyboard.TargetName="ProgressBar">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <System:Boolean>False</System:Boolean>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Busy">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.001" Storyboard.TargetProperty="(Control.IsEnabled)" Storyboard.TargetName="Content">
                                        <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                            <DiscreteObjectKeyFrame.Value>
                                                <System:Boolean>False</System:Boolean>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <ContentControl x:Name="Content" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsTabStop="False" IsEnabled="False" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    <Rectangle x:Name="Overlay" Style="{TemplateBinding OverlayStyle}" Fill="#68000000"/>
                    <Border x:Name="Indicator" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="2" HorizontalAlignment="Center" MinWidth="180" VerticalAlignment="Center" BorderThickness="1">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF083161" Offset="0"/>
                                <GradientStop Color="#FF335F93" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <StackPanel Height="154" Width="236">
                            <telerik:RadProgressBar x:Name="ProgressBar" IsIndeterminate="{TemplateBinding IsIndeterminate}" Style="{TemplateBinding ProgressBarStyle}" Value="{TemplateBinding ProgressValue}" RenderTransformOrigin="0.5,0.5" Margin="15,30,15,5">
                                <telerik:RadProgressBar.RenderTransform>
                                    <CompositeTransform ScaleX="2" ScaleY="2"/>
                                </telerik:RadProgressBar.RenderTransform>
                            </telerik:RadProgressBar>
                            <TextBlock TextWrapping="Wrap" Text="Un moment s.v.p..." Foreground="White" FontWeight="Bold" FontSize="13.333" TextAlignment="Center" Margin="0,27,0,0"/>
                        </StackPanel>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


Declaration :

<telerik:RadBusyIndicator x:Name="BusyIndicator" BusyContent="Un moment s.v.p..." Style="{StaticResource RadBusyIndicatorStyle}" Foreground="Black" d:IsHidden="True" >
    <telerik:RadBusyIndicator.Effect>
        <DropShadowEffect BlurRadius="30" ShadowDepth="15"/>
    </telerik:RadBusyIndicator.Effect>
</telerik:RadBusyIndicator>
id>

Marc Roussel
Top achievements
Rank 2
 answered on 22 Nov 2013
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?