TILs - Fueling Curiosity, One Insight at a Time

At Codemancers, we believe every day is an opportunity to grow. This section is where our team shares bite-sized discoveries, technical breakthroughs and fascinating nuggets of wisdom we've stumbled upon in our work.

Published
Author
user-image
Codemancers
we can pin specific docker image to use by tagging the commit SHA

Code

build:
  stage: build
  image: docker@sha256:the_sha
  services:
    - docker:dind@sha256:the_sha

Published
Author
user-image
Codemancers
To get help on gitlab CI the forum link is forum.gitlab.com
Published
Author
user-image
Syed
Aliases in Graphql.
Let’s say we have a query that return us the cars Data. If we add both the queries, we will get an error.
Fields "cars" conflict because they have differing arguments. Use different aliases on the fields to fetch both if this was intentional.
UseCase Example:
👇This will throw error

Code

{  
  cars(filter: "name = Cars") {
    edges {
      node {
        name
        speed        
      }
    }
  }
  cars {
    edges{
      node{
        name
      }
    }
  }
}


👇This will work

Code

{  
  slowCars: cars(filter: "Cars") {
    edges {
      node {
        name        
      }
    }
  }
  fastCars: cars {
    edges{
      node{
        name
      }
    }
  }
}


It works because we are using aliases here. Aliases let us change the names of the data that is displayed in a query’s results. It is incredibly helpful when we need to fetch the same data using different filters.

Extra Resources: https://blog.logrocket.com/using-aliases-graphql/#:~:text=What%20are%20GraphQL%20aliases%3F,it%20according%20to%20your%20specifications.
Published
Author
user-image
Syed
Aliases in Graphql.
Let’s say we have a query that return us the cars Data. If we add both the queries, we will get an error.
Fields "cars" conflict because they have differing arguments. Use different aliases on the fields to fetch both if this was intentional.
UseCase Example:
👇This will throw error

Code

{  
  cars(filter: "name = Cars") {
    edges {
      node {
        name
        speed        
      }
    }
  }
  cars {
    edges{
      node{
        name
      }
    }
  }
}


Published
Author
user-image
Mainak
test revalidate NEXT
Published
Author
user-image
Syed
We have 7 different TypeScript utility types, like Pick Omit Partial NonNullable React.ComponentProps React.MouseEventHandler and special one React.PropsWithChildren

React's utility type PropsWithChildren enables components to take both props and child elements as input.

It is used in the definition of the component to identify the types of properties it can receive, including the children prop, which contains any elements contained within the component's JSX. In addition to children, it allows for the use of various props.

UseCase Example


TypeScript

const Track = ({ children }:PropsWithChildren) => {
  return (
    <div className="flex justify-center no-wrap -ml-30 space-x-60 for-debugging-track">
      {children}
    </div>
  );
};


Additional Resources: https://www.chakshunyu.com/blog/7-typescript-utility-types-for-react-developers/
Published
Author
user-image
Syed
When using dynamic classnames, further conditions can be added depending on whether the initial condition is true or false.

Example:

Code

{icons &&
   icons.map((icon: any, index: number) => {
      return (
         <div
            key={index}
               className={cx(
                  "flex lg:ml-0 justify-start align-middle items-center",
                     {
                       "col-span-4": index % 2,   :point_left:
                       "col-span-3": !(index % 2),
                      }
                    )}>
                    {icon.icon}
                    <span className="items-center pl-5 text-12-22 text-gray-text tracking-2">
                      {icon.name}
                    </span>
                  </div>
                );
              })}


If the expression index % 2 (modulus) evaluates to true, the class name col-span-4 will be added. The second className which is col-span-3 and it is added if the expression !(index % 2) evaluates to true. However the ! mark changes the Boolean to false

So class col-span-4 is added when the index is even, whereas the class col-span-3 is added when the index is odd.
Published
Author
user-image
Codemancers
Using Material UI to create an interface, use the icons, buttons, layouts, navigation and other MUI components. Using the sx prop to add css to individual components without using styled or tailwind classes.
install MUI:

Code

npm install @mui/material @emotion/react @emotion/styled


import the suitable components:

Code

import { Box, IconButton, Paper, Typography } from "@mui/material";


simply use them like normal tags and add inline styles using the sx prop. The sx prop allows us to use a superset of css classes making it very intuitive to use.

Code

<Paper
      sx={{
        width: "90%",
        display: "flex",
        justifyContent: "space-between",
        pl: 1,
        mb: 1.5,
        boxShadow: "2px 2px 5px rgb(0 0 0 / 10%)",
      }}
    >


Published
Author
user-image
Ayush
React.Children

We can use the React.Children APIs to modify elements created by React before they’re rendered. It provides utilities for dealing with the this.props.children opaque data structure.

For example :-


Code

React.Children.count(children)


Returns the total number of components in children, equal to the number of times that a callback passed to map or forEach would be invoked
Published
Author
user-image
Codemancers
Using Material UI to create an interface, use the icons, buttons, layouts, navigation and other MUI components and adding styles using the sx prop.
Published
Author
user-image
Syed
I discovered that manipulating the elements is possible with React.cloneElement() function. This can be used when a parent component wants to add or change the props of its children.

React.cloneElement(element, [props], [...children])

The function mentioned above makes a clone of the first parameter which is element and returns an element with the desired changes. We can further pass props to it as well.
Published
Author
user-image
Ayush
CLS i.e Cumulative Layout Shift a metric used to quantify the stability of the content on a website when it loads. Normally a layout Shift occurs whenever any element on the web page changes it position unexpectedly.

Major Reason that constitutes to CLS are :-
1. Images without dimensions
2. Dynamically Injected Content
3. Web Fonts (Fall back font getting replaced with the new font)
Steps to prevent CLS:-
1. Always include size attributes on your images and video elements, or otherwise reserve the required space with something like CSS aspect ratio boxes
2. Never insert content above existing content, except in response to a user interaction.
Resource I used to learn about this:-
https://web.dev/cls/
Published
Author
user-image
Codemancers
In order to take a database dump or restore it on fly.io, use flyctl proxy 5499:5432 -a <app-name>. Then one can do psql postgres://<username>:<password>@localhost:5499/<dbname> to connect to the remote db
Published
Author
user-image
Sujay
Postgres index names are limited to maximum length of 63 characters.
If index name is longer than 63 characters while running rails migration it throws error

Code

Index name 'index_external_reservation_airport_transfers_on_external_reservation_id' on table 'external_reservation_airport_transfers' is too long; the limit is 63 characters


Fix is to explicitly specify the index name

Code

t.references :external_reservation, null: false, foreign_key: true, index: {:name => 'idx_external_reservation_airport_transfers_external_reservation'}

Published
Author
user-image
Syed
If we want to query data for specific pages we can use PageQuery, however we cannot directly access the data. We will need to first destructure it first and then it can be passed as props.


JavaScript

const IndexPage = (data) => {

Published
Author
user-image
Ayush
Styled components : const Content = styled.div margin: 30px 10px; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-gap: 2rem; ;
<Content> lorem ipsum </Content>

lorem ipsum will inherit all the styles passed in Content component

cc: @iffyuva
Published
Author
user-image
Codemancers
is this getting recorded now. Take 5
Published
Author
user-image
Codemancers
found in very hardway that typeorm has timestamp & timestamptz as types. and this works differently.

Showing page 25 of 42

Your competitors are already using AI.
The question is how fast you want to unlock the value.

Don't know where to start?

AI is everywhere but it's unclear which investments will actually move your metrics and which are expensive experiments.

Your data isn't ready

Most AI projects fail at the data layer. Pipelines, quality, access all need work before LLMs can deliver value.

Internal teams are stretched

Your engineers are shipping product. They don't have capacity to also become AI specialists with production-grade experience.

Legacy systems block everything

Aging, undocumented codebases make AI integration slow, risky, and expensive. They need to move first.

Don't worry. We've got you covered.

Start with the audit.