Posty

Dzielenie tablicy js na dwie części używając reduce

Jak podzielić tablicę w js Chciałem podzielić tablicę na dwie podtablicę: z odpowiednią wartościami spełniającymi jakiś warunek i pozostałymi. Myślałem, że znajdę jakąś standardową metodę, ale chyba takiej nie ma. Ale używające standardowego reduce udało mi się napisać w miarę uniwersalny kod: const input = [ "Ala" , "ma" , "kota" , "a" , "kot" , "ma" , "Alę" ]; Object .defineProperty( Array . prototype , 'split' , { value : function (predicate) { return input.reduce( (tot, curr, index, arr) = > { const item = predicate(curr, index, arr) ? tot[ 0 ] : tot[ 1 ]; item. push (curr); return tot; }, [[],[]] ); } }); // podział tablicy na podstawie prostego warunku const splitted = input. split (s = > s.startsWith( "A" )); console .log (splitted[ 0 ]); console .log (splitted[ 1 ...

Sprawdzenie liczby otwartych połączeń w RabbitMQ

Dużo połączeń w RabbitMQ Kolega zasygnalizował, że na naszym serwerze RabbitMQ pojawiło się bardzo dużo połączeń. Zajrzałem do panelu administracyjnego Rabbita, by to potwierdzić i sprawdzić, którzy klienci generują najwięcej połączeń. Ale mając 400 otwartych połączeń, którzy klienci są najbardziej problematyczni. Sposób I: półautomatycznie Pierwsze co mi przyszło do głowy, to zaznaczenie całej strony z listą połączeń (ctrl-a), potem jej skopiowanie (ctrl-c), wklejenie do pliku tekstowego, a na koniec uruchomienie prostego kodu w c#: namespace CheckRabbitConnections { using System; using System.Linq; using System.Text.RegularExpressions; public class RabbitConnectionFromFile { public void ShowConnectionsFromFile() { var logs = System.IO.File.ReadAllText( "Logs.txt" ); var ipRegex = new Regex(@ "\d+\.\d+\.\d+\.\d+" , RegexOptions.Singleline | RegexOptions.Compiled); ...

Tworzenie nowego dokumentu google doc

Pracując nad nowym projektem dostałem zadanie dodania funkcjonalności tworzenia nowego dokumentu google doc na podstawie html-u. Napisałem więc pomocniczą klasę: using System ; using System.IO ; using System.Linq ; using System.Text ; using Google.Apis.Auth.OAuth2 ; using Google.Apis.Drive.v3 ; using Google.Apis.Drive.v3.Data ; using Google.Apis.Services ; public class GoogleDocsCreator { private readonly DriveService driveService; public GoogleDocsCreator (Stream keyStream) { string [] scopes = { DriveService.Scope.Drive }; this .driveService = this .GetAuthenticateServiceAccount(keyStream, scopes); } public static string GetFileUrl ( string fileId) { return string .IsNullOrEmpty(fileId) ? null : $ "https://docs.google.com/document/d/{fileId}/edit" ; } public string CreateDoc ( string name, string html, str...

Publikowanie aplikacji nodejs na serwerze ubuntu przez gita

Przy publikacji na azure website jest możliwość wskazania repozytorium gita, z którego pobierana jest aktualna wersja aplikacji. Repozytorium to jest obserwowane przez proces azure, dzięki czemu chwilę po aktualizacji repozytorium, aplikacja będzie działać na azurę w najnowszej wersji. Jest to bardzo fajna funkcjonalność, którą chciałem zaimplementować w czasie testów z aplikacją nodejs. Znalazłem kilka stron ze wskazówkami, trochę je zmiksowałem i zapisałem tutaj dla siebie i innych potrzebujących. Idea Pomysł jest taki, że na serwerze zostanie zainstalowany git, utworzone lokalne repozytorium, po aktualizacji którego zostanie uruchomiony skrypt zatrzymujący proces PM2, aktualizujący folder aplikacji, uruchamiający npm install, a następnie ponownie startujący aplikacje PM2. Na serwerze ubuntu Utworzenie folderu z aplikacją: mkdir GreatUsersApp Instalacja Gita w standardowy sposób: sudo apt-get install git Utworzenie folderu z lokalnym repozytorium gita (nazwa może być dowolna...

Dzielenie stringa na paczki

Paczkowanie stringów Kolega zapytał mnie o pomysł na podzielenia stringa na mniejsze paczki, więc zaproponowałem mu rozwiązanie oparte yields. public class WordPacker { public IEnumerable<List< string >> GetPacked(IEnumerable< string > words, int maximumLength) { int nextLength = 0; List< string > currentPack = new List< string >(); foreach ( var word in words) { // nie dodawaj słów o długości powyżej limitu if (word.Length > maximumLength) { continue ; } nextLength += word.Length; if (nextLength + currentPack.Count > maximumLength) { yield return currentPack; currentPack = new List< string >(); nextLength = word.Length; } currentPack...

Pomocniczy obiekt do iterowania po plikach

Wstęp Dość często mam potrzebę modyfikowania plików i przy tym zadaniu najwygodniej jest mi skorzystać z sekwencyjnego iterowania po wierszach pliku. Po staremu Do tej pory wiersze tekstu pobierałem używając metody ReadLines obiektu System.IO.File. Nie zwraca ona tablicy stringów, tak jak metoda ReadAllLines, ale enumerator, a więc nie ma obawy, że przy próbie otwarcia dużego pliku zabraknie pamięci. Do zapisu używałem metody WriteAllLines, która zapisuje do pliku enumerator. Dzięki użyciu tych metod kod zamieniający w całym pliku napis "ala ma kota" na "Ala ma kota" mógłby wyglądać następująco: namespace ReadLinesTest { using System.IO; using System.Linq; internal class Program { private static void Main() { var lines = File.ReadLines( "InputFile.txt" ); var updatedLines = lines.Select(one => one.Replace( "ala ma kota" , "Ala ma kota" )); File....

Zdalne sterowanie robotem RasPi

Wstęp Robot został już zmontowany, pora na napisanie aplikacji służącej do jego sterowania. Robot, to zbyt dumna nazwa, bo na razie chodzi o zdalnie sterowany pojazd, który ma poruszać się zgodnie z polecaniami użytkownika. Na początek użytkownicy pragnęli mieć jedynie możliwość sterowania robotem za pomocą komórki i tabletu. Chcieliby też, by za jakiś czas, po dodaniu obsługi kamery, mieć możliwość sterowania za pomocą pada do Xboxa 360. Architektura Na Raspberry Pi został uruchomiony serwis sterujący do ustawiania prędkości obu silników Powstała aplikacja html, korzystająca z tego serwisu W późniejszym czasie powstanie aplikacja windowsowa odczytująca stan kontrolera xbox i komunikująca się z serwisem sterującym Pozostała kwestia ustalenia "tłustości" logiki klienckiej. Zazwyczaj lepiej, gdy więcej logiki jest po stronie serwera, natomiast klient ma ograniczone możliwości, czyli w przypadku robota serwer mógłby udostępnić metody odpowiadające ruchom robota: GoF...