Практические советы для дизайнера, который готовит набор фав-иконок. В итоге должны получиться следующие файлы:
- favicon.ico (32x32)
- favicon.svg (50x50)
- apple-touch-icon.png (180x180)
- icon-192.png (192x192)
- icon-512.png (512x512)
| FROM ubuntu:latest | |
| ARG DEBIAN_FRONTEND=noninteractive | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| cmake \ | |
| g++ | |
| # установка gRPC | |
| WORKDIR /tmp |
| 101 Switching Protocols | |
| Upgrade: websocket | |
| Connection: Upgrade | |
| Sec-WebSocket-Accept: StGDxo9IOXnDUTT/4f3VXA== |
| GET /chat | |
| Host: antonov.site | |
| Origin: https://antonov.site | |
| Connection: Upgrade | |
| Upgrade: websocket | |
| Sec-WebSocket-Key: StGDxo9IOXnDUTT/4f3VXA== | |
| Sec-WebSocket-Version: 13 |
Принцип гарантирует, что программу легко будет поддерживать. Ваш код будет легко читать, в нем легко будет находить ошибки, его легко будет переиспользовать.
Каждый объект должеть иметь одну обязанность и эта обязанность должна быть полностью инкопсулирована в класс.
| import java.io.*; | |
| import java.net.Socket; | |
| import java.util.Scanner; | |
| public class Client { | |
| public static void main(String[] args) { | |
| var scanner = new Scanner(System.in); | |
| System.out.print("Enter your name: "); | |
| String name = scanner.nextLine(); |
| import java.io.*; | |
| import java.net.ServerSocket; | |
| import java.net.Socket; | |
| import java.util.ArrayList; | |
| public class Server { | |
| private static final int SOCKET_PORT = 3001; | |
| private static final int COUNT_CLIENTS = 10; |