Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
9b613ff
fixes #276:[add consistent vertical spacing to tags on Blog page]
Preetiaarya Jun 3, 2025
47a3d47
Fix: mobile wrapping for update tags in updates page
Preetiaarya Aug 8, 2025
585e2fb
Remove unused style page from TagsRenderer component
Preetiaarya Aug 8, 2025
bdbc831
refactor: update tag padding, margin, and remove round style
Preetiaarya Aug 12, 2025
755cb49
style: reduce tag label text size and set custom font style
Preetiaarya Aug 12, 2025
e441ddf
Fix: annual report mobile layout issues (#280)
Preetiaarya May 19, 2025
5e137c7
### Fix: layout issues in product pages in mobile view (#277)
Preetiaarya Jun 3, 2025
6b0bda8
fix: add horizontal padding to header for better mobile responsivenes…
Preetiaarya Jun 4, 2025
e6cb89d
Fix: blogs layout shift from content overflow (in normal view and mob…
Preetiaarya Jun 9, 2025
ac03d8c
feat: add saurav
dennyabrain Jun 16, 2025
1aff3f8
fix: saurav dp
dennyabrain Jun 16, 2025
64afa2c
fix: show other-projects option in mobile view as well(#288)
Preetiaarya Jun 16, 2025
4e1d1ad
fix: improve tag spacing in research page components (#287)
Preetiaarya Jun 16, 2025
5bc19dc
docs: add jsdoc for all the components throughout the code-base(#300)
Preetiaarya Jun 25, 2025
ebabc8f
new roles update
tarunima Aug 11, 2025
0cf9c3b
roles revised
tarunima Aug 11, 2025
e0f24da
Update qualitative-researcher.mdx
tarunima Aug 11, 2025
db456f9
Update join-us.jsx
tarunima Aug 11, 2025
883d12c
chore: update viralspiral url in product page (#302)
maanasb01 Sep 10, 2025
4e92e2c
Create hot-take-on-open-source-AI
tarunima Sep 15, 2025
d05f168
Update and rename hot-take-on-open-source-AI to hot-take-on-open-sour…
tarunima Sep 15, 2025
269ff82
Add files via upload
tarunima Sep 15, 2025
ecab792
Update hot-take-on-open-source-AI.mdx
tarunima Sep 15, 2025
ce51cc6
Update hot-take-on-open-source-AI.mdx
tarunima Sep 15, 2025
b99f819
chore: update community contributors and add new profiles(#303)
Preetiaarya Sep 18, 2025
8e94e29
Update join-us.jsx
tarunima Sep 24, 2025
b75a809
feat: update /links
dennyabrain Oct 9, 2025
df67d35
Add files via upload
tarunima Sep 28, 2025
99bfcbb
Add files via upload
tarunima Sep 28, 2025
775ae3f
Create 2024-report.mdx
tarunima Sep 28, 2025
8cd84f5
Update index.jsx
tarunima Sep 28, 2025
d534c8d
Update 2024-report.mdx
tarunima Sep 28, 2025
0233ec3
Update 2024-report.mdx
tarunima Sep 28, 2025
4606572
Update 2024-report.mdx
tarunima Sep 28, 2025
c8387a8
Create 2025-11-01-tech4dev-evals.mdx
tarunima Nov 1, 2025
6be85df
Update 2025-11-01-tech4dev-evals.mdx
tarunima Nov 1, 2025
f4ef6e5
feat: add make-it-real report
dennyabrain Nov 3, 2025
0f39b11
fix: smaller thumbnail image
dennyabrain Nov 3, 2025
4180f6a
fix: author name
dennyabrain Nov 3, 2025
3436655
fix: rati report description
dennyabrain Nov 3, 2025
ba9ee82
fix: change cta from link to button
dennyabrain Nov 4, 2025
c4225c0
fix: report link
dennyabrain Nov 4, 2025
8ff47f4
fix: cta styling
dennyabrain Nov 4, 2025
c947c97
fix: change blog text for rati report
dennyabrain Nov 4, 2025
a68368a
fix: hero image for rati report
dennyabrain Nov 4, 2025
aa6af7a
feat: new content for make it real report
dennyabrain Nov 4, 2025
e7cf8a6
Update make-it-real.mdx
tarunima Nov 5, 2025
f9969c4
Update make-it-real.mdx
tarunima Nov 5, 2025
9720685
Add 2 new blog post (#304)
Mahimahto Dec 17, 2025
1d8efa5
Add blog post on Draft IT Rules’ amendment by Kaustubha Kalidindi (#306)
Mahimahto Dec 31, 2025
fa731a0
feat: add rati report to /reasearch. fixes #305
dennyabrain Jan 2, 2026
6a4cf61
fix: report description text
dennyabrain Jan 2, 2026
e897122
chore: add new member profile (#308)
Preetiaarya Jan 19, 2026
370b87c
Create 2026-01-20-functional-ai-safety.mdx
tarunima Jan 20, 2026
a519cf5
chore: add remaining 2025 updates (#309)
Mahimahto Jan 21, 2026
2fb58af
Update 2026-01-20-functional-ai-safety.mdx
tarunima Jan 21, 2026
5673782
Update 2026-01-20-functional-ai-safety.mdx
tarunima Jan 22, 2026
1be1d58
Update 2025-11-01-tech4dev-evals.mdx
tarunima Jan 22, 2026
78b52a7
Update 2026-01-20-functional-ai-safety.mdx
tarunima Jan 22, 2026
c6e3af8
fix: date on 2026-01-20-functional-ai-safety.mdx
maanasb01 Jan 22, 2026
761d8e3
Update 2026-01-20-functional-ai-safety.mdx
tarunima Jan 23, 2026
8574e36
Update 2026-01-20-functional-ai-safety.mdx
tarunima Jan 28, 2026
a648de6
Fix tag bubble layout and spacing
Preetiaarya Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions gatsby-config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ const config = {
options: {
extensions: [`.mdx`],
gatsbyRemarkPlugins: [
{
resolve: `gatsby-remark-double-brackets-link`,
},
{
resolve: `gatsby-remark-images`,
options: {
Expand Down
4,189 changes: 267 additions & 3,922 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"gatsby-plugin-sharp": "5.13.1",
"gatsby-plugin-styled-components": "6.13.1",
"gatsby-remark-copy-linked-files": "^6.13.1",
"gatsby-remark-double-brackets-link": "^0.1.11",
"gatsby-remark-images": "7.13.1",
"gatsby-remark-prismjs": "7.13.1",
"gatsby-source-filesystem": "^5.13.1",
Expand Down
2 changes: 1 addition & 1 deletion src/blog/2019-07-13-shell-architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,6 @@ We are following an MVC pattern for developing this server. Broadly speaking eve

We use the config module to handle different app configuration. This includes sensitive credentials like database parameters. config expects a config directory with default.json file in it. We don't check that into the git repository for security reasons. You will have to contact us via email or our slack channel to get access to it.

# Footnotes
## Footnotes

1. Even though currently Shell Server uses amazon’s hosted MySQL service for our Database needs, for all practical purposes, it is ok to consider it part of Shell.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ author: Swair Shah
project: Kosh
tags: machine-learning, devlog
---
import { Heading } from 'grommet'

One of the challenges we face at Tattle is to efficiently check if a given post or message has been encountered earlier by our system.

Expand All @@ -18,7 +19,7 @@ In this post we will describe our ideas for video and GIF content representation

We want to come up with an approach which not only works for finding duplicate or near duplicate videos but we also want to extract some useful information from the video. For example, we may want to generate a description of this video with tags such as `speech`, `president`, `nixon` etc. Processing a video can be very processor intensive. The Nixon video in our example is 36 seconds long. We can extract the frames from the video using OpenCV. There are 1109 frames in the video for just 36 seconds. Even if we are using an efficient deep Convolutional Neural Network to classify labels or generate representation, it would be inefficient to use all the frames of the video.

### Anchor Frames
## Anchor Frames

We want to find what we call "Anchor Frames" for a given video. Anchor Frames are a small set of frames which are a good representation of the video. For our video let us look at a sample from the extracted frames.
![](../images/Screen-Shot-2019-07-19-at-3.32.55-PM.png)A sample of frames from the video
Expand Down Expand Up @@ -66,27 +67,27 @@ We can see that after the first two frame selection the error reduction slows do
![](../images/frame0-3.jpg)![](/content/images/2019/07/frame700.jpg)
Using these these two frames as anchor frames we achieve $80.48\%$ reduction in reconstruction error.  Now that we have found a set of representative anchor frames for a video, we can use the same technique we use for image duplicate detection and label extraction. To generate a fingerprint for the video we can take individual image fingerprint (pHash or pre-trained Convolutional Neural Network features) for all the anchor frames  and either append them or take an average.

## Semantic Labels for Videos
<Heading level={3}>Semantic Labels for Videos</Heading>

To classify videos we use Google vision API on the set of anchor frames. Passing the second anchor frame to Google Vision API gives the following labels.
![](../images/Screen-Shot-2019-07-19-at-5.37.05-PM.png)
We can pass all the anchor frames to the API and take a union of the labels.

## Advantages and Limitations
<Heading level={3}>Advantages and Limitations</Heading>

One of the advantages of this anchor frame approach is that it is robust to minor changes in the video. In case the video is slightly edited or if a few frames are missing, the anchor frames are not affected in most cases as they are still a good representation of the remaining video frames. Though we definitely need more testing to verify this on a broad class of videos. One could use an average frame as a representation of the video but this average frame is sensitive to the video editing. The anchor frames are also much "cleaner" than the average frame which tends to be blurry passing it to the image classifier may not give useful results. The result of the Google Vision API on the average frame is shown below.
![](../images/Screen-Shot-2019-07-19-at-11.41.18-PM.png)
We can see that the score for the labels relating to Richard Nixon has dropped drastically. This only gets worse as the video size increases and the average frame becomes more noisy.

## Some Optimizations and Future Work
<Heading level={3}>Some Optimizations and Future Work</Heading>

In our example the matrix formed after vectorizing each frames was $7500 \times 1000$. Operating on such a matrix is computationally expensive (the complexity of QR is $O(n^3)$). We can try reducing the row dimensions and the column dimensions. Here the number of rows is due to the size of the each frame which is $50 \times 50 \times 3$, even after resizing. We could resize further but after a certain point we start to lose useful information in the image. One possible way which we experimented with is using a pre-trained Convolutional Neural Network to get embeddings of each frame and then using these as a representation for the image.  These embeddings are known to capture semantic information in the image [3]. The size of the embedding depends on the CNN architecture we use. Using a ResNet-18 architecture gives us $512$ dimensional embeddings. This is a significant improvement on $7500$. Another optimization we tried is sampling one frame in every 10 frames. There is a trade-off involved between speed and accuracy and one needs to tune these parameters for a given use case. Using these optimizations the matrix $X$ that we compute the QR-decomposition of is of size $512 \times 100$.

## Limitations and Future work
<Heading level={3}>Limitations and Future work</Heading>

The approach taken is by no means a silver bullet. There are videos where the base frame changes drastically and the number of anchor frames required to achieve a small error would be very high. So far our approach works well for typical videos shared frequently on WhatsApp and other messaging platforms. If you have suggestions on other approaches do get in touch with us!

# References
## References

- [1] G. H. Golub and C. F. Van-Loan.Matrix computations. The Johns Hopkins University Press, third edition,1996.
- [2] Maung, Crystal, and Haim Schweitzer. "Pass-efficient unsupervised feature selection." *Advances in Neural Information Processing Systems*. 2013.
Expand Down
Loading