Telerik Forums
Reporting Forum
11 answers
666 views
Hi,
    I am trying to find out if my solution is correct, and if so, if there is anything else I should be aware of. Or, If there is a better way, what might that be ?    If this is wrong (even though it builds) what is the correct way of doing this ?

This is the fill error i was getting after i added a parameter to one of the tables in the report. 

 

In my report.xsd, I found the Fill method in the xsd's Designer.cs. 

 

this is what I did. I found the method holding the two parameters. It included the datatable as a parm and the MemberParm which is the name I gave the new parameter in this report.

I copied this method .......

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]  
        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]  
        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]  
        public virtual int Fill(iqBodyWorksV02DataSetEquipmentSummary.iqBodyWorksV02DataSetEquipmentSummaryTableDataTable dataTable, int MemberParm) {  
            thisthis.Adapter.SelectCommand = this.CommandCollection[0];  
            this.Adapter.SelectCommand.Parameters[0].Value = ((int)(MemberParm));  
            if ((this.ClearBeforeFill == true)) {  
                dataTable.Clear();  
            }  
            int returnValue = this.Adapter.Fill(dataTable);  
            return returnValue;  
        }  
 

To here. Then, I just commented out the signiture line and replaced it with a line that only included the datatable parm, now. Of course I had to comment out the two lines pertaining to the MemberParm as well,   now I had a fill method with one parm .......

 (the lines I commented out start with // iqworks) 

 

// iqworks   
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]  
        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]  
        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]  
       //iqworks public virtual int Fill(iqBodyWorksV02DataSetEquipmentSummary.iqBodyWorksV02DataSetEquipmentSummaryTableDataTable dataTable, int MemberParm)  
        public virtual int Fill(iqBodyWorksV02DataSetEquipmentSummary.iqBodyWorksV02DataSetEquipmentSummaryTableDataTable dataTable)  
       {  
       //iqworks     thisthis.Adapter.SelectCommand = this.CommandCollection[0];  
       // iqworks     this.Adapter.SelectCommand.Parameters[0].Value = ((int)(MemberParm));  
            if ((this.ClearBeforeFill == true))  
            {  
                dataTable.Clear();  
            }  
            int returnValue = this.Adapter.Fill(dataTable);  
            return returnValue;  
        }  
         // end of iqworks  
 

I placed the cursor over the class lib name, right clicked and hit Build, the build was successful this time.
I saw posts that lead me to documentation that told me "I needed to add a method" but it never told me "where to go to add the method" ?
Anyway, is there anything else I need to do ?
Seems like this should automatically be done just like it automatically adds or changes the original one method with the new parameter ? Not sure ? 
thanks

IQworks
Top achievements
Rank 1
 answered on 16 Sep 2009
2 answers
101 views
Greetings,  I have set up a report using a subreport which I will ultimately send to a PDF file from a web link.

I have set up the subreport and its parameters as instructed in various places on the site, and although the title of the subreport shows, no data is produced.  The subreport is getting the correct value for the parameter being passed which I can tell by having the {Parameter.rOrdNo} printed in the title line.

However, again, no data is being selected.

The code behind for the subreport is shown below.  What am I missing?

Thanks

public

partial class OrdProfMulti : Telerik.Reporting.Report

 

{

 

public OrdProfMulti( )

 

{

 

 

InitializeComponent();

 

 

try

 

{

 

this.arloeDataSet1TableAdapter1.GetData(Convert.ToInt32(this.Report.ReportParameters["rOrdNo"].Value.ToString()));

 

 

this.arloeDataSet1TableAdapter1.Fill(this.aRLOEDataSet1.ARLOEDataSet1Table, Convert.ToInt32(this.Report.ReportParameters["rOrdNo"].Value.ToString()));

 

}

 

catch (System.Exception ex)

 

{

 

System.Diagnostics.Debug.WriteLine(ex.Message);

 

}

}

 

private void OrdProfMulti_NeedDataSource( object sender, EventArgs e )

 

{

 

Telerik.Reporting.Processing.

Report report = (Telerik.Reporting.Processing.Report)sender;

 

 

this.arloeDataSet1TableAdapter1.GetData(Convert.ToDecimal(this.Report.ReportParameters["rOrdNo"].Value.ToString()));

 

 

this.arloeDataSet1TableAdapter1.Fill(this.aRLOEDataSet1.ARLOEDataSet1Table, Convert.ToDecimal(this.Report.ReportParameters["rOrdNo"].ToString()));

 

report.DataSource = aRLOEDataSet1;

 

 

}

 

}

RONNY JOHNSTON
Top achievements
Rank 1
 answered on 15 Sep 2009
1 answer
154 views
I'm dynamically creating a public ReportViewer and then adding it to the masterpage via a reports base class.  The base class adds the report viewer to the form okay, but the ReportViewer will not render the report (I never even get a "generating" notification).  If I just drop a report viewer control directly on the page and then *only* change the reference, it works as expected(example below). Nothing else is changed; which since the viewer control is actually displaying on the page in both instances, it makes me believe the Telerik engine is having a problem connecting the report to the viewer or perhaps having problems rendering it to the screen. I have also noticed I do not get the report parameter inputs for the dynamically created reportviewer if that helps give any clues to the issue.

ReportViewer1.Report = thisReport; 
(RV dynamically created in the base class - RV renders fine on page, but displays no report)
#####  Just change the reference to the dedicated RV and it then works. #####
ReportViewer2.Report = thisReport;  (RV directly put in the page - Everything works as it should)

Is there something out of the ordinary I'm missing for dyanamcily creating a ReportViewer to see the report and then getting it to render? Again, everything works fine for the non dynamically created ReportViewer.

(note: the dynamic created reportviewer is persisted though postbacks as it should)
Steve
Telerik team
 answered on 15 Sep 2009
1 answer
98 views

Hi,

i need to run the following query in order to be able to create a dataset and bind it to my parameter which
is supposed to be a drop down.

what i am trying to do is creating a temp table to create a dataset for Month and Year drop downs

my problem is that , the query builder does not support 'Declare' so i am basically not able to use my query.

What can i do to create a drop down param and bind it to a dataset which is not actually running on an existin table in my database.

Thanks very much
Zahra

 

declare

 

@months table(

 

 

 

 

monthName

varchar (50),

 

 

 

 

monthValue

int)

 

 

 

 

insert

 

into @months(monthName,monthValue)

 

 

 

 

select

 

'January',1 union

 

select

 

'Feburay',2 union

 

select

 

'March',3 union

 

select

 

'April',4 union

 

select

 

'May',5 union

 

select

 

'June',6 union

 

select

 

'July',7 union

 

select

 

'August',8 union

 

select

 

'September',9 union

 

select

 

'October',10 union

 

select

 

'November',11 union

 

select

 

'December',12

 

 

 

 

select

 

monthName, monthValue from @months order by monthvalue asc

 

Steve
Telerik team
 answered on 15 Sep 2009
1 answer
79 views
hi,

is it safe to use my sql query command when i am using the telerik reporting wizard?
as far as i know, using stored procedures is much safer but then i won't be able to use the telerik reporting wizard.
what do you recommend?

Thanks,
Zahra
Steve
Telerik team
 answered on 15 Sep 2009
5 answers
179 views
I'm using the DocumentName to set the default file name for exporting to PDF, but I can't seem to find a way to set the default export folder.  I've tried the code below, but no luck.  Any suggestions?

rpt.DocumentName = string.Format("{2}\\ Quotation {0} for {1}", txtSO.Text, infoVendor.Label,
                Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory ));
Steve
Telerik team
 answered on 15 Sep 2009
1 answer
84 views
Does anyone have a link to a sample or know how to print striaght to PDF without opening the report in the report viewer?

R
Steve
Telerik team
 answered on 14 Sep 2009
0 answers
90 views
hi,

please help me to change the color of this part of chart!

http://h.imagehost.org/0419/changecolor.jpg
Reza Kianrad
Top achievements
Rank 1
 asked on 14 Sep 2009
9 answers
603 views
Hello..

I have a charts created by code,  i need to export that to Excel and Print,
I opt for to have my Charts inside of a ReportViewer but i dunno how to make that!

Please Help!



This is my code:

#Region "_OFICIO_ "

    Private Function Generar_Item_OF( _
                                        ByVal Oficio As Winsoftware.Oficios, _
                                        ByVal Fecha As DateTime, _
                                        ByVal TipoFecha As Winsoftware.Histograma.TipoFecha _
                                     ) As Telerik.Reporting.Charting.ChartSeriesItem

        Dim Porcentaje_SS As Decimal = 0
        Dim Porcentaje_OT As Decimal = 0
        Dim Porcentaje_Total As Decimal = 0

        Dim pOF As Decimal = 0, pRI As Decimal = 0
        Dim sItem As Telerik.Reporting.Charting.ChartSeriesItem
        sItem = New Telerik.Reporting.Charting.ChartSeriesItem

        Dim ListaDias As List(Of Winsoftware.Series)
        ListaDias = Session("ListaDias")

        _DataTable = Winsoftware.Histograma.HgOfSerieObtener_SS(Oficio.IOF, Fecha)

        ''DATOS DE SOLICITUD DE SERVICIO
        If TipoFecha = Winsoftware.Histograma.TipoFecha.Anterior Then
            ListaDias = Winsoftware.Histograma.valor_serie_dias_anteriores_ss(_DataTable, ListaDias)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Actual Then
            ListaDias = Winsoftware.Histograma.valor_serie_dia_actual_ss(_DataTable, ListaDias)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Despues Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            ListaDias = Winsoftware.Histograma.valor_serie_dias_despues_ss(_DataTable, ListaDias)
        End If

        ''DATOS DE ORDENES DE TRABAJO
        _DataTable = Winsoftware.Histograma.HgOfSerieObtener_OT(Oficio.IOF, Fecha)
        If TipoFecha = Winsoftware.Histograma.TipoFecha.Anterior Then
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dias_anteriores_ot(_DataTable)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Actual Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dia_actual_ot(_DataTable)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Despues Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dias_despues_ot(_DataTable)
        End If



        For m As Integer = 0 To ListaDias.Count - 1

            If Format(ListaDias(m).Fecha, "dd/MM/yyyy") = Format(Fecha, "dd/MM/yyyy") Then

                Porcentaje_SS = ListaDias(m).Porcetaje
                Porcentaje_Total = Porcentaje_SS + Porcentaje_OT
                'sItem.Label.TextBlock.Text = Format(ListaDias(m).Porcetaje, "0.00").ToString & "%"
                sItem.Label.TextBlock.Text = Format(Porcentaje_Total, "0.00").ToString & "%"
                'sItem.YValue = ListaDias(m).Porcetaje
                sItem.YValue = Porcentaje_Total
                sItem.ActiveRegion.Url = "javascript:ShowPopUpDialog('DetalleOF.aspx?Fecha=" & Fecha & "&OficioID=" & Oficio.IOF & "');" ' MOSTRAR DETALLE
                If sItem.YValue > 100 Then
                    sItem.Appearance.FillStyle.MainColor = Color.Red
                ElseIf (sItem.YValue >= 80) And (sItem.YValue <= 100) Then
                    sItem.Appearance.FillStyle.MainColor = Color.Yellow
                End If

            End If

        Next


        Return sItem
    End Function

    Private Function GenerarSeries_OF(ByVal Oficio As Winsoftware.Oficios, ByVal RadChart As Telerik.Reporting.Chart, ByVal FechaInicio As DateTime, ByVal FechaFin As DateTime) As Telerik.Reporting.Charting.ChartSeries

        Dim chartSeries As New Telerik.Reporting.Charting.ChartSeries()
        chartSeries.Name = "OFICIO"
        chartSeries.Type = Telerik.Reporting.Charting.ChartSeriesType.Bar


        Dim Diff As Integer = DateDiff(DateInterval.Day, FechaInicio, FechaFin)
        Dim Fecha As String = String.Empty
        Dim sItem As Telerik.Reporting.Charting.ChartSeriesItem

        Fecha = FechaInicio.ToShortDateString ' Fecha para serie
        RadChart.PlotArea.XAxis.AddItem(Format(FechaInicio, "yyyy/MM/dd")) 'Crea la serie

        sItem = Generar_Item_OF(Oficio, Fecha, Winsoftware.Histograma.Definit_tipo_Fecha(Fecha)) ' Valor para la serie        
        chartSeries.AddItem(sItem) ' Agrega la serie al grafico

        For i As Integer = 1 To Diff
            Fecha = DateAdd(DateInterval.Day, i, FechaInicio).ToShortDateString
            RadChart.PlotArea.XAxis.AddItem(Format(DateAdd(DateInterval.Day, i, FechaInicio), "yyyy/MM/dd"))

            sItem = Generar_Item_OF(Oficio, Fecha, Winsoftware.Histograma.Definit_tipo_Fecha(Fecha))
            chartSeries.AddItem(sItem)
        Next

        Return chartSeries
    End Function

    Private Sub GenerarGafica_OF(ByVal Oficio As Winsoftware.Oficios, ByVal FechaInicio As DateTime, ByVal FechaFin As DateTime, Optional ByVal index As Integer = 0)

        Dim radChart As New Telerik.Reporting.Chart()
        radChart.ChartTitle.TextBlock.Text = Oficio.NomOF

        Dim ControlID As String = "RadChart_OF_" & index
        radChart.Name = ControlID
        radChart.PlotArea.YAxis.AutoScale = False
        radChart.PlotArea.YAxis.AddRange(0, 200, 10)

        'Color de fondo
        'verda
        Dim zone As New Telerik.Reporting.Charting.ChartMarkedZone
        zone.ValueStartY = 99
        zone.ValueEndY = 101
        zone.Appearance.FillStyle.MainColor = Color.Black
        radChart.PlotArea.MarkedZones.Add(zone)

        'GERENA LOS RANGOS PARA EL EJE Y (LOS PORCENTAJES)
        For j As Integer = 0 To 20
            radChart.PlotArea.YAxis(j).TextBlock.Text = CStr((j * 10)) & "%"
        Next

        'FORMATO PARA EL EJE X
        radChart.PlotArea.XAxis.Clear()
        radChart.PlotArea.XAxis.AutoScale = False
        radChart.PlotArea.XAxis.Appearance.LabelAppearance.RotationAngle = 300
        radChart.PlotArea.XAxis.Appearance.TextAppearance.TextProperties.Color = System.Drawing.Color.Black

        ' CREA LAS SERIES
        Dim chartSeries As New Telerik.Reporting.Charting.ChartSeries()

        Dim ListaDias As List(Of Winsoftware.Series)
        ListaDias = Winsoftware.Series.ListaDias(FechaInicio, FechaFin)
        Session("ListaDias") = ListaDias

        chartSeries = GenerarSeries_OF(Oficio, radChart, FechaInicio, FechaFin)
        ' LIMPIA LAS SERIES QUE HALLA EN LA GRÁFICA
        radChart.Series.Clear()

        ' AGREGA LAS SERIES A LA GRÁFICA
        radChart.Series.Add(chartSeries)


        'radChart.Width = 1010
        'radChart.Height = 600
        'radChart.Skin = "Mac"

        '' add the RadChart to the page.       
        'Me.Page.Controls.Add(radChart)



    End Sub

#End Region



#Region " _RI_ "

    Private Function Generar_Item_RI( _
                                        ByVal RepInt As Winsoftware.RepresentateInterno, _
                                        ByVal Fecha As String, _
                                        ByVal TipoFecha As Winsoftware.Histograma.TipoFecha _
                                     ) As Telerik.Reporting.Charting.ChartSeriesItem

        Dim Porcentaje_SS As Decimal = 0
        Dim Porcentaje_OT As Decimal = 0
        Dim Porcentaje_Total As Decimal = 0

        Dim sItem As Telerik.Reporting.Charting.ChartSeriesItem
        sItem = New Telerik.Reporting.Charting.ChartSeriesItem

        Dim ListaDias As List(Of Winsoftware.Series)
        ListaDias = Session("ListaDias")

        'DATOS DE SOLICITUD DE SERVICIO
        _DataTable = Winsoftware.Histograma.HgRiSerieObtener_SS(RepInt.RV, Fecha)
        'Winsoftware.Histograma.Alternativa_ss(_DataTable, ListaDias)

        If TipoFecha = Winsoftware.Histograma.TipoFecha.Anterior Then
            ListaDias = Winsoftware.Histograma.valor_serie_dias_anteriores_ss(_DataTable, ListaDias)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Actual Then
            ListaDias = Winsoftware.Histograma.valor_serie_dia_actual_ss(_DataTable, ListaDias)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Despues Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            ListaDias = Winsoftware.Histograma.valor_serie_dias_despues_ss(_DataTable, ListaDias)
        End If

        'DATOS DE ORDENES DE TRABAJO
        _DataTable = Winsoftware.Histograma.HgRiSerieObtener_OT(RepInt.RV, Fecha)
        If TipoFecha = Winsoftware.Histograma.TipoFecha.Anterior Then
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dias_anteriores_ot(_DataTable)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Actual Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dia_actual_ot(_DataTable)
        ElseIf TipoFecha = Winsoftware.Histograma.TipoFecha.Despues Then
            sItem.Appearance.FillStyle.MainColor = Color.DarkBlue
            Porcentaje_OT = Winsoftware.Histograma.valor_serie_dias_despues_ot(_DataTable)
        End If

        For m As Integer = 0 To ListaDias.Count - 1

            If Format(ListaDias(m).Fecha, "dd/MM/yyyy") = Fecha Then

                Porcentaje_SS = ListaDias(m).Porcetaje
                Porcentaje_Total = Porcentaje_SS + Porcentaje_OT
                sItem.Label.TextBlock.Text = Format(Porcentaje_Total, "0.00").ToString & "%"
                sItem.YValue = Porcentaje_Total
                sItem.ActiveRegion.Url = "javascript:ShowPopUpDialog('DetalleRI.aspx?Fecha=" & Fecha & "&RespintID=" & RepInt.RV & "');" ' MOSTRAR DETALLE
                If sItem.YValue > 100 Then
                    sItem.Appearance.FillStyle.MainColor = Color.Red
                ElseIf (sItem.YValue >= 80) And (sItem.YValue <= 100) Then
                    sItem.Appearance.FillStyle.MainColor = Color.Yellow
                End If

                m = ListaDias.Count + 1
            End If

        Next

        Return sItem
    End Function

    Private Function GenerarSeries_RI(ByVal RepInt As Winsoftware.RepresentateInterno, ByVal RadChart As Telerik.Reporting.Chart, ByVal FechaInicio As DateTime, ByVal FechaFin As DateTime) As Telerik.Reporting.Charting.ChartSeries

        Dim chartSeries As New Telerik.Reporting.Charting.ChartSeries()
        Dim Serie As New Winsoftware.Series
        Dim Fecha As String
        chartSeries.Name = "RESPONSABLE"
        chartSeries.Type = Telerik.Reporting.Charting.ChartSeriesType.Bar

        Dim Diff As Integer = DateDiff(DateInterval.Day, FechaInicio, FechaFin)
        Dim sItem As Telerik.Reporting.Charting.ChartSeriesItem

        Dim ListaDias As List(Of Winsoftware.Series)
        ListaDias = Session("ListaDias")


        For i As Integer = 0 To ListaDias.Count - 1
            Serie = ListaDias(i)
            Fecha = Format(Serie.Fecha, "dd/MM/yyyy")

            ''RadChart.PlotArea.XAxis.AddItem(Format(Fecha, "yyyy/MM/dd"))
            RadChart.PlotArea.XAxis.AddItem(Fecha)

            sItem = Generar_Item_RI(RepInt, Fecha, Winsoftware.Histograma.Definit_tipo_Fecha(Serie.Fecha))
            chartSeries.AddItem(sItem)
        Next

        Return chartSeries
    End Function

    Private Sub GenerarGafica_RI(ByVal RepInt As Winsoftware.RepresentateInterno, ByVal FechaInicio As DateTime, ByVal FechaFin As DateTime, Optional ByVal index As Integer = 0)

        Dim radChart As New Telerik.Reporting.Chart
        'Dim radChart As New RadChart

        radChart.ChartTitle.TextBlock.Text = RepInt.NomRV

        Dim ControlID As String = "RadChart_RI_" & index
        radChart.PlotArea.YAxis.AutoScale = False
        radChart.PlotArea.YAxis.AddRange(0, 200, 10)

        'Color de fondo
        'verda
        Dim zone As New Telerik.Reporting.Charting.ChartMarkedZone
        zone.ValueStartY = 99
        zone.ValueEndY = 101
        zone.Appearance.FillStyle.MainColor = Color.Black
        radChart.PlotArea.MarkedZones.Add(zone)

        'GERENA LOS RANGOS PARA EL EJE Y (LOS PORCENTAJES)
        For j As Integer = 0 To 20
            radChart.PlotArea.YAxis(j).TextBlock.Text = CStr((j * 10)) & "%"
        Next

        'FORMATO PARA EL EJE X
        radChart.PlotArea.XAxis.Clear()
        radChart.PlotArea.XAxis.AutoScale = False
        radChart.PlotArea.XAxis.Appearance.LabelAppearance.RotationAngle = 300
        radChart.PlotArea.XAxis.Appearance.TextAppearance.TextProperties.Color = System.Drawing.Color.Black

        ' CREA LAS SERIES
        Dim chartSeries As New Telerik.Reporting.Charting.ChartSeries()

        Dim ListaDias As List(Of Winsoftware.Series)
        ListaDias = Winsoftware.Series.ListaDias(FechaInicio, FechaFin)
        Session("ListaDias") = ListaDias

        chartSeries = GenerarSeries_RI(RepInt, radChart, FechaInicio, FechaFin)
        ' LIMPIA LAS SERIES QUE HALLA EN LA GRÁFICA
        radChart.Series.Clear()

        ' AGREGA LAS SERIES A LA GRÁFICA
        radChart.Series.Add(chartSeries)


        'radChart.Width = 1010
        'radChart.Height = 600
        'radChart.Skin = "Mac"
        radChart.Name = ControlID
        'radChart.Save("C:\tmp\20080604-ojmc.jpg")

        'ReportViewer1.dat()
        'ReportBookControl1.Reports.Add(radChart)
        'Controls.Add(radChart)
        'Me.Page.Controls.Add(radChart)
        'Dim rep As Telerik.ReportViewer.WebForms.ReportInfo

        'ReportBookControl1.Reports.Add(rep)
        'ReportViewer1.DataBind()




    End Sub

#End Region
Steve
Telerik team
 answered on 14 Sep 2009
1 answer
98 views
Hi,

I placed word content in htmlTextBox. It is showing #ERROR# 'w' is an undeclared namespace line 1 position 1219. Please help me.



Regards,

B.Sridhar
Steve
Telerik team
 answered on 14 Sep 2009
Top users last month
Rob
Top achievements
Rank 3
Iron
Iron
Iron
Atul
Top achievements
Rank 1
Iron
Iron
Iron
Alexander
Top achievements
Rank 1
Veteran
Iron
Serkan
Top achievements
Rank 1
Iron
Shawn
Top achievements
Rank 1
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?