-
Content Count
1073 -
Joined
-
Last visited
-
Days Won
23
Everything posted by aehimself
-
I'm not. I'm not even using mag tapes, they (and the drives + libraries) are too expensive for a hobby. I'm just accepting the opinion of smarter people than me, who still describe the ONLY valid (local) backup medium as tapes. I'm not that good in physics, but the industry standard have its tests. I'm only strictly against calling flash-based devices as backup. They are not that reliable. End of story. Never said that. Cloud backup is a valid option. I never did - and will never - discourage people of Cloud-based backup. I just have trust issues, but that's my own business. I'll bet almost anything that at least half of the people here (and majority of IT geeks around the globe) do this. We are happy to spend the price of a house on a backup server for our company but private life is different - if it is still a hobby. People usually pay because they need GUARANTEE. What happens if your house and your friends house catches fire at the same time?
-
Yes, it does (but I don't know since when): Type TMyClass = Class public Class Var Counter: Integer; Constructor Create; ReIntroduce; End; Constructor TMyClass.Create; Begin Inc(Self.Counter); End; Procedure TForm1.Button1Click(Sender: TObject); Var v1, v2: TMyClass; Begin v1 := TMyClass.Create; v2 := TMyClass.Create; ShowMessage(IntToStr(TMyClass.Counter)); // Will show 2 End;
-
That's actually quite impressive, I didn't know ICS has these functions built-in! Simple question - does it (or offers a way to) handle backlogs? What happens if an E-mail could not be sent because no connection could be made and the application shuts down?
-
...which would immediately make it a non-ideal backup solution.
-
Well said. That would be my last concern too, especially since I have offsite replication of my upstream git repositories 🙂 <OFFTOPIC> If there are no swarm of mosquitos, it's quite pleasant to have your morning coffee / lunch / dinner outside. On the downside - a house will ALWAYS keep you busy. There is no such thing as "I'm bored" it's only "I'm lazy to do this and this" 😄 <EVENMOREOFFTOPIC> I had a landlord once. She was a living creature from hell. Even though I had good relations with the neighbors and paid on time, after a couple of months I was already afraid she is going to poison my dog so I decided to cancel our contract and move out to nowhere. That was the last nail in the coffin - I do not trust people ever since and I do everything in my power not to depend on anyone. </EVENMOREOFFTOPIC> </OFFTOPIC>
-
My wife already looks suspicious when I tell her we take the car to the mechanic and it's going to be expensive. I don't even want to imagine convincing her why I need a fireproof safe, which costs triple the amount than our car. At home you'll quickly get bored of rotating backup mediums and locking them away. You'll want your backup equipment INSIDE the safe so it can do everything automated. As safes SHOULD act as a perfect Faraday-cage, unless they include a fireproof RJ45 socket wired from the outside in... I'm not saying anything more. I'll trademark this stuff 😄
-
It was outside of the IT area, a real-world thing. Unfortunately I can not remember (happened a long-long time ago) but for example: - I have a personal problem with John Doe, and he writes an application - Since I don't like him, I start to talk sh*t and discourage people from using his product - Everyone is still using it. Then, it turns out it has a bridge to some inconvenience I faced for years - I start to use it because of that minor thing and it turns out the application is pretty good - Now, try to explain to everyone you discouraged why exactly you are now a user too - ??? - Profit Fortunately, the only thing I achieved is my own humiliation, no legal stuff. It was still a remarkable experience.
- 17 replies
-
- chat.
- client .server
-
(and 1 more)
Tagged with:
-
Proper backup solutions require the backup area (including servers and libraries) to be physically separated to different buildings. Thus, production center burns - you still have backups and vice versa. I also run a machine with extremely low power consumption kilometers away from my house. It's only job is to replicate the data from my prod server, when network is up.
-
Delphi 7 is a lot slower on Windows 10 (compared to Win7)
aehimself replied to Yaron's topic in Delphi IDE and APIs
By any chance you are running it in a virtual machine? -
Incredible! If it runs on WIndows 2019 Core, finally I can fire up that 15-year-old leporello printer to have some good use of it!
-
That is true; more that true actually. I remember back in the 2000s browsing Torry's Delphi Pages for components and I was not really able to choose from the incredible amount. Oh, and I remember how many were free! Don't get me wrong, I'm not going to judge anything I have no experience with. Been there, done that, burnt myself, never again. I just gave an unpleasant grin to the "marketing".
- 17 replies
-
- chat.
- client .server
-
(and 1 more)
Tagged with:
-
Ah yes, We used to compost floppy disks 😐 I already imagine the next-gen "uSD libraries" in data centers. At least the replacement drives would be cheap to order from Wish.
-
The amount of numbers HDDs failed on us more is because SSD is much-much younger than HDDs are; but I already experienced SSD issues too. I still have an SSD in my laptop and in my dev server (with OS drives of guests on it) and they are still error free. I love them too; we all love them. But their lifespan is shorter than a HDDs - especially if we don't let that HDD to stop 🙂 Edit: online backups are nice and should be safe enough. I just happen to be paranoid enough not to trust any big company.
-
Ahaaaa, makes sense. This is how IRC worked. To have a "private" chat, you have 2 options: 1, Look in the source of the OnReceive event of the server. Instead of sending the received message to everyone, if the message contains a special flag, send it to one recipient only. For example, if you start your message with "@IP" then it will look for all connected clients, and where the IP address matches - send the message only there 2, A more secure way is if you initiate a DCC-like (again, IRC did it this way) channel. If the message starts with @IP DCC, the server will send your IP address to @IP. Then, on your client, you open up a server socket and wait for a connection from @IP. Long story short, wither your message will travel around the network twice (thus, more vulnerable) or you have to establish a client-server connection directly between the TWO CLIENTS:
- 17 replies
-
- chat.
- client .server
-
(and 1 more)
Tagged with:
-
Unwanted Windows XP Manifest inserted
aehimself replied to timfrost's topic in RTL and Delphi Object Pascal
That's the one, thanks! I did not use it since Windows 7 though, since then I'm writing my own manifest files 🙂 -
I know, it was only my very personal opinion and yes, I can be wrong. I guess - unless a component is really badly written - I doubt that it can cause slowdowns (there can be specific high-end cases where the design can cause a bottleneck but that's an other story). Back to your question. Usually there's not much to set a TCP connection up. You need a server (listener) component and a client (which is connecting to the server) component. Set the port number to the same, set the server and the client to active and it should work. Sending data is a completely different topic. Are you using text-based or binary communication? For text, most components have a .SendText method which will accept a string parameter. For binary - I don't think we want to go there just yet. Now look for events of said components. There should be something like... onReceiveBuf, onReceiveText, onDataAvailable... something like this - you have to handle those. And within that event handler, you have to read the data out of the socket with... socket.Read socket.ReceiveText, socket.receivebuf or something. Unfortunately that's all I can say, as I never used this component. Did you look at the Demo folder? There seems to be a chat application - just the one what you are looking for.
- 17 replies
-
- chat.
- client .server
-
(and 1 more)
Tagged with:
-
Why it always turns me off when I read something advertising itself as the best, the fastest, the smallest or the ultimate...? 😐
- 17 replies
-
- chat.
- client .server
-
(and 1 more)
Tagged with:
-
Unwanted Windows XP Manifest inserted
aehimself replied to timfrost's topic in RTL and Delphi Object Pascal
There is a component for this... XP something. It's not on any of your forms, right? Also make sure you remove it's unit from the dependency list. -
Well, I mean, this is an option. If you don't want to hassle with "problems", look into DevExpress. I'm sure one of their components can do what you want.
-
Yes and yes. Since I have a dev environment at home I just added 2 extra hard drives mirrored (with daily automatic health check and warning E-mails). I do my development on my PC then syncing it upstream on a Git repository stored on this mirror. I have a physical RAID controller with a battery backup (salvaged a HPE P400 with 2 failed battery packs. Turns out it is using 4 AAA rechargeable batteries inside, so the quick fix was a matter of a bit of soldering) and the server is on a high capacity UPS. All this hassle for home, you are free to call me paranoid and I'm not going to argue 🙂 P.s.: I'm not considering any flash-based (including SSDs) devices suitable for backup. Their write cycles are low and sometimes you recognize something failed when you are reading information back. And that's too late if it's used for backup. Minimum a mirrored HDD (which is always on, so not USB-attached which "I keep safe in the wardrobe and only use when necessary". It's good for power consumption, but it's bad for lifespan) but the best is still a tape drive - IN MY OPINION. I have personal privacy and safety concerns when it comes to "cloud" data storage.
-
My solution to something like this was to create a frame which contains only one row. Add basic functionality, like a grip and the resize code, initialization method, validation method, etc. Create as many variants as descendants of said frame as needed to handle different input / visual needs. Then, create one form with an alClient scrollbox and an alBottom panel with an OK and a cancel button. Give an array of data as an input to this form so it knows how many and what kind of frames it has to create in the ScrollBox. When the user clicks OK, you can see if all data is valid (because the validator is in the parent frame) so you can deny exiting. It ended up like this: I still need the resizing logic, though, it was a recent request 🙂
-
I learned that the hard way. In our country Quantum IDE hard-drives tended to fail often and suddenly (during power up the continuous click-click-click noise; I guess the arm was unable to move the heads?) but they were cheap so everyone used that. I lost ALL of my source codes of ALL of my applications one day. Thankfully, back in those days I wrote applications for myself and to a small number of people so I simply could say well, we use the latest version and no further improvements...
-
Having a completely separate import application for each "client" seems to be a huge waste of resources. One half of each application is the same (the output part) so I'd have went on a totally different design approach. Have ONE import application with multiple import formats, descended from the same class... so your application is using the TMyImport class, and TMyImport_ABC0001 is a descendant of this. The single application then instantiates the correct class based on the channel where the data is coming from. Would make your lives a lot, lot more easy. It might sound like a lot of work, but one-by-one, slowly the change can be done. Just make sure you prepare TMyImport and the output part well enough 🙂 Also, why to map C:\development to V:...? What difference does it make on which drive letter I'm changing my source code on? Please don't tell me you have hardcoded paths... 🙂 Based on the example you gave, my script should work jus fine. Set C:\ as the root folder so it will try to refresh C:\Development (V:) and C:\imports (I:) too.
-
Well, you can create a folder somewhere and just add junctions with mklink (e.g.: MKLINK /D GitRepo1 I:\SomeSecretApplicaition\Git) to all of the git repositories you have. That will fool the script and will work on all of them. Or, modify the script and call :CHECK manually on each, instead of the for loop: CALL :CHECK D:\Doom CALL :CHECK Q:\Quake CALL :CHECK B:\BloodBorne I understand nothing of this, especially the whole virtual drive part. Maybe it's better this way. At work we have one huge repository, with all the sources in it. Client, server, web, framework. All has it's separate folder. At home I have a different repository for my frameworks, they are located in my _DelphiComponents folder; far away from the applications which are using them. But, with this script everything can be refreshed at once, so no problem.
-
It's pretty undocumented, but kind of easy to understand. Feel free to modify it to your needs: @ECHO OFF SET GITDIR=C:\LocalWork\_DelphiComponents SET OLDDIR=%CD% FOR /F "tokens=1 delims=" %%a IN ('DIR /B /A:D %GITDIR%') DO CALL :CHECK "%%a" GOTO :END :CHECK CD /D %GITDIR%\%~1 > nul 2>&1 IF ERRORLEVEL 1 GOTO :eof "C:\Program Files\Git\cmd\git.exe" fetch > nul 2>&1 IF ERRORLEVEL 1 GOTO :eof ECHO/|SET /P=%~1... "C:\Program Files\Git\cmd\git.exe" status > "%TEMP%\gitstatus.tmp" 2>&1 IF ERRORLEVEL 1 (ECHO querying status failed! & GOTO :DELEOF) TYPE "%TEMP%\gitstatus.tmp" | FIND /I "is behind" > nul 2>&1 IF ERRORLEVEL 1 (ECHO up to date. & GOTO :DELEOF) TYPE "%TEMP%\gitstatus.tmp" | FIND /I "nothing to commit, working tree clean" > nul 2>&1 IF ERRORLEVEL 1 (SET STASHED=1) ELSE (SET STASHED=0) IF %STASHED%==0 GOTO :PULL "C:\Program Files\Git\cmd\git.exe" stash > nul 2>&1 IF ERRORLEVEL 1 (ECHO could not stash changes! & GOTO :DELEOF) :PULL "C:\Program Files\Git\cmd\git.exe" pull --rebase > nul 2>&1 IF ERRORLEVEL 1 (ECHO could not download updates!) ELSE (ECHO update successful.) IF %STASHED%==0 GOTO :DELEOF "C:\Program Files\Git\cmd\git.exe" stash pop > nul 2>&1 IF ERRORLEVEL 1 ECHO could not restore changes! :DELEOF IF EXIST "%TEMP%\gitstatus.tmp" DEL "%TEMP%\gitstatus.tmp" GOTO :eof :END CD /D %OLDDIR% PAUSE For me it now outputted... All you have to do is to change the path to the folder, where your Git repositories are. The script will check all folders within the root and if it's a Git repository it will do it's work. If you need help, feel free to ask.