Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Super-NintendoUser
Jan 16, 2004

COWABUNGERDER COMPADRES
Soiled Meat
Those are all valid points, I'm way more comfortable in bash, but I do know python. I'll switch over to Python and see if I can make it work better that way.

The main problem is that I can easily get the result I want from the API, but I need to query the API multiple times and keep appending the result to a list of results and return the entire list as a json. Probably like most things it's easier to do with python, I'll dig into it.

Adbot
ADBOT LOVES YOU

camoseven
Dec 30, 2005

RODOLPHONE RINGIN'
I'd do it in Node, but when all you have is a NodeHammer everything looks like a NodeNail

ExcessBLarg!
Sep 1, 2001

Jerk McJerkface posted:

Those are all valid points, I'm way more comfortable in bash, but I do know python. I'll switch over to Python and see if I can make it work better that way.
I've been writing shell scripts for decades and I wouldn't say I'm comfortable in Bash because it's an inherently uncomfortable language, at least, if you care about getting quoting right.

Like sure, a simple for loop, or maybe a case statement is all fine. But once you try to get arrays into doing your bidding and quoting them properly that's when poo poo hits the wall and you should choose a better language.

Personally I vote for Ruby, but Python is equally appropriate for this task.

RPATDO_LAMD
Mar 22, 2013

🐘🪠🍆

LongSack posted:

It may be, and there are a number of good suggestions in that thread, so thanks for that link.

I started playing around with Rider, but it is missing one feature (that people have been asking for for four years) - auto format on save, and i really miss that. It also occasionally has problems indenting JSX elements properly. VS Code has this problem, too, but at least the auto format on save fixes it.

Other jetbrains IDEs have this feature under "actions on save" in the settings

I would really be surprised if Rider was missing it since afaik their ides for different languages are mostly based on the same codebase with just a few tweaks

LongSack
Jan 17, 2003

RPATDO_LAMD posted:

Other jetbrains IDEs have this feature under "actions on save" in the settings
...
I would really be surprised if Rider was missing it since afaik their ides for different languages are mostly based on the same codebase with just a few tweaks

You're correct.

I went back to the thread that I (mis-)read, and it turns out they were complaining that it only auto-formats on explicit save and there is no option to change it to any save like shown in your picture. My mistake.

Also, I think I found the extension that was causing the slow-down. I thought back to what I was doing when the slowdowns started, and I had installed a bunch of Syncfusion controls. I disabled the Syncfusion/ASP.NET Core and Syncfusion/Blazor extensions in VS Code and so far (sample size of one) no slowdowns.

CarForumPoster
Jun 26, 2013

⚡POWER⚡
Anyone seen places do a couple weeks of remote pair programming either all day or part day to help onboard entry level people and get them up to speed on older/larger code bases? How'd it go? I've never done pair programming and they'd be working with me via Teams.

We're a python shop that makes a lot of SPAs for dashboards and webscrapers, deploying to AWS Lambda and Heroku. Our code tends to have a ton of domain specific workflows/business logic in them so what got written when the system was first developed 2-3 years ago can be pretty daunting and docs can get rather stale.

dupersaurus
Aug 1, 2012

Futurism was an art movement where dudes were all 'CARS ARE COOL AND THE PAST IS FOR CHUMPS. LET'S DRAW SOME CARS.'

CarForumPoster posted:

Anyone seen places do a couple weeks of remote pair programming either all day or part day to help onboard entry level people and get them up to speed on older/larger code bases? How'd it go? I've never done pair programming and they'd be working with me via Teams.

We're a python shop that makes a lot of SPAs for dashboards and webscrapers, deploying to AWS Lambda and Heroku. Our code tends to have a ton of domain specific workflows/business logic in them so what got written when the system was first developed 2-3 years ago can be pretty daunting and docs can get rather stale.

Check if your IDE of choice has a live share feature, that's a lot better than having to watch someone else's IDE on a stream

CarForumPoster
Jun 26, 2013

⚡POWER⚡

dupersaurus posted:

Check if your IDE of choice has a live share feature, that's a lot better than having to watch someone else's IDE on a stream

Thanks! What do you think of pair programming for onboarding?

Gothmog1065
May 14, 2009
I'm having another dumb. using Bash, nothing fancy.


code:
siteChk=sd_csn1
envList="scp sd sfp sft"
if ! grep -q "_" <<< ${siteChk}; then
  if grep -q ${siteChk%_*} <<< ${envList}; then
    echo "Test"
  fi
fi 
First grep works fine, second grep fails with the standard grep failure. It's probably something stupidly simple.


Found the issue, I wasn't passing arguments through properly, so the siteChk was actually blank.

Gothmog1065 fucked around with this message at 20:04 on Jul 4, 2022

Super-NintendoUser
Jan 16, 2004

COWABUNGERDER COMPADRES
Soiled Meat

Jabor posted:

Secondly, does this absolutely need to be done in bash instead of some more appropriate scripting language that isn't 30 years old?

Just wanted to float this, so I repackaged my stuff into a python module, actually two modules since one is for auth and the other is for the function. It's working better, and it's way easier to deal with json, thanks for the tips.

One question I have is this, so basically I have a module called cloud_auth, so if you do this:

code:
import apicloud
from apicloud import cloud_auth
from apicloud import cloud_functions
api_credentials = cloud_auth.cloud_login()
print(api_credentials)
it returns a dict that has the keys you need:
code:
{'api_token': 'asdfasdfasdf'', 'auth_cookie': '123123123'}
which is perfect. Then I have another module that you can call and actual do something with the cookie.

My question is now, it's pretty simple in bash to do something like this:

./script.sh function -u username -p password

And then have a function name defined as a variable and call it, so you can write a little tool script that uses your functions as a variable name:
code:
main() {
# script does things here
task=$1
options=$2
log "Task to Peform: $ARGS"
defaults
cmdline ${ARGS#"$1"}
$task # this here is 
}

main $1
exit 0
I'd like to duplicate that in python, and basically pass my module a bunch of options, and get back a dict like this:

code:

{'api_token': 'asdfasdfasdf'', 'auth_cookie': '123123123', "function": "thing_to_do_here"}

And then I can have a module called
code:
def thing_to_do_here(arg, arg, arg)
	some code
	return a thing
This way I can distribute my module internally, and then you can write a script to leverage it:

code:
import apicloud
from apicloudimport cloud_auth
from apicloudimport cloud_functions

# log in with this snippet
# returns a dict with a token and xsrf token like this:
# {'api_token': 'xxxx', 'xsrf_cookie': 'xxxx', 'function': 'check_to_run'}

api_credentials = cloud_auth.apicloud_login()
# this works and returns the json with the three args that I need
# do a thing here
cloud_functions.api_credentials['function'](api_credentials)

which can be invoked like this:

code:
 python3 test.py -f thing_to_do_here-u username -p whatever 
Basically I want to build the function to run with a variable that comes from a dictionary. I have everything else working except that.

nielsm
Jun 1, 2009



Use the argparse module

Super-NintendoUser
Jan 16, 2004

COWABUNGERDER COMPADRES
Soiled Meat

Thanks for the tip, I already have arguements working and all that. My question was about using a function name as a string. I got my problem sorted, I needed to use getattr:

code:

function = getattr(cloud_functions, api_credentials['function'])
result = function(api_credentials['api_token'])

ArcticZombie
Sep 15, 2010

Jerk McJerkface posted:

Thanks for the tip, I already have arguements working and all that. My question was about using a function name as a string. I got my problem sorted, I needed to use getattr:

code:

function = getattr(cloud_functions, api_credentials['function'])
result = function(api_credentials['api_token'])


They were probably trying to lead you to the method that the argparse module offers for this sort of thing: sub-commands.

Raenir Salazar
Nov 5, 2010

College Slice
Did we have a cryptography/security thread? My current job would like me to basically implement a license management solution or assess the feasibility of doing it in house (without an authentication server) vs getting a third party solution like denuvo.

I talked with denuvo but it seems like overkill.

What we'd like is that the client (other businesses, not average consumers) negotiates a subscription plan with our company, so we give them a license key and when they enter it enables access to the content that they have a subscription for. (otherwise those buttons /levels/tools are greyed out)

My idea for a presumably hilariously insecure in house solution I could probaby quickly prototype is assuming each product we sell has a unique I'd to it, that we know when we sell the device. So we use that Id as a sort of public key to encode the license information into something that looks like a license key code.

When they the client enter in this key code the software will compare the devices ID and attempt to enter it as the key for the decryption. If its valid it will spit out the license information that lists the Available content they can access as well as the start date and duration of the license, otherwise it is invalid.

This feels like a reasonable solution that would take relatively few hours to implement, avoids the need for an internet connection, and keeps honest customers honest. I don't think we care if someone can look at the disassembly and reverse engineer which open source encryption algorithm we used and write up their own fake license and encrypting it using their machine Id.

Any major flaws with this? We sell devices only to a very small number of customers so this seems like a reasonable trade off to me in terms of the security threat envelop with is likely negligible chance to begin with.

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...
If you're genuinely not concerned, you can probably get away with a data structure containing licenced options + dates + device id etc, sign it and append the sig, and give the device a public key to verify with. Let SHA and Base64 do the work. It's not exactly secure since the customer could replace the Public and private key, but again if this is not something you need to stand up to scrutiny...

DearSirXNORMadam
Aug 1, 2009
Hey, I just found this code snippet, and I have no idea what language this even is. Does this look familiar to anyone?



Edit: consensus seems to be that this is probably mathematica

DearSirXNORMadam fucked around with this message at 03:07 on Jul 9, 2022

Warbird
May 23, 2012

America's Favorite Dumbass

Hey folks. I've been doing a lot of twitch watching via Streamlink as of late and was vaguely annoyed enough with having to pull out my phone to see who was on that I wrote a CLI app/python script to do it. If anyone would like to give it a look or kick the tires on it I'd be interested in getting some feedback. I haven't done anything beyond basic scripts in Python in nearly a decade so I'm sure things could be better.

Things I know could be better:

- Onboarding is a pain. I'm mulling over trying to have the program do that, but it's likely out of scope. I'm not really sure what could be done here beyond setting up an actual service to do this with an actual redirect URL, but again that seems out of scope (and I'd prefer to have this be "local" to each user).
- Windows users have to preface the script call with "python3" because Windows, but I'm not sure if there is a better way to handle that. Just doing it sans preface just procs a python window to open and close.
- The script refresh path doesn't auto retry once completed. I could wrangle this, but just having the user re-run seems to be the occam's razor approach.
- The documentation probably.

ultrafilter
Aug 23, 2007

It's okay if you have any questions.


Mirconium posted:

Hey, I just found this code snippet, and I have no idea what language this even is. Does this look familiar to anyone?



Edit: consensus seems to be that this is probably mathematica

Probably Mathematica but someone here will know for sure.

CarForumPoster
Jun 26, 2013

⚡POWER⚡

Warbird posted:

Hey folks. I've been doing a lot of twitch watching via Streamlink as of late and was vaguely annoyed enough with having to pull out my phone to see who was on that I wrote a CLI app/python script to do it. If anyone would like to give it a look or kick the tires on it I'd be interested in getting some feedback. I haven't done anything beyond basic scripts in Python in nearly a decade so I'm sure things could be better.

Things I know could be better:

- Onboarding is a pain. I'm mulling over trying to have the program do that, but it's likely out of scope. I'm not really sure what could be done here beyond setting up an actual service to do this with an actual redirect URL, but again that seems out of scope (and I'd prefer to have this be "local" to each user).
- Windows users have to preface the script call with "python3" because Windows, but I'm not sure if there is a better way to handle that. Just doing it sans preface just procs a python window to open and close.
- The script refresh path doesn't auto retry once completed. I could wrangle this, but just having the user re-run seems to be the occam's razor approach.
- The documentation probably.

What's your goal with this? e.g.:
Publish something people who also have this problem might stumble across.
Have a bitchin' GitHub to get a computer touching job.

Camel case variables are a dead giveaway for newbie python coders. configPath s/b config_path or whatever descriptive name.

Warbird
May 23, 2012

America's Favorite Dumbass

CarForumPoster posted:

What's your goal with this? e.g.:
Publish something people who also have this problem might stumble across.
Have a bitchin' GitHub to get a computer touching job.

Camel case variables are a dead giveaway for newbie python coders. configPath s/b config_path or whatever descriptive name.

Strictly the former. I’ve considered looking into how getting things into pip or whatever works but I’d like some folks to get hands on with it first. As for the casing, is that “a thing” with Python? I vaguely recall being told camel was the way to go but that was a while ago and also scoped to C++ at the time.

KillHour
Oct 28, 2007


CarForumPoster posted:

What's your goal with this? e.g.:
Publish something people who also have this problem might stumble across.
Have a bitchin' GitHub to get a computer touching job.

Camel case variables are a dead giveaway for newbie python coders. configPath s/b config_path or whatever descriptive name.

but worm case is lawful evil and I won't abide.

dirby
Sep 21, 2004


Helping goons with math

Mirconium posted:

Hey, I just found this code snippet, and I have no idea what language this even is. Does this look familiar to anyone?



Edit: consensus seems to be that this is probably mathematica
Yes, that is exactly what the syntax and default coloring of Mathematica looks like. It's technically "Wolfram Language in a Mathematica Notebook" I guess.

Edit: It seems it may be Symbolic Lab Language which is build on top of Mathematica.

quote:

In one aspect, the scripting language is Symbolic Lab Language (SLL).

SLL is developed based on the Mathematica® language. On top of the user-friendly syntax and comprehensive data manipulation and visualization functionalities provided by Mathematica®, SLL further includes functions, objects, and knowledge representations specifically designed for the life sciences

dirby fucked around with this message at 04:00 on Jul 10, 2022

Rocko Bonaparte
Mar 12, 2002

Every day is Friday!
I'm an idiot with Docker and containerization in general and wanted to try to set up a Joplin server on some personal VPS hosting. Instructions are here:

https://hub.docker.com/r/joplin/server

I don't have postgresql on the setup so I'd have to do that too. They have instructions about using docker-compose with this:

https://github.com/laurent22/joplin/blob/dev/docker-compose.server.yml

Can somebody give me a little summary of what I have to get into to properly configure that? Do I manually edit environment variables in that file, or is it assumed that I'd override those elsewhere? It's just that "${POSTGRES_PASSWORD}" looks like a special convention to me but it implies in the directions that I'll just type in my own poo poo manually in place of that stuff. I wanted to confirm before I make a mess. How would I then acquire the composed image and run it?

I've probably spent four total person hours with Docker before this in any capacity so I hope that gives you some perspective of how silly I am.

boofhead
Feb 18, 2021

In general terms it'd be worth watching like a 15 minute video on docker compose on youtube, so you have a broad overview of what's going on

In the specific case you asked, those are environment variables and it expects you to have defined those elsewhere. You can just replace ${ENV_VARIABLE_NAME} with the direct value itself, if you want. You can also put them in a .env file in the same folder as the docker-compose.yml file and just handle it that way with

code:
env_file: .env
Obviously think about security and things like that, but in terms of what the dollar sign and curly brackets signify, it means that it will insert the value from the corresponding environment variable

CzarChasm
Mar 14, 2009

I don't like it when you're watching me eat.
Not sure if this is the best place to ask, but I'm having an odd issue running a VB Excel program that connects to an Oracle SEQ database, and reads/writes to different tables.

In short, the excel file is used to append lines of data to specific tables in the SEQ database. There is a header record, and every header can have multiple lines associated with it.

The first step is to connect to the database, open a recordset (rs) then retrieve a control number from that table, and put it into cnum (integer variable)
code:
Oraquery = "SELECT exchange.ia_sequence.nextval FROM dual"
    rs.Open Oraquery, cn
    cnum = rs.Fields("NEXTVAL").Value
    rs.Close
This gives me say 516 for my cnum.

The next step is to build a new recordset entry and append a new record to a different table. Because there are (potentially) multiple lines associated with the headers, one of the first steps is to increment the cnum value for each line.
code:
Range("F5").Select
    Do Until Selection.Value = "" And Selection.Offset(0, 3) = "" And Selection.Offset(0, 4) = ""
        If Selection.Value = "" Then
           LineCounter = LineCounter + 1
          Else
           WareCounter = WareCounter + 1
           LineCounter = 1
           cnum = cnum + 0.00001
        End If
In my example, if I have 3 lines for header 516, the cnum value should be 516.00001, then 516.00002 then 516.00003, and so on as it loops

While running the program in VB, if I hover over cnum, it shows that the value is 516.00001 - which is what I expect it to be.

However, when I go to the database and look at the value that is being entered, I get
code:
516.00000999999997
This is what my recordset update part of the loop looks like
code:
rs.AddNew
rs.Fields!CONTROL_NUMBER = cnum
rs.Fields!WARE_ID = WareCounter
rs.Fields!LINE_ID = LineCounter
rs.Fields!Company = Company
rs.Fields!DATA_ = Data
rs.Fields!Status = "EXCEL UPLOADED"
rs.Fields!USER_ID = UserID
rs.Fields!START_DATE = DateTime
rs.Update
Why would the cnum value change like that between VB and the database that is being updated? This is happening on multiple excel sheets that are built similarly. I did not build this originally, I am just working on cleaning these up and trying to modernize them ahead of a major system update.

Plorkyeran
Mar 22, 2007

To Escape The Shackles Of The Old Forums, We Must Reject The Tribal Negativity He Endorsed
516.00001 is not representable as a floating-point number, and 516.00000999999997 is the closest possible one.

Hammerite
Mar 9, 2007

And you don't remember what I said here, either, but it was pompous and stupid.
Jade Ear Joe

CzarChasm posted:

Not sure if this is the best place to ask, but I'm having an odd issue running a VB Excel program that connects to an Oracle SEQ database, and reads/writes to different tables.

That sounds absolutely awful and I sympathize.

But in regards to the issue you are describing, it looks for all the world like a floating-point accuracy issue. Are these scripts treating something as a number when that thing is really meant to be either a string, or a tuple of integers?

code:
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 516 + 0.00001
516.00001
>>> x = 516 + 0.00001
>>> '%.9f' % x
'516.000010000'
>>> '%.15f' % x
'516.000009999999975'
>>>
Vaguely relevant links:

https://docs.microsoft.com/en-us/office/troubleshoot/access/floating-calculations-info
https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems
https://stackoverflow.com/questions/588004/is-floating-point-math-broken

CzarChasm
Mar 14, 2009

I don't like it when you're watching me eat.
Thanks both for the quick replies. I'll check out those links right away.


Hammerite posted:

That sounds absolutely awful and I sympathize.

Thanks. It's a new job for me, and hardly the worst programming job I've had. Though the guy before me never started any of these with option explicit, so I have no idea how some of these programs were running at all.

Narrator: they were not

kaschei
Oct 25, 2005

Float values are really bad for use as identifiers. If you are testing a float for exact equality with something you are probably using the wrong datatype.

CzarChasm
Mar 14, 2009

I don't like it when you're watching me eat.

kaschei posted:

Float values are really bad for use as identifiers. If you are testing a float for exact equality with something you are probably using the wrong datatype.

Yeah, I looked back and the variable is being declared and imported in as a string value.

And I have to ask why. It's stored in the DB as numeric, math is being performed on it, why is it being assigned as a string?

Paul MaudDib
May 3, 2006

TEAM NVIDIA:
FORUM POLICE
Does anyone have a good formula for audit logging of the "every time a db row changes" or "every time an authorized valid CRUD request (at whatever coarser level) is executed, with some relevant data"?

From what I was reading I thought maybe message queues were that answer, but it sounds like operating message queues has a lot of non-trivial pitfalls? Are those pitfalls tolerable in a case like an audit log? You wouldn't want, say, queued audit messages being dropped - but ultimately if the system is in a deadlock state (eg out of disk) there's nothing that can entirely be done.

Trying to get a read on that use-case to understand the limitations better in other use-cases, like that seems like a straightforward message queue task. Needs to be finished, but async in the background on a non-DB thread is fine/great.

Jabor
Jul 16, 2010

#1 Loser at SpaceChem
The big question is that if you're in that resource exhaustion state, what would you prefer to have happen:

- The initiating request is denied (no changes made, no data returned to the requester)
- The initiating request succeeds completely, but no audit logging happens

For a lot of scenarios where you're doing audit logging in the first place, that second option is unacceptable, which makes async logging a hard sell.

KillHour
Oct 28, 2007


I work for a DB company and every for-real audit log (so customers that actually do audits and not just the ones that pretend to) I've worked with has been part of the transaction itself, so ACID ensures that the log will always reflect what happened in reality. We would just store the audit as an entry in the database itself (with appropriate permissions so they can't be changed after the fact). For customers that really need to know what happened, we have the ability to version everything, so there is no real update or delete - just create and read. This is separate from the access logs, which always get written for every interaction, whether it succeeds or not (it's part of the network-level connection, so something would have to go really wrong for them to fail to write), but those obviously are very lightweight - just an IP address, destination port, endpoint, user (if available), and response code.

If your DB is so beat up that it can't do logging anymore, you probably aren't in a position to serve the request anyways.

KillHour fucked around with this message at 09:28 on Jul 15, 2022

lord funk
Feb 16, 2004

Very newbie question. I want to link a library. I've built the library which made these folders / files:

code:
- include
        - libpd
		m_pd.h
		PdBase.hpp
		PdMidiReceiver.hpp
		etc.
- lib
	libpd.def
	libpd.lib
	pd.dll
How do I properly link these in Visual Studio 2022? When searching I'm lost in a sea of 'how do i link dll' posts dating back to the stone age. I'm pretty lost.

Anyone able to give me an explanation of how to link the .dll? what are the .def and .lib files? and how do I link to the headers too?

(I'm an iOS / Xcode dev, so Visual Studio is very new to me)

leper khan
Dec 28, 2010
Honest to god thinks Half Life 2 is a bad game. But at least he likes Monster Hunter.

lord funk posted:

Very newbie question. I want to link a library. I've built the library which made these folders / files:

code:
- include
        - libpd
		m_pd.h
		PdBase.hpp
		PdMidiReceiver.hpp
		etc.
- lib
	libpd.def
	libpd.lib
	pd.dll
How do I properly link these in Visual Studio 2022? When searching I'm lost in a sea of 'how do i link dll' posts dating back to the stone age. I'm pretty lost.

Anyone able to give me an explanation of how to link the .dll? what are the .def and .lib files? and how do I link to the headers too?

(I'm an iOS / Xcode dev, so Visual Studio is very new to me)

The dll needs to be in the same directory as the executable. Or some number of other places.

The lib file is a static library. The def file is a definition file for the static library.

Check the linker settings for the project.

nielsm
Jun 1, 2009



Headers are not linked into libraries. You distribute those as loose files for developers who want to use your library.

The choice of whether your output is an EXE file, a DLL, or only a static LIB file is a project setting. (Or a parameter to the linker.)

The DEF file is an additional input you can use when building a DLL, to specify what functions to export from the library. Only the functions you explicitly mark as export are available to call from consumers of your library. Instead of a DEF file you can use __declspec(dllexport) on your function declarations.

When you build a DLL (or EXE) with any exported functions, the linker will also produce a stub LIB file that is used to link programs using the library. It points the linker to link the functions to the dynamic library.

cheetah7071
Oct 20, 2010

honk honk
College Slice
You need to #include the header file (possibly setting the folder containing it to be an include directory). You need to link to the .lib, which is in the linker menu and not in the C++ menu

And finally, yeah, you need the .dll to be either in the same directory as the executable, or on the system path

nielsm
Jun 1, 2009



cheetah7071 posted:


And finally, yeah, you need the .dll to be either in the same directory as the executable, or on the system path

But do not put your own DLLs into \Windows\System32, that is not your folder. It's logically owned by the OS.

lord funk
Feb 16, 2004

cheetah7071 posted:

... which is in the linker menu and not in the C++ menu

Ahhhh okay these are buried in the project properties. This did it -- finally telling the project where these files are and it's all linked up. Thanks.

Adbot
ADBOT LOVES YOU

Volmarias
Dec 31, 2002

EMAIL... THE INTERNET... SEARCH ENGINES...

nielsm posted:

But do not put your own DLLs into \Windows\System32, that is not your folder. It's logically owned by the OS.

Uh excuse me actually this is my computer so I will put my dills where I want THANKS

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply