GeForce now dla developerów
Codespace - czyli programowanie w chmurze

Ach jak dobrze czasem spędzić trochę czasu na pisaniu kodu. Choć to tylko praca, dla wielu z nas programowanie jest także fajną odskocznią od codziennych zmartwień. Ćwiczy nasz umysł, pomaga uporządkować myśli, rozwiązuje realne problemy, ale przede wszystkim daje niesamowitą frajdę. Najczęściej, pracując nad projektem, musisz przygotować sobie środowisko, zainstalować odpowiednie kompilatory i przygotować swój sprzęt do pracy. A może by tak mieć to wszystko od razu i to na zdalnym serwerze w chmurze?
tl;dr
- Istnieje wiele narzędzi chmurowych z których możemy korzystać na wielu urządzeniach
- Github codespace jest narzędziem do programowania
- Tworzy IDE w stylu “Vistual Studio Code”, dla wybranego repozytorium github
- Umożliwia dodanie konfiguracji w repozytorium, która określa jakie narzędzia mają być zainstalowane w systemie
- Można na nim uruchomić testy, serwery z aplikacją, a nawet GUI
- Można podpiąć dockera ze środowiskiem pracy
Skąd taka potrzeba?
Zazwyczaj pracując i pisząc różne projekty, korzystam z kilku urządzeń. Komputer do pracy, komputer prywatny czy smartfon. Każdy z nich ma różne zastosowanie przez co korzystam z nich w innych okolicznościach. Do większości z serwisów, których używam, mam dostęp z każdego urządzenia, przez dedykowane aplikacje, lub bezpośrednio z przeglądarki.
Inni mają lepiej…
Rozwój narzędzi takich jak Google docs spowodował, że do dokumentów czy prezentacji, mamy dostęp praktycznie z każdego miejsca. Możemy więc w każdej chwili kontynuować pracę na kolejnym urządzeniu. I nieważne czy to leciwy komputer, stary tablet, czy niewielki ekran smartphona. Po prostu włączasz przeglądarkę i jesteś gotowy do dalszej pracy.
Idea oprogramowania chmurowego wdarła się w nasze życie tak mocno, że powstały także dedykowane serwisy do grania w gry komputerowe (np.: GeForce Now lub nieistniejąca już Stadia). Rozgrywka odbywa się na zdalnym urządzeniu, do którego dostęp mamy praktycznie z każdego miejsca. Oczywiście w przypadku czegoś tak skomplikowanego jak gra komputerowa, szybko zmieniająca obraz wyświetlany na ekranie, potrzebny jest szybki i stabilny internet. Jednak to i tak jest to alternatywa, do inwestycji w coraz mocniejsze urządzenie, lub po prostu sposób na pogranie trochę na swoim smartphonie w coś ambitniejszego.

To może pograjmy w Wiedźmina na moim leciwym komputerze
Pewnie znaleźlibyśmy więcej przykładów narzędzi dla księgowych, hydraulików, czy fryzjerów, których z racji na swój zawód nie znam, ale które również umożliwiają pracę w chmurze. Skupię się natomiast na jednym z takich serwisów dedykowanym programistom.
Programiści nie gęsi, czy szewc bez butów chodzi?
Przyjrzyjmy się dzisiaj narzędziu dostępnym dla użytkowników Github’a, ponieważ jest to jedna z najpopularniejszych platform do zarządzania kodem. Większość swoich projektów wykonuje właśnie tutaj, dlatego to oprogramowanie jest mi najbardziej znane.
Warto wspomnieć, że w usługę jest wbudowany edytor, który w razie potrzeby, umożliwia wprowadzenie zmian w kodzie. W nagłych przypadkach jest to wystarczające i może nam uratować życie (pod warunkiem, że mamy zautomatyzowany deployment), jednak ciężko w ten sposób zaimplementować bardziej skomplikowaną funkcjonalność.

Edytor wbudowany w github jest prosty, ale spełnia swoje zadanie.
We wbudowanym edytorze, brakuje możliwości edycji kilku plików naraz, uruchomienia programu czy też użycia narzędzi do sprawdzenia kodu. Trudno także kontynuować pracę, rozpoczętą w innym miejscu, bez zapisania pliku w commit’cie. Słowem przydałoby się narzędzie z prawdziwego zdarzenia.
Idąc naprzeciw użytkownikom, Github przygotować narzędzie o nazwie Codespaces. Jest to serwis, który umożliwia tworzenie wirtualnych instancji edytorów oprogramowania wraz z własną przestrzenią roboczą i dostępu do terminala. Dzięki temu można przetestować wybraną aplikację, sprawdzić kod za pomocą linterów, a nawet uruchomić cały projekt w przeglądarce. Dzięki możliwości przekierowywania portów do urządzenia, na którym pracujemy, możliwe jest także uruchamianie bardziej skomplikowanych aplikacji takich jak serwery, czy aplikacje okienkowe (przykład tutaj).

Wygląd IDE przypomina Visual Code Studio, ale to dobrze, bo nie trzeba się od nowa uczyć obsługi
Uruchomienie
Uruchomienie swojego pierwszego środowiska programistycznego na platformie jest stosunkowo proste. Aby zacząć pracę i napisać swój pierwszy kod, nie trzeba skomplikowanej wiedzy. Wszystko zaczyna się od wybrania repozytorium na którym chcemy pracować.
Pierwsze uruchomienie
Aby utworzyć swój projekt na zdalnym środowisku, po prostu wchodzimy na stronę codespaces.

Pierwsze uruchomienie Codepsaces
- Wybieramy przycisk
New codespace
- Uzupełniamy konfigurację środowiska. Tutaj wybieramy z którego repozytorium tworzymy nasz space, branch na którym będziemy pracować (to da się zmienić w trakcie pracy) i parametry komputera który będzie obsługiwał nasz projekt.

Ustaw odpowiednie parametry środowiska.
- Klikamy na
Create codespacei czekamy na uruchomienie środowiska

Po utworzeniu space, możesz natychmiast zacząć kodować.
Po wybraniu odpowiednich opcji, uruchomi się IDE VS Code, w którym możesz zacząć edytować swój kod.
Konfiguracja środowiska w repo
Może się tak zdarzyć, że przyjdzie potrzeba uruchomienia IDE z konkretnymi ustawieniami dla konkretnego projektu. Możesz zapisać te ustawienia w repozytorium, przez co zostaną wczytane przy każdym stworzeniu środowiska pracy. Umożliwia to szybką i powtarzalną konfigurację.
W tym przypadku niezbędne okazuje się stworzenie pliku konfiguracyjnego. Służy on do opisania tego co ma się dziać w twoim edytorze, po jego stworzeniu. Możesz np zainstalować na docelowym środowisku narzędzia do kompilacji kodu, oraz określić jakie pluginy VSC będą niezbędne do jego pisania.
DevContainer
Serwis korzysta z narzędzia o nazwie devcontainer o którym możesz poczytać tutaj. Tworzy on dedykowane środowisko pracy w zamkniętym kontenerze, które jest wykorzystywane do zarządzania kodem.
Konfigurację tworzymy w repozytorium kodu jako plik json o adresie: .devcontainer/devcontainer.json.
Przykładowa konfiguracja:
{
"image": "mcr.microsoft.com/devcontainers/typescript-node",
"forwardPorts": [3000],
"postCreateCommand": "bash .devcontainer/install.sh",
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["streetsidesoftware.code-spell-checker"]
}
}
}Widzimy tutaj nie tylko obraz dockerowy (o którym za chwilę), ale także port na którym znajduje się uruchomiona aplikacja, oraz listę pluginów, które VSC powinien zainstalować na docelowym środowisku.
forwardPort
W Codespace możemy nie tylko edytować kod, ale także go uruchamiać. To ustawienie jest przydatne szczególnie dla projektów webowych, lub serwerów, które są uruchamiane na konkretnym porcie. Środowisko pozwala na udostępnienie tego portu przez przeglądarkę i otwarcie wyników swojej pracy na specjalnie do tego celu wygenerowanej stronie.
pre- i post- create commands
Ciekawym aspektem są również skrypty, które można odpalić po utworzeniu kontenera. Przykładem tego, jest skrypt install.sh który zadeklarowałem dla klucza postCreateCommand.
W tym przypadku można użyć tego skryptu do doinstalowania dodatkowych modułów w używanym framework’u.
Podpięcie docker’a
Microsoft wraz ze swoim narzędziem udostępnia wiele obrazów, które z pewnością można użyć w większości projektów. Co jednak, gdy mamy już przygotowane swoje kontenery, uruchamiające projekt i chcielibyśmy z nich skorzystać?
Oczywiście i w tym przypadku jesteśmy w stanie to zrobić. Jeśli plik Dockerfile znajduje się w repozytorium, możemy skorzystać z przykładowego ustawienia:
"build": {
"dockerfile": "./Dockerfile",
"context": ".."
},Kod ten, zbuduje obraz w czasie tworzenia środowiska. Należy pamiętać żeby ręcznie przebudować kontener, jeśli wprowadzimy zmiany do pliku Dockerfile. Jako wartości, podajemy ścieżki zależne do katalogu .devcontainer.
Wadą tego rozwiązania jest brak preinstalowanych narzędzi, które są dostępne w systemie przy wykorzystaniu domyślnych obrazów. Dodatkowe programy, takie jak vim, czy grep, należy samemu zainstalować w obrazie, lub dodać przez skrypt w postCreateCommand.
Czy warto?
Na pewno jest to opcja dla projektów, które są już w znacznie zaawansowanym stanie. Dobrze skonfigurowany devcontainer, umożliwia nam szybki dewelopment, nawet jeśli środowisko do pracy zostało już dawno porzucone.
Decyzja jest bardziej skomplikowana przy nowych projektach. Kiedy zaglądamy do kodu znacznie częściej, podstawowe limity mogą nie wystarczyć. Również przy bardziej skomplikowanych i wymagających zasobów programach, jak gry komputerowe, może to być niewystarczające.
Największą zaletą jest moim zdaniem przenośność tego rozwiązania. Jeśli tylko mamy dostęp do internetu, możemy w każdym miejscu i o każdej porze, wrócić do pracy nad swoim dziełem. Niezależnie od tego czy mamy przy sobie duży i wygodny ekran z mocnym PC, czy tylko kilkuletniego smartfona. Jesteśmy w stanie wdrożyć swój pomysł od razu i kontynuować go, na innym urządzeniu, gdy tylko mamy na to ochotę.
Zalety
- ✅ Szybkość konfiguracji - Raz skonfigurowane repozytorium, może być szybko uruchomione z potrzebnymi komponentami, przez każdego członka zespołu.
- ✅ Łatwe tworzenie środowiska pracy - Tworząc nowe środowisko pracy masz pewność, że twój kod uruchomi się zawsze w taki sam sposób.
- ✅ Praca na słabych komputerach - Jeśli poprawnie skonfigurujemy codespace, to możemy pracować z nim na każdym sprzęcie obsługującym przeglądarkę. Netbook, stary PC, tablet a nawet telefon, nie stanowią tutaj wyzwania.
- ✅ Dostęp do pluginów VS Code - To co działa na VS Code, najpewniej zadziała też tutaj
Wady
- ❌ miesięczne limity czasu i pamięci - Z narzędzia można korzystać za darmo przez określony czas. Oczywiście limity te są na tyle duże, że do hobbistycznych projektów, lub szybkiej poprawki bez reinstalacji na swoim komputerze spokojnie wystarczą.
- ❌ Połączenie z internetem - Wydaje się to oczywiste, ale warto wspomnieć, że bez dostępu do internetu, nie uruchomimy swojego kodu.
Bibliografia
- https://github.com/codespaces - Strona głowna Github codespace
- https://docs.github.com/en/codespaces - Dokumentacja projektu
- https://code.visualstudio.com/docs/devcontainers/containers - Dokumentacja devcontainer - pliku konfiguracyjnego z ustawieniami środowiska pracy
- https://dev.to/konmaz/gui-in-github-codespaces-jl0 - Przykład uruchomienia aplikacji okienkowej w github codespace