{"payload":{"pageCount":6,"repositories":[{"type":"Public","name":"445-streaming-llm-responses","owner":"driftingruby","isFork":false,"description":"In this episode, we look at running a self hosted Large Language Model (LLM) and consuming it with a Rails application. We will use a background to make API requests to the LLM and then stream the responses in real-time to the browser.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":5,"forksCount":1,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2024-03-03T17:16:47.050Z"}},{"type":"Public","name":"436-turbo-8","owner":"driftingruby","isFork":false,"description":"","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2024-01-07T16:40:34.728Z"}},{"type":"Public","name":"431-hotkeys","owner":"driftingruby","isFork":false,"description":"","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-12-04T00:38:49.230Z"}},{"type":"Public","name":"427-detect-spam-with-ai","owner":"driftingruby","isFork":false,"description":"We can create a small python service that uses a Large Language Model (LLM) to detect if a message is spam or not. Using this service, we can tie it into our Rails application so that any comment created will be evaluated for being spam or not. We explore a few different routes on handling any messages flagged as spam.","topicNames":["ruby","python","rails","machine-learning","artificial-intelligence","spam-detection"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":2,"forksCount":2,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-11-06T03:35:31.823Z"}},{"type":"Public","name":"422-embedding-stripe-checkout","owner":"driftingruby","isFork":false,"description":"","topicNames":["rails","checkout","stripe","stripe-checkout","stimulusjs"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-10-02T02:24:45.165Z"}},{"type":"Public","name":"417-system-tests","owner":"driftingruby","isFork":false,"description":"In this episode, we look at adding system tests in our application to test our Stimulus Controllers. We'll also look at how to DRY up some of the tests and how to run them in a headless environment.","topicNames":["rails","tests","system-testing"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-09-04T02:44:36.898Z"}},{"type":"Public","name":"template","owner":"driftingruby","isFork":false,"description":"Base template for \"all\" Drifting Ruby episodes","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"HTML","color":"#e34c26"},"pullRequestCount":0,"issueCount":0,"starsCount":18,"forksCount":5,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-09-01T20:37:24.194Z"}},{"type":"Public","name":"413-pdf-reader","owner":"driftingruby","isFork":false,"description":"When previewing PDF files that were uploaded through Active Storage, we can only get a simple image of the first page. In this episode, we'll look at taking the uploaded PDFs and interacting with them.","topicNames":["rails","pdf-viewer","stimulus","hotwire"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-08-07T02:16:52.357Z"}},{"type":"Public","name":"408-broadcasting-progress-from-background-jobs","owner":"driftingruby","isFork":false,"description":"In a previous episode, we had created a custom ActionCable channel to assist in broadcasting updates from a background job. With the introduction of Turbo, we can simplify this process as we look at a few different approaches in displaying a progress bar with real time updates from background jobs.","topicNames":["jobs","background","real-time-progress-bar","hotwire-turbo","hotwire-stimulus"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-07-02T18:10:25.177Z"}},{"type":"Public","name":"395-transcribing-with-artificial-intelligence","owner":"driftingruby","isFork":false,"description":"In this episode, we look at creating an audio transcription service which allows files uploaded from Active Storage to be transcribed with Artificial Intelligence. However, there are a lot of considerations around the approach from both a performance and thread safety perspectives.","topicNames":["ruby","artificial-intelligence","openai","ruby-on-rails","whisper"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":3,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-04-03T05:36:16.470Z"}},{"type":"Public","name":"391-deploying-with-mrsk","owner":"driftingruby","isFork":false,"description":"","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-03-06T03:14:16.640Z"}},{"type":"Public","name":"249-soft-delete-with-discard","owner":"driftingruby","isFork":false,"description":"Soft deletes for ActiveRecord done right.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":29,"issueCount":0,"starsCount":2,"forksCount":1,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T19:44:49.435Z"}},{"type":"Public","name":"245-tracking-changes-on-action-text","owner":"driftingruby","isFork":false,"description":"Without using any gems, we look at tracking changes within Action Text. It seems like a simple thing, but challenges arise through several layers of abstraction due to the flexibility that Action Text provides.","topicNames":["ruby","versioning","ruby-on-rails","action-text"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":30,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T19:19:38.366Z"}},{"type":"Public","name":"236-google-maps-api-with-stimulusjs","owner":"driftingruby","isFork":false,"description":"Add unobtrusive maps to your application using StimulusJS to tie in Google Maps Javascript API and Places API.","topicNames":["javascript","rails","google","google-maps-api","google-maps-javascript-api"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":32,"issueCount":0,"starsCount":2,"forksCount":1,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T18:16:42.933Z"}},{"type":"Public","name":"231-syntax-highlighting-with-action-text","owner":"driftingruby","isFork":false,"description":"Set up Action Text with client side Syntax Highlighting using Highlight.js.","topicNames":["javascript","ruby","syntax-highlighting","ruby-on-rails","action-text"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":33,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T17:40:55.303Z"}},{"type":"Public","name":"205-push-notifications-with-actioncable","owner":"driftingruby","isFork":false,"description":"In this episode, we look into using Push Notifications within our Rails application and then using ActionCable to broadcast Push Notifications to the user. ","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":35,"issueCount":0,"starsCount":0,"forksCount":1,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T17:19:15.772Z"}},{"type":"Public","name":"227-emojis-from-scratch","owner":"driftingruby","isFork":false,"description":"In this episode, we look at attaching emojis to our comments model, allowing them to fill in some emotional cues.","topicNames":["ruby","emoji","ruby-on-rails"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":32,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T17:08:01.719Z"}},{"type":"Public","name":"223-like-relationships-and-global-id","owner":"driftingruby","isFork":false,"description":"In this episode we create a Like/Unlike system where users can like posts and use Global ID to obfuscate IDs.","topicNames":["ruby","controllers","routes","models","ruby-on-rails","relationships","global-id"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":34,"issueCount":0,"starsCount":1,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T16:41:07.787Z"}},{"type":"Public","name":"201-working-with-large-data","owner":"driftingruby","isFork":false,"description":"When database tables get large, things can slow down significantly. In this episode, we look at a few things which helps keep databases performant and the client side responsive.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":32,"issueCount":0,"starsCount":2,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T14:05:32.714Z"}},{"type":"Public","name":"191-inline-editing-records","owner":"driftingruby","isFork":false,"description":"Using Rails UJS, we create an interactive row editing solution without using any kind of Javascript frameworks.","topicNames":["javascript","ruby","ruby-on-rails","rails-ujs"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":30,"issueCount":1,"starsCount":5,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T13:20:14.982Z"}},{"type":"Public","name":"042-fullcalendar","owner":"driftingruby","isFork":false,"description":"Learn how to incorporate FullCalendar into your Ruby on Rails application with listing and creating events. Using unobtrusive javascript, we can create a fast interactive calendar.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":10,"issueCount":1,"starsCount":29,"forksCount":32,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-19T05:33:44.210Z"}},{"type":"Public","name":"382-custom-turbo-stream-actions","owner":"driftingruby","isFork":false,"description":"With the release of Turbo 7.2, we gained the ability to create custom actions in Turbo. This allows us to trigger functions on the client side that would have been difficult or cumbersome to do in the past. In this episode, we look at setting up custom actions and how to use them.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":2,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2023-01-02T04:47:38.294Z"}},{"type":"Public","name":"378-stimulus-outlets-api","owner":"driftingruby","isFork":false,"description":"Outlets let you reference Stimulus controller instances and their controller element from within another Stimulus Controller by using CSS selectors. In this episode, we look at a simple example and then refactoring some older code where we used some workarounds to communicate with other stimulus controllers.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":2,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2022-12-05T03:50:44.904Z"}},{"type":"Public","name":"369-hotwire-introduction","owner":"driftingruby","isFork":false,"description":"Hotwire is an alternative approach to building modern web applications without using much JavaScript by sending HTML instead of JSON over the wire. With Rails 7, we get Hotwire added in by default. In this episode, we look at some of the features with Hotwire and how to use them.","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2022-10-03T03:11:08.962Z"}},{"type":"Public","name":"343-label-maker-with-ruby","owner":"driftingruby","isFork":false,"description":"","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2022-04-04T05:03:04.942Z"}},{"type":"Public","name":"335-hotwire-modals","owner":"driftingruby","isFork":false,"description":"In this episode, we look at creating an unobtrusive and efficient way to launch Bootstrap modals using Turbo and Stimulus.","topicNames":["turbo","stimulusjs","hotwire"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":3,"forksCount":1,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2022-02-07T03:36:35.948Z"}},{"type":"Public","name":"site","owner":"driftingruby","isFork":false,"description":"","topicNames":[],"topicsNotShown":0,"primaryLanguage":{"name":"HTML","color":"#e34c26"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2022-01-02T03:18:09.060Z"}},{"type":"Public","name":"326-dabbling-with-turbo","owner":"driftingruby","isFork":false,"description":"In this episode, we explore some of the new features with Turbo and interactions that we can do with little or no javascript.","topicNames":["rails","turbo","hotwire"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":2,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2021-12-06T05:23:21.968Z"}},{"type":"Public","name":"322-speeding-up-requests","owner":"driftingruby","isFork":false,"description":"In this episode, we look at several issues around pagination and different kinds of querying that could affect performance when working with large datasets.","topicNames":["ruby","pagination","performance","postgresql","ruby-on-rails"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":0,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2021-11-08T05:30:13.606Z"}},{"type":"Public","name":"317-error-tracking-from-scratch","owner":"driftingruby","isFork":false,"description":"In this episode, we look at creating a middleware to track errors to publish to another error \"from scratch\" error monitoring application.","topicNames":["rails","middleware","error-tracking"],"topicsNotShown":0,"primaryLanguage":{"name":"Ruby","color":"#701516"},"pullRequestCount":0,"issueCount":0,"starsCount":3,"forksCount":0,"license":null,"participation":null,"lastUpdated":{"hasBeenPushedTo":true,"timestamp":"2021-10-04T03:42:21.651Z"}}],"repositoryCount":152,"userInfo":null,"searchable":true,"definitions":[],"typeFilters":[{"id":"all","text":"All"},{"id":"public","text":"Public"},{"id":"source","text":"Sources"},{"id":"fork","text":"Forks"},{"id":"archived","text":"Archived"},{"id":"mirror","text":"Mirrors"},{"id":"template","text":"Templates"}],"compactMode":false},"title":"Repositories"}