[{"content":" Welcome to my Newsletter! I\u0026rsquo;m currently having too many ideas and, due to my research for my mater\u0026rsquo;s, I\u0026rsquo;m learning new things pretty often. So, this is my attempt to share the knowledge I\u0026rsquo;m gaining with more people.\nIf you appreciate my writting or is a courious person, give a chance to my newsletter.\nI\u0026rsquo;m inteded to write as often as possible, condensing as much content as I can.\nGET READY TO RECIEVE A LOT OF CONTENT RIGHT INTO YOUR INBOX!\n","permalink":"https://dpbm.vercel.app/news/","summary":"\u003chr\u003e\n\u003ch1 id=\"welcome-to-my-newsletter\"\u003eWelcome to my Newsletter!\u003c/h1\u003e\n\u003cp\u003eI\u0026rsquo;m currently having too many ideas and, due to my research for my mater\u0026rsquo;s, I\u0026rsquo;m learning new things pretty often. So, this is my attempt to share the knowledge I\u0026rsquo;m gaining with more people.\u003c/p\u003e\n\u003cp\u003eIf you appreciate my writting or is a courious person, give a chance to my newsletter.\u003c/p\u003e\n\u003cdiv class=\"newsletter\"\u003e\u003ciframe src=\"https://iamdpbm.substack.com/embed\" width=\"480\" height=\"320\" style=\"border: 1px solid #EEE; background: white\" frameborder=\"0\" scrolling=\"no\"\u003e\u003c/iframe\u003e\n\u003c/div\u003e\n\n\u003cp\u003eI\u0026rsquo;m inteded to write as often as possible, condensing as much content as I can.\u003c/p\u003e","title":"Newsletter"},{"content":"The algorithm Since Shor\u0026rsquo;s algorithm, QFT (Quantum Fourier Transform) has become one of the most important pieces in quantum circuits.\nClassically, Fourier Transform is a transformation used to map signals from time domain to frequency domain.\nClassical Fourier Transform In qunatum, it acts similarly, however the idea here is to turn visible phase patterns.\nThe overall formulation for QFT is:\n$$\\ket{\\phi_y} = \\frac{1}{\\sqrt{2^n}}\\sum_{x=0}^{2^n-1}{e^{\\frac{2\\pi i}{2^n}xy}\\ket{x}}$$\nbeing $n$ the number of qubits and $x$ and $y$ the basis states we are mapping.\nTo generalize, we could formulate it to generate a matrix such as:\n$$\\ket{\\phi} = \\frac{1}{\\sqrt{2^n}}\\sum_{y=0}^{2^n-1}\\sum_{x=0}^{2^n-1}e^{\\frac{2\\pi i}{2^n}xy}\\ket{x}\\bra{y}$$\nThe idea is that, by manipulating phases we can embbed something that wasn\u0026rsquo;t measurable into the probability distribution.\nFor a single qubit, it\u0026rsquo;s done by applying a hadammard gate onto the given $\\ket{\\phi}$ state.\n$$H\\ket{\\phi}$$\nBut for larger circuits, QFT can be implemented, in the standard format, by applying a sequence of Hadammards, CPhases and SWAP gates.\nExample Qiskit QFT implementation Example Given a circuit with $2$ qubits and we are aiming to apply QFT to visualize the distribution generated by a phase $e^{\\frac{i \\pi}{2}}$.\nExample Qiskit QFT 2 qubits for phase $e^{\\frac{i \\pi}{2}}$ which after measuremente give us:\nExample Qiskit QFT 2 qubits for phase $e^{\\frac{i \\pi}{2}}$ - outcomes (bit-strings) When we apply $H$ and $P(\\pi/2)$, the state becomes: $\\frac{1}{\\sqrt{2}} \\left(\\ket{00} + i \\ket{01} \\right)$.\nSince QFT for $2$ qubits is:\n$$ QFT_4 = \\frac{1}{2} \\begin{bmatrix} 1 \u0026amp; 1 \u0026amp; 1 \u0026amp; 1 \\\\ 1 \u0026amp; e^{\\frac{\\pi i}{2}} \u0026amp; e^{\\pi i} \u0026amp; e^{\\frac{3\\pi i}{2}} \\\\ 1 \u0026amp; e^{\\pi i} \u0026amp; e^{2 \\pi i} \u0026amp; e^{3 \\pi i} \\\\ 1 \u0026amp; e^{\\frac{3\\pi i}{2}} \u0026amp; e^{3 \\pi i} \u0026amp; e^{\\frac{9\\pi i}{2}} \\\\ \\end{bmatrix} = \\begin{bmatrix} 1 \u0026amp; 1 \u0026amp; 1 \u0026amp; 1 \\\\ 1 \u0026amp; i \u0026amp; -1 \u0026amp; -i \\\\ 1 \u0026amp; -1 \u0026amp; 1 \u0026amp; -1 \\\\ 1 \u0026amp; -i \u0026amp; -1 \u0026amp; i \\\\ \\end{bmatrix} $$\nafter applying $QFT_4$ on the previous state we have: $\\frac{\\sqrt{2}}{4} \\left( \\left(1 + i\\right)\\ket{00} + \\left(1 - i\\right)\\ket{10} \\right) + \\frac{\\sqrt{2}}{2} \\ket{11} $.\nTo understand it better, look closely to each column in $QFT_4$, notice that each column goes with some predefined step. At the first column the step is $e^{0}$, the second is $e^{\\frac{\\pi i}{2}}$, the third $e^{\\pi i}$ and the last one $e^{\\frac{3 \\pi i}{2}}$. This way, if we select a column to be part of our superposition state, it will walk with this steps.\nIn our example, we had the state:\n$$ \\ket{\\phi} = \\frac{1}{\\sqrt{2}} \\begin{pmatrix} e^0 \\\\ e^{\\frac{\\pi i}{2}} \\\\ 0 \\\\ 0 \\end{pmatrix} $$\nWith the application of $QFT_4$, the state is transformed into:\n$$ \\ket{\\phi}_{QFT} = \\frac{1}{2\\sqrt{2}} \\begin{pmatrix} e^0 e^0 + e^{\\frac{\\pi i}{2}} e^0 \\\\ e^0 e^0 + e^{\\frac{\\pi i}{2}} e^{\\frac{\\pi i}{2}} \\\\ e^0 e^0 + e^{\\frac{\\pi i}{2}} e^{\\pi i}\\\\ e^0 e^0 + e^{\\frac{\\pi i}{2}} e^{\\frac{3 \\pi i}{2}} \\\\ \\end{pmatrix} $$\nSince the $\\ket{00}$ is mapped by the first column it won\u0026rsquo;t be affected, but the second one will have its phase altered by steps of $e^{\\frac{\\pi i}{2}}$. In a hypothetical and simpler version, if we have no superposition neither a phase, the state would be:\n$$ \\ket{01}_{QFT} = \\frac{1}{2} \\begin{pmatrix} e^0 \\\\ e^{\\frac{\\pi i}{2}} \\\\ e^{\\pi i}\\\\ e^{\\frac{3 \\pi i}{2}} \\\\ \\end{pmatrix} = \\frac{1}{2} \\begin{pmatrix} 1 \\\\ i \\\\ -1 \\\\ -i \\\\ \\end{pmatrix} $$\nwhich is pretty much a round around the unitary complex circle in terms of phases (which could be seen as a sinusoidal signal), but raising an equal superposition.\nBut in a different format, if we had a superposition $\\ket{1+}$:\n$$ \\ket{1+}_{QFT} = \\frac{1}{2\\sqrt{2}} \\begin{pmatrix} e^{0} + e^{0} \\\\ e^{\\pi i} + e^{\\frac{3 \\pi i}{2}} \\\\ e^{2 \\pi i} + e^{3 \\pi i} \\\\ e^{3 \\pi i} + e^{\\frac{9 \\pi i}{2}} \\\\ \\end{pmatrix} = \\frac{1}{2\\sqrt{2}} \\begin{pmatrix} 2 \\\\ -1 - i \\\\ 0 \\\\ -1 + i \\\\ \\end{pmatrix} $$\nWhich is completely different step in the circle.\nA nice visualization of it is presented in the qiskit page:\nQFT steps in the circle (sinusoidal) Overall In general, QFT can be seen as a method to make usage of phases to extract periods via phase steps, the idea is to encode the phases someway and via an specific step, extracting information about a superposition state.\nThis algorithm is one of the most important pieces of quantum code you can find, being applied in algorithms such as Quantum pattern recoginition, Shor\u0026rsquo;s algorithm and QPE.\nFor more information check:\nhttps://quantum.cloud.ibm.com/learning/en/modules/computer-science/qft https://arxiv.org/abs/quant-ph/0201067 ","permalink":"https://dpbm.vercel.app/posts/understanding-qft-in-a-simpler-way-eji9601nmdgqw/","summary":"QFT is such an important piece in the filed of quantum computing. Understanding it is important to master most part of quantum algorithms, so let\u0026rsquo;s dive in.","title":"Understanding QFT in a simpler way"},{"content":"Some days ago, I\u0026rsquo;ve been participating the Qiskit Summer school. It was such a great experience that made me learn a lot.\nBesides techniques on error mitigation, correction, optimization, etc; that were exposed during the course, the event brought me some pretty nice ideas that led me to write this blog post.\nBack story Sometime ago, I answered a question in the quantum computing stackexchange about if there were such a thing like a quantum operational system. The answer I gave was:\nMy Answer on the topic Since then, I\u0026rsquo;ve been thinking on the topic.\nAre we able to have something relative to classical operational systems, or even CPUs, in quantum computers?\nMaybe? In theory, quantum computation is an extension of classical computation. We can have the same bit-strings generated by a classical computer in a quantum form by quantum means.\nSince we can have universal gate set that act in many different states in the Hilbert space and we can map the same classical bit-strings in a quantum system, shouldn\u0026rsquo;t it be possible to have such a quantum OS/CPU?\nEven thought it seems a little easy to answer that, at the same time some questions might appear:\nHow does these systems could benefit from quantum weirdness, like entanglment and superposition? Since every operation must be reversible, isn\u0026rsquo;t it a waste of time undoing each computation in order to have clean qubits to work with? What about measurements? A quantum OS would be pretty much a program in superposition that when we measure it turns into its classical relative? At first, It may not seem as something useful, since we would have constantly measure the system and have the OS, or whatever program, we want to be collapsed with some probability.\nOperating Systems in superposition Classical systems have some advantages when dealing with these issues. Adding a bit in classical systems is way easier and cheaper than current quantum computers.\nIn a classical computer we can copy, move and transform data as much as we can. However, in quantum systems we are limited by the Non-cloning theory and desctrutive measurements.\nIn comparison, a classical system can easily apply operations, get the result imediately, or after some CPU cycles, and apply another operation in response. In a quantum system otherwise, we would require classical intervention or the addition of auxiliary qubits and mathematical tricks that could be expensive to generalize, or maybe not possible at all.\nALU in superposition After sometime thinking on the topic, I decided to make a simple circuit to start reasoning on the topic.\nMy first attempt was to get a relative to an ALU in quantum.\nA simple ALU using quantum circuits In this simple circuit, we have $6$ qubits. The first three are in charge of holding the address of an operation. The next two are the inputs $\\ket{ab}$. The last one is the data bus which I named $\\ket{c}$.\nThe circuit implements the following operations for two bits (the sequence will differ when using little-endian or big-endian, we are using big-endian but Quirk circuits use little-endian):\nOP address XOR 000 AND 001 OR 010 NOT 011 Shift right, Shift left and SUB 100 After operating these inputs and recieving the outcome, we could store it in a sort of memory such as the bucket memory or many other methods for QRAM.\nI remember sometime ago I \u0026ldquo;implemented\u0026rdquo; a relative to a Latch/Flip-Flop in a quantum circuit, I couldn\u0026rsquo;t find it, unfortunately, but I remember it made me so glad.\nTo make a complete 1:1 transition from classical to quantum, we could also implement this Latch as a data saver, composing it to get larger memories.\nAnother interesting thing about such quantum systems is the ability to put things in superposition. Taking the previous ALU example, we could define equal superpositions for input qubits.\nTruth Table for the ALU Using superposition we would be able to evaluate multiple things at once, however it would be trick to store in memory due to no-cloning theory.\nAnother interesting thing is that, to process anything we need to apply this unitary onto a state $\\ket{\\phi}$ and then to reutilize these qubits we would need to undo the computationby applying $U^\\dagger$.\nIn general! We can conclude three things here:\nIt is therorectically possible to map a classical system into quantum, since it\u0026rsquo;s pretty much an extension, so using classical methods are some way possible (not quite sure on that tho) What would be the usefulness of that? How difficult it would be to exploit the quantum effects to actually create an OS or CPU that\u0026rsquo;s better than its classical relative. Discussion Even though having a quantum OS or CPU would be a really insteresting and nerdy stuff to see, it would have no use for now.\nThe quantum systems now days are pretty much static things. We don\u0026rsquo;t have enough coeherent time to get outcomes in between.\nClassical computers rely deeply on their memory management and the iterative calls to the CPU and peripherals. If we could some way apply dinamically operations, read and store we would get something similar to classical.\nOne would argue that we already have dynamic circuits. Althought that\u0026rsquo;s true, what\u0026rsquo;s the use of having a classical computer to manage a quantum computer that\u0026rsquo;s simulating a classical computer.\n","permalink":"https://dpbm.vercel.app/posts/are-quantum-computers-turing-complete-igyfr6bwruzci/","summary":"Let\u0026rsquo;s reason if it\u0026rsquo;s possible to have a general quantum computer like we have with classical","title":"Are quantum computers turing complete?"},{"content":"These days I\u0026rsquo;ve been studying a bit about QAOA. It\u0026rsquo;s been a bit tough to really get the mathematical understanding, since my background is computer science and some mathematical intuition seemed frightening at first, given that I had never heard of trotterizarion and some things like Taylor series or whatever before.\nIn this article, my goal is to try to explain it in a simple way a computer scientist could understand easily. I\u0026rsquo;m not here to state that the mathematical portion is not important, but rather to give a more visual and simpler way to understand the goal of each part of the algorithm.\nFor a more interested reader, I\u0026rsquo;ll list some papers for a deep diving in the topic at the end.\nSince I\u0026rsquo;m not a specialist, I\u0026rsquo;m open for comments addressing my mistakes and feel free to share your knowledge as well.\nThe algorithm Quantum computing has been a topic of interest for many different fields.\nOnce the quantum hardware is not ready for large circuits yet, researchers have been applying different hybrid approaches to take advantage of the existing ones.\nThis hybrid approach levarages variational quantum circuits, which are pretty much circuits that encode some sort of state, and a classical computer is responsible for getting the result, usually the expectation value of the circuit over a Hamiltonian, and based on an optimization procedure the rotation angles of the circuit are updated, repeating the process until a threshold, or a max iterations limit, is reached.\nMathematically, we apply a unitary $U$ with parameters $\\theta$ over a quantum state $\\ket{\\psi_0}$, where $\\ket{\\psi_0}$ can be any initial state like $\\ket{0}^{\\otimes{n}}$, such that $U(\\theta)\\ket{\\psi_0} = \\ket{\\psi(\\theta)}$. Then, later we extract the expectation value as $\\bra{\\psi(\\theta)} \\hat{H} \\ket{\\psi(\\theta)}$, being $\\hat{H}$ the Hamiltonian encoding the problem. Our goal is to minimize the energy of the system, such that our state is the eigenstate which is relative to the minimum, or close, eigenvalue of $\\hat{H}$.\nThis Parametric approach is applied over many different algorithms such as VQE, QAOA, QNN, etc.\nIn the general manner, the circuit we use is called ansatz. Taking the definition from wikipedia: https://en.wikipedia.org/wiki/Ansatz, we have that Ansatz is pretty much a \u0026ldquo;Trial Answer\u0026rdquo;, i.e. an approximation over a problem.\nAnsatz definition from wikipedia In the literature, there\u0026rsquo;re many different approaches to generate an ansatz such as EfficientSU2, Real Amplitudes, Evolved Operator Ansatz and also our QAOA Ansatz. In the qiskit library, many of these can be found and used as easily as calling a function or instantiating an object.\nThe QAOA Ansatz definition from Qiskit Library In our case, the QAOA Ansatz is composed of two layers. The first layer encodes the problem based on the Hamiltonian, and the second one, also called as mixer, apply other rotations to explore the search space.\nThe QAOA Circuit Understanding the structure In the original paper arXiv:1411.4028, the structure is defined in such a way that applying this combination of layers over and over again $p$ times as $p$ tends to $\\infty$, the algoritm is able optimize the problem. For sure it in reality depends on many factors, such as how the Hamiltonian was defined, the way the problem was thought, etc.\nFor us to understand it more deeply without diving too much in math, let\u0026rsquo;s look on how the ansatz look like internally. For that, we gonna use the pre-defined ansatz from Qiskit and extract its internals.\nfrom qiskit.quantum_info import SparsePauliOp from qiskit.circuit.library import qaoa_ansatz cost_operator = SparsePauliOp([\u0026#34;ZZ\u0026#34;]) ansatz = qaoa_ansatz(cost_operator, reps=1, insert_barriers=False) ansatz.draw(\u0026#34;mpl\u0026#34;, filename=\u0026#34;../qaoa-circuit-example-1.png\u0026#34;) Using this code, we create a QAOA ansatz with a cost operator (Hamiltonian) which is $\\hat{H} = \\sigma^{z}_0 \\sigma^{z}_1$, applying a Pauli Z operator over both two qubits we have defined.\nThe final circuit is:\nThe QAOA for two qubits with $\\hat{H} = \\sigma^{z}_{0} \\sigma^{z}_{1}$ The $ZZ$ gate may seem a bit different for us, so let\u0026rsquo;s check the documentation.\nThe RZZ Gate definition in Qiskit The RZZ Gate matrix definition in Qiskit - A Multiplexed RZ gate As we presume from the reference, the $RZZ$ is pretty much $RZ$ gates in a different setup, so let\u0026rsquo;s decompose it to see if we can extract it.\ndecomposed = ansatz.decompose(\u0026#34;rzz\u0026#34;) decomposed.draw(\u0026#34;mpl\u0026#34;, filename=\u0026#34;../qaoa-circuit-example-2.png\u0026#34;) The QAOA for two qubits with $\\hat{H} = \\sigma^{z}_{0} \\sigma^{z}_{1}$, now decomposed the RZZ gate into RZ and CNOTs So, the QAOA setup is almost a set of rotations in $Z$ and $X$ based on $\\gamma$ and $\\beta$ parameters.\nOne may notice that the parameters are multiplied by $2$. It\u0026rsquo;s due to the fact that in the original formulation the equations are the following $U(C,\\gamma) = e^{-i\\gamma C} = \\prod_{a=1}^{m} e^{-i\\gamma C_a}$ for the cost part, and $U(B,\\gamma) = e^{-i\\beta B} = \\prod_{j=1}^{n} e^{-i\\beta \\sigma_j^{x}}$ for the mixer. However, the $RZ$ gate applies a phase as $e^{\\pm i\\frac{\\phi}{2}}$, so the multiplication by two comes in order to cancel out with the denominator.\nThe RZ gate definition from Qiskit Understanding Bloch Sphere Rotations Once the QAOA circuit is pretty much a sequence of rotations, we must understand how do they work. The easiest way to understand it is by looking at the Bloch Sphere.\nSometime ago I did a tiny animation on how the rotations look like in the $XYZ$ axis on the Bloch Sphere.\nThe Rotations on The Bloch Sphere As it can be seen in the video, the rotations work by \u0026ldquo;rolling\u0026rdquo; the sphere in one direction. When you rotation in the $X$ axis, for example, you basically fix the $X$ axis and move everything else accordingly.\nRotation in X Rotation in Y Rotation in Z Notice that the rotation in Z has no effect when the state is in the computation basis, so we need to change it to the Hadammard basis before applygin $RZ$ (that\u0026rsquo;s why QAOA usually start in the $\\ket{+}$ state, since this state is an eigen state of $X$, so $RX$ rotations would have no effect directly).\nRotating the state Ok, now that we have an idea of it, lets do a simple test. How does it look like in a single qubit setup?\nFor this test, we set a single qubit QAOA with Hamiltonian $\\hat{H} = \\sigma^{z}_0$, which creates the circuit:\nThe QAOA for one qubit with $\\hat{H} = \\sigma^{z}_{0}$ Let\u0026rsquo;s first find out what happens when we perform the $RZ$ rotations in the Hadammard axis.\nfrom qiskit.quantum_info import Statevector from qiskit.circuit.library import RZGate from qutip import Bloch, Qobj import numpy as np angles = np.arange(0, 2*np.pi, np.pi/10) states = [] for angle in angles: # start in the X axis state = Statevector.from_label(\u0026#34;+\u0026#34;) # apply the RZ gate with the angle state = state.evolve(RZGate(angle)) # save the state states.append(Qobj(state.data)) bloch = Bloch() bloch.add_states(states) bloch.save(\u0026#34;../bloch-rz-rotations.png\u0026#34;) Using the Qutip library we can add all the possible states in the Bloch Spehre and compare were they can appear.\nThe states generated by RZ rotations in the Bloch Sphere using angles in $[0, 2\\pi]$ Now, let\u0026rsquo;s compare with what happens when we apply a single rotation in $X$ with angle $\\pi/2$ after $RZ$.\nfrom qiskit.circuit.library import RXGate states2 = [] for angle in angles: # start in the X axis state = Statevector.from_label(\u0026#34;+\u0026#34;) # apply the RZ gate with the angle state = state.evolve(RZGate(angle)) # apply the RX gate with the fixed angle pi/2 state = state.evolve(RXGate(np.pi/2)) # save the state states2.append(Qobj(state.data)) bloch = Bloch() bloch.add_states(states2) bloch.save(\u0026#34;../bloch-rz-rx-rotations.png\u0026#34;) The states generated by RZ and RX rotations in the Bloch Sphere using angles in $[0, 2\\pi]$ for RZ and $\\pi/2$ for RX It maps the values back to $Z$, so we can get our states in the computation basis again.\nIt seems like a mix of something interesting and strange at the same time, but it\u0026rsquo;s the effect of rotation accross perpendicular axis.\nIn general, that\u0026rsquo;s how QAOA can approximate your solution. By applying a succession of rotations and then calculating the expectation value. The general idea is that the transformed state $\\ket{\\psi(\\theta)}$ gets close to the eigenstate of smallest energy of our $\\hat{H}$. Once our Hamiltonian is $\\hat{H} = \\sigma^{z}_0$, we know that the solution we are searching $\\langle \\hat{H} \\rangle = -1$, since our Hamiltonian encodes a single $Z$ operator that has minimum eigenvalue $-1$, so the state we want to reach is $\\ket{1}$, which explains this remapping between $X$ to $Z$ axis.\nGiven this toy model, our goal was to map the circuit $\\ket{\\psi} \\to \\ket{1}$, reaching the minimum value and optimizing our \u0026ldquo;problem\u0026rdquo;.\nDifferent setups with $I \\otimes Z$ As a final experiment, let\u0026rsquo;s check what happens when we use identity operators within our cost Hamiltonian.\ncost_operator_3 = SparsePauliOp([\u0026#34;I\u0026#34;]) ansatz = qaoa_ansatz(cost_operator_3, reps=1, insert_barriers=False) ansatz.draw(\u0026#34;mpl\u0026#34;, filename=\u0026#34;../qaoa-circuit-example-4.png\u0026#34;) cost_operator_4 = SparsePauliOp([\u0026#34;ZI\u0026#34;]) ansatz = qaoa_ansatz(cost_operator_4, reps=1, insert_barriers=False) ansatz.draw(\u0026#34;mpl\u0026#34;, filename=\u0026#34;../qaoa-circuit-example-5.png\u0026#34;) cost_operator_5 = SparsePauliOp([\u0026#34;IZ\u0026#34;]) ansatz = qaoa_ansatz(cost_operator_5, reps=1, insert_barriers=False) ansatz.draw(\u0026#34;mpl\u0026#34;, filename=\u0026#34;../qaoa-circuit-example-6.png\u0026#34;) Single qubit QAOA with no Z operators For this case, where $\\hat{H} = I_{0}$, no $RZ$ is used, given the matrix exponential, we would have the $I$ with some global phase, so actually nothing happens. This way we can eliminate the first part and keep only the mixer. However, once $\\ket{+}$ is an eigen state of $X$, we know that nothing would happen with any possible $\\beta$ value applied on this, only a few changes in phase and nothing else.\nTwo qubits QAOA for $Z \\otimes I$ Two qubits QAOA for $I \\otimes Z$ Now for two qubits, notice that these two examples have no $CNOT$ gates, once their Hamiltonian is only applied for local cost of single qubits. In the $ZZ$ example, we were adding a relation between qubits $0$ and $1$, so the $CNOTs$ were used to apply this correlation in form of entanglement.\nReferences For more details on the algorithms:\nA Quantum Approximate Optimization Algorithm An Introduction to the Quantum Approximate Optimization Algorithm Mixer Hamiltonian with QAOA for Max k-coloring : numerical evaluations The code examples shown here are available at: https://github.com/Dpbm/personal-blog/tree/main/content/posts/qaoa-the-simple-way-KKX4DYGABJWBM/reverse-qaoa.\nTo run it, use:\nuv sync uv run main.py ","permalink":"https://dpbm.vercel.app/posts/qaoa-the-simple-way-kkx4dygabjwbm/","summary":"I always struggled with understading deeply the QAOA algorithm, so now I want to pass my understanding in a simpler and more applied way. Basically a way a computer scientist would understand.","title":"QAOA the simple way"},{"content":"My Master\u0026rsquo;s Well, these two last weeks has been to busy to my taste!\nFor those who don\u0026rsquo;t know me, I\u0026rsquo;ve started my masters as a special student in UNESP Brazil last semester. It was a really nice period of much knowledge in computer science, a lot of work, research tests and sweat.\nWhen I was about to start as a \u0026ldquo;special student\u0026rdquo;, I was allowed to choose only for two different subjects at most. Since my thesis would need deep knowledge on algorithms and high performance computing (HPC), I was planning to take classes on these topics. However, the HPC classes schedule was not the best for me, so I started looking for something else. There were plenty of good options including AI, computer vision, databases, etc. Choosing the best one for me was hard as chase a chicken.\nFirst Semester Classes Schedule However, in the list there was something really different to me. Most part of the subjects names were written in portuguese, well all but one. This one was named \u0026ldquo;Wavelets Transform and its applications\u0026rdquo;. I had never ever heard about wavelets. I googled it a bit and saw some relation with Digital Signal processing (DSP) and some people talking the relation wit Fourier Transform.\nI had some previous knowledge on Fourier Transform, since the courses and lecture notes I took on quantum computing had the quantum relative, and because 3Blue1Brown did a great job on his video.\n3Blue1Brown Video on Fourier Transform Besides that, FT was much more like a thing that I had heard but never actually used in something mine.\nWell, but at that moment, I knew that something interesting could be extracted from it, so I decided to apply for this class.\nMy final choices was algorithms and wavelets. The first one I knew I was going to be accepted, since the professor happened to also be my advisor in my masters. But the other one, I was pretty nervous and anxious for the result. But thank god, it happened and both accepted me, so that was my first step.\nLinkedin Post When I was accepted Final projects Well, six months has passed and we finished our classes.\nDuring our classes on algorithms, we learned a lot about complexity and algorithms in general, but the main focus was in sorting algorithms both using primary (RAM) and secondary memory (HDD). It was pretty nice, since I thought the previous course I had took on the topic had some lacunes, but this one has fulfilled them. For this course we had to give a seminar and write a paper in some topic we would like to explore and give algorithm analysis about it. The topic I chose was \u0026ldquo;quantum circuit simulation using tensor networks\u0026rdquo;. It was kinda new to me, but I\u0026rsquo;ve learned a lot in the process.\nI had never dived into such a topic like this, so it was nice to me. I learned a lot about tensor networks, hypergraphs, hypergraph partitioning, and many others. The algorithms I chose to analyze was PHyper-Par from withtin the Cotengra framework. For interested readers, the original paper can be found here. I also had to analyze the KaHyPar algorithm, which is used by Hyper-Par for hypergraph partitioning, the paper can also be found here.\nThe paper I produced is in progress to be published so you\u0026rsquo;ll probably see more in the near future. For now, people interested in my project can take a peek by looking at the resources and the research materials in my github repo at https://github.com/Dpbm/mestrado-aulas/tree/main/algoritmos/projeto-seminario. At the moment I wrote this article I also found many different interesting resources which I\u0026rsquo;ll list bellow.\nhttps://github.com/kahypar https://docs.rs/mt-kahypar/latest/mt_kahypar/ Scalable Shared-Memory Hypergraph Partitioning Now, for the Wavelets course, it was a little bit more easygoing that the other. Every week we had our classes and then we a homework activity. At the end, he gave us a small test, which was in general a set of exercises to be done whithin some weeks and then handed in until July 3th. The exercises covered most part of the topics we have studied until the date he handed out, so lots of cool things, such as DTWTs 2D-DWT, DTWPT, finding some equations, etc. It was really nice.\nSince our professor allowed us to do the way we found it better, once the goal of the course was to give us the tools not to deep dive into wavelets mathematical concepts, we could do the things with software. I decided to do it by hand and test it with software, just to ensure the answers were correct. At first, I used a combination of 3 tools: PyWavelets, SymPy and Numpy.\nUsing Sympy The simpler execises were easy to test using Sympy and Numpy. We only needed to generate the matrices using the Matrix class from Sympy and apply a dot product using * operator and pprint() to nicely print the output.\n# Example sympy for Inverse DTWT from sympy import simplify, Matrix, pprint h = [ # low pass filter ] g = [ # high pass filter ] m = Matrix([ [h[0],g[0],h[2],g[2]], [h[1],g[1],h[3],g[3]], [h[2],g[2],h[0],g[0]], [h[3],g[3],h[1],g[1]], ]) v = Matrix([ # coefficients ]) pprint(simplify(m * v)) I\u0026rsquo;m not sure if I could provide the results I\u0026rsquo;ve got and the code I used online, since my professor may use the same material in the future. So, I\u0026rsquo;m not sharing it on my github. Altought, I can provide some interesting things I found in the meanwhile. Also, even though the code I used could not be shared, some notes and tests I did durig the course are also available on my Github at https://github.com/Dpbm/mestrado-aulas/tree/main/wavelet.\nSimpy is a pretty nice tool that everybody should use at some moment for mathematical equations. It features an amazing syntax, which is pretty much the same API as Numpy, which a few nuances.\nSympy Library website While I was doing this exam, I discovered some things that might be valuable for you in the future. For a more experienced Sympy user, this might seem a usual thing, but since it was my first time I found it interesting.\nSo, in general, while computing those matrices with Mallat\u0026rsquo;s algorithm, we usually want a simple coefficient, not in decimal by not too extensive. Sympy usually simplifies the maximum it can do, which sometimes was not the best for my case. To overcome this problem, I took two different approaches. At first I used the cancel() function instead of simplify(), it worked in some cases, but again there was a lot of moments that It was not enogh. So the overall best case for me was to join fractions myself. It was not hard since the coefficients were simple, so multiplying a side by $2/2$, $4/4$ or $8/8$ was the best in this case.\nI searched if there were some other approaches but the best I could find was to turn of the evaluation while computing the dot product:\nfrom sympy import pprint, evaluate with evaluate(False): a = #... the dot product .... pprint(a) For me it was not sufficient as well, but it helped me sometimes when I needed to debug some things.\nWhen you compute a dot product without evaluation in sympy, it\u0026rsquo;s straightforward to understand which coeffients are being used for each cell, so it came in handy in some of the exercicies, chiefly in those involving inverse DTWT, where I accidently misplaced filter coefficients 😅. It\u0026rsquo;s always good to remember that the $h[2]$ and $g[2]$ come first than $h[3]$ and $g[3]$.\n# CORRECT m = Matrix([ [h[0],g[0],h[2],g[2]], [h[1],g[1],h[3],g[3]], [h[2],g[2],h[0],g[0]], [h[3],g[3],h[1],g[1]], ]) # WRONG m = Matrix([ [h[0],g[0],h[3],g[3]], [h[1],g[1],h[2],g[2]], [h[2],g[2],h[0],g[0]], [h[3],g[3],h[1],g[1]], ]) Anyways, it was nice to play a bit with it.\nUsing PyWavelets For more compelex exercises, such those requiring 2D-DWPT, I tried using PyWavelets.\nPyWavelets Library website This is another amazing python library that you should try. However, there are some big nuances you should now first.\nThere\u0026rsquo;s no trend of fluctuation in this library. Some portion of the wavelets literature use approximation for low-frequency portion and detail for high-frequency portion, in our case they are relatives to trend and fluctuation respectively. If you want to be sure the coefficients you are using you can use some code like this to verify if the values match the expected: import pywt # example Daubechies: vanishing moments=2, support size=4 db = pywt.Wavelet(\u0026#34;db2\u0026#34;) print(\u0026#34;Decomposition (analysis)\u0026#34;) print(\u0026#34;trend: \u0026#34;, db.dec_lo) print(\u0026#34;fluctuation: \u0026#34;, db.dec_hi) print(\u0026#34;-\u0026#34;*30) print(\u0026#34;Reconstruction (synthesis)\u0026#34;) print(\u0026#34;trend: \u0026#34;, db.rec_lo) print(\u0026#34;fluctuation: \u0026#34;, db.rec_hi) All values are normalized. I cannot say for sure what\u0026rsquo;s the values for each one, but for Daub-2 the filters coefficients were weighted by $\\frac{1}{\\sqrt{2}}$, so to get the values as usual you should multiply the values by $\\sqrt{2}$. import pywt import numpy as np # example Daubechies: vanishing moments=2, support size=4 db = pywt.Wavelet(\u0026#34;db2\u0026#34;) print(\u0026#34;Decomposition (analysis)\u0026#34;) print(\u0026#34;trend: \u0026#34;, np.array(db.dec_lo) * np.sqrt(2)) print(\u0026#34;fluctuation: \u0026#34;, np.array(db.dec_hi) * np.sqrt(2)) print(\u0026#34;-\u0026#34;*30) print(\u0026#34;Reconstruction (synthesis)\u0026#34;) print(\u0026#34;trend: \u0026#34;, np.array(db.rec_lo) * np.sqrt(2)) print(\u0026#34;fluctuation: \u0026#34;, np.array(db.rec_hi) * np.sqrt(2)) It seems like Decomposition and Reconstruction are flipped. While I was testing the results, I found that the reconstruction was acting as decomposition and vice-versa. I\u0026rsquo;m not sure if I was wrong in some way, but found it a bit confusing. So in my tests I just used it flipped.\nThey may not be using Mallat\u0026rsquo;s algorithm for the calculations. I was doing the 2D-DWPT for one of the exercises, and for some reason the values were too off to what I was expecting (I was using the builtin dwt2 methods). I tested many things, even used Chatgpt to help me understand the problem. At end, I understood that they were not using the regular Mallat\u0026rsquo;s algorithm, so even though the answer was pretty much the same, the step-by-step was different, so it only made more confused.\nTo solve that, I decided to take a step back and use the regular Sympy approach such as in the following:\nimport numpy as np from sympy import simplify, Matrix, pprint s = Matrix([ # the 2D data ]) h = [ # low pass filter ] g = [ # high pass filter ] m = Matrix([ [h[0],h[1],h[2],h[3]], [g[0],g[1],g[2],g[3]], [h[2],h[3],h[0],h[1]], [g[2],g[3],g[0],g[1]], ], evaluate=False) m_t = m.T first = s*m_t pprint(simplify(m*first)) second_part = m*(s*m_t) second = (m*(s*m_t)).evalf() pprint(simplify(second_part)) s_m = np.array(s).flatten() print(sum([i*i for i in s_m])) s_m_2 = np.array(second).flatten() print(sum([i*i for i in s_m_2])) print(\u0026#34;A: \u0026#34;, s_m_2[0]**2 + s_m_2[2]**2 + s_m_2[8]**2 + s_m_2[10]**2) print(\u0026#34;B: \u0026#34;, s_m_2[1]**2 + s_m_2[3]**2 + s_m_2[9]**2 + s_m_2[11]**2) print(\u0026#34;C: \u0026#34;, s_m_2[4]**2 + s_m_2[6]**2 + s_m_2[12]**2 + s_m_2[14]**2) print(\u0026#34;D: \u0026#34;, s_m_2[5]**2 + s_m_2[7]**2 + s_m_2[13]**2 + s_m_2[15]**2) print(A) print(B) print(C) print(D) print(A+B+C+D) print(\u0026#34;-----Part 2-----\u0026#34;) print(\u0026#34;-----A-----\u0026#34;) A_v = [s_m_2[0], s_m_2[2], s_m_2[8], s_m_2[10]] s_A_2 = Matrix([ [ A_v[0], A_v[1], A_v[0], A_v[1] ], [ A_v[2], A_v[3], A_v[2], A_v[3] ], [ A_v[0], A_v[1], A_v[0], A_v[1] ], [ A_v[2], A_v[3], A_v[2], A_v[3] ], ]) first_A = s_A_2 * m_t pprint(first_A.evalf()) second_A = m*first_A pprint(simplify(second_A)) print(\u0026#34;-----B-----\u0026#34;) B_v = [s_m_2[1], s_m_2[3], s_m_2[9], s_m_2[11]] s_B_2 = Matrix([ [ B_v[0], B_v[1], B_v[0], B_v[1] ], [ B_v[2], B_v[3], B_v[2], B_v[3] ], [ B_v[0], B_v[1], B_v[0], B_v[1] ], [ B_v[2], B_v[3], B_v[2], B_v[3] ], ]) first_B = s_B_2 * m_t pprint(first_B.evalf()) second_B = m*first_B pprint(simplify(second_B)) print(\u0026#34;-----C-----\u0026#34;) C_v = [s_m_2[4], s_m_2[6], s_m_2[12], s_m_2[14]] s_C_2 = Matrix([ [ C_v[0], C_v[1], C_v[0], C_v[1] ], [ C_v[2], C_v[3], C_v[2], C_v[3] ], [ C_v[0], C_v[1], C_v[0], C_v[1] ], [ C_v[2], C_v[3], C_v[2], C_v[3] ], ]) first_C = s_C_2 * m_t pprint(first_C.evalf()) second_C = m*first_C pprint(simplify(second_C)) print(\u0026#34;-----D-----\u0026#34;) D_v = [s_m_2[5], s_m_2[7], s_m_2[13], s_m_2[15]] s_D_2 = Matrix([ [ D_v[0], D_v[1], D_v[0], D_v[1] ], [ D_v[2], D_v[3], D_v[2], D_v[3] ], [ D_v[0], D_v[1], D_v[0], D_v[1] ], [ D_v[2], D_v[3], D_v[2], D_v[3] ], ]) first_D = s_D_2 * m_t pprint(first_D.evalf()) second_D = m*first_D pprint(simplify(second_D)) It was a bit more complex than just plugging values into a function, but it was best to ensure my calculations were correct.\nEven with this cons, PyWavelets is still amazing, and I\u0026rsquo;ll show you how I used it later in my project.\nMy Professor\u0026rsquo;s code So, after my last post in the topic Wavelets for processing images - Kinda cool I\u0026rsquo;d say, we had only two more classes.\nAt that time, I was struggling with managing a bunch of things I wanted and had to do, such as my article for the Algorithm\u0026rsquo;s class. I knew I could do everything in time, but the imposter syndrome was knocking at the door.\nAt that time, was doing some exercises a week, but the problems with PyWavelets were consuming my mental energy. However, the last class brought an enlighment to me.\nMy professor, some weeks prior had made available some C code implementing most part of the procedures we had seen. However, I forgot about that completely. While I was struggling with the exercises, I thought about using my cuda library CuMallat for it, but my code was to simple and it couldn\u0026rsquo;t handle 2D shaped input, besides it being too experimental with no much tests.\nCuMallat - My library for Mallat\u0026#39;s algorithm in cuda But at the end of the last class, a colleague asked a question to my professor and said he was using the provided C code to verify his answers, so it brought my the light I was needing.\nI tested everything again with his procedures and compared with the sympy + pywavelets results, it was amazing because the code was also simple to understand and modify, requiring no external dependencies or specific knowledge. Unfortunately I suppose I can\u0026rsquo;t share this code without permission, but I can assure that it was pretty handy.\nI found some incorrect answers do to signal flipped I accidently had done, some rounding problems but at the end the exam was complete and ready to be deliveried just in time 😉.\nThe Penultimate class The last two classes were short, but really interesting.\nIn the penultimate class we learned a little about Stationary DTWT. The idea is that, in theory, when we use Wavelets, they should be linear and invariant in time. However, If we apply two times the DTWT in both the original signal $s[\\cdot]$ and a shifted version of it, both results will differ a lot.\nAs the example he gave us, suppose the signal $s[\\cdot] = { 2,3,-4,5,1,5,3,-2}$ is going to be processed via DTWT using Haar filters.\nDTWT as usual ($j=1$) Now if we do the same but shifting the values by one position to the right as in $s_s[\\cdot] = { -2,2,3,-4,5,1,5,3}$, the final result is completely different.\nDTWT of $s_s[\\cdot]$ ($j=1$) This happens because the mallats algorithm directly applies the downsampling. In that matrix we construct to process signal via Mallat\u0026rsquo;s algorithm, the two zeros we add at the beggining of each pairs of rows,one is meant to adjust embed the downsampling, so in theory we could remove it, but it would imply a series of different modifications which would cause too much confusion and problems in the meanwhile.\nA more elegant solution is to do the following:\ncalculate the regular DTWT for $s[\\cdot]$ calculate the same DTWT by for $s_s[\\cdot]$ construct the STDWT based on the coefficients of the results in an specific order SDTWT using the procedure ($j=1$) One thing one may notice is that the signal actually has grown, and that\u0026rsquo;s the what was supposed to happen, since we got rid of the downsampling. The same procedure could be applied in a 2D manner, but it would enlarge the image too much. Even though it\u0026rsquo;s not usual, I tested it with PyWavelets, which happens to have a function for it.\nimport os from PIL import Image import pywt import numpy as np import matplotlib.pyplot as plt img = Image.open(os.path.join(\u0026#34;.\u0026#34;, \u0026#34;test.png\u0026#34;)).convert(\u0026#34;L\u0026#34;) width, height = img.size new_width = 2 ** int(np.floor(np.log2(width))) new_height = 2 ** int(np.floor(np.log2(height))) new_width = max(1, new_width) new_height = max(1, new_height) left = (width - new_width) // 2 top = (height - new_height) // 2 right = left + new_width bottom = top + new_height cropped_img = img.crop((left, top, right, bottom)) data = np.asarray(cropped_img, dtype=np.float32) cA, (cB, cC, cD) = pywt.swt2(data, \u0026#39;haar\u0026#39;, level=1)[0] h,w = cA.shape quadrants = np.zeros(shape=(2*h,2*w)) quadrants[:h, :w] += cA quadrants[:h, w:] += cB quadrants[h:, :w] += cC quadrants[:h, :w] += cD fig,ax = plt.subplots(2,1,figsize=(15,20)) ax[0].imshow(cropped_img, cmap=\u0026#34;grey\u0026#34;) ax[0].axis(\u0026#34;off\u0026#34;) ax[0].set_title(\u0026#34;Original Image\u0026#34;) ax[1].imshow(quadrants, cmap=\u0026#34;grey\u0026#34;) ax[1].axis(\u0026#34;off\u0026#34;) ax[1].set_title(\u0026#34;SDTWT_1\u0026#34;) #plt.show() fig.savefig(os.path.join(\u0026#34;..\u0026#34;, \u0026#34;processed.png\u0026#34;), bbox_inches=\u0026#34;tight\u0026#34;) print(\u0026#34;Original Size: \u0026#34;, (new_height, new_width)) print(\u0026#34;Processed Quadrant: \u0026#34;, (h,w)) print(\u0026#34;Complete Processed size: \u0026#34;, (h*2,w*2)) The script above produce the following image and output.\n2D-SDTWT for a sample image The sizes of each part of this experiment (2D SDTWT) As one can see, the it\u0026rsquo;s pretty much the same as doing the regular 2D-DWT, however the change is in the size, now the size of each quadrant is the same as the original image and the whole processed matrix is $\\times 2$ the size of a regular one. Also, it worth noticing that as the regular procedures we\u0026rsquo;ve been using, this one also requires the input to be a power of two, that\u0026rsquo;s why the original image was cropped.\nThe script above is available in my blog Github repo at https://github.com/Dpbm/personal-blog/tree/main/content/posts/the-processing-tool-nobody-talks-about-P65iteFu0RhKv/sdtwt and can be executed using:\nuv sync uv run main.py It\u0026rsquo;s also interesting noticing that calculating the inverse of a SDTWT is as simple as undoing the selection of coefficients and at level 1 calculating the inverse DTWT with the signal.\nThe last class The last class was even shorter. It was more like a list of interesting things we could search later.\nHe gave us a brief overview of Matched Wavelets, DSTs, Curvelets, etc. I\u0026rsquo;m not risking myself to tell about it since we actually have never used it.\nHowever, there were a moment that I found something really interesting. Our professor was telling us about his PHD thesis. I may actually confuse things a little bit now, but the best I remember of it is that he saying about an experiment he used to create his project on Spikelets. As I understood, the idea was to study filter to get not only use the time frequency domain, but also add another one that brings together with it the shape. I\u0026rsquo;ll not try to describe it further, sorry! But actually, he showed us the experiment which later I discovered the PHD thesis that from whom created this apparatus and his papers on using it for studying this new kind of filter.\nThe apparatus consisted on a glued fly on some plastic thing, and in its visual neuron an electrode was connected and processed via an electrical signal and some computers.\nThe Apparatus for the experiment (thesis in PT-BR) I found it really interesting in fact! I read his paper Nearly symmetric orthogonal wavelets for time-frequency-shape joint analysis: Introducing the discrete shapelet transform\u0026rsquo;s third generation (DST-III) for nonlinear signal analysis which described it a bit, but I\u0026rsquo;m not familiar with the thing for now, so I\u0026rsquo;ll let it for a next post inthe future.\nHowever, I\u0026rsquo;m listing some interesting papers he showed us at his last class:\nNearly symmetric orthogonal wavelets for time-frequency-shape joint analysis: Introducing the discrete shapelet transform’s third generation (DST-III) for nonlinear signal analysis Instrumentação computacional de tempo real integrada para experimentos com o duto óptico da mosca Fusing time, frequency and shape-related information: Introduction to the Discrete Shapelet Transform’s second generation (DST-II) Discretewavelet Transform: A Signal Processing Approach The Stationary Bionic Wavelet Transform and its Applications for ECG and Speech Processing Ripples in Mathematics The Curvelet Transform Beyond the class Well, in the previous post I also told about the setup for QCOP using wavelets and how everything would work.\nIn this case, the idea was to create a pipeline like this one:\nimage --\u0026gt; 2D-DWT level 1 --\u0026gt; sum quadrants 2 and 3 --\u0026gt; enhance sharpness --\u0026gt; binarize (reduce the memory footprint - uint8) In the real implementation I did something more concise.\nInstead of this step by step, I made the kernel do everything at once, and later I decided that the sharpness was not necessary, so the final setup is:\nimage --\u0026gt; 2dwt kernel --\u0026gt; final image Kinda nice don\u0026rsquo;t you think? 🙃\nTo implement it, I thought about using any fancy stuff, like having my own Cmake setup, some makefiles, conan, whatever, NVCC.\nHowever, Cupy was the best fit for it.\nCupy website A little tangent in python I don\u0026rsquo;t know why but I\u0026rsquo;m facinated how there\u0026rsquo;re so many ways to interconnect smoothly.\nI always loved how Lua, for example, is so extendable with C. But python sometimes seems even more extendable. You can easily create a module for python using C directly with the Python header. You can use Cython, Jython, PyBind11 if you want to connect with c++, and many other things.\nCupy is another interesting stuff since it\u0026rsquo;s straight forward to compile kernels and create bridges between your code and your cuda device.\nJax is another insteresting piece of software that can do even more, connecting with TPUs if necessary.\nI can\u0026rsquo;t help loving this kind of integration.\nI remember when I was in graduate school, and tried Jython for the first time. I did a simple script to use Java Swing, it was so nice. Unfortunately the sintax was from Python two, even though I liked python2.\nfrom javax.swing import JFrame, JButton, JPanel, JOptionPane from javax.swing.JOptionPane import showMessageDialog from java.awt import Dimension, Component, GridBagLayout from java.awt.event import ActionListener, ActionEvent class Action(ActionListener): def actionPerformed(self,event): showMessageDialog(None, \u0026#34;TONTAO :)\u0026#34;, \u0026#34;OU\u0026#34;, JOptionPane.INFORMATION_MESSAGE) f = JFrame(\u0026#34;TONTO\u0026#34;) f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) f.setSize(600,800) p = JPanel() p.setLayout(GridBagLayout()) b = JButton(\u0026#34;clica aqui tontao\u0026#34;) b.setPreferredSize(Dimension(300, 20)) b.setAlignmentX(Component.CENTER_ALIGNMENT) b.setAlignmentY(Component.CENTER_ALIGNMENT) b.addActionListener(Action()) p.add(b) f.add(p) f.setVisible(True) The code above is available at https://raw.githubusercontent.com/Dpbm/faculdade/refs/heads/master/quarto-ano/python/jython-swingera.py.\nI never saw a project using Jython for real, and I don\u0026rsquo;t even know if the Jython project is still being updated. For more familiared people, please leave a comment on that!\nI also remember trying to use Brython to do a simple datascience website. I never actually did it, but it seems like the project has evolved a lot. I also saw that there are other attempts to create a thing like Brython but nothing catched my sight anymore in python for web.\nThe Brython project Back to the kernels To create the kernels, I decided to use the following approach. Each pixel in the image would be a thread, so each block would take the maximum amount of threads $1024$ and some indexing tricks would be used to calculate when to apply a filter coefficient or not.\nThe sequence of blocks and threads By using this way, it would allow me to easily get the correct pixel and extract the correct value to be applied.\nThen, we needed some way to apply the correct coefficients on the pixels. At first, we considered only images of dimensions that were power of two, so I knew that there will be no problems in getting the coefficients in a more generic way.\nThe way I thought was that, since we use the equation $Y[\\cdot\\cdot] = m[\\cdot][\\cdot](s[\\cdot][\\cdot] \\cdot m^{T}[\\cdot][\\cdot])$ as described in the previous 2D-DWT post, we could use generic coefficients and understand its behavior.\nFor this project we are using Haar by the way. Since $m[\\cdot][\\cdot] = m^{T}[\\cdot][\\cdot]$ for Haar, it was easier to calculate the parts of it.\nPatterns while applying $m[\\cdot][\\cdot] \\cdot s[\\cdot][\\cdot]$ Notice that there\u0026rsquo;s a pattern forming the the rows and columns. The same happens when applying with $m^{T}$\nPatterns while applying $s[\\cdot][\\cdot] \\cdot m^{T}[\\cdot][\\cdot]$ Joining the whole equation.\nFinal pattern for $Y[\\cdot][\\cdot]$ So look that there\u0026rsquo;s a pattern in how the values are used, this way we can use this information to make or kernel simpler.\nWhat I did was, since each thread could handle $4$ pixels at a time, I don\u0026rsquo;t need to launch kernels with more than the size of a quadrant, which is half the size of the image.\nSo at the end, the kernel was only carrying for the quadrant and doing some indexing math I was able to get the correct pixels and generate the images.\nThe kernel code for the whole image is:\nextern \u0026#34;C\u0026#34;{ __global__ void dtw2( const float* input, float* out, unsigned int quadrant_width, unsigned int quadrant_height, unsigned int img_width, unsigned int max_pixels_quadrant ){ // the total is width*height, being 1024 threads per block unsigned int global_index = (blockIdx.x * blockDim.x) + threadIdx.x; if(global_index \u0026gt;= max_pixels_quadrant) return; // indexes based on the threads indexing // thinking like half of the image (a quadrant) unsigned int width_index = global_index % quadrant_width; // internal array unsigned int height_index = global_index / quadrant_width; // external array (height/y) unsigned int original_img_w_index = width_index * 2; unsigned int original_img_h_index = height_index * 2; unsigned int curr_input_index = (original_img_h_index * img_width) + original_img_w_index; unsigned int curr_input_index_row = ((original_img_h_index+1) * img_width) + original_img_w_index; float A_val = 0.5 * (input[curr_input_index] + input[curr_input_index+1] + input[curr_input_index_row] + input[curr_input_index_row+1]); float B_val = 0.5 * (input[curr_input_index] - input[curr_input_index+1] + input[curr_input_index_row] - input[curr_input_index_row+1]); float C_val = 0.5 * (input[curr_input_index] + input[curr_input_index+1] - input[curr_input_index_row] - input[curr_input_index_row+1]); float D_val = 0.5 * (input[curr_input_index] - input[curr_input_index+1] - input[curr_input_index_row] + input[curr_input_index_row+1]); unsigned int first_quadrants_row = (height_index * img_width) + width_index; unsigned int second_quadrants_row = ((height_index + quadrant_height) * img_width) + width_index; out[first_quadrants_row] = A_val; out[first_quadrants_row + quadrant_width] = B_val; out[second_quadrants_row] = C_val; out[second_quadrants_row + quadrant_width] = D_val; } }; The result was amazing!\nAll quadrants for a power of two sized image Later, I modified this kernel to care only about the B and C values, and then binarize it by truncation when $pixel \u0026lt; 0.5$.\nextern \u0026#34;C\u0026#34;{ __global__ void dtw2_borders( const unsigned int* input, unsigned char* out, unsigned int quadrant_width, unsigned int img_width, unsigned int max_pixels_quadrant ){ // the total is width*height, being 1024 threads per block unsigned int global_index = (blockIdx.x * blockDim.x) + threadIdx.x; if(global_index \u0026gt;= max_pixels_quadrant) return; // indexes based on the threads indexing // thinking like half of the image (a quadrant) unsigned int width_index = global_index % quadrant_width; // internal array unsigned int height_index = global_index / quadrant_width; // external array (height/y) unsigned int original_img_w_index = width_index * 2; unsigned int original_img_h_index = height_index * 2; unsigned int curr_input_index = (original_img_h_index * img_width) + original_img_w_index; unsigned int curr_input_index_row = ((original_img_h_index+1) * img_width) + original_img_w_index; float B_val = 0.5 * (input[curr_input_index] - input[curr_input_index+1] + input[curr_input_index_row] - input[curr_input_index_row+1]); float C_val = 0.5 * (input[curr_input_index] + input[curr_input_index+1] - input[curr_input_index_row] - input[curr_input_index_row+1]); float sum = abs(B_val + C_val); out[(height_index * quadrant_width) + width_index] = (unsigned char) (sum \u0026gt; 0.5 ? 1 : 0); } }; Borders binarized for a power of two sized image Finally I had to deal with images of arbitrary size. Since padding it would be not the best solution, given that bigger images with a lot of zeros were not something I would like, I added a mechanism to ignore a value (add a zero) in the equation when an index would pass the limits, this way we still has the same size but everything working fine for our case.\nextern \u0026#34;C\u0026#34;{ __global__ void dtw2_any_format( const float* input, float* out, unsigned int quadrant_width, unsigned int quadrant_height, unsigned int img_width, unsigned int max_pixels_quadrant, unsigned int max_pixels_image ){ unsigned int global_index = (blockIdx.x * blockDim.x) + threadIdx.x; if(global_index \u0026gt;= max_pixels_quadrant) return; unsigned int width_index = global_index % quadrant_width; // internal array unsigned int height_index = global_index / quadrant_width; // external array (height/y) unsigned int original_img_w_index = width_index * 2; unsigned int original_img_h_index = height_index * 2; unsigned int curr_input_index = (original_img_h_index * img_width) + original_img_w_index; unsigned int curr_input_index_row = ((original_img_h_index+1) * img_width) + original_img_w_index; float current_pixel = curr_input_index \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index]; float next_col_pixel = (curr_input_index+1) \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index+1]; float next_row_pixel = curr_input_index_row \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index_row]; float diag_pixel = (curr_input_index_row+1) \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index_row+1]; float A_val = 0.5 * (current_pixel + next_col_pixel + next_row_pixel + diag_pixel); float B_val = 0.5 * (current_pixel - next_col_pixel + next_row_pixel - diag_pixel); float C_val = 0.5 * (current_pixel + next_col_pixel - next_row_pixel - diag_pixel); float D_val = 0.5 * (current_pixel - next_col_pixel - next_row_pixel + diag_pixel); unsigned int first_quadrants_row = (height_index * img_width) + width_index; unsigned int second_quadrants_row = ((height_index + quadrant_height) * img_width) + width_index; out[first_quadrants_row] = A_val; out[first_quadrants_row + quadrant_width] = B_val; out[second_quadrants_row] = C_val; out[second_quadrants_row + quadrant_width] = D_val; } }; Quadrants using image of arbitrary size And the same for binary borders.\nextern \u0026#34;C\u0026#34;{ __global__ void dtw2_borders_any_format( const unsigned int* input, unsigned char* out, unsigned int quadrant_width, unsigned int img_width, unsigned int max_pixels_quadrant, unsigned int max_pixels_image ){ unsigned int global_index = (blockIdx.x * blockDim.x) + threadIdx.x; if(global_index \u0026gt;= max_pixels_quadrant) return; unsigned int width_index = global_index % quadrant_width; // internal array unsigned int height_index = global_index / quadrant_width; // external array (height/y) unsigned int original_img_w_index = width_index * 2; unsigned int original_img_h_index = height_index * 2; unsigned int curr_input_index = (original_img_h_index * img_width) + original_img_w_index; unsigned int curr_input_index_row = ((original_img_h_index+1) * img_width) + original_img_w_index; float current_pixel = curr_input_index \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index]; float next_col_pixel = (curr_input_index+1) \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index+1]; float next_row_pixel = curr_input_index_row \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index_row]; float diag_pixel = (curr_input_index_row+1) \u0026gt;= max_pixels_image ? 1.0 : input[curr_input_index_row+1]; float B_val = 0.5 * (current_pixel - next_col_pixel + next_row_pixel - diag_pixel); float C_val = 0.5 * (current_pixel + next_col_pixel - next_row_pixel - diag_pixel); float sum = abs(B_val + C_val); out[(height_index * quadrant_width) + width_index] = (unsigned char) (sum \u0026gt; 0.5 ? 1 : 0); } }; Binary borders with images of arbitrary size All this code can be seen in the notebook at my QCOP project at https://github.com/Dpbm/qcop/blob/main/notebooks/kernels.ipynb.\nSince it was working nicely, I integrated it on my pipeline and recreated the dataset.\n@staticmethod def _transform_image(img:Image) -\u0026gt; torch.Tensor: \u0026#34;\u0026#34;\u0026#34; Transform and normalize a PIL image into a torch tensor ranging values from 0 to 1. \u0026#34;\u0026#34;\u0026#34; img = img.convert(\u0026#34;L\u0026#34;) width,height = img.size quadrant_w, quadrant_h = int(np.ceil(width/2)), int(np.ceil(height/2)) dtw2 = cp.RawKernel(kernel, \u0026#34;dtw2_borders\u0026#34;) gpu_img = cp.asarray(img,dtype=cp.uint32) out = cp.zeros((quadrant_h, quadrant_w), dtype=cp.uint8) n_blocks = int(np.ceil((quadrant_h*quadrant_w)/N_THREADS)) dtw2((n_blocks,), (N_THREADS,), (gpu_img, out, quadrant_w, width, quadrant_h*quadrant_w, width*height)) cp.cuda.runtime.deviceSynchronize() return torch.tensor(out.get()) One thing that was really nice to me was the final dataset size. I was using a H5 file format which was taking almost $24Gb$ a single file.\nOld version size But now the file is less than $2Gb$.\nNew H5 file size The dataset is available both in my kaggle profile and huggingface at https://www.kaggle.com/datasets/dpbmanalysis/quantum-circuit-images and https://huggingface.co/datasets/Dpbm/quantum-circuits respectively.\nI also generate some reports in HTML using Jupyter during the dataset creating, which was nice to have a look on what has happened during the creation and how the data was cleaned.\nThere\u0026rsquo;s still a lot of work for this project. I now need to create the vision model, I\u0026rsquo;m researching it right now. Which models or architectures would you guys recommend me? I thought about using maybe Res-Net or something like that.\nInterested readers can reffer to my project at https://github.com/Dpbm/qcop. Feel free to add an issue or open a pull request if you wish 😉.\n","permalink":"https://dpbm.vercel.app/posts/the-processing-tool-nobody-talks-about-p65itefu0rhkv/","summary":"This semester many things happened, discover some interesting stuff about my masters and how Wavelets are amazing in so many ways, including feature extraction and image processing!","title":"The processing tool nobody talks about!"},{"content":"I\u0026rsquo;ve been working in some projects and for a specific problem I needed to have more control in my network.\nI need to setup more advanced stuff, like more specific routing rules, etc.\nI could have done that on my router, but it could affect the usage for my family. So, thank god, I\u0026rsquo;ve got some old TP-Link routers as a gift from a friend, who was trying to get rid of this \u0026ldquo;junk\u0026rdquo;.\nWhen I saw them I decided to try and install OpenWRT.\nI\u0026rsquo;ve never used it before, but I had heard so many cool stuff about it, so I couldn\u0026rsquo;t help giving a try.\nThe model I was using was a TP-Link TL-WR840N v4 - BR and the official guide to install it is available at: https://openwrt.org/toh/tp-link/tl-wr840n_v4.\nTo install I had to setup a TFTP server and set the machine to ip 192.168.0.66, then connect wired the computer and the router through any LAN port, hold the reset button and then power-on the router.\nFor that, I did a small setup with my Raspberry-pi 3b+. I installed the package ftfpd-hpa, setup the server as disclosed in https://www.howtoraspberry.com/2022/03/how-to-build-a-tftp-server-on-a-raspberry-pi/. Then followed the installation guide from the openwrt page, and flashed the firmware and update.\nAt first, I was kinda scary because the page: 192.168.1.1 was not working, I thought that maybe the setup didn\u0026rsquo;t work or whatever. Thank good I had forgot to change my ip back to DHCP and now after executing ping 192.168.1.1 the ping was reaching the host, after the update the web page was running correctly. Thank god!\nI\u0026rsquo;m not a network guy, but I enjoy testing stuff, it will help me so much on my Hacking stuff.\n","permalink":"https://dpbm.vercel.app/posts/openwrt-is-like-magic-c9isyfubnvw46/","summary":"\u003cp\u003eI\u0026rsquo;ve been working in some projects and for a specific problem I needed to have more control in my network.\u003c/p\u003e\n\u003cp\u003eI need to setup more advanced stuff, like more specific routing rules, etc.\u003c/p\u003e\n\u003cp\u003eI could have done that on my router, but it could affect the usage for my family. So, thank god, I\u0026rsquo;ve got some old TP-Link routers as a gift from a friend, who was trying to get rid of this \u0026ldquo;junk\u0026rdquo;.\u003c/p\u003e","title":"OpenWRT is like magic"},{"content":"Well, my course on Wavelets transform is reaching the end, which is pretty sad. When I was choosing the subjects to study this semester, this one was the strangest to me, I had never heard of such a topic like that, actually I had heard of DSP for trading and whatever, but never had a formal knowledge on that. Now, that I have a more solid foundation on the topic, I can say that I have no regrets on choosing it. It\u0026rsquo;s so interesting in so many ways.\nEven though the course is focused on applications of wavelets, it\u0026rsquo;s a powerful source of insights.\nFor those who don\u0026rsquo;t follow me on Github, I\u0026rsquo;ve been for a while building an AI to predict the probability distribution of a quantum circuit given its image. I named it QCOP, which stands for \u0026ldquo;Quantum circuit output prediction\u0026rdquo;, which is available here: https://github.com/Dpbm/qcop.\nAt first, my idea was to create a simple neural net in a few days ala GeoHot. However, it\u0026rsquo;s been amount a year and I haven\u0026rsquo;t finished yet. Primarily because I haven\u0026rsquo;t gave too much attention for it, and did a lot of side projects on top of it, and the second reason was that I haven\u0026rsquo;t used the right tools.\nThe basic previous idea was to generate random circuits apply ResNet on that, train and then try to predict a simple GHZ. However, I kinda overengineered at first and didn\u0026rsquo;t tought about two major points:\nimbalanced dataset wrong image processing procedure Since the dataset was being generated inhouse, with no outside bias, I tought that maybe it was clean. However, my code was not taking into account a bunch of factors that could imbalance the data. As I started analysing it, I came a cross a bunch of data data could be removed. So, I\u0026rsquo;m in progress to clean this data and continue with the model (which I\u0026rsquo;ll probably change as well).\nFor the second point, image processing pipeline was something like:\ndef _transform_image(img:Image) -\u0026gt; torch.Tensor: \u0026#34;\u0026#34;\u0026#34; Transform and normalize a PIL image into a torch tensor ranging values from 0 to 1. \u0026#34;\u0026#34;\u0026#34; img = img.convert(\u0026#34;RGB\u0026#34;) pipeline = [ v2.Grayscale(), v2.PILToTensor(), v2.RandomAutocontrast(p=1), v2.RandomAdjustSharpness(sharpness_factor=4, p=1), v2.ToDtype(torch.float16, scale=True), ] return v2.Compose(pipeline)(img) / 255.0 Which is not so bad, but could be better.\nAfter my last class on wavelets, we learned about 2D-DWT. This is one is basically the same procedure we saw in the previous post: https://personal-website-phi-seven-36.vercel.app/posts/mallats-algorithm-with-cuda-everything-ive-learned-with-it-me7jmibwm2xof/, but in 2D.\nThis one is even simpler if we think of it as basically matrix multiplication.\nThe overall calculation can be done as: $Y[\\cdot][\\cdot] = m[\\cdot][\\cdot](s[\\cdot][\\cdot] * m[\\cdot][\\cdot]^{T})$, where $m$ is the filter matrix as we have done in DTWT, $s$ is the signal and $Y$ the resulting matrix. To finally get the processed image, we need to rearrange the elements in the $Y[\\cdot][\\cdot]$ matrix, such that the first quadrant has all values from even rows and even columns, the second from even rows odd columns, the third from odd rows even columns and the last one from odd rows and odd columns.\nThe most interesting part, is that each quadrant represent a thing. So the first one is the image with less noise and reduced in size, the second and third are borders and the last one the noise itself.\nAs I saw that, my mind blowed at that same moment. I had a great idea to introduce that into my QCOP project, and that\u0026rsquo;s exactly what I\u0026rsquo;m doing.\nI got the following image for testing:\nI tried many different filters as can bee seen bellow. Everthing was done with help of PyWavelets which is a really handy library for wavelets, I\u0026rsquo;m also urging to use Wavelets.jl, but that\u0026rsquo;s for a future project.\nAs my \u0026ldquo;eye criteria\u0026rdquo; shown, the Haar filter is the best one. I assume that, for being so simple, the abrupt change in the coeffients was the reason for it to be so good at finding borders.\nI tested some combinations of other filters and stuff. My tests pointed that using the Haar filter with wavelets transform and then applying a Sharpness filter, it could:\nreduce the dimensions of the image (since the 2D-DWT first quadrant is $1/4$ of the whole image) enhance the borders reduce noise reduce the amount of information (since we only need to see the borders and nothing else) So the final pipeline I\u0026rsquo;m planning to implement is the following:\nimage --\u0026gt; 2D-DWT level 1 --\u0026gt; sum quadrants 2 and 3 --\u0026gt; enhance sharpness --\u0026gt; binarize (reduce the memory footprint - uint8) I\u0026rsquo;m not sure if it\u0026rsquo;s the best, but I\u0026rsquo;ve been reading some papers, and it seems to be a good idea!\nKeep in touch with my github to see the next chapters of this crazy project! https://github.com/Dpbm/qcop\nPapers I\u0026rsquo;m reading: Image retrieval based on effective feature extraction and diffusion process Evaluation of feature extraction methods for different types of images A Review on Image Feature Extraction and Representation Techniques A review of image features extraction techniques and their applications in image forensic I recommend for wavelets: Effectively Interpreting Discrete Wavelet Transformed Signals [Lecture Notes] Ripples in Mathematics ","permalink":"https://dpbm.vercel.app/posts/wavelets-for-processing-images-kinda-cool-id-say-vnrxzpw6mgpni/","summary":"\u003cp\u003eWell, my course on Wavelets transform is reaching the end, which is pretty sad. When I was choosing the subjects to study this semester, this one was the strangest to me, I had never heard of such a topic like that, actually I had heard of DSP for trading and whatever, but never had a formal knowledge on that. Now, that I have a more solid foundation on the topic, I can say that I have no regrets on choosing it. It\u0026rsquo;s so interesting in so many ways.\u003c/p\u003e","title":"Wavelets for processing images - Kinda cool I'd say"},{"content":"As I pursue my master\u0026rsquo;s in computer science as by now a non-degree/special student, I decided to attend to two different classes this semester:\nAlgorithms (because I like it) Wavelet Transforms (because it seemed interesting) Algorithms is a pretty well know topic in computer science which you may be familiar with. Everywhere and, weird or not, every class may be related to algorithms in some way (even my wavelet class). For this semester, we learned about some ways to calculate and analyze code to find bottlenecks, performance issues, possible improvements. In general, we learned about asymptotic behavior/analysis, so big O notation and its relatives θ and Ω. I\u0026rsquo;d like to talk more about this, so I\u0026rsquo;ll hold this topic for a future post.\nWavelets Anyways, my second chosen class has algorithms involved as well, but in a different manner. The Wavelets Transforms class is totally related to signal processing. While I was choosing the classes it would take, it seemed the most different one for me, but after searching a bit I tought that it would help me some way in quantum computing, specially for parts related to QFT(Quantum Fourier Transform) or DFT(Discrete Fourier Transform), even thought we don\u0026rsquo;t study this tools during the course. In a high level vision, Wavelets Transforms are tools for processing a specific type of signals, called Wavelets. These signals can be both in time domain (when we think about audio or something like that) and space (when we think about things like images).\nThere are different procedures and functions for processing, but here we are focusing on DTWT (Discrete-Time Wavelet Transform). This very tool is specially applied for digital signals. The idea of it is byusing a set of filters and convolutions we can apply transformations onto a signal mapping it from time/space domain to time-frequency domain. There\u0026rsquo;s a lot of theory under-the-hood, that not even I could talk about since the course foccus more on applications and pretty much the basics a computer scientist would need. For those interested in the topic, I recommend checking some papers my professor Rodrigo Capobianco Guido has published.\nDTWT/Mallat\u0026rsquo;s algorithm In general, what we need to know of it is how to calculate a DTWT out of a signal. So, there\u0026rsquo;s a simple algorithm called Mallat\u0026rsquo;s algorithm which states a tree like structure for processing a signal and a set of matrix based transformations for doing convolution and downsampling of the signal.\nAs shown above, the algorithm starts by applying onto a signal s two different filters, being them a low-pass half band h and high-pass half band g respectively. At each tree level we do a downsampling on the resulting signal and further process the result of the low-pass filter until we reach a level we want or when we can\u0026rsquo;t further process it.\nFor this purpose, there\u0026rsquo;re some methods we could use, but the simplest is to generate a matrix following a similar format as below:\n( h0 h1 0 0 ) ( s0 ) ( g0 g1 0 0 ) ( s1 ) ( 0 0 h0 h1 ) ( s2 ) ( 0 0 g0 g1 ) ( s3 ) A matrix square that multiplies the signal. The idea of this matrix is that, even numbered rows (starting from 0) contains the values of the h filter and odd numbered ones from g filter. After a pair of rows is added, the next one is pad of the left by 2^{pair_i - 1} zeros. This way, the matrix take care of downsampling, ignoring small fluctuations and resulting a signal in the format we need. There\u0026rsquo;re some nuances like when a filter is larger than the signal or the filter values go out of bounds of the matrix. For this cases we have two approaches:\nFilter Larger than the signal ( h0 h1 0 0 ) ( s0 ) ( g0 g1 0 0 ) ( s1 ) ( 0 0 h0 h1 ) ( s0 ) ( 0 0 g0 g1 ) ( s1 ) In this scenario, we repeat the signal bellow until the matrix and signal vector match in sizes. For this case, we might also need to pad the matrix ros on the right with zeros as well.\nFilter goes out of bounds ( h0 h1 h2 h3 ) ( g0 g1 g2 g3 ) ( h2 h3 h0 h1 ) ( g2 g3 g0 g1 ) Now for this case, we use a technique called wrap around, which consists of continue writing the signal but on the left of the row, overwriting some zeros.\nAfter applying this matrix on the signal, we need to feel the tree nodes with the resulting elements. As one might thing, to separate those who belong to the left or the right we must take even or odd rows. The ones that were transformed by h filter (even rows) go to the left, while the remaining go to the right. With it, we proceed with the algorithm as we want.\nWe designate a DTWT level as a concatenation of every leaf in the current tree level. Each DTWT level has the same size of the original signal.\nInverse DTWT To calculate the inverse, we start from the bottom of our tree and proceed by applying the transpose of those matrices on each level\u0026rsquo;s node values, we must remember to put the elements in the right order, since the ones from the left go in even spots and the remaining on the odd spots.\nIt\u0026rsquo;s straight forward to inverse a signal since these matrices, when using real wavelet filters, are orthogonal each line with any other one.\nInteresting details There\u0026rsquo;re some details I\u0026rsquo;d like to talk is that are two nuances with DTWT\u0026rsquo;s.\nFirst one is that we could calculate the energy of each level and understand that most part of the energy is, usually, concentrated in the left side. To calculate the energy, we must sum the square of each signal value. This is interesting because it might indicate that most part of signals are low frequency or something like that.\nThe second one is, due to the first one, we can compress a signal by keeping the leaves that holds most part of the signal (something like 75% of the signal energy) and set zeros for the remaining. This way, when we do the inverse, we would get an approximation of what the original signal was like.\nCuda implementation After a bit of background on the topic, I want to discuss about my implementation in cuda.\nSome day, during the class I was thinking about the possibility of doing that in cuda, since we use matrices. I\u0026rsquo;d got even more instigated to do that after my teacher said he had a procedure in C he made for teaching.\nI\u0026rsquo;m little curious about cuda and GPUs in general, so I gave a chance and started doing. The final project is on my github and can be seem here: https://github.com/Dpbm/cumallat. In this section I want to tell some things I discovered and tips I found while working on that.\nCUDA-GDB I always found GDB a very messy tool. I know it\u0026rsquo;s powerful, but I never liked it much. There are too many specific commands you need to know, and something is difficult to find this. However, I found it very useful for cuda debugging.\nEvery time i heard anything about cuda, specially about debugging kernels, people were freaking out and arguing on how difficult it is to find bugs. Well, I must agree with this statement but with reservations.\nIndeed, debugging cuda applications is hard, as any multithreaded application. But this is not the debugger\u0026rsquo;s fault. CUDA-GDB is amazing for moving around threads and blocks in any specific moment.\nFor those familiar with cuda, you must know that calculating the correct index for an element in a matrix is one of the most important things, and also difficult for arbitrary setups. However, using cuda-gdb, you can easily setup a small test in c++ and check each possible index at once by changing between blocks/threads.\nI will list some commands I found useful:\n# to list the functions you have. It can be very poluted # so rememeber to set `extern \u0026#34;C\u0026#34; {}` in your code # and also use regex after the command. info functions info functions `regex` # for changing between blocks and threads # each positions starts at zero cuda block (x,y,z) cuda thread (x,y,z) # to list information about kernels and threads info cuda kernels info cuda threads Remember to add the flags -g and -G to the compiler before doing that.\nIt also worth noticing that segmentation faults may exit your debugging code sometimes and sometimes it\u0026rsquo;s hard to understand at first, so if the debugger suddenly quit out of a function it may be a crash.\nTranspose matrices While implementing the inverse DTWT, I thought about many different ways to do that. But at the end transposing in cuda is pretty much the same thing as inverting every index operation.\n// DTWT // kernel __global__ void dtwt( int signal_size, float* s, float* h, float* g, float* m ){ int filter_index = threadIdx.x; int signal_index_result = blockIdx.x; int shift = (blockIdx.x/2)*2; int signal_index_calc = (shift + threadIdx.x) % signal_size; float filter_value = signal_index_result % 2 == 0 ? h[filter_index]: g[filter_index]; atomicAdd(\u0026amp;m[signal_index_result], filter_value * s[signal_index_calc]); } // calling dtwt\u0026lt;\u0026lt;\u0026lt;level_signal_size, filter_size\u0026gt;\u0026gt;\u0026gt;(level_signal_size, m_organized_gpu, h_gpu, g_gpu, m_gpu); // Inverse DTWT // kernel __global__ void inverse_dtwt( int signal_size, float* s, float* h, float* g, float* m ){ int filter_index = blockIdx.x; int shift = (threadIdx.x/2)*2; int signal_index_result = (shift + blockIdx.x) % signal_size; int signal_index_calc = threadIdx.x; float filter_value = signal_index_calc % 2 == 0 ? h[filter_index]: g[filter_index]; atomicAdd(\u0026amp;m[signal_index_result], filter_value * s[signal_index_calc]); } // calling inverse_dtwt\u0026lt;\u0026lt;\u0026lt;filter_size,complete_signal\u0026gt;\u0026gt;\u0026gt;(complete_signal, seq, h_gpu, g_gpu, m_gpu); // complete_signal is pretty much the same as level_signal_size from DTWT AtomicAdd At first, I thought that adding from multiple threads on the same position in a vector was normal and could be done with no problems.\nOh, how Naive I was!\nwhen we do\na += 1 this is the same as\na = a + 1 and since we are running multiple threads, if the operation is done at the same time, the a state might change from a thread to another.\nThat\u0026rsquo;s why we should use AtomicAdd in these scenarios.\nMemset Usually, when we allocate some memory using malloc, we recieve a pointer to a memory position that, starting from it until the size we required, the bytes are not used anymore. And as you may have noticed, not used anymore, not necessarily null/0. So when we use an allocator, we must ensure (depending on the usage) that the values are what we expect. For this cases, using Memset and setting all positions to zero is our best ally.\nTests At first, I tried to use googletest, which is one of the default test suites for C++. However I found that Cuda was not supported by that, so I had to check different approaches. At the end, I did a test suite from scratch by myself. It\u0026rsquo;s not the best solution for production code, but for a small experiment, it wouldn\u0026rsquo;t hurt anybody.\n#include \u0026lt;cassert\u0026gt; #include \u0026#34;mallat.hpp\u0026#34; extern \u0026#34;C\u0026#34; { namespace TestGenerateG{ void TestGenerateG(){ // ... } } namespace Organization{ void TestOrganizeM(){ // ... } } namespace DTWT{ void TestDTWTHaarFilters(){ // .. } void TestWrapAroundFilters(){ // ... } void TestFilterBiggerThanSignal(){ // ... } void TestInverse(){ // ... } void TestInverseWrapAround(){ // ... } } } int main() { TestGenerateG::TestGenerateG(); Organization::TestOrganizeM(); DTWT::TestDTWTHaarFilters(); DTWT::TestWrapAroundFilters(); DTWT::TestFilterBiggerThanSignal(); DTWT::TestInverse(); DTWT::TestInverseWrapAround(); return 0; } I ensured to use extern \u0026quot;C\u0026quot; {} to make it easier to debug using cuda-gdb later.\nCompute capability If you don\u0026rsquo;t have enough money to buy newer GPUs, you\u0026rsquo;ll probably face some issues like me.\nI have a GTX 1060 6Gb, which is pretty old for now days standards. So a lot of features are not available for me.\nSo sometimes I faced problems while compiling the code, because the usage of of wrong cuda sdk versions, drivers, gcc, etc.\nSo take a look at your board compatibilities before doing that.\nCuda 12.9 Another issue I had was trying to run some versions of cuda.\nThere were a problem with a library header that wasn\u0026rsquo;t setting functions to noexcept(true), so I had to add it manually.\nTake a look at: https://forums.developer.nvidia.com/t/error-exception-specification-is-incompatible-for-cospi-sinpi-cospif-sinpif-with-glibc-2-41/323591\nBuilding Finally, for building the project I tested some tools, like CMAKE+CONAN, but at the end, my setup wasn\u0026rsquo;t working properly. So I decided to do a humble approach by setting a simple CMakeLists file and a Makefile. Being CMake in charge for using NVCC to build and manage flags, and make to allow me to run pre set commands easily.\ncmake_minimum_required(VERSION 3.31) project(MallatsAlgo LANGUAGES CXX CUDA) add_compile_options(-Wno-deprecated-gpu-targets) if(CMAKE_BUILD_TYPE STREQUAL \u0026#34;Debug\u0026#34;) message(\u0026#34;----- Using DEBUG version -----\u0026#34;) add_compile_options(-g -G) add_executable(mallat_tests) target_sources(mallat_tests PRIVATE tests.cu) endif() add_executable(mallat) target_sources(mallat PRIVATE example.cu) TARGET=./build/mallat TARGET_TESTS=./build/mallat_tests SOURCE=example.cu TEST=tests.cu all: $(TARGET) $(TARGET): $(SOURCE) cmake -B build -DCMAKE_CUDA_ARCHITECTURES=native cmake --build build $(TARGET) debug: $(SOURCE) $(TEST) cmake -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CUDA_ARCHITECTURES=native cmake --build build $(TARGET_TESTS) With this project, I found that the minimal setup is the best. The more over-engineering you do, the less the chance of you finishing your project.\n","permalink":"https://dpbm.vercel.app/posts/mallats-algorithm-with-cuda-everything-ive-learned-with-it-me7jmibwm2xof/","summary":"\u003cp\u003eAs I pursue my master\u0026rsquo;s in computer science as by now a non-degree/special student, I decided to attend to two different classes this semester:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eAlgorithms (because I like it)\u003c/li\u003e\n\u003cli\u003eWavelet Transforms (because it seemed interesting)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAlgorithms is a pretty well know topic in computer science which you may be familiar with. Everywhere and, weird or not, every class may be related to algorithms in some way (even my wavelet class). For this semester, we learned about some ways to calculate and analyze code to find bottlenecks, performance issues, possible improvements. In general, we learned about asymptotic behavior/analysis, so \u003ccode\u003ebig O\u003c/code\u003e notation and its relatives \u003ccode\u003eθ\u003c/code\u003e and \u003ccode\u003eΩ\u003c/code\u003e. I\u0026rsquo;d like to talk more about this, so I\u0026rsquo;ll hold this topic for a future post.\u003c/p\u003e","title":"Mallat's algorithm with cuda - Everything I've learned with it"},{"content":"\nSince I did my zeroclaw setup (post: how-i-failed-on-creating-my-own-ai-agent-rxdcmfxqpempm) I was playing around a bit with LLMs in general.\nI\u0026rsquo;ve been using a lot of ChatGPT, Gemini and Perplexity for studying and clarification in some topics. I also tested the new Muse Spark model from Meta AI and Github Copilot with Claude Haiku. Vibe coding is something that I always abominate, but after testing I found it very useful for prototyping and doing frontend applications fast, for that I installed Antigravity (take a look at the interface of my app: fngames). Even reported some exposed OpenAI API Keys for some companies.\nAdditionally, I setup Openclaw in a docker container (for security reasons), but it went any further at that moment. The reason was the model, I had no idea which one to use. I had no money to use better models like Claude 4.6 or GPT 5.4, neither a good GPU for running Qwen or Kimi locally. I thought about using OpenRouter free plan, but my previous experience taught me that these agents ate tokens like monsters, so my limits would run out really fast.\nSome time had passed, and I dind\u0026rsquo;t touch the project anymore. I was urging for some solution, but none was found, until \u0026hellip; Two lights at the end of the tunnel appeard almost at the same time.\nThe birth of Gemma 4 First, Google released Gemma4, an open model which uses a new compression of KV Cache that make it so memory efficient that can run perfectly on a smartphone. Google even has released the preview of it edge gallery app on play store and appstore, which was previously only available on github (https://github.com/google-ai-edge/gallery) via a release apk.\nI installed on my cellphone e played around with it for a while. I was amazed with tiny but instersting features they added like the tiny garden.\nI played that a lot, even tried to find prompt injection on it.\nFor chating, I selected the Gemma4:e2b which was the smallest one, but really good, so I thought:\nMaybe I can run that on my PC.\nEven with an old pc, with a GTX 1060 6Gb, I setup ollama and tested gemma, and wow, it worked, pretty well by the way!\nAt that moment, a new hope was established for my ollama project.\nI create a docker compose to orchestrate everything, and run that:\nservices: openclaw: image: ghcr.io/openclaw/openclaw:latest container_name: openclaw hostname: claw volumes: - \u0026#34;./claw:/home/node/.openclaw\u0026#34; - \u0026#34;./shared:/home/node/shared\u0026#34; - \u0026#34;./bins:/home/node/bins:ro\u0026#34; ports: - \u0026#34;18789:18789\u0026#34; environment: - OPENCLAW_TOKEN=\u0026#34;${OPENCLAW_TOKEN}\u0026#34; - SERVER_URL=http://192.168.0.4:8080 - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/node/bins user: \u0026#34;1000:1000\u0026#34; healthcheck: test: [ \u0026#34;CMD\u0026#34;, \u0026#34;node\u0026#34;, \u0026#34;-e\u0026#34;, \u0026#34;fetch(\u0026#39;http://127.0.0.1:18789/healthz\u0026#39;).then((r)=\u0026gt;process.exit(r.ok?0:1)).catch(()=\u0026gt;process.exit(1))\u0026#34;, ] interval: 30s timeout: 5s retries: 5 start_period: 20s command: openclaw gateway ollama: image: ollama/ollama container_name: ollama hostname: ollama volumes: - \u0026#34;ollama:/root/.ollama\u0026#34; ports: - \u0026#34;11434:11434\u0026#34; environment: - OLLAMA_HOST=0.0.0.0 restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia count: all # Or a specific number like \u0026#39;1\u0026#39; capabilities: [gpu] volumes: ollama: external: false I used the openclaw builtin chat, setup some skills, but for some reason the Gemma4 was not good enough for tool calling. I tested a bigger one gemma4:e4b, but it did no better.\nLooking at the list of models from Ollama\u0026rsquo;s website, none of those would fit on my computer, except granite but something happened before I even tested it \u0026hellip;\nThe Miracle of Ollama Cloud In that day, a friend of mine send me a whatsapp message telling me his new aquisition. He had just paid for Claude\u0026rsquo;s pro version, he was aiming to have an AI programming partner for his new project.\nHis project was a system for a company nearby he was working for as a freelancer. While the agent was creating the platform via antigravity, he shown me a whatsapp bot he built with minimax m2.7. I was amazed with his achivement, it was really good, he had feed the model with the company\u0026rsquo;s data, so it knew everything it could ask for, and everything they had for selling. I remember he said:\nIt\u0026rsquo;s probably not running on my machine, it\u0026rsquo;s runnig so smoothly\nI wondered, is he using Ollama Cloud, but for free????\nSo I asked him if he had configured something for cloud, and he say Yes. So I went directly to Ollama\u0026rsquo;s website, and pulled the minimax model locally. The download was really fast, so I ran the model and it asked me to login. I created an account and boom! I had a state-of-the-art model running on the cloud for free.\nSo, I knew exactly what I needed to do.\nIn filtered the models which were good for tooling and, obviously, run on the cloud. My final options were:\nminimax-m2.7 glm-5.1 kimi-k2.5 gemini-3-flash-preview But the one I chose was GLM-5.1.\nSkills At first I was trying to fix my skills because they were not working, but later I found that the problem was the model (maybe my skills were bad as well). I tried fixing it with some help from Gemini and GPT, but only changing the model was the solution for me.\nIn my local network, I had a Raspberry Pi 3b+ running my qserver at port 8080. My idea was that the model could access it via curl and grpcurl (once it uses GRPC too).\nFor simplicity, I designed 4 skills:\nGenerate circuit in qasm files (give the description too). --- name: create_circuit description: A skill to generate qasm files. metadata: { \u0026#34;openclaw\u0026#34;: { \u0026#34;emoji\u0026#34;: \u0026#34;🧅\u0026#34;, }, } --- # Create Circuit Skill When the user asks to create a quantum circuit. First, you\u0026#39;ll generate the circuit in the `openqasm` format and save it at `/home/node/shared/{{ circuit_name }}-$(date --date=\u0026#34;now\u0026#34;).qasm`, for it you must use the Exec and Write tools. Then, you will output for the user in the following format: # {{ circuit_name }} Algorithm --- Who created it: { add the main authors of this algorithm here } Papers: { Papers which explain it } --- { explain the algorithm itself here } --- { show the qasm code here } Send the circuit (simulate). --- name: send_quantum_algorithm description: A skill to send qasm quantum algorithms to the server. metadata: { \u0026#34;openclaw\u0026#34;: { \u0026#34;emoji\u0026#34;: \u0026#34;🐦\u0026#34;, \u0026#34;requires\u0026#34;: { \u0026#34;bins\u0026#34;: [\u0026#34;grpcurl\u0026#34;] }, }, } --- # Send Quantum Algorithm Skill When the user asks to run or send a quantum circuit, execute the following commands: export DATA=\u0026#34;$(cat \u0026lt;\u0026lt;EOM {\u0026#34;properties\u0026#34;:{\u0026#34;resultTypeCounts\u0026#34;:{ if the user asks for counts add true here }, \u0026#34;resultTypeQuasiDist\u0026#34;:{ if the user asks for quasi dists add true here }, \u0026#34;resultTypeExpVal\u0026#34;:{ if the user asks for expectation values add true here }, \u0026#34;targetSimulator\u0026#34;:\u0026#34;{ the user desired backend }\u0026#34;, \u0026#34;metadata\u0026#34;:\u0026#34;{ {the desired metadata in json format} }\u0026#34;}} {\u0026#34;qasmChunk\u0026#34;:\u0026#34;{ add the qasm data here }\u0026#34;} EOM) \u0026#34; grpcurl -plaintext -d \u0026#39;$(echo $DATA)\u0026#39; \u0026#34;$(echo $SERVER_URL)\u0026#34; Jobs/AddJob The user must provide you the following data: * counts: this tells you if you must retrieve the counts from the simulation (default:false) * quasi-dist: this tells you if you must retrieve the quasi distribution from the simulation (default:true) * expval: this tells you if you must retrieve the expectation value from the simulation. When using this the user must provide a metadata containg the observables and coeffients (default:false) * metadata (optional): this adds additional information for your experiment in the json format (default:{}) * backend: The simulator to be used for that. * qasm: the data to be sent. After running the commands you must show the user the output job ID. Get jobs. --- name: get_jobs description: A skill to list quantum jobs from qserver. metadata: { \u0026#34;openclaw\u0026#34;: { \u0026#34;emoji\u0026#34;: \u0026#34;🫪\u0026#34;, \u0026#34;requires\u0026#34;: { \u0026#34;bins\u0026#34;: [\u0026#34;curl\u0026#34;, \u0026#34;jq\u0026#34;] }, }, } --- # Get Jobs Skill When the user asks to list his jobs, Execute the following command: `curl \u0026#34;$(echo $SERVER_URL)/api/v1/jobs\u0026#34; | jq` Show him the output of the command. Add Qplugin. --- name: add_qplugin description: A skill to add a plugin to qserver. metadata: { \u0026#34;openclaw\u0026#34;: { \u0026#34;emoji\u0026#34;: \u0026#34;🔥\u0026#34;, \u0026#34;requires\u0026#34;: { \u0026#34;bins\u0026#34;: [\u0026#34;curl\u0026#34;] }, }, } --- # Add QPlugin Skill When the user asks to add a plugin, Execute the following command: `curl -X POST \u0026#34;$(echo $SERVER_URL)/api/v1/plugin/{{ plugin_name }}\u0026#34;` After that, I used the chat from openclaw again and tested each part, which was a success!\nPicoclaw To finish my experimentation, I decided to test picoclaw on my raspberry pi too! The motivation for that came after watching the video from playduino of which he Installed openclaw on an Arduino Uno Q, I found that very interesting and decided to test a little bit myself.\nEven though I was using an IOT device, I did nothing too fancy. My idea with picoclaw was to have a discord channel to chat with it and only that.\nI setup an ansible playbook to automate the proccess, installed the picoclaw and uploaded my configuration to the device via ssh.\nFor this one, I used the ollama server from my computer that was exposing gemma4:e4b.\nThen entered on discord and chat with the model a bit, but again, nothing to fancy, only some chat and qunatum computing stuff.\nI was really tired at that moment, so I didn\u0026rsquo;t test it too much. But if you want a setup like mine, check the repo here: https://github.com/Dpbm/openclaw-setup.\nFinal Setup The final setup followed this structure:\nMy computer was being used as a more powerfull server for LLMs and the raspberry as a intermediate server with some power for simple quantum circuits via qserver.\nIt\u0026rsquo;s not too advanced, but the main idea was to experiment stuff and not to do production ready systems.\n","permalink":"https://dpbm.vercel.app/posts/openclaw-for-quantum-simulation-rqqldnn7kn24j/","summary":"\u003cp\u003e\u003cimg alt=\"banner\" loading=\"lazy\" src=\"/posts/openclaw-for-quantum-simulation-rqqldnn7kn24j/open-image.png\"\u003e\u003c/p\u003e\n\u003cp\u003eSince I did my zeroclaw setup (post: \u003ca href=\"https://personal-website-phi-seven-36.vercel.app/posts/how-i-failed-on-creating-my-own-ai-agent-rxdcmfxqpempm/\"\u003ehow-i-failed-on-creating-my-own-ai-agent-rxdcmfxqpempm\u003c/a\u003e) I was playing around a bit with LLMs in general.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve been using a lot of \u003ccode\u003eChatGPT\u003c/code\u003e, \u003ccode\u003eGemini\u003c/code\u003e and \u003ccode\u003ePerplexity\u003c/code\u003e for studying and clarification in some topics. I also tested the new \u003ccode\u003eMuse Spark\u003c/code\u003e model from \u003ccode\u003eMeta AI\u003c/code\u003e and \u003ccode\u003eGithub Copilot\u003c/code\u003e with Claude Haiku. Vibe coding is something that I always abominate, but after testing I found it very useful for prototyping and doing frontend applications fast, for that I installed \u003ccode\u003eAntigravity\u003c/code\u003e (take a look at the interface of my app: \u003ca href=\"https://github.com/Dpbm/fngames\"\u003efngames\u003c/a\u003e). Even reported some exposed OpenAI API Keys for some companies.\u003c/p\u003e","title":"Openclaw for Quantum Simulation"},{"content":"So, I suppose that at this point, everyone has heard at least a bit about agents and Openclaw.\nThis buzzy words came out of sudden and became the words of the decade.\nAs a tech guy, I\u0026rsquo;m loving all the possibilities we have with them and for sure they are great tools.\nDespite of that, I had never had a grasp on creating my own agents, even though I always wanted.\nHowever, Some days ago, I decided to change that and deploy my own agents locally. I had nothing too fancy in mind, the only thing I wanted was to setup a Openclaw like tool to send me random quantum algorithms every day on my discord server, nothing more than that.\nSearching for the model To start my project, I started searching for models. Once I\u0026rsquo;m an unemployed master\u0026rsquo;s student, I have no money to spend on a mac mini, VPS or state-of-the-art models. So I was limited by my old Geforce GTX 1060 6gb. After some time searching on HuggingFace, I found a model that was perfect for me, a Granite tiny model fine-tuned for Qiskit.\nI downloaded and ran it locally, it worked awesome in my setup with llama.cpp. I tested some prompts and everything worked.\nI configured the containers, librechat, mongo, and boom! I had a qiskit model to play with!\nSetup Zeroclaw After that, I was wondering how would I setup my agents.\nThe first option would be using the Openclaw itself, but it was too heavy for my computer. After a nice research, which can be seem bellow, I found some information about agents in general and local platforms to deploy them.\nI found a bunch like:\npicoclaw nanobot zeroclaw nullclaw At first I messed with nullclaw, but it seemed to me too much experimental and hard to setup, so I chose the zeroclaw option.\nThis research can also be found at: https://github.com/Dpbm/qiskit-personal-assistant/blob/main/research.md ## NOTES - `SKILL.md` provide a way to create a path for allowing the openclaw to execute some commands as you need, bypassing the plan of usage. - OpenClaw uses a channel to execute commands in your computer. - `SOUL.md` -\u0026gt; defines how the agent talks with you. - `AGENTS.md` -\u0026gt; what it should do before each session and how to behave. - `USER.md` -\u0026gt; defines facts about you. - `IDENTITY.md` -\u0026gt; defined the facts about the agent. - `MEMORY.md` -\u0026gt; long term memory. - `memory/YYYY-MM-DD.md` -\u0026gt; short term memory. - you can ask the agent to modify any of these files. - `HEARTBEAT.md` -\u0026gt; defines periodic tasks that are checked after some time. If nothing needs attetion, it stays quiet. Do multiple tasks in a single session, sharing context/memory. - cron jobs -\u0026gt; handle recurrent tasks. Run in different sessions. --- ### CLAUDE - Hooks -\u0026gt; are commands that are run when claude executes an specific action. - Cowork -\u0026gt; is like claude code, but it\u0026#39;s meant for non coders. --- ### TINY CLAW - TinyClaw is at some level lighter than openclaw, and runs multiple agents. - In TinyClaw, you can have teams of agents. --- ### RAG - Is the hability to retrieve relevant data, interpret and augment them, and generate something with that. - retrieving models -\u0026gt; models that are designed to retrieve relevant data from a knowledge base. - generative models -\u0026gt; generate data based on a context. - RAG uses a combination of both models to levarege their capabilities. - In general, RAG is a structure that has a part that retrieves data to feed the LLM with more context. - Vector DB stores the embeddings of your documents. - Embedding model queries the database when needed to get more context data. - Helps reducing unreliable sources. - Give the model access to fresh data. - Data outside that used for training is called external data. - Semantic search enhances RAG results. Good for large amounts of data. - Is more efficient than retraining the model. - Semantic search tries to understand more deeply the intent of the user. - Semantic search uses NLP techniques, such as: Query analysis, Knowledge graph integration, content analysis, result return and retrieval. - Semantic search is broader than vector search. - Can also use graph DBs and Relational DBs for some cases. - Graph DBs can improve the responses, since it has connections between knowledge. However, they require exact query matching. - Using both DBs can leverage the best of these technologies. - Chunks can be fixed sized or context aware. - Reranking -\u0026gt; proccess the information and sort it by relevance. #### Types of embedding - sparse -\u0026gt; great for lexical matching. Keyword relevance. - BERT -\u0026gt; semantic embedding. can capture nuances. Resource intensive. - SentenceBERT -\u0026gt; semantic embedding. It\u0026#39;s the balance between deep understanding and conscise. #### Types of Retrieval - Naive -\u0026gt; get the chunck that was stored and pass it to the synthesis. - Sentence-window -\u0026gt; breaks the documents in smaller chunks, like sentences, and then for synteshis it returns to the context. Search for these smaller units. #### Types or reranking - lexical -\u0026gt; based on similarity. - semantic -\u0026gt; based on the understanding and relavance for that context. - learning to rank methods -\u0026gt; uses a model trained for ranking documents. - Hybrid -\u0026gt; lexical+semantic using feedback or other signals. #### General Steps 1. Get external data and use embedding models to transform that data into something that fits into a vector DB. 2. Query the database. 3. Augment the user input with the data retrieved from the database. 4. pass to the LLM 5. update the database once in a while to keep it up-to-date. They can also have a step for chunking (spliting the data into smaller significant pieces). It would fit into the first step, right after getting the external data and right before embedding it. #### NAIVE APPROACH - The basic implmentation. - Responses are given without feedback or optimization. - Get the data and feed the LLM. - It\u0026#39;s simple. 1. Query the database. 2. Retrieve the top relevant documents. 3. Feed the LLM. #### ADVANCED APPROACH - Reranking, fine-tuning and feedback loops. - More reliable, best performance and accuracy. - More difficult. - Production-grade applications. 1. Query the database. 2. Retrieve the documents. 3. Rank the documents based on the context. 4. Fuses the contexts to ensure coherence. 5. The generator used for the RAG generates a response. 6. Use some techniques to retrieve the feedback (such as clicks) to improve the generation and retrieving. #### MODULAR APPROACH - For different use cases. - Components can be evaluated independently. 1. A query module recieves the input (prompt) and perform some transformations to enchance it for the next steps. 2. Uses Embedding-based similarity to retrieve documents from a vector database. 3. Theses documents are filtered and ranked. 4. An LLM generate a response trying to minimize hallucinations. 5. A post-processing module is employed to ensure accuracy, fact-checking, add citations, improves readability. 6. Generate the output for the user and uses the feedback loop to improve it overtime. --- ### FIRECRAWL MCP - Used to scrape the web for data. ## REFERENCES - [https://www.datacamp.com/tutorial/openclaw-ollama-tutorial](https://www.datacamp.com/tutorial/openclaw-ollama-tutorial) - [https://www.datacamp.com/tutorial/moltbot-clawdbot-tutorial](https://www.datacamp.com/tutorial/moltbot-clawdbot-tutorial) - [https://docs.ollama.com/integrations/openclaw](https://docs.ollama.com/integrations/openclaw) - [https://github.com/TinyAGI/tinyclaw](https://github.com/TinyAGI/tinyclaw) - [https://www.datacamp.com/tutorial/claude-cowork-tutorial](https://www.datacamp.com/tutorial/claude-cowork-tutorial) - [https://www.datacamp.com/tutorial/claude-code-hooks](https://www.datacamp.com/tutorial/claude-code-hooks) - [https://openclaw.ai/](https://openclaw.ai/) - [https://docs.openclaw.ai/](https://docs.openclaw.ai/) - [https://github.com/sipeed/picoclaw](https://github.com/sipeed/picoclaw) - [https://github.com/HKUDS/nanobot](https://github.com/HKUDS/nanobot) - [https://github.com/zeroclaw-labs/zeroclaw](https://github.com/zeroclaw-labs/zeroclaw) - [https://dev.to/brooks_wilson_36fbefbbae4/zeroclaw-a-lightweight-secure-rust-agent-runtime-redefining-openclaw-infrastructure-2cl0](https://dev.to/brooks_wilson_36fbefbbae4/zeroclaw-a-lightweight-secure-rust-agent-runtime-redefining-openclaw-infrastructure-2cl0) - [https://zeroclawlabs.ai/](https://zeroclawlabs.ai/) - [https://www.datacamp.com/tutorial/moltbook-how-to-get-started](https://www.datacamp.com/tutorial/moltbook-how-to-get-started) - [https://triggo.ai/blog/o-que-e-retrieval-augmented-generation/](https://triggo.ai/blog/o-que-e-retrieval-augmented-generation/) - [https://www.salesforce.com/br/blog/what-is-retrieval-augmented-generation/](https://www.salesforce.com/br/blog/what-is-retrieval-augmented-generation/) - [https://cloud.google.com/use-cases/retrieval-augmented-generation](https://cloud.google.com/use-cases/retrieval-augmented-generation) - [https://aws.amazon.com/what-is/retrieval-augmented-generation/](https://aws.amazon.com/what-is/retrieval-augmented-generation/) - [https://azure.microsoft.com/pt-br/resources/cloud-computing-dictionary/what-is-retrieval-augmented-generation-rag](https://azure.microsoft.com/pt-br/resources/cloud-computing-dictionary/what-is-retrieval-augmented-generation-rag) - [https://www.ibm.com/think/topics/rag-techniques](https://www.ibm.com/think/topics/rag-techniques) - [https://cloud.google.com/discover/what-is-semantic-search](https://cloud.google.com/discover/what-is-semantic-search) - [https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag](https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag) - [https://cloud.google.com/vertex-ai](https://cloud.google.com/vertex-ai) - [https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-overview](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-overview) - [https://github.com/firecrawl/firecrawl-mcp-server](https://github.com/firecrawl/firecrawl-mcp-server) - [https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag](https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag) - [https://towardsdatascience.com/llm-rag-creating-an-ai-powered-file-reader-assistant/](https://towardsdatascience.com/llm-rag-creating-an-ai-powered-file-reader-assistant/) - [https://medium.com/@tejpal.abhyuday/retrieval-augmented-generation-rag-from-basics-to-advanced-a2b068fd576c](https://medium.com/@tejpal.abhyuday/retrieval-augmented-generation-rag-from-basics-to-advanced-a2b068fd576c) The first thing I noticed after setting this up, was that the provided docker image wasn\u0026rsquo;t working properly who knows why! So I figured how to install it efficiently on a custom container and did my setup.\n# ---- FETCH FROM GIT ------- FROM alpine:3.23.3 AS downloader RUN apk add --no-cache git tzdata curl WORKDIR /repo RUN git clone https://github.com/zeroclaw-labs/zeroclaw.git # ---- BUILD DASHBOARD ------- FROM node:24.14.0-bullseye-slim AS web-builder WORKDIR /app COPY --from=downloader /repo/zeroclaw/web . ENV CI=true ENV NODE_OPTIONS=\u0026#34;--max-old-space-size=2048\u0026#34; ENV PATH=\u0026#34;/app/node_modules/.bin:$PATH\u0026#34; ENV ESBUILD_WORKER_THREADS=1 ENV NODE_ENV=development RUN npm ci RUN tsc -b --clean RUN tsc -b --verbose --pretty false RUN vite build --mode production --debug # ---- BUILD ------- FROM rust:1.94.0-slim-bullseye AS builder WORKDIR /app COPY --from=downloader /repo/zeroclaw/src src/ COPY --from=downloader /repo/zeroclaw/Cargo.toml . COPY --from=downloader /repo/zeroclaw/Cargo.lock . RUN sed -i \u0026#39;s/members = \\[\u0026#34;.\u0026#34;, \u0026#34;crates\\/robot-kit\u0026#34;\\]/members = [\u0026#34;.\u0026#34;]/\u0026#39; Cargo.toml RUN mkdir -p ./benches \u0026amp;\u0026amp; echo \u0026#34;fn main() {}\u0026#34; \u0026gt; benches/agent_benchmarks.rs COPY --from=web-builder /app/dist web/dist RUN apt update \u0026amp;\u0026amp; apt install git musl-tools pkg-config -y RUN rustup target add x86_64-unknown-linux-musl \u0026amp;\u0026amp; \\ cargo build --release --target x86_64-unknown-linux-musl # ---- FOR DEBUG ------- FROM busybox:1.37.0-musl AS tools # ---- EXPOSE ------- FROM scratch WORKDIR / COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/zeroclaw /bin/zeroclaw COPY --from=tools /bin/busybox /bin/busybox COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo # COPY --from=downloader /bin/git /bin/git # COPY --from=downloader /bin/curl /bin/curl ARG TIMEZONE=America/Sao_Paulo ENV TZ=$TIMEZONE ARG RECIPIENT ENV RECIPIENT=$RECIPIENT COPY --from=builder /etc/localtime /etc/localtime ENV LANG=C.UTF-8 ENV HOME=/ ENV ZEROCLAW_GATEWAY_PORT=42617 RUN [\u0026#34;/bin/busybox\u0026#34;, \u0026#34;--install\u0026#34;, \u0026#34;-s\u0026#34;, \u0026#34;/bin\u0026#34;] ENV SHELL=/bin/sh HEALTHCHECK --interval=60s --timeout=10s --retries=3 --start-period=10s \\ CMD [\u0026#34;/bin/zeroclaw\u0026#34;, \u0026#34;status\u0026#34;, \u0026#34;--format=exit-code\u0026#34;] EXPOSE 42617 RUN /bin/zeroclaw cron add \u0026#39;0 9 * * *\u0026#39; \u0026#34;get a random quantum algorithm and send it to $RECIPIENT\u0026#34; --tz $TIMEZONE --agent ENTRYPOINT [\u0026#34;/bin/zeroclaw\u0026#34;] CMD [\u0026#34;daemon\u0026#34;, \u0026#34;--config-dir\u0026#34;, \u0026#34;/.zeroclaw/\u0026#34;] At first it was hard to get the web dashboard running, but some debbuging and code analysis from their repo helped me to fix it.\nOk, so now we had our infrastructure. The remaining piece was to setup the agent. And that\u0026rsquo;s the worst part!\nThe agent The zeroclaw project is meant to be a lightweight version of openclaw built with rust, which is true. But there\u0026rsquo;s a major problem with it, THE DOCUMENTATION!\nI wanted to setup multiple providers, create tools, new skills, etc. But there was nothing telling me how could I do it as a user. The tool which helped me the most in the particular case was Gemini, ok most part of the time it wasn guiding me to nowhere, but every step I took that worked was Gemini who told me what to do.\nI setup everything that was remaining, and tested. It worked sometimes, but the model was not following everything I was saying. I updated the temperature sometimes, but nothing was working.\nAt that point, I gave up on using granite and tested a couple of different models locally.\nWell, none of them worked as expected. So I remembered that Openrouter had a Free tier with some good models that you could use some amount per day, well that sounded good!\nI chose nemotron, for no especial reason, and it worked. It had a better understanding than those tiny models I was using, and had a better understanding of tools, which was perfect to me.\nHowever, the major problem now, the tokens usage. Oh boy, it eats tokens as a monster. After 3 iterations, look at how many tokens and calls it did.\nWell, at that time, I was tired and decided to finish the project as it was.\nThe final architecture was this one:\nIt was simple but fun to implement.\nAll the code can be seen at https://github.com/Dpbm/qiskit-personal-assistant.\nConclusion Even the project didn\u0026rsquo;t work as expected, due to the lack of documentation, I found it a very interesting tool. While I was debugging, I tested different commands and eveyrhting was so nice. I really don\u0026rsquo;t know what, but I\u0026rsquo;m sure I\u0026rsquo;ll play more with it later, this time with different flavor like openclaw and picoclaw.\n","permalink":"https://dpbm.vercel.app/posts/how-i-failed-on-creating-my-own-ai-agent-rxdcmfxqpempm/","summary":"\u003cp\u003eSo, I suppose that at this point, everyone has heard at least a bit about agents and Openclaw.\u003c/p\u003e\n\u003cp\u003eThis buzzy words came out of sudden and became the words of the decade.\u003c/p\u003e\n\u003cp\u003eAs a tech guy, I\u0026rsquo;m loving all the possibilities we have with them and for sure they are great tools.\u003c/p\u003e\n\u003cp\u003eDespite of that, I had never had a grasp on creating my own agents, even though I always wanted.\u003c/p\u003e","title":"How I failed on creating my own AI agent"},{"content":"These are the notes I took to do my video about python futures, which is available here:\nand here:\nDe volta Para o Futuro do Python - Python future - tiktokt video\nUnfortunately, all the videos are in portuguese. However, my notes are available bellow and the code is open source and available here: https://github.com/Dpbm/video-python-futures.\nEnjoy :)\nNotes Allows you to tell the compiler that you want to use a standard that will come in future releases. Is done by simply importing from __future__. Must be added on the top of the file, since it changes the way the file is parsed. Otherwise, it raises a SyntaxError. Tells the compiler you want an specific part of your code to act is it will be the default in the future. division calls __truediv__ instead of __div__. The from __future__ import whatever is a future clause, but you can also import the __future__ module with import __future__. The future itself is an object that contains metadata about the very feature, like versions and etc. Some futures are only supported by specific versions of python2, so older versions may need more workarounds than newer ones. That\u0026rsquo;s why future and six are so useful in these cases. Python 2.7 cli had a flag -3 that warned you when there was some statements that couldn\u0026rsquo;t be trivial to fix using 2to3. __future__ works since python 2.1. There are flags that can be passed to compile() to dynamically use future features. Only feature that requires future statements is annoations. Any code compiled with exec() or compile() will use the new statements when using futures in the module. Interactive session also can use futures. Only docstrings, comments, blank lines and other future statements can appear before it. Future object has 2 elements containing tuples with 5 elements. The first one describes the Optional release, which is the first release the feature was accepted. And the second is the Mandatory Release, describes either when the feature became part of the language, or a prediction of when it will be or can be None if it was dropped. Usually, Optional \u0026lt; Mandatory. six Used to wrap differences between python $2$ and $3$. Is a single python file being easy to copy into a project whenever needed. future A package to make a compatibility layer for python2-3 code. Based on the 2to3 module. Not necessary anymore. Add supports for the standard library. 2to3 A library builtin python. Transforms python2 code into python3 compatible. Was removed from Python3.13. References https://docs.python.org/3.13/library/future.html https://www.reddit.com/r/learnpython/comments/8ialj1/how_does_future_work/ https://stackoverflow.com/questions/7075082/what-is-future-in-python-used-for-and-how-when-to-use-it-and-how-it-works https://pt.stackoverflow.com/questions/126466/para-que-serve-o-m%C3%B3dulo-future https://www.geeksforgeeks.org/python/future-module-in-python/ https://stackoverflow.com/questions/5937251/writing-python-2-7-code-that-is-as-close-to-python-3-x-syntax-as-possible https://six.readthedocs.io/ https://pypi.org/project/future/ https://python-future.org/overview.html https://docs.python.org/3.8/library/2to3.html https://docs.python.org/3/whatsnew/3.13.html https://sources.debian.org/src/python2.7/2.7.9-2/Modules/future_builtins.c https://github.com/python/cpython/blob/main/Lib/future.py http://python3porting.com/noconv.html https://docs.oracle.com/cd/E86824_01/html/E54763/python2-7-1.html https://docs.python.org/3.13/library/future.html https://docs.python.org/3/library/functions.html#compile https://docs.python.org/3.13/reference/simple_stmts.html#future https://peps.python.org/pep-0236/ https://peps.python.org/pep-0563/ https://peps.python.org/pep-0649/ https://peps.python.org/pep-0749/#the-future-of-from-future-import-annotations ","permalink":"https://dpbm.vercel.app/posts/whats-python-future-kuq9fnvw5fdaj/","summary":"\u003cp\u003eThese are the notes I took to do my video about python futures, which is available here:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/shorts/hRDHVKJI8d0?feature=share\"\u003e\u003cimg alt=\"De volta Para o Futuro do Python - Python \u003cem\u003efuture\u003c/em\u003e\" loading=\"lazy\" src=\"https://img.youtube.com/vi/hRDHVKJI8d0/0.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eand here:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.tiktok.com/@iamdpbm/video/7619330385436069140\"\u003eDe volta Para o Futuro do Python - Python \u003cem\u003efuture\u003c/em\u003e - tiktokt video\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUnfortunately, all the videos are in portuguese. However, my notes are available bellow and the code is open source and available here: \u003ca href=\"https://github.com/Dpbm/video-python-futures\"\u003ehttps://github.com/Dpbm/video-python-futures\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEnjoy :)\u003c/p\u003e\n\u003ch2 id=\"notes\"\u003eNotes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllows you to tell the compiler that you want to use a standard that will come in future releases.\u003c/li\u003e\n\u003cli\u003eIs done by simply importing from \u003ccode\u003e__future__\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eMust be added on the top of the file, since it changes the way the file is parsed. Otherwise, it raises a \u003ccode\u003eSyntaxError\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eTells the compiler you want an specific part of your code to act is it will be the default in the future.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edivision\u003c/code\u003e calls \u003ccode\u003e__truediv__\u003c/code\u003e instead of \u003ccode\u003e__div__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003efrom __future__ import whatever\u003c/code\u003e is a future clause, but you can also import the \u003ccode\u003e__future__\u003c/code\u003e module with \u003ccode\u003eimport __future__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe future itself is an object that contains metadata about the very feature, like versions and etc.\u003c/li\u003e\n\u003cli\u003eSome futures are only supported by specific versions of python2, so older versions may need more workarounds than newer ones. That\u0026rsquo;s why \u003ccode\u003efuture\u003c/code\u003e and \u003ccode\u003esix\u003c/code\u003e are so useful in these cases.\u003c/li\u003e\n\u003cli\u003ePython 2.7 cli had a flag \u003ccode\u003e-3\u003c/code\u003e that warned you when there was some statements that couldn\u0026rsquo;t be trivial to fix using 2to3.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__future__\u003c/code\u003e works since python 2.1.\u003c/li\u003e\n\u003cli\u003eThere are flags that can be passed to \u003ccode\u003ecompile()\u003c/code\u003e to dynamically use future features.\u003c/li\u003e\n\u003cli\u003eOnly feature that requires future statements is \u003ccode\u003eannoations\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAny code compiled with \u003ccode\u003eexec()\u003c/code\u003e or \u003ccode\u003ecompile()\u003c/code\u003e will use the new statements when using futures in the module.\u003c/li\u003e\n\u003cli\u003eInteractive session also can use futures.\u003c/li\u003e\n\u003cli\u003eOnly docstrings, comments, blank lines and other future statements can appear before it.\u003c/li\u003e\n\u003cli\u003eFuture object has 2 elements containing tuples with 5 elements. The first one describes the Optional release, which is the first release the feature was accepted. And the second is the Mandatory Release, describes either when the feature became part of the language, or a prediction of when it will be or can be None if it was dropped. Usually, Optional \u0026lt; Mandatory.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"six\"\u003esix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUsed to wrap differences between python $2$ and $3$.\u003c/li\u003e\n\u003cli\u003eIs a single python file being easy to copy into a project whenever needed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"future\"\u003efuture\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eA package to make a compatibility layer for python2-3 code.\u003c/li\u003e\n\u003cli\u003eBased on the 2to3 module.\u003c/li\u003e\n\u003cli\u003eNot necessary anymore.\u003c/li\u003e\n\u003cli\u003eAdd supports for the standard library.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2to3\"\u003e2to3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eA library builtin python.\u003c/li\u003e\n\u003cli\u003eTransforms python2 code into python3 compatible.\u003c/li\u003e\n\u003cli\u003eWas removed from Python3.13.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"references\"\u003eReferences\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3.13/library/__future__.html\"\u003ehttps://docs.python.org/3.13/library/\u003cstrong\u003efuture\u003c/strong\u003e.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.reddit.com/r/learnpython/comments/8ialj1/how_does_future_work/\"\u003ehttps://www.reddit.com/r/learnpython/comments/8ialj1/how_does_future_work/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/7075082/what-is-future-in-python-used-for-and-how-when-to-use-it-and-how-it-works\"\u003ehttps://stackoverflow.com/questions/7075082/what-is-future-in-python-used-for-and-how-when-to-use-it-and-how-it-works\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pt.stackoverflow.com/questions/126466/para-que-serve-o-m%C3%B3dulo-future\"\u003ehttps://pt.stackoverflow.com/questions/126466/para-que-serve-o-m%C3%B3dulo-future\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.geeksforgeeks.org/python/__future__-module-in-python/\"\u003ehttps://www.geeksforgeeks.org/python/\u003cstrong\u003efuture\u003c/strong\u003e-module-in-python/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/5937251/writing-python-2-7-code-that-is-as-close-to-python-3-x-syntax-as-possible\"\u003ehttps://stackoverflow.com/questions/5937251/writing-python-2-7-code-that-is-as-close-to-python-3-x-syntax-as-possible\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://six.readthedocs.io/\"\u003ehttps://six.readthedocs.io/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://pypi.org/project/future/\"\u003ehttps://pypi.org/project/future/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://python-future.org/overview.html\"\u003ehttps://python-future.org/overview.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3.8/library/2to3.html\"\u003ehttps://docs.python.org/3.8/library/2to3.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/whatsnew/3.13.html\"\u003ehttps://docs.python.org/3/whatsnew/3.13.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://sources.debian.org/src/python2.7/2.7.9-2/Modules/future_builtins.c\"\u003ehttps://sources.debian.org/src/python2.7/2.7.9-2/Modules/future_builtins.c\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Lib/__future__.py\"\u003ehttps://github.com/python/cpython/blob/main/Lib/\u003cstrong\u003efuture\u003c/strong\u003e.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://python3porting.com/noconv.html\"\u003ehttp://python3porting.com/noconv.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.oracle.com/cd/E86824_01/html/E54763/python2-7-1.html\"\u003ehttps://docs.oracle.com/cd/E86824_01/html/E54763/python2-7-1.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3.13/library/__future__.html\"\u003ehttps://docs.python.org/3.13/library/\u003cstrong\u003efuture\u003c/strong\u003e.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/functions.html#compile\"\u003ehttps://docs.python.org/3/library/functions.html#compile\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3.13/reference/simple_stmts.html#future\"\u003ehttps://docs.python.org/3.13/reference/simple_stmts.html#future\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0236/\"\u003ehttps://peps.python.org/pep-0236/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0563/\"\u003ehttps://peps.python.org/pep-0563/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0649/\"\u003ehttps://peps.python.org/pep-0649/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0749/#the-future-of-from-future-import-annotations\"\u003ehttps://peps.python.org/pep-0749/#the-future-of-from-future-import-annotations\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"What's Python __future__?"},{"content":"These are the notes I took to do my video about shebangs, which is available here:\nand here:\nComo shebangs funcionam - tiktokt video\nUnfortunately, all the videos are in portuguese. However, my notes are available bellow and the code is open source and available here: https://github.com/Dpbm/video-shebang.\nEnjoy :)\nNotes The name cames from Sharp-bang (#! from music sheet notation). Some say that it\u0026rsquo;s due to its phonetics (hash + bang). It especifies an interpreter for this script. Bash handles the shebang when the underlying system doesn\u0026rsquo;t do that. It\u0026rsquo;s usual to set it to #!/bin/bash to ensure that it will use Bash instead of any other shell. Now days it\u0026rsquo;s preferable to use #!/usr/bin/env bash to get bash from $PATH if installed in a different directory. The script fallback to its parent SHELL when no shebang is defined. The shebang is used for portability. When it\u0026rsquo;s not provided, the system raises an ENOEXEC (Exec Format error) error. file command uses the shebang, as well, to see which kind of executable is that. You don\u0026rsquo;t need a blank after #!. Also accepts relative paths. When a program runs in a unix-like system, it executes a kernel exec()(or any command from this family) function. It take a look at the first 16 bits, searching for a magic number that describes an executable. If it\u0026rsquo;s no signature is found it return an ENOEXEC error. As time went, this magic part of the file also described how to execute it. When the run starts running your script, it first tries to delegate it to the kernel, which search for the shebang and tries to execute the file with a different interpreter. If none was found, the bash itself tries to execute. Explicit calling a script via a shell command (like sh or bash) the shebang is ignored. Using /usr/bin/env doesn\u0026rsquo;t provide complete portability, but it\u0026rsquo;s a good practice. Arguments can be split differently in different systems, so it may break in some occasions. The path of the script is passed via argv to the interpreter. Calling trace execve -\u0026gt; do_execveat_common -\u0026gt; create a linux_binprm containing data from it (DEFINE_CLASS -\u0026gt; alloc_bprm ) -\u0026gt; bprm_execve -\u0026gt; exec_binprm -\u0026gt; search_binary_handler -\u0026gt; prepare_binprm -\u0026gt; kernel_read (read the file) -\u0026gt; it them iterates over a linked list of formats list_for_each_entry(fmt, \u0026amp;formats, lh) { the exec.c provides an external function `__register_binfmt` that is used by each type in `binfmt_*.c` to register in the lits, calling like: core_initcall(init_elf_binfmt); -\u0026gt; load_binary from struct linux_binprm if it\u0026#39;s a script, it loads `binfmt_script.c` that has the method `load_script` which checks for the shebang -\u0026gt; open_exec (from exec.c) -\u0026gt; do_open_execat References https://unix.stackexchange.com/questions/149045/why-is-shebang-called-shebang https://www.gnu.org/software/bash/manual/bash.html#Shell-Scripts-1 https://medium.com/@jcroyoaun/a-deeper-view-into-the-shebang-for-linux-scripting-4a26395df49d https://stackoverflow.com/questions/3009192/how-does-the-shebang-work https://unix.stackexchange.com/questions/268766/what-exactly-happens-when-i-execute-a-file-in-my-shell https://crocidb.com/post/kernel-adventures/demystifying-the-shebang/ https://www.in-ulm.de/~mascheck/various/shebang/ http://www.faqs.org/faqs/unix-faq/faq/part3/section-16.html https://en.wikipedia.org/wiki/Shebang_(Unix) https://github.com/torvalds/linux/blob/v4.8/fs/binfmt_script.c#L25 https://man7.org/linux/man-pages/man2/execve.2.html https://man7.org/linux/man-pages/man3/perror.3.html https://stackoverflow.com/questions/4689724/where-do-i-find-the-source-code-for-execve https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/exec.c#l1376 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/binfmts.h https://github.com/torvalds/linux/blob/master/fs/namei.c#L4849 https://docs.kernel.org/admin-guide/binfmt-misc.html https://github.com/torvalds/linux/blob/master/include/linux/list.h https://github.com/torvalds/linux/blob/master/fs/binfmt_script.c https://homepages.cwi.nl/~aeb/std/hashexclam.html https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch20s04.html ","permalink":"https://dpbm.vercel.app/posts/the-magic-behind-shebangs-wbje9fp8ogw7r/","summary":"\u003cp\u003eThese are the notes I took to do my video about shebangs, which is available here:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/shorts/Mpv6wYCsikA?feature=share\"\u003e\u003cimg alt=\"Como shebangs functionam - youtube short video\" loading=\"lazy\" src=\"https://img.youtube.com/vi/Mpv6wYCsikA/0.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eand here:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.tiktok.com/@iamdpbm/video/7608634329568136468\"\u003eComo shebangs funcionam - tiktokt video\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUnfortunately, all the videos are in portuguese. However, my notes are available bellow and the code is open source and available here: \u003ca href=\"https://github.com/Dpbm/video-shebang\"\u003ehttps://github.com/Dpbm/video-shebang\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eEnjoy :)\u003c/p\u003e\n\u003ch2 id=\"notes\"\u003eNotes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe name cames from Sharp-bang (\u003ccode\u003e#!\u003c/code\u003e from music sheet notation). Some say that it\u0026rsquo;s due to its phonetics (hash + bang).\u003c/li\u003e\n\u003cli\u003eIt especifies an interpreter for this script.\u003c/li\u003e\n\u003cli\u003eBash handles the shebang when the underlying system doesn\u0026rsquo;t do that.\u003c/li\u003e\n\u003cli\u003eIt\u0026rsquo;s usual to set it to \u003ccode\u003e#!/bin/bash\u003c/code\u003e to ensure that it will use Bash instead of any other shell.\u003c/li\u003e\n\u003cli\u003eNow days it\u0026rsquo;s preferable to use \u003ccode\u003e#!/usr/bin/env bash\u003c/code\u003e to get bash from \u003ccode\u003e$PATH\u003c/code\u003e if installed in a different directory.\u003c/li\u003e\n\u003cli\u003eThe script fallback to its parent \u003ccode\u003eSHELL\u003c/code\u003e when no shebang is defined.\u003c/li\u003e\n\u003cli\u003eThe shebang is used for portability.\u003c/li\u003e\n\u003cli\u003eWhen it\u0026rsquo;s not provided, the system raises an \u003ccode\u003eENOEXEC (Exec Format error)\u003c/code\u003e error.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efile\u003c/code\u003e command uses the shebang, as well, to see which kind of executable is that.\u003c/li\u003e\n\u003cli\u003eYou don\u0026rsquo;t need a blank after \u003ccode\u003e#!\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAlso accepts relative paths.\u003c/li\u003e\n\u003cli\u003eWhen a program runs in a unix-like system, it executes a kernel \u003ccode\u003eexec()\u003c/code\u003e(or any command from this family) function. It take a look at the first 16 bits, searching for a magic number that describes an executable. If it\u0026rsquo;s no signature is found it return an \u003ccode\u003eENOEXEC\u003c/code\u003e error.\u003c/li\u003e\n\u003cli\u003eAs time went, this magic part of the file also described how to execute it.\u003c/li\u003e\n\u003cli\u003eWhen the run starts running your script, it first tries to delegate it to the kernel, which search for the shebang and tries to execute the file with a different interpreter. If none was found, the bash itself tries to execute.\u003c/li\u003e\n\u003cli\u003eExplicit calling a script via a shell command (like \u003ccode\u003esh\u003c/code\u003e or \u003ccode\u003ebash\u003c/code\u003e) the shebang is ignored.\u003c/li\u003e\n\u003cli\u003eUsing \u003ccode\u003e/usr/bin/env\u003c/code\u003e doesn\u0026rsquo;t provide complete portability, but it\u0026rsquo;s a good practice.\u003c/li\u003e\n\u003cli\u003eArguments can be split differently in different systems, so it may break in some occasions.\u003c/li\u003e\n\u003cli\u003eThe path of the script is passed via argv to the interpreter.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"calling-trace\"\u003eCalling trace\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eexecve -\u0026gt; do_execveat_common -\u0026gt; create a linux_binprm containing data from it (DEFINE_CLASS -\u0026gt; alloc_bprm ) -\u0026gt; bprm_execve -\u0026gt; exec_binprm -\u0026gt; search_binary_handler -\u0026gt; prepare_binprm -\u0026gt; kernel_read (read the file) -\u0026gt;\n\nit them iterates over a linked list of formats\n\nlist_for_each_entry(fmt, \u0026amp;formats, lh) {\n\nthe exec.c provides an external function `__register_binfmt` that is used by each type in `binfmt_*.c` to register in the lits, calling like:\n\ncore_initcall(init_elf_binfmt);\n\n\n-\u0026gt; load_binary from struct linux_binprm\n\nif it\u0026#39;s a script, it loads `binfmt_script.c` that has the method `load_script` which checks for the shebang\n\n-\u0026gt; open_exec (from exec.c) -\u0026gt; do_open_execat\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"references\"\u003eReferences\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://unix.stackexchange.com/questions/149045/why-is-shebang-called-shebang\"\u003ehttps://unix.stackexchange.com/questions/149045/why-is-shebang-called-shebang\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.gnu.org/software/bash/manual/bash.html#Shell-Scripts-1\"\u003ehttps://www.gnu.org/software/bash/manual/bash.html#Shell-Scripts-1\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@jcroyoaun/a-deeper-view-into-the-shebang-for-linux-scripting-4a26395df49d\"\u003ehttps://medium.com/@jcroyoaun/a-deeper-view-into-the-shebang-for-linux-scripting-4a26395df49d\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/3009192/how-does-the-shebang-work\"\u003ehttps://stackoverflow.com/questions/3009192/how-does-the-shebang-work\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://unix.stackexchange.com/questions/268766/what-exactly-happens-when-i-execute-a-file-in-my-shell\"\u003ehttps://unix.stackexchange.com/questions/268766/what-exactly-happens-when-i-execute-a-file-in-my-shell\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://crocidb.com/post/kernel-adventures/demystifying-the-shebang/\"\u003ehttps://crocidb.com/post/kernel-adventures/demystifying-the-shebang/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.in-ulm.de/~mascheck/various/shebang/\"\u003ehttps://www.in-ulm.de/~mascheck/various/shebang/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.faqs.org/faqs/unix-faq/faq/part3/section-16.html\"\u003ehttp://www.faqs.org/faqs/unix-faq/faq/part3/section-16.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Shebang_(Unix)\"\u003ehttps://en.wikipedia.org/wiki/Shebang_(Unix)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/torvalds/linux/blob/v4.8/fs/binfmt_script.c#L25\"\u003ehttps://github.com/torvalds/linux/blob/v4.8/fs/binfmt_script.c#L25\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://man7.org/linux/man-pages/man2/execve.2.html\"\u003ehttps://man7.org/linux/man-pages/man2/execve.2.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://man7.org/linux/man-pages/man3/perror.3.html\"\u003ehttps://man7.org/linux/man-pages/man3/perror.3.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/4689724/where-do-i-find-the-source-code-for-execve\"\u003ehttps://stackoverflow.com/questions/4689724/where-do-i-find-the-source-code-for-execve\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/exec.c#l1376\"\u003ehttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/exec.c#l1376\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/binfmts.h\"\u003ehttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/binfmts.h\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/torvalds/linux/blob/master/fs/namei.c#L4849\"\u003ehttps://github.com/torvalds/linux/blob/master/fs/namei.c#L4849\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.kernel.org/admin-guide/binfmt-misc.html\"\u003ehttps://docs.kernel.org/admin-guide/binfmt-misc.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/torvalds/linux/blob/master/include/linux/list.h\"\u003ehttps://github.com/torvalds/linux/blob/master/include/linux/list.h\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/torvalds/linux/blob/master/fs/binfmt_script.c\"\u003ehttps://github.com/torvalds/linux/blob/master/fs/binfmt_script.c\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://homepages.cwi.nl/~aeb/std/hashexclam.html\"\u003ehttps://homepages.cwi.nl/~aeb/std/hashexclam.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch20s04.html\"\u003ehttps://www.oreilly.com/library/view/understanding-the-linux/0596005652/ch20s04.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"The magic behind shebangs!"},{"content":"This is a topic that I discussed in the following youtube video (unfortunately only in brazilian portuguese)\nThese notes were extracted from my github repo https://github.com/Dpbm/video-python-import-methods, take a look if you want more details and some code ;)\nNotes C includes headers (.h files) includes the interfaces for external code. including a header into a c source file is the same as copying the definition of the function or whatever to that context, but less prone to errors. #include it reads a file and places it inside the current source code. to avoid errors, use it to only import functions/declarations/definitions/etc from header files. includes using \u0026lt;\u0026gt; looks only in standard system directories. But without it, it first looks into the current path and then starts look for it in other system locations. Wrappers to avoid import the same thing twice use the wrappers #ifndef DEFINITION_OF_HEADER #define DEFINITION_OF_HEADER ... #endif you can also use #pragma once JS Common JS use require and exports. require can load ES modules when the file is .mjs ES modules are more flexible you can define queries, properties, etc. Python import Python uses importlib as the underlying machinary for importing. components of import are available through importlib to make it possible for you to create a custom object. import calls __import__(). importer is a term that refers to a both finds and loads a module. the import command don\u0026rsquo;t put every single definition directly into the current scope, but only the module name. To access its internals, you must use module_name.\u0026lt;what you want\u0026gt;. is not required to be on the top of the file. it search, create a module object and binds a name, while __import__ only searches and creates the object. when module is not found it raises ModuleNotFoundError. The import statement find a module and loads it. define a name for this module in the current scope. The import statement using from find the module specified in from clause. for each name in import check if the name exists. If not, check if it\u0026rsquo;s a submodule. If not found raise ImportError. Otherwise import to the local namespace. using * it exposes all public data. members with _ are not exposed by default. if __all__ is defined, all names defined are exposed. Otherwise all public members. __all__ is a global variable per module. it imports all names into the current scope (except those which start with _). not recommended. Relative imports only works on packages contained one within the another. . for the current package and .. for one that\u0026rsquo;s a level up. PYTHONPATH add entries in sys.path. useful when we need to test a package without installing it. affects installed python versions/environments, only use when it\u0026rsquo;s really needed. sys.path first entry is the directory of the current script or the current directory when using -c or -m. sys.modules a dictionary that maps modules that were already loaded. it\u0026rsquo;s a cache. return a module ready to run. maps submodules as well. if an entry value is None python will raise an ModuleNotFoundError. sys.meta_path (meta hooks) Are called before any importing proccess so it can override the sys.path, frozen modules and even builtin ones. To register add a finder object in sys.meta_path if the whole list is check and every finder returns None, so the module cannot be handled, raising an ModuleNotFoundError, otherwise return a spec. it\u0026rsquo;s called multiple times for multilevel packages (foo.bar.baz, 3 times, \u0026lsquo;foo\u0026rsquo;, \u0026lsquo;foo.bar\u0026rsquo;, \u0026lsquo;foo.bar.baz\u0026rsquo;). python has 3 by default. For builtin modules, for frozen modules and for an import path. by default it can handle .py, .pyc and .so files. sys.path_hooks part of sys.path processing. is registered by adding an importer factory into sys.path_hooks. it checks if a path item can be handled. return an importer when an item can be handled, otherwise return ImportError. is consulted while traversing a package __path__. python uses this list to handle different types of files and locations, like from URLs, zip files, so files, .py files, etc. it\u0026rsquo;s used after python tries every single finder from sys.meta_path. If none works, it iterate over each sys.path_hooks entries and give it each possible value from sys.path. must call sys.path_importer_cache.clear() after adding a new factory to it Modules is a file containing statements and definitions. the module name is the filename, which can be accessed via __name__. can have executable statements that are executed only once when the module is imported. have its private namespace. when executed as a script its name (__name__) becomes __main__. when importing a module, it searches in this sequence: sys.builtin_module_names. sys.path (which includes the directory of the file, PYTHONPATH and the installation dependent directory site-packages). the dir() command is used to list all the names in a module builtins is a module that list everything that\u0026rsquo;s builtin python every module has a repr (representaion) depending of data like name, origin, etc. __pycache__ contains the cached modules that were previously built. python always ignore the cache when: they are directly loaded via CLI (it recompiles the module). when the module is a binary. to reduce the compiled size use: -O to remove assert statements -OO to remove asserts and __doc__ opt- to optimize the binary .pyc are only faster for loading not executing Packages collection of modules inside the package, when importing, python searchs in sys.path for the names. To find the submodules inside your package, each submodule must have a __init__.py file. when loading submodules with import python tries to find the name as a declarion/statement from the module, if it\u0026rsquo;s not find it tries to load as a submodule. In case it\u0026rsquo;s not found, it will raise and ImportError. when using import * it only import the names defined for that package, not every submodule name. you can use relative imports within the submodules to navigate quickly between code. you can also use \u0026lsquo;path\u0026rsquo; to check which directory python search for the submodules. Any module that has a __path__ is a package. Regular Packages directories with __init__.py. Namespace Packages split a pacakge between multiple locations on disk. cannot contain __init__.py files. __path__ is read-only. at runtime you can use sys.path to discover them. __init__.py can be empty but can also run initialization code. when a module is imported, the __init__.py is executed. define a package. Import Protocol it has two parts when both are implement it\u0026rsquo;s called an importer. finder and loader can be the same object. finders it determines if a module can be found. return a module spec with all information needed for loading it. can\u0026rsquo;t point to whatever location, not requering to be in the local machine. can be a meta_path finder, which operates at the beggining of the importing proccess, and path_entry finder, which responsible for finding and loading modules and packages located via a string path entry. sys.path_importer_cache maintains a cache of finders objects. loaders don\u0026rsquo;t need to check for sys.modules, import will check it before. module execution. Overall Execution pipeline (Default pipeline as I understood) you use import it uses under the hood __import__() search the module at cache sys.modules if not found, run the meta hooks run the finder iteratively if no meta_path worked, it iterates over sys.path and sys.path_hooks trying to see if any of the paths can be handled check if .pyc file is up-to-date, when importing python files if not, it regenerates the file and save the new hash run loader returning a module object binds the module object into a name provided via import References https://www.grumpymetalguy.com/programming/python_importlib/ https://docs.python.org/3/library/importlib.html https://docs.python.org/3/reference/simple_stmts.html#import https://github.com/python/cpython/blob/3.14/Lib/importlib/init.py https://docs.python.org/3/glossary.html#term-importer https://docs.python.org/3/glossary.html#term-loader https://docs.python.org/3/glossary.html#term-module-spec https://realpython.com/ref/stdlib/importlib/ https://discuss.python.org/t/usage-of-all-in-init-py/17936/5 https://discuss.python.org/t/usage-of-pythonpath/18086/7 https://bic-berkeley.github.io/psych-214-fall-2016/using_pythonpath.html https://github.com/stas00/the-art-of-debugging https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html https://nodejs.org/api/modules.html https://nodejs.org/api/esm.html https://tc39.es/ecma262/#sec-modules https://docs.python.org/3/tutorial/modules.html https://docs.python.org/3/glossary.html#term-namespace-package https://docs.python.org/3/reference/datamodel.html#module.path https://docs.python.org/3/reference/import.html https://docs.python.org/3/library/sys.html#sys.modules https://docs.python.org/3/library/sys.html#sys.meta_path https://peps.python.org/pep-0302/ https://docs.python.org/3/library/sys.html#sys.path_importer_cache https://docs.python.org/3/glossary.html#term-portion https://micropython-stubber.readthedocs.io/en/main/50_frozen_stubs.html#frozen-modules https://github.com/python/cpython/blob/main/Python/frozen.c https://wiki.python.org/moin/Freeze https://docs.python-guide.org/shipping/freezing/ https://docs.python.org/3/library/sys_path_init.html https://docs.python.org/3/tutorial/classes.html#tut-scopes https://docs.python.org/3/library/compileall.html#module-compileall https://peps.python.org/pep-3147/ https://peps.python.org/pep-0420/ https://packaging.python.org/en/latest/guides/packaging-namespace-packages/ https://realpython.com/python-namespace-package/ https://docs.python.org/3/library/importlib.html#importlib.machinery.PathFinder.find_spec https://stackoverflow.com/questions/41990169/how-to-use-sys-path-hooks-for-customized-loading-of-modules https://stackoverflow.com/questions/31882967/why-are-pyc-files-created-on-import https://peps.python.org/pep-3147/#python-behavior https://medium.com/@utkarshshukla.author/what-is-a-pyc-file-visualizing-pythons-bytecode-generation-fcce8e6da679 https://peps.python.org/pep-0451/ https://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap.py https://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap_external.py https://github.com/python/cpython/blob/main/Lib/importlib/abc.py https://github.com/python/cpython/blob/main/Lib/importlib/_abc.py https://www.reddit.com/r/Python/comments/untwoc/syspath_hooks_is_fun_for_everyone_cfgimp_a_misuse/ https://docs.python.org/3/glossary.html#term-path-entry-finder https://docs.python.org/3/glossary.html#term-path-entry-hook https://snarky.ca/writing-a-zip-file-importer-the-path-hook-part-1/ https://rahul.gopinath.org/post/2018/09/07/python-importer/ https://docs.ploomber.io/en/latest/api/_modules/root/ploomber.SourceLoader.html ","permalink":"https://dpbm.vercel.app/posts/python-imports-tpc7pcgzikhdq/","summary":"\u003cp\u003eThis is a topic that I discussed in the following youtube video (unfortunately only in brazilian portuguese)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=qoHjoAgangI\"\u003e\u003cimg alt=\"Como python faz imports - youtube video\" loading=\"lazy\" src=\"https://img.youtube.com/vi/qoHjoAgangI/0.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThese notes were extracted from my github repo \u003ca href=\"https://github.com/Dpbm/video-python-import-methods\"\u003ehttps://github.com/Dpbm/video-python-import-methods\u003c/a\u003e, take a look if you want more details and some code ;)\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"notes\"\u003eNotes\u003c/h2\u003e\n\u003ch3 id=\"c-includes\"\u003eC includes\u003c/h3\u003e\n\u003ch4 id=\"headers-h--files\"\u003eheaders (.h  files)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eincludes the interfaces for external code. including a header into a c source file is the same as copying the definition of the function or whatever to that context, but less prone to errors.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"include\"\u003e\u003ccode\u003e#include\u003c/code\u003e\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eit reads a file and places it inside the current source code.\u003c/li\u003e\n\u003cli\u003eto avoid errors, use it to only import functions/declarations/definitions/etc from header files.\u003c/li\u003e\n\u003cli\u003eincludes using \u003ccode\u003e\u0026lt;\u0026gt;\u003c/code\u003e looks only in standard system directories. But without it, it first looks into the current path and then starts look for it in other system locations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"wrappers\"\u003eWrappers\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eto avoid import the same thing twice use the wrappers\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#ifndef DEFINITION_OF_HEADER\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#define DEFINITION_OF_HEADER\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#endif \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003eyou can also use \u003ccode\u003e#pragma once\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"js\"\u003eJS\u003c/h3\u003e\n\u003ch3 id=\"common-js\"\u003eCommon JS\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euse \u003ccode\u003erequire\u003c/code\u003e and \u003ccode\u003eexports.\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003erequire can load ES modules when the file is \u003ccode\u003e.mjs\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"es-modules\"\u003eES modules\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eare more flexible\u003c/li\u003e\n\u003cli\u003eyou can define queries, properties, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"python-import\"\u003ePython import\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePython uses importlib as the underlying machinary for importing.\u003c/li\u003e\n\u003cli\u003ecomponents of \u003ccode\u003eimport\u003c/code\u003e are available through \u003ccode\u003eimportlib\u003c/code\u003e to make it possible for you to create a custom object.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eimport\u003c/code\u003e calls \u003ccode\u003e__import__()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eimporter\u003c/code\u003e is a term that refers to a both finds and loads a module.\u003c/li\u003e\n\u003cli\u003ethe \u003ccode\u003eimport\u003c/code\u003e command don\u0026rsquo;t put every single definition directly into the current scope, but only the module name. To access its internals, you must use \u003ccode\u003emodule_name.\u0026lt;what you want\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eis not required to be on the top of the file.\u003c/li\u003e\n\u003cli\u003eit search, create a module object and binds a name, while \u003ccode\u003e__import__\u003c/code\u003e only searches and creates the object.\u003c/li\u003e\n\u003cli\u003ewhen module is not found it raises \u003ccode\u003eModuleNotFoundError\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"the-import-statement\"\u003eThe import statement\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003efind a module and loads it.\u003c/li\u003e\n\u003cli\u003edefine a name for this module in the current scope.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"the-import-statement-using-from\"\u003eThe import statement using \u003ccode\u003efrom\u003c/code\u003e\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003efind the module specified in \u003ccode\u003efrom\u003c/code\u003e clause.\u003c/li\u003e\n\u003cli\u003efor each name in \u003ccode\u003eimport\u003c/code\u003e check if the name exists. If not, check if it\u0026rsquo;s a submodule. If not found raise \u003ccode\u003eImportError\u003c/code\u003e. Otherwise import to the local namespace.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"using-\"\u003eusing \u003ccode\u003e*\u003c/code\u003e\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eit exposes all public data.\u003c/li\u003e\n\u003cli\u003emembers with \u003ccode\u003e_\u003c/code\u003e are not exposed by default.\u003c/li\u003e\n\u003cli\u003eif \u003ccode\u003e__all__\u003c/code\u003e is defined, all names defined are exposed. Otherwise all public members.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__all__\u003c/code\u003e is a global variable per module.\u003c/li\u003e\n\u003cli\u003eit imports all names into the current scope (except those which start with \u003ccode\u003e_\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003enot recommended.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"relative-imports\"\u003eRelative imports\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eonly works on packages contained one within the another.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e.\u003c/code\u003e for the current package and \u003ccode\u003e..\u003c/code\u003e for one that\u0026rsquo;s a level up.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pythonpath\"\u003e\u003ccode\u003ePYTHONPATH\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd entries in \u003ccode\u003esys.path\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003euseful when we need to test a package without installing it.\u003c/li\u003e\n\u003cli\u003eaffects installed python versions/environments, only use when it\u0026rsquo;s really needed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"syspath\"\u003e\u003ccode\u003esys.path\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efirst entry is the directory of the current script or the current directory when using \u003ccode\u003e-c\u003c/code\u003e or \u003ccode\u003e-m\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"sysmodules\"\u003e\u003ccode\u003esys.modules\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ea dictionary that maps modules that were already loaded.\u003c/li\u003e\n\u003cli\u003eit\u0026rsquo;s a cache.\u003c/li\u003e\n\u003cli\u003ereturn a module ready to run.\u003c/li\u003e\n\u003cli\u003emaps submodules as well.\u003c/li\u003e\n\u003cli\u003eif an entry value is \u003ccode\u003eNone\u003c/code\u003e python will raise an \u003ccode\u003eModuleNotFoundError\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"sysmeta_path-meta-hooks\"\u003e\u003ccode\u003esys.meta_path\u003c/code\u003e (meta hooks)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAre called before any importing proccess so it can override the \u003ccode\u003esys.path\u003c/code\u003e, \u003ccode\u003efrozen modules\u003c/code\u003e and even \u003ccode\u003ebuiltin\u003c/code\u003e ones.\u003c/li\u003e\n\u003cli\u003eTo register add a finder object in \u003ccode\u003esys.meta_path\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eif the whole list is check and every finder returns \u003ccode\u003eNone\u003c/code\u003e, so the module cannot be handled, raising an \u003ccode\u003eModuleNotFoundError\u003c/code\u003e, otherwise return a spec.\u003c/li\u003e\n\u003cli\u003eit\u0026rsquo;s called multiple times for multilevel packages (\u003ccode\u003efoo.bar.baz\u003c/code\u003e, 3 times, \u0026lsquo;foo\u0026rsquo;, \u0026lsquo;foo.bar\u0026rsquo;, \u0026lsquo;foo.bar.baz\u0026rsquo;).\u003c/li\u003e\n\u003cli\u003epython has 3 by default. For builtin modules, for frozen modules and for an import path.\u003c/li\u003e\n\u003cli\u003eby default it can handle \u003ccode\u003e.py\u003c/code\u003e, \u003ccode\u003e.pyc\u003c/code\u003e and \u003ccode\u003e.so\u003c/code\u003e files.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"syspath_hooks\"\u003e\u003ccode\u003esys.path_hooks\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epart of \u003ccode\u003esys.path\u003c/code\u003e processing.\u003c/li\u003e\n\u003cli\u003eis registered by adding an importer factory into \u003ccode\u003esys.path_hooks\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eit checks if a path item can be handled.\u003c/li\u003e\n\u003cli\u003ereturn an importer when an item can be handled, otherwise return \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eis consulted while traversing a package \u003ccode\u003e__path__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003epython uses this list to handle different types of files and locations, like from URLs, zip files, so files, .py files, etc.\u003c/li\u003e\n\u003cli\u003eit\u0026rsquo;s used after python tries every single finder from \u003ccode\u003esys.meta_path\u003c/code\u003e. If none works, it iterate over each \u003ccode\u003esys.path_hooks\u003c/code\u003e entries and give it each possible value from \u003ccode\u003esys.path\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003emust call \u003ccode\u003esys.path_importer_cache.clear()\u003c/code\u003e after adding a new factory to it\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"modules\"\u003eModules\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eis a file containing statements and definitions.\u003c/li\u003e\n\u003cli\u003ethe module name is the filename, which can be accessed via \u003ccode\u003e__name__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ecan have executable statements that are executed only once when the module is imported.\u003c/li\u003e\n\u003cli\u003ehave its private namespace.\u003c/li\u003e\n\u003cli\u003ewhen executed as a script its name (\u003ccode\u003e__name__\u003c/code\u003e) becomes \u003ccode\u003e__main__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ewhen importing a module, it searches in this sequence:\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003esys.builtin_module_names\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esys.path\u003c/code\u003e (which includes the directory of the file, \u003ccode\u003ePYTHONPATH\u003c/code\u003e and the installation dependent directory \u003ccode\u003esite-packages\u003c/code\u003e).\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003ethe \u003ccode\u003edir()\u003c/code\u003e command is used to list all the names in a module\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebuiltins\u003c/code\u003e is a module that list everything that\u0026rsquo;s builtin python\u003c/li\u003e\n\u003cli\u003eevery module has a \u003ccode\u003erepr\u003c/code\u003e (representaion) depending of data like name, origin, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"__pycache__\"\u003e\u003ccode\u003e__pycache__\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econtains the cached modules that were previously built.\u003c/li\u003e\n\u003cli\u003epython always ignore the cache when:\n\u003col\u003e\n\u003cli\u003ethey are directly loaded via CLI (it recompiles the module).\u003c/li\u003e\n\u003cli\u003ewhen the module is a binary.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003eto reduce the compiled size use:\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003e-O\u003c/code\u003e to remove \u003ccode\u003eassert\u003c/code\u003e statements\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-OO\u003c/code\u003e to remove \u003ccode\u003easserts\u003c/code\u003e and \u003ccode\u003e__doc__\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopt-\u003c/code\u003e to optimize the binary\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e.pyc\u003c/code\u003e are only faster for loading not executing\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"packages\"\u003ePackages\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecollection of modules\u003c/li\u003e\n\u003cli\u003einside the package, when importing, python searchs in \u003ccode\u003esys.path\u003c/code\u003e for the names. To find the submodules inside your package, each submodule must have a \u003ccode\u003e__init__.py\u003c/code\u003e file.\u003c/li\u003e\n\u003cli\u003ewhen loading submodules with \u003ccode\u003eimport\u003c/code\u003e python tries to find the name as a declarion/statement from the module, if it\u0026rsquo;s not find it tries to load as a submodule. In case it\u0026rsquo;s not found, it will raise and \u003ccode\u003eImportError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ewhen using \u003ccode\u003eimport *\u003c/code\u003e it only import the names defined for that package, not every submodule name.\u003c/li\u003e\n\u003cli\u003eyou can use relative imports within the submodules to navigate quickly between code.\u003c/li\u003e\n\u003cli\u003eyou can also use \u0026lsquo;\u003cstrong\u003epath\u003c/strong\u003e\u0026rsquo; to check which directory python search for the submodules.\u003c/li\u003e\n\u003cli\u003eAny module that has a \u003ccode\u003e__path__\u003c/code\u003e is a package.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"regular-packages\"\u003eRegular Packages\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edirectories with \u003ccode\u003e__init__.py\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"namespace-packages\"\u003eNamespace Packages\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esplit a pacakge between multiple locations on disk.\u003c/li\u003e\n\u003cli\u003ecannot contain \u003ccode\u003e__init__.py\u003c/code\u003e files.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__path__\u003c/code\u003e is read-only.\u003c/li\u003e\n\u003cli\u003eat runtime you can use \u003ccode\u003esys.path\u003c/code\u003e to discover them.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"__init__py\"\u003e\u003ccode\u003e__init__.py\u003c/code\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecan be empty but can also run initialization code.\u003c/li\u003e\n\u003cli\u003ewhen a module is imported, the \u003ccode\u003e__init__.py\u003c/code\u003e is executed.\u003c/li\u003e\n\u003cli\u003edefine a package.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"import-protocol\"\u003eImport Protocol\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eit has two parts\u003c/li\u003e\n\u003cli\u003ewhen both are implement it\u0026rsquo;s called an \u003ccode\u003eimporter\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003efinder and loader can be the same object.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"finders\"\u003efinders\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eit determines if a module can be found.\u003c/li\u003e\n\u003cli\u003ereturn a \u003ccode\u003emodule spec\u003c/code\u003e with all information needed for loading it.\u003c/li\u003e\n\u003cli\u003ecan\u0026rsquo;t point to whatever location, not requering to be in the local machine.\u003c/li\u003e\n\u003cli\u003ecan be a \u003ccode\u003emeta_path finder\u003c/code\u003e, which operates at the beggining of the importing proccess, and \u003ccode\u003epath_entry finder\u003c/code\u003e, which responsible for finding and loading \u003ccode\u003emodules\u003c/code\u003e and \u003ccode\u003epackages\u003c/code\u003e located via a string \u003ccode\u003epath entry\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esys.path_importer_cache\u003c/code\u003e maintains a cache of finders objects.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"loaders\"\u003eloaders\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edon\u0026rsquo;t need to check for \u003ccode\u003esys.modules\u003c/code\u003e, import will check it before.\u003c/li\u003e\n\u003cli\u003emodule execution.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"overall-execution-pipeline-default-pipeline-as-i-understood\"\u003eOverall Execution pipeline (Default pipeline as I understood)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eyou use \u003ccode\u003eimport\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eit uses under the hood \u003ccode\u003e__import__()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003esearch the module at cache \u003ccode\u003esys.modules\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eif not found, run the \u003ccode\u003emeta hooks\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003erun the finder iteratively\n\u003cul\u003e\n\u003cli\u003eif no \u003ccode\u003emeta_path\u003c/code\u003e worked, it iterates over \u003ccode\u003esys.path\u003c/code\u003e and \u003ccode\u003esys.path_hooks\u003c/code\u003e trying to see if any of the paths can be handled\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003echeck if \u003ccode\u003e.pyc\u003c/code\u003e file is up-to-date, when importing python files\n\u003cul\u003e\n\u003cli\u003eif not, it regenerates the file and save the new hash\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003erun loader returning a module object\u003c/li\u003e\n\u003cli\u003ebinds the module object into a name provided via \u003ccode\u003eimport\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"references\"\u003eReferences\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.grumpymetalguy.com/programming/python_importlib/\"\u003ehttps://www.grumpymetalguy.com/programming/python_importlib/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/importlib.html\"\u003ehttps://docs.python.org/3/library/importlib.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/reference/simple_stmts.html#import\"\u003ehttps://docs.python.org/3/reference/simple_stmts.html#import\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/3.14/Lib/importlib/__init__.py\"\u003ehttps://github.com/python/cpython/blob/3.14/Lib/importlib/\u003cstrong\u003einit\u003c/strong\u003e.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-importer\"\u003ehttps://docs.python.org/3/glossary.html#term-importer\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-loader\"\u003ehttps://docs.python.org/3/glossary.html#term-loader\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-module-spec\"\u003ehttps://docs.python.org/3/glossary.html#term-module-spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://realpython.com/ref/stdlib/importlib/\"\u003ehttps://realpython.com/ref/stdlib/importlib/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://discuss.python.org/t/usage-of-all-in-init-py/17936/5\"\u003ehttps://discuss.python.org/t/usage-of-all-in-init-py/17936/5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://discuss.python.org/t/usage-of-pythonpath/18086/7\"\u003ehttps://discuss.python.org/t/usage-of-pythonpath/18086/7\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://bic-berkeley.github.io/psych-214-fall-2016/using_pythonpath.html\"\u003ehttps://bic-berkeley.github.io/psych-214-fall-2016/using_pythonpath.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/stas00/the-art-of-debugging\"\u003ehttps://github.com/stas00/the-art-of-debugging\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH\"\u003ehttps://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html\"\u003ehttps://gcc.gnu.org/onlinedocs/cpp/Header-Files.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://nodejs.org/api/modules.html\"\u003ehttps://nodejs.org/api/modules.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://nodejs.org/api/esm.html\"\u003ehttps://nodejs.org/api/esm.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://tc39.es/ecma262/#sec-modules\"\u003ehttps://tc39.es/ecma262/#sec-modules\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/tutorial/modules.html\"\u003ehttps://docs.python.org/3/tutorial/modules.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-namespace-package\"\u003ehttps://docs.python.org/3/glossary.html#term-namespace-package\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/reference/datamodel.html#module.__path__\"\u003ehttps://docs.python.org/3/reference/datamodel.html#module.\u003cstrong\u003epath\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/reference/import.html\"\u003ehttps://docs.python.org/3/reference/import.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/sys.html#sys.modules\"\u003ehttps://docs.python.org/3/library/sys.html#sys.modules\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/sys.html#sys.meta_path\"\u003ehttps://docs.python.org/3/library/sys.html#sys.meta_path\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0302/\"\u003ehttps://peps.python.org/pep-0302/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/sys.html#sys.path_importer_cache\"\u003ehttps://docs.python.org/3/library/sys.html#sys.path_importer_cache\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-portion\"\u003ehttps://docs.python.org/3/glossary.html#term-portion\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://micropython-stubber.readthedocs.io/en/main/50_frozen_stubs.html#frozen-modules\"\u003ehttps://micropython-stubber.readthedocs.io/en/main/50_frozen_stubs.html#frozen-modules\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Python/frozen.c\"\u003ehttps://github.com/python/cpython/blob/main/Python/frozen.c\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://wiki.python.org/moin/Freeze\"\u003ehttps://wiki.python.org/moin/Freeze\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python-guide.org/shipping/freezing/\"\u003ehttps://docs.python-guide.org/shipping/freezing/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/sys_path_init.html\"\u003ehttps://docs.python.org/3/library/sys_path_init.html\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/tutorial/classes.html#tut-scopes\"\u003ehttps://docs.python.org/3/tutorial/classes.html#tut-scopes\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/compileall.html#module-compileall\"\u003ehttps://docs.python.org/3/library/compileall.html#module-compileall\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-3147/\"\u003ehttps://peps.python.org/pep-3147/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0420/\"\u003ehttps://peps.python.org/pep-0420/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://packaging.python.org/en/latest/guides/packaging-namespace-packages/\"\u003ehttps://packaging.python.org/en/latest/guides/packaging-namespace-packages/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://realpython.com/python-namespace-package/\"\u003ehttps://realpython.com/python-namespace-package/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/library/importlib.html#importlib.machinery.PathFinder.find_spec\"\u003ehttps://docs.python.org/3/library/importlib.html#importlib.machinery.PathFinder.find_spec\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/41990169/how-to-use-sys-path-hooks-for-customized-loading-of-modules\"\u003ehttps://stackoverflow.com/questions/41990169/how-to-use-sys-path-hooks-for-customized-loading-of-modules\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://stackoverflow.com/questions/31882967/why-are-pyc-files-created-on-import\"\u003ehttps://stackoverflow.com/questions/31882967/why-are-pyc-files-created-on-import\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-3147/#python-behavior\"\u003ehttps://peps.python.org/pep-3147/#python-behavior\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://medium.com/@utkarshshukla.author/what-is-a-pyc-file-visualizing-pythons-bytecode-generation-fcce8e6da679\"\u003ehttps://medium.com/@utkarshshukla.author/what-is-a-pyc-file-visualizing-pythons-bytecode-generation-fcce8e6da679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0451/\"\u003ehttps://peps.python.org/pep-0451/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap.py\"\u003ehttps://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap_external.py\"\u003ehttps://github.com/python/cpython/blob/main/Lib/importlib/_bootstrap_external.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Lib/importlib/abc.py\"\u003ehttps://github.com/python/cpython/blob/main/Lib/importlib/abc.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/cpython/blob/main/Lib/importlib/_abc.py\"\u003ehttps://github.com/python/cpython/blob/main/Lib/importlib/_abc.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.reddit.com/r/Python/comments/untwoc/syspath_hooks_is_fun_for_everyone_cfgimp_a_misuse/\"\u003ehttps://www.reddit.com/r/Python/comments/untwoc/syspath_hooks_is_fun_for_everyone_cfgimp_a_misuse/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-path-entry-finder\"\u003ehttps://docs.python.org/3/glossary.html#term-path-entry-finder\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.python.org/3/glossary.html#term-path-entry-hook\"\u003ehttps://docs.python.org/3/glossary.html#term-path-entry-hook\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://snarky.ca/writing-a-zip-file-importer-the-path-hook-part-1/\"\u003ehttps://snarky.ca/writing-a-zip-file-importer-the-path-hook-part-1/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://rahul.gopinath.org/post/2018/09/07/python-importer/\"\u003ehttps://rahul.gopinath.org/post/2018/09/07/python-importer/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://docs.ploomber.io/en/latest/api/_modules/root/ploomber.SourceLoader.html\"\u003ehttps://docs.ploomber.io/en/latest/api/_modules/root/ploomber.SourceLoader.html\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"How does Python handle imports?"},{"content":"So, it\u0026rsquo;s been a long time since I first created my blog using NextJs and MongoDB. The previous setup was kind a mess. You can still check it on my github 966949eb6e321c5f8478d40fa07550b41351401f.\nThis old version was relying deeply on Nextjs server components, mdx plugin and the amazing api capabilities. Wich was nice, and gave me a freedom I wouldn\u0026rsquo;t have in other environments, however it was so complicated to create new posts.\nPrevious workflow For the previous setup, I had to follow these steps:\nCreate a post somewhere on my computer (using a .mdx file) Use a script to get the file and move to the correct places for building, also adding some metadata to a mongoDB server (addPost.ts) Build the project and verify if there were no issues Deploy it At the beginning, it was simple. But as I started to write it more often, I had some issues.\nSome compoenents I was using in markdown had no styles or a direct translation for mdx. I had to think about responsiviness and everything like on my own. It was not a problem itself, but handling so much problems just to make a silly blog post was freaking me out. My main idea was to have a simple way to write and publish my own stuff. I thought about using a CMS, like strapi, moving to wordpress, creating a blog with rails, even moving back to medium or substack.\nBut what I wanted was to have my own blog with my own rules!\nNew Version One day, I was in a doctor with my mom and, since I had nothing to do, I was surfing through the internet when suddenly my eyes came accross this golang project, HUGO. I started reading the documentation, and got fascinated with this simple way to create a blog using markdown and a bunch of templates.\nI made a plan, if this sudden change would worth it, and came to a conclusion that it would for sure. So, let\u0026rsquo;s code.\nI created a new branch:\ngit checkout -b new-version Ran the scaffold command from hugo:\nhugo new site dpbm-blog And started doing the changes to my old posts. However, there were a lot of files, more than 200 to be precise. Updating all them with my own hands would be exhausting. So I spent two days, developing a bash script to move everything to its place in the new hugo blog.\nIn my former blog, the posts were stored in a folder like app/content/posts/, now with HUGO everything is int content/posts/. Not a big change.\nHowever, previously I was storing every single image inside public/image/, but now I had either to move them to the post directory and rename the post file from post.mdx to index.md, or move every image into static/. Well, I\u0026rsquo;ve choosen the first one, since the static folder (more precisely static/images/) will be used for global assets.\nAlso, I had to take care of my posts header. Every single post (index.md file) has a metadata header containing things like tags, title, date, etc; but old posts had nothing, so I had to retrieve the metadata from mongo using mongosh and parse it using linux utilities (like sed, grep, etc.).\nI did some tests with the functions I had made. Used a lot of Chatgpt and Gemini to debug some parts, which allowed me to discover some bash tricks during that, like the usage of sed + \u0026lt;\u0026lt;\u0026lt; to input a multiline string into sed. And, for sure, git restore was my allied here. I messed up with my old posts a lot, and relying on git to ensure no data was lost made me feel way more comfortable to test things and discover better ways to do something.\nAnyways, after some time, I had a fully functional bash script which you can checkout out here.\nWith all posts ready to be shipped, I added the shibui theme and configured it.\nI removed the favicon it come with by overwriting its layouts/_partials/head.html file. Added google analytics just to keep track of how many people has viewed my posts. And Added a Home page (content/index.md).\nAfter it, I configured vercel to publish it. At first I was having troubles with it. But after changing the framework to HUGO, changing the build command to hugo --gc --minify and setting the HUGO_VERSIONenv just worked for me.\nTo enchance my setup even further, I defined some bash functions to help me generate new posts. I could use hugo new conent command, but I needed something tailored specificatilly for me.\n# ~/.functions/posts.sh #!/usr/bin/env bash get_slug_random_part(){ tr -dc \u0026#39;A-Za-z0-9\u0026#39; \u0026lt;/dev/urandom | head -c 13\t} remove_spaces(){ local INPUT=$(cat /dev/stdin) echo $INPUT | sed -E \u0026#39;s|[[:space:]]{2,}| |g\u0026#39; | tr \u0026#39;[:blank:]\u0026#39; \u0026#39;-\u0026#39; } remove_accents(){ local INPUT=$(cat /dev/stdin) echo $INPUT | iconv -c -s -f UTF-8 -t ASCII//TRANSLIT } to_lowercase(){ local INPUT=$(cat /dev/stdin) echo $INPUT | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; } remove_punctuation(){ local INPUT=$(cat /dev/stdin) echo $INPUT | tr -d \u0026#39;[:punct:]\u0026#39; } parse_title(){ local TITLE=\u0026#34;$1\u0026#34; local PARSED_TITLE=$(echo $TITLE | remove_punctuation | remove_spaces | remove_accents | to_lowercase) echo \u0026#34;$PARSED_TITLE-$(get_slug_random_part)\u0026#34; } scaffold_post(){ local POST_PATH=\u0026#34;$1\u0026#34; local TITLE=\u0026#34;$2\u0026#34; local SLUG=$(parse_title \u0026#34;$TITLE\u0026#34;) local POST_SLUG_PATH=\u0026#34;$POST_PATH/$SLUG\u0026#34; if [ ! -d \u0026#34;$POST_SLUG_PATH\u0026#34; ]; then mkdir -p \u0026#34;$POST_SLUG_PATH\u0026#34; fi local MAIN_MD_FILE=\u0026#34;$POST_SLUG_PATH/index.md\u0026#34; local DATE=$(date -d \u0026#39;now\u0026#39; +%Y-%m-%d) touch $MAIN_MD_FILE cat \u0026lt;\u0026lt;EOF \u0026gt; $MAIN_MD_FILE --- title: $TITLE date: $DATE tags: [\u0026#34;computer science\u0026#34;] draft: true --- EOF } Now, with these functions, I run:\nsource ~/.zshrc # if didn\u0026#39;t before scaffold_post \u0026#34;./content/posts\u0026#34; \u0026#34;My new post title\u0026#34; and it generates the new slug and the post skeleton for me. Pretty convenient don\u0026rsquo;t you think?\nDoing that also taught me how to use the tr command, which is amazing for string tasks.\nIf you want to check it out, it\u0026rsquo;s available in my config files repo.\nThe final workflow Now, with this new Hugo blog, I do the following:\n`scaffold_post \u0026ldquo;./content/posts\u0026rdquo; \u0026ldquo;my new post\u0026rdquo; write the post deploy it It was a nice improvement, since everything just works fine and the theme itself gives a nice layout styling.\nI\u0026rsquo;m so glad with my new blog :)\n","permalink":"https://dpbm.vercel.app/posts/moving-my-website-from-nextjs-to-hugo-56xftmtrpapgc/","summary":"\u003cp\u003eSo, it\u0026rsquo;s been a long time since I first created my blog using \u003ccode\u003eNextJs\u003c/code\u003e and \u003ccode\u003eMongoDB\u003c/code\u003e. The previous setup was kind a mess. You can still check it on my github \u003ca href=\"https://github.com/Dpbm/personal-blog/tree/966949eb6e321c5f8478d40fa07550b41351401f\"\u003e966949eb6e321c5f8478d40fa07550b41351401f\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis old version was relying deeply on \u003ccode\u003eNextjs\u003c/code\u003e server components, \u003ccode\u003emdx\u003c/code\u003e plugin and the amazing \u003ccode\u003eapi\u003c/code\u003e capabilities. Wich was nice, and gave me a freedom I wouldn\u0026rsquo;t have in other environments, however it was so complicated to create new posts.\u003c/p\u003e","title":"Moving my website from NextJS to HUGO"},{"content":"Recently, I\u0026rsquo;ve been working on a python project that required me to use the qiskit-ibm-runtime package to do some quantum stuff.\nSo, the first thing I did was run:\nuv add python-dotenv qiskit-ibm-runtime then I created a simple snippet to test it:\nimport os from dotenv import load_dotenv from qiskit_ibm_runtime import QiskitRuntimeService if __name__ == \u0026#34;__main__\u0026#34;: load_dotenv() QiskitRuntimeService.save_account(channel=\u0026#34;ibm_quantum_platform\u0026#34;, token=os.getenv(\u0026#34;IBM_KEY\u0026#34;), instance=os.getenv(\u0026#34;CRN\u0026#34;), overwrite=True, set_as_default=True) │ service = QiskitRuntimeService() print(service.least_busy(filters= lambda b : not b.simulator and b.num_qubits \u0026gt;= 9)) and ran the script with:\nuv run python script.py Everything seemed correctly, till I saw the following error:\nssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1010) The connection failed because the SSL certificate is not valid. To use a self-signed certificate, disable verification of the server\u0026#39;s SSL certificate by invoking the set_disable_ssl_verification(True) on your service instance and/ or use the disable_ssl_verification option of the authenticator. qiskit_ibm_runtime.accounts.exceptions.InvalidAccountError: \u0026#39;Unable to retrieve instances. Please check that you are using a valid API token.\u0026#39; Debugging At first glance, it seemed like a problem with my account/tokens. So I cleaned everything, created new instances and API Keys and tested again, but no success. Then, I read the uv documentation for tls at https://docs.astral.sh/uv/concepts/authentication/certificates/. I added the --native-tls flag and tested SSL_CERT_FILE, but nothing.\nI asked gpt, searched on stackoverflow/google/github, updated certifi:\npip install --upgrade certifi And nothing.\nSo I decided to check the underlying package. I downloaded the source code from github and used the python debugger from vscode to debug line-by-line.\n# preparing the environment to debug qiskit-ibm-runtime python -m venv ./test-ibm-runtime source ./test-ibm-runtime/bin/activate git clone https://github.com/Qiskit/qiskit-ibm-runtime.git cd ./qiskit-ibm-runtime pip install . # ... copied my snippet and .env here pip install python-dotenv code . To debug that, I modified a little bit my code:\nimport os from dotenv import load_dotenv from qiskit_ibm_runtime import QiskitRuntimeService if __name__ == \u0026#34;__main__\u0026#34;: load_dotenv() QiskitRuntimeService.save_account(channel=\u0026#34;ibm_quantum_platform\u0026#34;, token=os.getenv(\u0026#34;IBM_KEY\u0026#34;), instance=os.getenv(\u0026#34;CRN\u0026#34;), overwrite=True, set_as_default=True, verify=False) service = QiskitRuntimeService(instance=os.getenv(\u0026#34;CRN\u0026#34;)) print(service.least_busy(filters= lambda b : not b.simulator and b.num_qubits \u0026gt;= 9)) Using verify=False tells the Runtime Service to ignore TLS/SSL, so maybe It would help me for this case. The other change I did (added instance=os.getenv(\u0026quot;CRN\u0026quot;) for runtime instantiation) came from the stacktrace that pointed to internal checks of the instance value\nif self._account.instance not in [inst[\u0026#34;crn\u0026#34;] for inst in self.instances()]: self._all_instances = self._account.list_instances() After my debugging session, something interesting happened, it worked. So I reverted my modifications, and it worked again. So I was sure that the problem was with my environment. I came back to my project, verified if the package matched the version with the one I\u0026rsquo;ve just debbuged, and it did. So, the only possible reason at that moment was the TLS + uv combination.\nI first updated the certificates:\nsudo apt update sudo apt upgrade -y sudo apt install --reinstall ca-certificates sudo update-ca-certificates And then asked Perplexity this time.\n# I: I\u0026#39;m having SSL issues while using an uv environment, how can I solve that? # Perplexity: The primary way to resolve SSL issues with your UV environment is to ensure that uv uses your system\u0026#39;s trusted certificate store. You can do this by running uv with the --native-tls flag or setting the environment variable UV_NATIVE_TLS to true, which makes uv respect the system\u0026#39;s SSL certificates. Another common cause of SSL errors is when uv cannot find or access the correct certificate files, especially in certain environments like behind corporate proxies or using specific operating systems. For instance, on NixOS, you may need to add the certificate bundle path to your configuration file to fix certificate verification errors permanently. In some cases, you can bypass SSL verification temporarily by setting the SSL_CERT_FILE environment variable to point to a valid CA bundle, such as /etc/ssl/certs/ca-bundle.crt on NixOS or your system\u0026#39;s default path, but be cautious as this disables SSL verification for the process. If SSL issues persist, reviewing and updating your environment\u0026#39;s trust store, or explicitly configuring uv to use system TLS, are the most reliable approaches to fix these errors.​ # I: I Used both, but I still got the message: (Caused by SSLError(SSLCertVerificationError(1, \u0026#39;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1010)\u0026#39;))) # Perplexity: If you\u0026#39;re still seeing the \u0026#34;unable to get local issuer certificate\u0026#34; error after using --native-tls or setting UV_NATIVE_TLS, the issue may be that your environment is missing the correct CA certificates or your system\u0026#39;s certificate store isn\u0026#39;t being properly accessed by uv or Python itself.​ One common fix is to install or update the certifi package, which provides a curated set of trusted root certificates for Python applications: pip install --upgrade certifi If this doesn\u0026#39;t resolve the issue, you may need to manually point your environment to a valid CA bundle. Set the REQUESTS_CA_BUNDLE or SSL_CERT_FILE environment variable to the path of your system\u0026#39;s CA bundle (such as /etc/ssl/certs/ca-certificates.crt on most Linux systems, or the cacert.pem file in your Python environment). Additionally, if you\u0026#39;re behind a corporate proxy, the proxy may be replacing the certificate chain. In this case, you may need to add your organization\u0026#39;s root certificate to your CA bundle, or use a custom certificate bundle for your Python environment. If none of these solutions work, ensure your system\u0026#39;s date and time are correct, as SSL verification can fail if the system clock is off. Also, check if your environment is using a self-signed or untrusted certificate, which may require explicitly trusting it or using a trusted certificate authority. Look at that!!! It just gave me what I needed, REQUESTS_CA_BUNDLE was the missing piece to fix this issue. I ran the command:\nREQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt uv --native-tls run python original_script.py And it worked!!! finally!!!\nFinal Thoughts I don\u0026rsquo;t know you, but it always seems exciting to debug things, and it\u0026rsquo;s even better now days with LLMS.\nI\u0026rsquo;m not very into LLMS, but I can\u0026rsquo;t disagree that they are very useful sometimes.\nIn general, I use a combination of chatgpt + gemini + perplexity and it fits my necessities really well.\nI always think about using an AI based IDE, like cursor and windsurf, but I still using neovim and vscode (sometimes a JetBrains IDE too).\nAs a developer, I\u0026rsquo;m not really concerned about what tool I\u0026rsquo;m using, but if I\u0026rsquo;m reaching my goals.\nBut actually, whatever. I hope this article has helped you someway :)\n","permalink":"https://dpbm.vercel.app/posts/uv-tls-issue-5h2h3gc5a2fj/","summary":"\u003cp\u003eRecently, I\u0026rsquo;ve been working on a python project that required me to use the \u003ccode\u003eqiskit-ibm-runtime\u003c/code\u003e package to\ndo some quantum stuff.\u003c/p\u003e\n\u003cp\u003eSo, the first thing I did was run:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003euv add python-dotenv qiskit-ibm-runtime\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ethen I created a simple snippet to test it:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e os                                            \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                     \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e dotenv \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e load_dotenv                       \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                     \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e qiskit_ibm_runtime \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e QiskitRuntimeService  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                     \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e __name__ \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e:                           \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    load_dotenv()                                    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                     \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    QiskitRuntimeService\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esave_account(channel\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ibm_quantum_platform\u0026#34;\u003c/span\u003e, token\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eos\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003egetenv(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;IBM_KEY\u0026#34;\u003c/span\u003e), instance\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003eos\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003egetenv(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;CRN\u0026#34;\u003c/span\u003e), overwrite\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e, set_as_default\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e)                             \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e│\u003c/span\u003e                                                                                              \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    service \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e QiskitRuntimeService()                                                                                                                                               \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                                                                                                                                                                                   \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(service\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eleast_busy(filters\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003elambda\u003c/span\u003e b : \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e b\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esimulator \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e b\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003enum_qubits \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e9\u003c/span\u003e))\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eand ran the script with:\u003c/p\u003e","title":"UV TLS issue"},{"content":"Hill Climbing for PETR4 stocks This project was a challenge propoused by our professor.\nThe idea of this project, was to implement an AI agent to buy-sell PETR4 stocks using the hill climbing algorithm.\nTo tackle this challenge, I used Octave and the data provided by InfoMoney PETR4.\nThe algorithm My implementation uses the default hill climbing algorithm with some nuances.\nThe agent starts with some stocks already bought and some spare money in hist wallet.\nThe program follows the stocks prices starting from 2015 until 2025, day by day. So at every iteration, the amount of money in stocks is updated by the current stock price.\nEach day, the algorithm can choose between buying or selling, and the hill climbing will be in charge to avaliate the action outcome. The actions can be either buy or sell, being choosen at random. However, there\u0026rsquo;re some rules it follows to avoid some edge cases:\nit will only buy if the random function says so, and the total money in wallet is greater than 0. it will only sell if the random function says so, and the amount of bought stocks are greater than 0. if none of the above statements are satisfied, the agent will buy more stocks. This action leaves him with some debt to be paid later. After that, hill climbing will check the amount of money the new action raises. If the new movement leads it to a better state, the algorithm will update the amount of money and stocks. However, doing that, the algorithm may get stuck in some state, having no incentive to improve his money. To solve this issue, the new state will also be updated at random with $40%$ of chance.\nThe results After running for some time, this was the result:\nCode Check out the code on my github.\n","permalink":"https://dpbm.vercel.app/posts/hill-climbing-for-trading-c0g7f2b882afa/","summary":"\u003ch1 id=\"hill-climbing-for-petr4-stocks\"\u003eHill Climbing for PETR4 stocks\u003c/h1\u003e\n\u003cp\u003eThis project was a challenge propoused by our professor.\u003c/p\u003e\n\u003cp\u003eThe idea of this project, was to implement an AI agent to buy-sell PETR4 stocks using the hill\nclimbing algorithm.\u003c/p\u003e\n\u003cp\u003eTo tackle this challenge, I used Octave and the data provided by \u003ca href=\"https://www.infomoney.com.br/cotacoes/b3/acao/petrobras-petr4/historico/\"\u003eInfoMoney PETR4\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"the-algorithm\"\u003eThe algorithm\u003c/h2\u003e\n\u003cp\u003eMy implementation uses the default hill climbing algorithm with some nuances.\u003c/p\u003e\n\u003cp\u003eThe agent starts with some stocks already bought and some spare money in hist wallet.\u003c/p\u003e","title":"Hill Climbing for trading"},{"content":" Dado: elementos brutos, sem significado Informação: Dado processado que auxilia na tomada de decisão Conhecimento: Maneira como os humanos entendem e interagem com as informações Níveis de Hierarquia de informação Operacional (base): operações rotineiras da empresa (pagamento, INSS, etc) Tática: usado para a tomada de decisões. Foca no ambiente interno da empresa. Gerado a partir dos dados operacionais Estratégicas: Foca no ambiente externo. Concorrentes, como está o mercado, etc. Pilares da Segurança da informação Confidencialidade: níveis de autorização para acesso aos dados Integridade: dados não serão modificados sem o consentimento Disponibilidade: sempre acessível Leis e normas Normas ISO/27002: norma para gerenciamento de processos, tecnologias e pessoas. Usado para garantir os pilares de segurança da informação Leis Carolina Dieckmann: Garante a privacidade dos usuários Marco Civil da internet: Direito da cidadania e liberdade de expressão. Provedores possuem responsabilidade sobre os dados. LGPD: Provedores devem definir explicitamente como dados são coletados e processados. Para garantir, é feita auditoria em busca de problemas no seguimento dessas leis e normas.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-292-ba7fgb8ja67i/","summary":"\u003cul\u003e\n\u003cli\u003eDado: elementos brutos, sem significado\u003c/li\u003e\n\u003cli\u003eInformação: Dado processado que auxilia na tomada de decisão\u003c/li\u003e\n\u003cli\u003eConhecimento: Maneira como os humanos entendem e interagem com as informações\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://www.researchgate.net/publication/324957309/figure/fig1/AS:622732219793409@1525482339739/Figura-1-A-hierarquia-Dados-Informacao-Conhecimento.png\"\u003e\u003cimg alt=\"piramide\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-292-ba7fgb8ja67i/conhecimento.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"níveis-de-hierarquia-de-informação\"\u003eNíveis de Hierarquia de informação\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eOperacional (base): operações rotineiras da empresa (pagamento, INSS, etc)\u003c/li\u003e\n\u003cli\u003eTática: usado para a tomada de decisões. Foca no ambiente interno da empresa. Gerado a partir dos dados operacionais\u003c/li\u003e\n\u003cli\u003eEstratégicas: Foca no ambiente externo. Concorrentes, como está o mercado, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://www.pontotel.com.br/local/wp-content/uploads/2025/04/hierarquia-de-cargos-quais-sao-os-niveis-hierarquicos-de-cargos-1024x572.webp\"\u003e\u003cimg alt=\"hierarquia\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-292-ba7fgb8ja67i/hierarquia.webp\"\u003e\u003c/a\u003e\u003c/p\u003e","title":"Ciências da computação dia 292"},{"content":" for english version click here\nDurante nossas aulas de Inteligência artificial, estávamos estudando sobre algoritmos de busca, mais precisamente o algoritmo de busca informada Hill Climbing. Para aprender sobre esse algoritmo, o implementamos para resolver o problema das N-Rainhas. Vimos que este é um algoritmo muito bom para resolver o problema rapidamente, contudo este se mostra como muito propenso a ficar estagnado no ótimo local.\nDevido a isso, nosso professor João Ricardo Favan nos deu o desafio de encontrar uma maneira de diminuir as chances do algoritmo empacar no ótimo local, e é por isso que estamos aqui.\nNeste post mostrarei a solução que nós encontramos e também o código que foi usado.\nPara mais detalhes verifique meu repositório: https://github.com/Dpbm/n-rainhas\nPensando no problema Na implementação atual feita pelo nosso professor:\ngeramos um tabuleiro $n*n$ com as rainhas todas na lateral direita calculamos o total de ataques verificamos se o total de ataques alcançou o mínimo que queríamos (total de $0$ ataques)\n3.1. caso tenha alcançado, paramos aqui (global optima encontrado) como não encontramos uma solução ótima, movemos uma rainha aleatoriamente e voltamos para 2. No caso do problema das NRainhas, poderíamos pensar em uma representação como esta:\nPelo gráfico, podemos ver que cada configuração do tabuleiro $x$ gera um numero de ataques $y$, ou seja $f(x)=y$.\nComo nosso objetivo nas NRainhas é fazer com que nenhuma rainha seja atacada, poderemos ter diversas configurações que são consideradas global optima.\nDessa forma, nosso problema não necessariamente possui um local optima mas, pela natureza da implementação, não é garantido que ele encontre algum dessas soluções globais. Sendo assim, o algoritmo pode muitas vezes enroscar em um ponto da subida da colina e nunca conseguir chegar de fato ao topo.\nSoluções Para resolvermos esse problema, propomos aqui 3 possíveis soluções para esse caso.\nSolução 1 - Remover o passo aleatório Uma vez que a implementação faz com que o próximo passo seja randômico, não temos a certeza de que o espaço de configurações seja devidamente explorado. Com isso, mesmo que executado $10000$ de vezes, ainda há uma certa probabilidade de não encontrar o ponto máximo.\nPara resolver isso, podemos movimentar as rainhas de uma forma mais coordenada. Podemos fazer com que cada rainha mova para a esquerda ou direita baseando-se na quantidade de ataques que cada posição gera, escolhendo a posição com menor número de ataques.\nMesmo sendo uma solução interessante para o problema, podemos ter configurações que não conseguem evoluir. Para resolver isso, podemos verificar se a configuração é a mesma da anterior. Caso seja, movemos uma rainha aleatoriamente. Dessa forma, podemos fazer com que o algoritmo sempre tenha algo a melhorar, aumentando as chances de encontrar a solução.\nO Código usado para essa versão é:\ndef moveRainhaMelhorPosicao(estado): tam=len(estado) for i,j in locateQueens(estado): new_j = j min_attacks = calAtaques(estado) best_state = estado for possible_j in range(tam): if possible_j == j: continue tmp_estate = copy.deepcopy(estado) tmp_estate[i][j], tmp_estate[i][possible_j] = tmp_estate[i][possible_j], tmp_estate[i][j] attacks = calAtaques(tmp_estate) if(attacks \u0026lt; min_attacks): min_attacks = attacks new_j = possible_j best_state = tmp_estate estado = best_state return estado def hillClimbing_s1(estado, passo, maxI): c=0 n=len(estado[0]) maxAtaques = math.factorial(n)/(2*math.factorial(n-2)) ataques = [] while c \u0026lt;= maxI: atq = calAtaques(estado) ataques.append(maxAtaques - atq) if atq == 0: return \u0026#34;Solução\u0026#34;, estado, atq, ataques, passo, c suc = moveRainhaMelhorPosicao(copy.deepcopy(estado)) if suc == estado: suc = moveRainhaAleatoria(estado, passo) estado = suc # como mudaremos a cada iteracao, c tambem muda a cada iteracao c += 1 return \u0026#34;Falha\u0026#34;, estado, atq, ataques, passo, c Solução 2 - Tabuleiros e passos aleatórios Para a segunda solução, utilizamos o algoritmo padrão mas, dessa vez, iniciamos a busca com uma configuração aleatória e um passo aleatório no intervalo de $[1, n-1]$ sendo $n$ a largura do tabuleiro.\nUsando esse método, damos incentivo ao algoritmo testar novas possibilidades e assim evitar ficar preso em um local optima.\nO código usado para essa solução é o seguinte:\ndef tabuleiro_aleatorio(tamanho): tabuleiro = geraTabulerio(tamanho) passo = 1 # poderia ser um valor aleatório for _ in range(tamanho): tabuleiro = moveRainhaAleatoria(copy.deepcopy(tabuleiro), passo) return tabuleiro def hillClimbing_s2(tamanho_tabuleiro): tabuleiro = tabuleiro_aleatorio(tamanho_tabuleiro) passo = random.randint(1, tamanho_tabuleiro-1) result = hillClimbing(tabuleiro, passo, 1000) return result Solução 3 - Outros algoritmos A solução que poderia gerar melhores resultados nesse caso, seria a utilização de algum outro algoritmo que não apresentasse esses problemas.\nUtilizar algoritmos como Simulated Annealing, Algoritmos genéticos ou até mesmo métodos de busca cega/brute force, podem ser interessantes, mesmo que a performance talvez não seja a melhor.\nComparações As soluções propostas foram testadas lado a lado com a implementação original. Para meios de comparação, executamos as $3$ versões $1000$ em tabuleiros $9X9$ vezes e salvamos os resultados.\nErros e acertos Em relação a quantidade de erros e acertos, sem duvidas a primeira solução proposta foi a melhor de todas. Seu método guloso se mostrou muito eficaz para tal problema, conseguindo encontrar a solução a maior parte do tempo.\nOutro fator interessante a se observar é que, mesmo sendo promissor, a segunda solução não conseguiu ter nenhum ganho em relação ao método convencional do Hill Climbing.\nDistribuição do número de iterações Além disso, verificamos qual algoritmo conseguia encontrar o resultado o menor número de iterações.\nNesse caso, vemos que a primeira solução dada consegue encontrar a solução com poucas iterações, contudo possui maior dispersão dos dados, já que utiliza um método randômico internamente.\nPodemos também ver que, o ultimo método consegue chegar antes na solução do que o método default. Isso se dá pelo uso de tamanho de passo aleatório, aumentando a chance de chegar mais rápido ao resultado.\nNo geral, a soluções com os menores números de passos foram:\nmétodo passos tamanho do passo padrão 88 1 solução 1 6 1 solução 2 24 6 Complexidade Mesmo com melhores resultados apresentados, devemos levar em consideração a complexidade de tempo de cada versão.\nA principio, antes de estipular a complexidade de cada um, precisamos definir as primitivas e a complexidade de funções auxiliares.\nComo primitiva, definiremos as funções calAtaques() e locateQueens(), uma vez que para nossa análise elas não influenciarão, já que sempre serão chamadas $n$ vezes no pior caso. Sendo assim, para esta análise, iremos tratá-las como $O(1)$.\nPara as funções auxiliares, definiremos as complexidades como:\nfunção complexidade moveRainhaAleatoria() $O(1)$, uma vez que a proxima casa sempre estará vazia moveRainhaMelhorPosicao() $O(n^2)$, sendo $n$ o comprimento do tabuleiro Com isso em mãos, podemos dizer que a complexidade para cada versão de implementação é:\nversão complexidade padrão $O(r)$, sendo $r$ o número máximo de iterações solução 1 $O(r* (n^2))$ solução 2 $O(r)$ Sendo assim, o algoritmo que acaba sendo melhor em sentido de tempo de execução é a solução 2, uma vez que, como visto, consegue encontrar o resultado mais rápido e ainda possui mesma complexidade de que a versão padrão.\nNo entanto, como o que queremos é encontrar o resultado correto a maior parte das vezes, a solução 1 ainda é a melhor, tendo um tradeoff de tempo-solução.\nConclusão Visto os resultados, sem dúvida a solução 1 é a que melhor consegue se sair no problema das n-rainhas. Contudo, essa solução não é eficiente no ponto de vista de complexidade.\n","permalink":"https://dpbm.vercel.app/posts/resolvendo-o-problema-de-local-optima-nrainhas-e0j9a97gja5ea/","summary":"\u003cblockquote\u003e\n\u003cp\u003efor english version \u003ca href=\"https://github.com/Dpbm/n-rainhas/blob/main/readme-en.md\"\u003eclick here\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eDurante nossas aulas de Inteligência artificial, estávamos estudando sobre algoritmos de busca, mais precisamente o algoritmo de busca informada \u003ccode\u003eHill Climbing\u003c/code\u003e. Para aprender sobre esse algoritmo, o implementamos para resolver o problema das \u003ccode\u003eN-Rainhas\u003c/code\u003e. Vimos que este é um algoritmo muito bom para resolver o problema rapidamente, contudo este se mostra como muito propenso a ficar estagnado no ótimo local.\u003c/p\u003e\n\u003cp\u003eDevido a isso, nosso professor \u003ca href=\"https://scholar.google.com.br/citations?user=fm6GR6YAAAAJ\"\u003eJoão Ricardo Favan\u003c/a\u003e nos deu o desafio de encontrar uma maneira de diminuir as chances do algoritmo empacar no ótimo local, e é por isso que estamos aqui.\u003c/p\u003e","title":"Resolvendo o problema de local optima - NRainhas"},{"content":"Algoritmo → procedimento computacional bem definido que recebe entrada(s) e devolve uma saída, sendo a descrição do problema a relação entre a entrada e como deve ser sua saída;\nProblema → descrição dos parâmetros e a descrição de como o resultado deve ser apresentado;\nInstância de um problema → todas as entradas possíveis de um algoritmo que respeitam suas restrições;\nA velocidade de um programa depende de diversos fatores, mas não necessariamente vai depender do hardware usado ou da tecnologia.\nConsiderações para a avaliar um algoritmo → se todas as vezes ele vai retornar o valor certo e quantas instruções serão necessárias no pior caso;\nInvariante de um laço → estado das variáveis a cada execução completa de um laço, usado para ver o quão correto seu algoritmo está sendo executado. Para provar a qualidade do algoritmo ele não pode conter variâncias quanto ao contexto do programa;\nInvariantes auxiliares → você pode usar invariantes auxiliares caso exista mais de um laço em um mesmo bloco;\nTempo de execução (complexidade de tempo) → número de instruções básicas executadas a partir de uma entrada. Para isso é necessário ver quantas vezes cada linha será executada, logo o tempo total de execução é a soma do tempo de execução de cada linha (quantas vezes ela vai ser executada);\nMelhor caso → quando seu algoritmo não precisa de muito esforço para verificar que algo já é verdadeiro, já que por padrão ele é verdadeiro;\nPior caso → quando seu algoritmo precisa percorrer todo o espaço possível para retornar verdadeiro;\nComportamento assintótico → o quanto a complexidade de tempo de seu algoritmo muda conforme suas entradas mudam. Quanto maior a complexidade em menos tempo pior. Importante analisar o algoritmo com dados que tendem ao infinito;\nModelo computacional → quais recursos estão disponíveis, quais as instruções básicas e quanto tempo cada instrução básica vai levar. Análise de complexidade depende do modelo computacional;\nMáquinas RAM (modelo RAM, Arquitetura de von Neumann) → modelo idealizado que simula uma máquina real. Possui: acesso direto à memória, único processador que executa sequencialmente, possui os tipos primitivos números inteiros e reais e suas instruções possuem tempos constantes;\nIndução matemática → método usado para recursão. Consiste em provar que certa função funcionará para todos os elementos de um conjunto analisando apenas o primeiro valor.\nObs: os laços gastam n unidades de tempo pois precisam de uma a mais para sair do loop, já as demais consome n-1\nReferências https://www.ic.unicamp.br/~lee/mc448/\nhttps://blog.pantuza.com/artigos/invariante-de-laco-loop-invariants\nhttps://algol.dev/comportamento-assintotico/\nhttps://www.ime.usp.br/~pf/algoritmos/aulas/footnotes/algoritmoeficiente.html https://www.ime.usp.br/~leo/mac2166/2017-1/introducao_eficiencia_algoritmos.html http://www.decom.ufop.br/marco/site_media/uploads/pcc104/01_aula_01.pdf\nhttps://youtu.be/186lPQE-h64\nhttp://www.decom.ufop.br/marco/site_media/uploads/pcc104/05_aula_05.pdf\n","permalink":"https://dpbm.vercel.app/posts/analise-e-projeto-de-algoritmos-parte-1-8g293534fb42/","summary":"\u003cp\u003e\u003cstrong\u003eAlgoritmo\u003c/strong\u003e → procedimento computacional bem definido que recebe\nentrada(s) e devolve uma saída, sendo a descrição do problema a relação\nentre a entrada e como deve ser sua saída;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eProblema\u003c/strong\u003e → descrição dos parâmetros e a descrição de como o\nresultado deve ser apresentado;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInstância de um problema\u003c/strong\u003e → todas as entradas possíveis de um\nalgoritmo que respeitam suas restrições;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eA velocidade de um programa depende de diversos fatores, mas não\nnecessariamente vai depender do hardware usado ou da tecnologia.\u003c/p\u003e","title":"Análise e Projeto de Algoritmos - Parte 1"},{"content":"lógica e algoritmos, então aqui vão algumas anotações:\nLógica:\nArte de pensar maneiras de encontrar a solução para algum problema o mais importante de um algoritmo é a lógica não a ferramenta (linguagem de programação) Algoritmos:\nmaneiras de resolver um problema usando a lógica passo a passo para resolver o problema obs: podem existir vários algoritmos que resolvem o mesmo problema Além de aprendermos os conceitos, foi dado uma breve explicação do que é necessário para criar um algoritmo, sendo assim foi nos explicado que para criar um algoritmo é necessário pensar em cada parte do problema o que será necessário usar para resolve-lo\nO que é necessário para esse problema (dados) O que vou usar para resolver (ferramenta) Qual os passos serão necessários (algoritmo) Seguindo essa linha foi nos apresentado um problema clássico em algoritmos que são as Torres de Hanói.\nEsse problema consiste em 3 hastes e n discos colocados em ordem crescente (de baixo para cima) na primeira haste, e seu objetivo é transportar todos os discos para a terceira haste deixando-os igual quando estavam na primeira. No entanto para isso temos 2 regras:\num disco maior não pode ficar em cima de um menor só pode ser movido um disco por vez Outro conceito abordado foi a solução ótima, esse conceito representa um algoritmo que resolve um problema da melhor forma. No casso das Torres de Hanói esse algoritmo pode conter apenas 2^n-1 passos (onde né o numero de discos).\nO professor também começou a explicar o que é necessário para dizermos que um algoritmo é computacional(já que os algoritmos estão em toda a nossa vida em todos os momentos), para isso ele explicou que é necessário um algoritmo seguir o modelo computacional, esse modelo é composto por 3 partes:\nentrada de dados (teclado, discos, etc.) processamentos dos dados(onde serão feitas operações com a entrada, como uma CPU) saída de dados (onde o resultado será exibido, como um monitor) Além disso foi passado que esse sistema pode ser cíclico, ou seja, a saída pode pedir uma nova entrada.\nOutro fator importante da aula foram os tipos de dados os quais são:\nstring\ncadeias de caracteres podem possuir também números ( no geral quando os números não precisam ser usados para cálculos é bom representa-los como strings) concatenar → juntar strings números\ninteiros \u0026mdash; não possuem casas decimais\n\u0026mdash; são lidos 4x mais rápidos que os reais\nreais \u0026mdash; possuem casas decimais\n\u0026mdash; necessitam de 4 pulsos de clock para processar, pois para chegar no numero decimal é são necessários mais passos do processador\nobs: pulsos de clock são os momentos onde a CPU está apta a realizar processamentos.\nBooleanos \u0026mdash; apresentam apenas 1 bit de informação\n\u0026mdash; valores true ou false\nEm penúltimo foi mostrado algumas maneiras de representar (armazenar) dados:\nconstantes\nnão consomem memória valor que não se modificará variáveis\nconsomem memória valor pode ser modificado E por fim, vimos alguns tipos de operadores os quais são\naritméticos\nfazem cálculos matemáticos como subtração, adição, etc. caso possível use a divisão inteira(// no Python, pois lhe salvará 4 pulsos de clock) atribuição\noperador usado para atribuir valores a uma variável (no geral o sinal de =) relacionais\nfazem operações que checam coisas como maior que, igual que, maior ou igual que, etc. lógicos\nderivado das portas lógicas, temos os operadores, E, OU, etc. Detalhes finais\ncódigo sequencial\ncódigo lido da maneira que foi escrito de cima para baixo, da esquerda para a direita input (Python)\nfunção bloqueadora, pois ela trava o programa e espera sua entrada no teclado ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-1-9fa0gg495hg6/","summary":"\u003cp\u003elógica e algoritmos, então aqui vão algumas anotações:\u003c/p\u003e\n\u003cp\u003eLógica:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eArte de pensar\u003c/li\u003e\n\u003cli\u003emaneiras de encontrar a solução para algum problema\u003c/li\u003e\n\u003cli\u003eo mais importante de um algoritmo é a lógica não a ferramenta\n(linguagem de programação)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAlgoritmos:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emaneiras de resolver um problema usando a lógica\u003c/li\u003e\n\u003cli\u003epasso a passo para resolver o problema\u003c/li\u003e\n\u003cli\u003eobs: podem existir vários algoritmos que resolvem o mesmo problema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAlém de aprendermos os conceitos, foi dado uma breve explicação do que é\nnecessário para criar um algoritmo, sendo assim foi nos explicado que\npara criar um algoritmo é necessário pensar em cada parte do problema o\nque será necessário usar para resolve-lo\u003c/p\u003e","title":"Ciências da computação dia 1"},{"content":"agora para sistemas lineares, equações irracionais e equações biquadradas.\nSistemas lineares duas equações que se correlacionam e possuem mais de uma incógnita. para resolver sistemas lineares um dos métodos apresentados foi o método da adição, para utilizá-lo, pegue os números que acompanham x e multiplique a parte de cima pelo número de x de baixo e o de baixo pelo de cima, lembrando que um desses dois deve ser transformado em negativo, após isso pegue as equações que resultaram e some as, lembrando que os valores de x ao serem somados devem resultar em 0, o resultado dessa soma será uma equação do primeiro grau simples de resolver. após resolver e encontrar o Y com isso, pegue qualquer uma das equações anteriores e substitua o Y.\nEquações irracionais equações que apresentam uma incógnita dentro de uma raiz Para resolver elas você pode usar uma artimanha, você eleva os dois lados da equação pelo índice da raiz, dessa forma você poderá cancelar a raiz e continuar a equação, você pode usar essa artimanha quantas vezes forem necessárias.\nEquações biquadradas equações que possuem um valor do quarto grau Para resolver essas equações indique uma letra para ser = x², a partir dai você pode substituir o valor que esta elevado a quatro pela letra que você indicou ao, já que (x²)² = x⁴, e o x² da equação por essa letra, iguale a equação a 0, e pronto você tem uma equação do segundo grau. Realizando a fórmula de Bhaskara, você encontrará duas respostas, agora para encontrar os valores corretos faça a raiz quadrada de cada um desses valores, já que a letra que você indicou = x², então a √letra que você indicou = x, dessa forma você encontrará 4 respostas, isso pois para cada raiz quadrada que você fizer para as raízes encontradas pela fórmula de Bhaskara você terá um valor positivo e um negativo ou seja ±a raiz.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-10-8hj065jh90a/","summary":"\u003cp\u003eagora para sistemas lineares, equações irracionais e equações\nbiquadradas.\u003c/p\u003e\n\u003ch3 id=\"sistemas-lineares\"\u003eSistemas lineares\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eduas equações que se correlacionam e possuem mais de uma incógnita.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003epara resolver sistemas lineares um dos métodos apresentados foi o método\nda adição, para utilizá-lo, pegue os números que acompanham x e\nmultiplique a parte de cima pelo número de x de baixo e o de baixo pelo\nde cima, lembrando que um desses dois deve ser transformado em negativo,\napós isso pegue as equações que resultaram e some as, lembrando que os\nvalores de x ao serem somados devem resultar em 0, o resultado dessa\nsoma será uma equação do primeiro grau simples de resolver. após\nresolver e encontrar o Y com isso, pegue qualquer uma das equações\nanteriores e substitua o Y.\u003c/p\u003e","title":"Ciências da computação dia 10"},{"content":"Análise de viabilidade entender o mercado; base para um plano de negócios. Ambiente setorial (mais próximo da empresa) clientes, fornecedores, concorrentes; parte mais próxima da empresa que exerce pressão sobre ela; se você não tiver estratégias/ for bom, os clientes vão para outras empresas. Macro ambiente externo Economia, Política/leis, tecnologia, cultura(se os funcionários não estão adaptados, seu negócio cai); Forças externas que exercem pressão sobre a empresa; Através dessas forças, sua empresa pode cair ou subir no mercado, dependendo das tendências. Se houver muita gente com muito dinheiro, comprando muito, e as empresas não conseguem produzir o suficiente, os preços sobem.\nPonto de equilíbrio ponto em que a empresa consegue pagar tudo, mas não lucra; Calculo que diz o mínimo que a empresa deve vendar para chegar nesse ponto. fluxo de caixa como o dinheiro está entrando e saindo. Plano de negócio documento que diz se a empresa é viável no momento atual. Para fazer essa analise, é necessário um método. Aqui vão alguns dos passos\n1 \u0026mdash; Segmentação e posicionamento no mercado (onde você quer atuar e porque) segmentar é dizer para quem você quer vender (de forma específica, por idade, local, sexo, etc.); Você pode mesclar segmentos; Quando algo é muito novo e diferente, isso rouba clientes de outros negócios, talvez, até mesmo, de outras áreas/segmentos; O porque nasce da necessidade encontrada. 2 \u0026mdash; Conhecer o ambiente do segmento de mercado escolhido estudar o mercado (segmento escolhido); Analise swot é uma das ferramentas usadas aqui; Aqui você olha o macro ambiente externo e o ambiente setorial. 3 \u0026mdash; Conhecer o público-alvo Olhar para seu cliente e entender ele; Pesquisa de mercado; Daqui sai a persona. 4 \u0026mdash; Definir estratégias e seus diferencias competitivos faça isso após entender a persona e seu segmento. 5 \u0026mdash; Defina um plano de marketing 4Ps do marketing (preço (o cliente está disposto à pagar), praça (local onde a empresa está), produto, promoção (como a empresa se mostra, propaganda, etc.)); Marketing não é apenas propaganda, mas também como a empresa se mostra para os outros; Serviços geralmente tem mais retorno; Trocar algo de plástico para papel, além de sair mais barato, passa a ideia de que sua empresa se preocupa com o meio ambiente. Por lei, você não pode praticar preços irreais de propósito para ganhar clientes, isso é antimercado e pode gerar multas. (Dumping)\nSe uma empresa opera sem lucro, é porque ela tem fluxo de caixa e, geralmente, usa para pagar o investimento inicial ou reinvestir.\nNo mercado, você não ganha dinheiro, você toma de alguém.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-100-hd94h8ic40jf/","summary":"\u003ch3 id=\"análise-de-viabilidade\"\u003eAnálise de viabilidade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eentender o mercado;\u003c/li\u003e\n\u003cli\u003ebase para um plano de negócios.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ambiente-setorial-mais-próximo-daempresa\"\u003eAmbiente setorial (mais próximo da empresa)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclientes, fornecedores, concorrentes;\u003c/li\u003e\n\u003cli\u003eparte mais próxima da empresa que exerce pressão sobre ela;\u003c/li\u003e\n\u003cli\u003ese você não tiver estratégias/ for bom, os clientes vão para outras\nempresas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"macro-ambienteexterno\"\u003eMacro ambiente externo\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEconomia, Política/leis, tecnologia, cultura(se os funcionários não\nestão adaptados, seu negócio cai);\u003c/li\u003e\n\u003cli\u003eForças externas que exercem pressão sobre a empresa;\u003c/li\u003e\n\u003cli\u003eAtravés dessas forças, sua empresa pode cair ou subir no mercado,\ndependendo das tendências.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eSe houver muita gente com muito dinheiro, comprando muito, e as empresas\nnão conseguem produzir o suficiente, os preços sobem.\u003c/p\u003e","title":"Ciências da computação dia 100"},{"content":"Os objetos, as vezes, precisam de se relacionar uns com os outros para trocas de informações.\nAssociação Objetos existem de forma independente; B é instanciado em A, ou o inverso ou em ambos; As instâncias são passadas ao objeto a partir de um método set que recebe essa instância. Multiplicidade Representação das quantidades de objetos que podem estar relacionados; Age como uma cardinalidade em Banco de Dados. Agregação 1 objeto é completado por outro; relação 1:N; Objetos são independentes; As instâncias de B também são passadas através de um método set em A. Composição Existe dependência entre os objetos; A não existe sem B (\u0026ldquo;relação morta\u0026rdquo;); Passagem da instância de B para A via construtor. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-101-e143bbcab3cf/","summary":"\u003cp\u003eOs objetos, as vezes, precisam de se relacionar uns com os outros para\ntrocas de informações.\u003c/p\u003e\n\u003ch3 id=\"associação\"\u003eAssociação\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eObjetos existem de forma independente;\u003c/li\u003e\n\u003cli\u003eB é instanciado em A, ou o inverso ou em ambos;\u003c/li\u003e\n\u003cli\u003eAs instâncias são passadas ao objeto a partir de um método set que\nrecebe essa instância.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"multiplicidade\"\u003eMultiplicidade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRepresentação das quantidades de objetos que podem estar\nrelacionados;\u003c/li\u003e\n\u003cli\u003eAge como uma cardinalidade em Banco de Dados.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"multiplicidade entre Pessoa Veículo(1:N)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-101-e143bbcab3cf/image_188.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 101"},{"content":"Entrevista Uma das melhores técnicas; Falar com os stakeholders cara a cara, de forma planejada por um roteiro; O roteiro possui perguntas de como os processos são feitos hoje em dia e quais os problemas que os stakeholders encontram no dia a dia; É necessário escolher pessoas chave para as reuniões (key stakeholders); Diga para os entrevistados quais são seus objetivos; Questione o ambiente de trabalho deles; Evite termo técnicos; Utilize ferramentas para facilitar a coleta de dados; Presta atenção no que está sendo dito (use a escuta ativa, primeiro ouça, depois formule o que você vai dizer); Anote tudo que for possível e depois apresente esse(s) documento(s) para os entrevistados, garantindo que o que está escrito é de fato o que eles disseram/querem. Grupo de discussão Um instrutor guia um grupo de stakeholders para ir entendendo como é funciona hoje e o que pode ser melhorado. Workshop Os stakeholders escrevem e expõem os problemas. Brainstorm Os stakeholders vão dando ideias (as mais malucas possíveis) de como pode ser resolvido o problema; Ninguém crítica as ideias na primeira sessão. Após ela é que são dados os prós e contras de cada ideia. Questionário Perguntas direto ao ponto para os stakeholders; Usado quando não há a possibilidade de fazer reuniões (último caso); Perguntas devem ser muito bem elaboradas; Use questionários junto com outras técnicas; Perguntas dissertativas → usadas para conhecer novos requisitos; Perguntas objetivas → usadas para validar o que foi feito; User perguntas como → indique o grau de importância, indique o grau de necessidade. Observações Acompanhar o dia a dia para identificar o problema; Geralmente usado como um complementar, uma vez que nem sempre você consegue acompanhar todos os dias o trabalho do seu cliente; Para melhorar a experiência, é interessante você também colocar a mão na massa para ver como tudo funciona; Funciona muito bem para problemas pontuais; É muito bom para encontrar requisitos implícitos/esperados. Análise de documentos Análise dos documentos que existem atualmente para a identificação. Obs: Geralmente são usados um conjunto dessas técnicas.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-102-6i365abc8ibc/","summary":"\u003ch3 id=\"entrevista\"\u003eEntrevista\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUma das melhores técnicas;\u003c/li\u003e\n\u003cli\u003eFalar com os stakeholders cara a cara, de forma planejada por um\nroteiro;\u003c/li\u003e\n\u003cli\u003eO roteiro possui perguntas de como os processos são feitos hoje em\ndia e quais os problemas que os stakeholders encontram no dia a dia;\u003c/li\u003e\n\u003cli\u003eÉ necessário escolher pessoas chave para as reuniões (key\nstakeholders);\u003c/li\u003e\n\u003cli\u003eDiga para os entrevistados quais são seus objetivos;\u003c/li\u003e\n\u003cli\u003eQuestione o ambiente de trabalho deles;\u003c/li\u003e\n\u003cli\u003eEvite termo técnicos;\u003c/li\u003e\n\u003cli\u003eUtilize ferramentas para facilitar a coleta de dados;\u003c/li\u003e\n\u003cli\u003ePresta atenção no que está sendo dito (use a escuta ativa, primeiro\nouça, depois formule o que você vai dizer);\u003c/li\u003e\n\u003cli\u003eAnote tudo que for possível e depois apresente esse(s) documento(s)\npara os entrevistados, garantindo que o que está escrito é de fato o\nque eles disseram/querem.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"grupo-de-discussão\"\u003eGrupo de discussão\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUm instrutor guia um grupo de stakeholders para ir entendendo como é\nfunciona hoje e o que pode ser melhorado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"workshop\"\u003eWorkshop\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOs stakeholders escrevem e expõem os problemas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"brainstorm\"\u003eBrainstorm\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOs stakeholders vão dando ideias (as mais malucas possíveis) de como\npode ser resolvido o problema;\u003c/li\u003e\n\u003cli\u003eNinguém crítica as ideias na primeira sessão. Após ela é que são\ndados os prós e contras de cada ideia.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"questionário\"\u003eQuestionário\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePerguntas direto ao ponto para os stakeholders;\u003c/li\u003e\n\u003cli\u003eUsado quando não há a possibilidade de fazer reuniões (último caso);\u003c/li\u003e\n\u003cli\u003ePerguntas devem ser muito bem elaboradas;\u003c/li\u003e\n\u003cli\u003eUse questionários junto com outras técnicas;\u003c/li\u003e\n\u003cli\u003ePerguntas dissertativas → usadas para conhecer novos requisitos;\u003c/li\u003e\n\u003cli\u003ePerguntas objetivas → usadas para validar o que foi feito;\u003c/li\u003e\n\u003cli\u003eUser perguntas como → indique o grau de importância, indique o grau\nde necessidade.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"observações\"\u003eObservações\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAcompanhar o dia a dia para identificar o problema;\u003c/li\u003e\n\u003cli\u003eGeralmente usado como um complementar, uma vez que nem sempre você\nconsegue acompanhar todos os dias o trabalho do seu cliente;\u003c/li\u003e\n\u003cli\u003ePara melhorar a experiência, é interessante você também colocar a\nmão na massa para ver como tudo funciona;\u003c/li\u003e\n\u003cli\u003eFunciona muito bem para problemas pontuais;\u003c/li\u003e\n\u003cli\u003eÉ muito bom para encontrar requisitos implícitos/esperados.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"análise-de-documentos\"\u003eAnálise de documentos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAnálise dos documentos que existem atualmente para a identificação.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eObs: Geralmente são usados um conjunto dessas técnicas.\u003c/p\u003e","title":"Ciências da computação dia 102"},{"content":"Podemos utilizar uma versão da linked list, de forma que guardaremos em uma variável o endereço do último node. Isso pode ser usado para reduzir o tempo de acesso para alguns algoritmos.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-103-ghbccai9b34c/","summary":"\u003cp\u003ePodemos utilizar uma versão da linked list, de forma que guardaremos em\numa variável o endereço do último node. Isso pode ser usado para reduzir\no tempo de acesso para alguns algoritmos.\u003c/p\u003e","title":"Ciências da computação dia 103"},{"content":"O MySQL possui algumas engines, uma mais antiga que permite integridade referencial é chamado de InnoDB, engine da época do MyISAM.\nPodemos utilizar essa engine apenas colocando ENGINE=InnoDB na frente de um commando da DDL.\nobs: integridade referencial se dá a partir de FK.\nPara inserir date/datetime, use aspas simples ao redor.\nSe ao definir uma coluna na frente você colocar PRIMARY KEY, você definiu ela como primaria a nível de coluna, já se você usar o comando CONSTRAINT você define a nível de tabela.\nPara alterar colunas de uma tabela, use o comando ALTER.\nALTER TABLE|CONSTRAINT nome_table_ou_constraint ADD|DROP|MODIFY expressao\u0026hellip;.\nao utilizar esse comando para adicionar uma coluna\nALTER TABLE test ADD test1 VARCHAR(20); lembre-se que se você adicionar uma coluna, e seta-lá como NOT NULL, isso provavelmente dará erro, uma vez que se já há dados na tabela, essa nova coluna terá todos os valores como NULL. Para isso o ideal é seta-lá para NULL e depois de deixar todos os dados corretos, você seta para NOT NULL.\nalém disso, se você possui uma coluna como VARCHAR, e você usar o MODIFY para diminuir o tamanho máximo dos VARCHAR já inseridos, você truncará os valores já existentes, caso eles passem do tamanho setado agora.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-104-g89bc6idb8h8/","summary":"\u003cp\u003eO MySQL possui algumas engines, uma mais antiga que permite integridade\nreferencial é chamado de InnoDB, engine da época do MyISAM.\u003c/p\u003e\n\u003cp\u003ePodemos utilizar essa engine apenas colocando ENGINE=InnoDB na frente de\num commando da DDL.\u003c/p\u003e\n\u003cp\u003eobs: integridade referencial se dá a partir de FK.\u003c/p\u003e\n\u003cp\u003ePara inserir date/datetime, use aspas simples ao redor.\u003c/p\u003e\n\u003cp\u003eSe ao definir uma coluna na frente você colocar PRIMARY KEY, você\ndefiniu ela como primaria a nível de coluna, já se você usar o comando\nCONSTRAINT você define a nível de tabela.\u003c/p\u003e","title":"Ciências da computação dia 104"},{"content":"Continuação dos métodos 6 \u0026mdash; defina a estrutura organizacional Montar a empresa; Equipamentos, espaço, etc. 7 \u0026mdash; defina o plano financeiro Em quanto tempo o investimento se paga, fluxo de caixa, etc. Dinheiro do negócio. Segmentação e posicionamento de mercado Kotler → autor sobre marketing; Composto de marketing == 4Ps; Geralmente os segmentos se dão por classe socioeconômica (classe, emprego, escolaridade, etc.), faixa etária e localização; segmentação por grau de utilização → quantas vezes o cliente vai frequentar essa loja, ou vai usar seu serviço, etc; segmentação psicográfica → entender hábitos, emoções, estilo de vida, etc. Pesquisa de marketing ajuda à achar o seu público\nAnálise SWOT (ou matriz FOFA) maneira de entender melhor o seu segmento/negócio; Olha para dentro e fora do negócio; Para dentro → olha os pontos fortes e fracos; Para fora → olha as oportunidades e ameaças. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-105-9db506g8f1bi/","summary":"\u003ch3 id=\"continuação-dosmétodos\"\u003eContinuação dos métodos\u003c/h3\u003e\n\u003ch4 id=\"6defina-a-estrutura-organizacional\"\u003e6 \u0026mdash; defina a estrutura organizacional\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eMontar a empresa;\u003c/li\u003e\n\u003cli\u003eEquipamentos, espaço, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"7defina-o-plano-financeiro\"\u003e7 \u0026mdash; defina o plano financeiro\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eEm quanto tempo o investimento se paga, fluxo de caixa, etc.\u003c/li\u003e\n\u003cli\u003eDinheiro do negócio.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"segmentação-e-posicionamento-demercado\"\u003eSegmentação e posicionamento de mercado\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eKotler → autor sobre marketing;\u003c/li\u003e\n\u003cli\u003eComposto de marketing == 4Ps;\u003c/li\u003e\n\u003cli\u003eGeralmente os segmentos se dão por classe socioeconômica (classe,\nemprego, escolaridade, etc.), faixa etária e localização;\u003c/li\u003e\n\u003cli\u003esegmentação por grau de utilização → quantas vezes o cliente vai\nfrequentar essa loja, ou vai usar seu serviço, etc;\u003c/li\u003e\n\u003cli\u003esegmentação psicográfica → entender hábitos, emoções, estilo de\nvida, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003ePesquisa de marketing ajuda à achar o seu público\u003c/p\u003e","title":"Ciências da computação dia 105"},{"content":"Static em Java,é usado por classes que não podem ser instânciadas, por exemplo, aquela que possui a função main.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-106-j24f9chh6e27/","summary":"\u003cp\u003eStatic em Java,é usado por classes que não podem ser instânciadas, por\nexemplo, aquela que possui a função main.\u003c/p\u003e","title":"Ciências da computação dia 106"},{"content":"Casos de Uso Conta uma história sobre o que o usuário fará no sistema (sob o ponto de vista dele); É uma história escrita. Diagrama de casos de Uso Uma maneira mais rápida de listar os casos de uso; Deixa mais fácil para o cliente enxergar o produto. Regras Diagrama de casos de uso Generalização O user1 pode agir como o user2\nInclude Quando o caso A é executado o Caso B também é\nExtend Quando B for executado o A pode ser executado também, mas o B pode agir sozinho sem A\nO que eles precisam responder? 1 \u0026mdash; Quem são os atores primários (quem executa a ação) e os secundários (auxilia a ação);\n2 \u0026mdash; Quais as metas do ator (o que ele quer fazer);\n3 \u0026mdash; Quais precondições devem existir para a história começar;\n4 \u0026mdash; Quais tarefas/funções principais do ator;\n5 \u0026mdash; Quais são as exceções no sistema (erros que podem ocorrer);\n6 \u0026mdash; Quais as variações das ações;\n7 \u0026mdash; Quais informações são inseridas, adquiridas ou modificadas;\n8 \u0026mdash; O ator terá de dizer alguma mudança do ambiente externo;\n9 \u0026mdash; Quais informações ele precisa do sistema.\nVocê começa o caso de uso identificando os atores, depois o que eles fazem;\nO ator pode ser: cliente, app, web service, comprador, professor, sistema, etc.;\nUsuário é diferente de ator, um usuário pode ter vários papéis enquanto um ator desempenha um papel;\nGeralmente atores principais mostram requisitos funcionais, enquanto os secundários os não funcionais.\nCenário Possíveis resultados de uma sequência de ações; Caso de uso de uma coleção de cenários de sucesso(caminho feliz) e falha; Cenários alternativos dependem muito das regras de negócio. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-107-6g67267i90ah/","summary":"\u003ch3 id=\"casos-deuso\"\u003eCasos de Uso\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConta uma história sobre o que o usuário fará no sistema (sob o\nponto de vista dele);\u003c/li\u003e\n\u003cli\u003eÉ uma história escrita.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"diagrama-de-casos-deuso\"\u003eDiagrama de casos de Uso\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUma maneira mais rápida de listar os casos de uso;\u003c/li\u003e\n\u003cli\u003eDeixa mais fácil para o cliente enxergar o produto.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo de\\u00a0diagrama\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-107-6g67267i90ah/image_189.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"regras-diagrama-de-casos-deuso\"\u003eRegras Diagrama de casos de uso\u003c/h3\u003e\n\u003ch4 id=\"generalização\"\u003eGeneralização\u003c/h4\u003e\n\u003cp\u003eO user1 pode agir como o user2\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"generalização\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-107-6g67267i90ah/image_190.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"include\"\u003eInclude\u003c/h4\u003e\n\u003cp\u003eQuando o caso A é executado o Caso B também é\u003c/p\u003e","title":"Ciências da computação dia 107"},{"content":"Inserir valores INSERT INTO table_name (campo1, campo2, ...) VALUES (valor1, valor2, ...); Para inserir múltiplos valores repita o comando várias vezes.\nPara string e dates use aspas simples e para valores decimais use o ponto para separar.\nValores NULL não precisam ser colocados nem como campo nem valor. Ao contrario dos NOT NULL, que a não ser que possuam um valor DEFAULT, precisam ser inseridos.\nVocê também pode omitir os campos:\nINSERT INTO table_name VALUES (valor1, valor2, ...); Mas nesse caso você precisa colocar todos os campos, até os NULL, na mesma sequência que está no banco.\nDeletar valores DELETE deleta uma linha toda.\nPara deletar uma tabela toda faça:\nDELETE FROM table; Atualizar valores UPDATE table SET campo1=valor1, campo2=valor2, ...; WHERE Todos os exemplos dados acima, os do delete e do update, ao serem executados, todos os dados do banco serião afetados. Para que isso não ocorra, usamos o commando WHERE para limitar os dados que serão afetados.\ncomando... WHERE clausula; a cláusula pode ser qualquer tipo de relação entre dados, como =, != (que também pode ser escrito como \u0026lt;\u0026gt;), \u0026gt;, \u0026lt;, ≥, etc. Repare que para valores iguais não usamos == mas sim =.\nAlém disso, podemos juntar várias cláusulas de relação com operadores lógicos, como AND, OR e NOT.\nOBS CONSTRAINTs não precisam de nome.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-108-ah63ci7884c8/","summary":"\u003ch3 id=\"inserir-valores\"\u003eInserir valores\u003c/h3\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eINSERT INTO table_name (campo1, campo2, ...) VALUES (valor1, valor2, ...);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ePara inserir múltiplos valores repita o comando várias vezes.\u003c/p\u003e\n\u003cp\u003ePara string e dates use aspas simples e para valores decimais use o\nponto para separar.\u003c/p\u003e\n\u003cp\u003eValores NULL não precisam ser colocados nem como campo nem valor. Ao\ncontrario dos NOT NULL, que a não ser que possuam um valor DEFAULT,\nprecisam ser inseridos.\u003c/p\u003e\n\u003cp\u003eVocê também pode omitir os campos:\u003c/p\u003e","title":"Ciências da computação dia 108"},{"content":"Para entender as ameaças/oportunidades perante seus concorrentes, você deve entende-los, comprando seus produtos, vendo seu atendimento, vendo o site, etc.\n5 forças de Michael Porter Forças que exercem pressão sobre a empresa (olha só para o micro e o macro, não para dentro da empresa)\n1 \u0026mdash; Concorrentes diretos Entenda tudo sobre eles; Observe empresas que atuam no mesmo segmento; Faça comparações por linha de produto. 2 \u0026mdash; Fornecedores Ver se os fornecedores te ajudam a ser competitivo; conseguir um preço melhor ou uma qualidade melhor, dependendo do segmento. 3 \u0026mdash; Clientes Ver se seus clientes vão para sua empresa ao invés do concorrente. 4 \u0026mdash; Produtos substitutos produtos, não necessariamente do mesmo segmento que o seu, mas que podem te substituir; mercado muito saturado, geralmente, faz os consumidores irem para outros produtos. 5 \u0026mdash; Estudar novos entrantes Ficar de olho nos novos concorrentes. B2B → business to business B2C → business to costumer Pesquisa de mercado (ou pesquisa de marketing) formulários (geralmente) que são usados para entender seus consumidores/mercado, o que eles precisam, seus hábitos, gostos, etc. Etapas para fazer a pesquisa de mercado 1 \u0026mdash; definir os problemas, alternativas e os objetivos da pesquisa;\n2 \u0026mdash; desenvolvimento do plano de pesquisa;\n3 \u0026mdash; coleta de informações;\n4 \u0026mdash; analise das informações;\n5 \u0026mdash; apresentação dos resultados;\n6 \u0026mdash; tomada de decisão.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-109-839d59ac2ai4/","summary":"\u003cp\u003ePara entender as ameaças/oportunidades perante seus concorrentes, você\ndeve entende-los, comprando seus produtos, vendo seu atendimento, vendo\no site, etc.\u003c/p\u003e\n\u003ch3 id=\"5-forças-de-michaelporter\"\u003e5 forças de Michael Porter\u003c/h3\u003e\n\u003cp\u003eForças que exercem pressão sobre a empresa (olha só para o micro e o\nmacro, não para dentro da empresa)\u003c/p\u003e\n\u003ch4 id=\"1concorrentes-diretos\"\u003e1 \u0026mdash; Concorrentes diretos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eEntenda tudo sobre eles;\u003c/li\u003e\n\u003cli\u003eObserve empresas que atuam no mesmo segmento;\u003c/li\u003e\n\u003cli\u003eFaça comparações por linha de produto.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2fornecedores\"\u003e2 \u0026mdash; Fornecedores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eVer se os fornecedores te ajudam a ser competitivo;\u003c/li\u003e\n\u003cli\u003econseguir um preço melhor ou uma qualidade melhor, dependendo do\nsegmento.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3clientes\"\u003e3 \u0026mdash; Clientes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eVer se seus clientes vão para sua empresa ao invés do concorrente.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"4produtos-substitutos\"\u003e4 \u0026mdash; Produtos substitutos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eprodutos, não necessariamente do mesmo segmento que o seu, mas que\npodem te substituir;\u003c/li\u003e\n\u003cli\u003emercado muito saturado, geralmente, faz os consumidores irem para\noutros produtos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"5estudar-novos-entrantes\"\u003e5 \u0026mdash; Estudar novos entrantes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFicar de olho nos novos concorrentes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"b2b--business-tobusiness\"\u003eB2B → business to business\u003c/h4\u003e\n\u003ch4 id=\"b2c--business-tocostumer\"\u003eB2C → business to costumer\u003c/h4\u003e\n\u003ch3 id=\"pesquisa-de-mercado-ou-pesquisa-de-marketing\"\u003ePesquisa de mercado (ou pesquisa de marketing)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eformulários (geralmente) que são usados para entender seus\nconsumidores/mercado, o que eles precisam, seus hábitos, gostos,\netc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"etapas-para-fazer-a-pesquisa-demercado\"\u003eEtapas para fazer a pesquisa de mercado\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; definir os problemas, alternativas e os objetivos da pesquisa;\u003c/p\u003e","title":"Ciências da computação dia 109"},{"content":"muitos sobre softskills e alguns problemas dos profissionais/ do mundo de hoje. Já na segunda, tivemos um nivelamento em matemática, para conseguimos entrar no cálculo.\nParte 1 como na primeira parte não tivemos nada de muita teoria, vou apenas deixar minhas anotações de forma corrida.\nTrate sempre dos pequenos detalhes, pois podem acarretar em algo maior; Mantenha uma boa comunicação. Mundo VUCA\nVolatilidade → tudo muda rápido hoje Incerteza → não sabemos o que será no futuro(mercado de trabalho, mercado financeiro, político, etc.) Complexidade → muitas conexões entre pessoas e coisas Ambiguidade → diversas linhas de pensamento e opinião \u0026ldquo;Não existe fracasso exceto em não continuar tentando\u0026rdquo;\nElbert Hulbard\nFOMO\nmedo de ficar de fora ansiedade por achar que está fora de algum acontecimento MOMO\nMistério de ficar de fora ansiedade gerada quando alguém que você segue não publica nada a muito tempo FOJI\nMedo de participar medo de ser rejeitado nas redes BROMO\nproteção de amigos amigos não compartilham algo para não magoar alguém, pois este está de fora de algum acontecimento SLOMO\nlentidão para ficar de fora afastamento da rede que resulta na perda de algo JOMO\nalegria de ficar de fora gostar de ficar muito tempo fora das redes Modernidade liquida → Se algo der errado, estude o que aconteceu e refaça direito\nSeja como a agua, se adapte e se molde ao que for necessário\nFrase adaptada a partir de uma de Bruce Lee\nSoluções mundo VUCA\nVisão → tente pensar no que fazer com a mudança do mundo entendimento → estude o que está acontecendo clareza → agir como água e seguir em frente agilidade → após tudo isso a cima, coloque tudo em prática Mundo BANI\nfrágil → solução: requer capacidade e resiliência Ansioso → solução: requer empatia e saúde Não linear → solução: requer adaptabilidade Incompreensível → solução: requer intuição Revoluções industriais não tirou emprego, mas sim realocou pessoas de profissão, agora com menos risco de vida para esses trabalhadores\nParte 2 Expressão numérica ordem dos cálculos\n() →[] → {} → potência e raiz → multiplicação e divisão → soma e subtração\nFração representa uma parte de algo\n1/8\n1 (parte) → numerador\n8 (todo) → denominador\nfrações semelhantes/proporcionais\n2/8 e 1/4\n3/6 e 1/2\nisso pois → 1 * 4 = 8 e 1 * 8 = 8\nfração reduzida\nmenor fração que a gente pode chegar\n1/2, 1/3, 1/4, 13/12, etc\nou seja a gente não tem como dividir em cima e em baixo por certo numero e chegar em uma fração equivalente a anterior com números menores\n16/64 → 16(÷16) / 64(÷16) → 1/4\nsoma e subtração com denominadores iguais\n2/4 + 3/4 = 5/4\nsoma e subtração com denominadores múltiplos um do outro\n5/12 + 2/3\n12 = 4 * 3\nmultiplica o de cima e o d baixo pelo outro valor pertencente a multiplicação\n5/12 + 2(*4) / 3(*4)\n5/12 + 8/12 = 13/12\nsoma e subtração com denominadores diferentes\n2/3 + 3/5\nmultiplica os de baixo de pois multiplica em cruz começando da direita para baixo\n(5 * 2) (nesse caso +) (3 * 3) /(3 * 5)\n10 + 9 / 15\n19/15\nsoma e subtração com denominadores diferentes e grandes\n7/18 + 27/12\nnesse caso você terá de usar o mmc\npara isso lembre dos números primos:\nprimos = 2, 3, 5, 7, 11\u0026hellip;\nfazendo o mmc\n18, 12 | 2\n9, 6 | 2\n9, 3 | 3\n3, 1 | 3\n1, 1 |\nmultiplicando 2 * 2 * 3 * 3 ou 4 * 9 = 36\n36 será o denominador\ndepois disso pegue o 36 divida por cada denominador e multiplique o resultado pelo numerador\n(36 / 18 * 7) (nesse caso +) (36 / 12 * 7)/36\n14 + 21 / 36\n35/36\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-11-4iic112h6dd4/","summary":"\u003cp\u003emuitos sobre softskills e alguns problemas dos profissionais/ do mundo\nde hoje. Já na segunda, tivemos um nivelamento em matemática, para\nconseguimos entrar no cálculo.\u003c/p\u003e\n\u003ch3 id=\"parte-1\"\u003eParte 1\u003c/h3\u003e\n\u003cp\u003ecomo na primeira parte não tivemos nada de muita teoria, vou apenas\ndeixar minhas anotações de forma corrida.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTrate sempre dos pequenos detalhes, pois podem acarretar em algo\nmaior;\u003c/li\u003e\n\u003cli\u003eMantenha uma boa comunicação.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMundo VUCA\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVolatilidade → tudo muda rápido hoje\u003c/li\u003e\n\u003cli\u003eIncerteza → não sabemos o que será no futuro(mercado de trabalho,\nmercado financeiro, político, etc.)\u003c/li\u003e\n\u003cli\u003eComplexidade → muitas conexões entre pessoas e coisas\u003c/li\u003e\n\u003cli\u003eAmbiguidade → diversas linhas de pensamento e opinião\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u0026ldquo;Não existe fracasso exceto em não continuar tentando\u0026rdquo;\u003c/p\u003e","title":"Ciências da computação dia 11"},{"content":"Lista duplamente encadeada dois pointer para o próximo nó e o anterior; ajuda na performance e na facilidade em encontrar valores na lista. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-110-51aacii81ch3/","summary":"\u003ch3 id=\"lista-duplamente-encadeada\"\u003eLista duplamente encadeada\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edois pointer para o próximo nó e o anterior;\u003c/li\u003e\n\u003cli\u003eajuda na performance e na facilidade em encontrar valores na lista.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 110"},{"content":"JOIN usado para fazer junção de duas ou mais tabelas; um join não deve retornar mais linhas do que a menor tabela (geralmente com o equi join) nem da maior tabela; obs: é necessário haver chave estrangeiras entre as tabelas. CROSS JOIN multiplicação dos dados das tabelas (produto cartesiano); retorna uma combinação dos dados das duas colunas, possuindo n(linhas da tabela 1) x m (linhas da tabela 2); não é utilizado. SELECT * FROM table JOIN table2; INNER JOIN join que une duas tabelas e pega apenas aquilo que tem relação; dois tipos são implementados em MySQL: EquiJOIN e Natural JOIN. O comando ON mostra sempre a relação entre a PK e FK.\nobs: se quisermos, antes do comando JOIN podemos colocar o INNER.\nEquiJOIN Join com base em dados comuns entre as tabelas; SELECT * FROM table JOIN table2 ON (table.campo = table2.campo); Você também pode utilizar múltiplas relações usando os operadores lógicos:\nSELECT * FROM table JOIN table2 ON (table.campo = table2.campo) AND (table.campo2 = table2.campo2); Natural JOIN Junção de tabelas a partir de colunas de mesmo nome. SELECT * FROM table NATURAL JOIN table2; Tenha cuidado ao usar esse comando, certifique-se de que as colunas que possuem o mesmo nome são as que fazem de fato a relação entre elas.\nOuter JOIN Usado para pegar tanto os dados que pertencem a relação como os que não estão também; possui três tipos: LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN. assim como no INNER, podemos colocar ou não a palavra OUTER antes dos comandos JOIN.\nLEFT OUTER JOIN retorna os dados da relação mais os dados que não pertencem a relação que estão na tabela da esquerda SELECT * FROM table(tabela da esquerda) LEFT OUTER JOIN table2 ON (table.campo = table2.campo); RIGHT OUTER JOIN retorna os dados da relação mais os dados que não pertencem a relação que estão na tabela da direita SELECT * FROM table LEFT OUTER JOIN table2(tabela da direita) ON (table.campo = table2.campo); FULL OUTER JOIN retorna os dados da relação mais os dados que não pertencem a relação de ambas as tabelas; Esse não é implementando em MySQL, mas podemos fazer um truque. /* Como deveria ser */ SELECT * FROM table FULL OUTER JOIN table2 ON (table.campo = table2.campo); /* Como podemos fazer */ SELECT * FROM table LEFT OUTER JOIN table2 ON (table.campo = table2.campo) UNION SELECT * FROM table RIGHT OUTER JOIN table2 ON (table.campo = table2.campo); O comando UNION aqui, age como na teoria de conjuntos, unindo os dados de ambos os selects/tabelas.\nAliases Podemos, para ficar mais simples, reduzir o tamanho dos nomes das tabelas ou das colunas usando um alias. Para isso no select coloque na frente do nome o comando as e o alias que você quer dar, ou simplesmente coloque o nome do alias logo na frente, sem o comando as.\nSELECT T.campo FROM table as T; SELECT T.campo FROM table T; OBS O tipo da FK precisa ser igual ao da PK que ela referencia, mas não precisam ter a mesma disponibilidade para NULL, ou seja um pode ser NOT NULL e o outro NULLABLE.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-111-05eh11g068g99/","summary":"\u003ch3 id=\"join\"\u003eJOIN\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eusado para fazer junção de duas ou mais tabelas;\u003c/li\u003e\n\u003cli\u003eum join não deve retornar mais linhas do que a menor tabela\n(geralmente com o equi join) nem da maior tabela;\u003c/li\u003e\n\u003cli\u003eobs: é necessário haver chave estrangeiras entre as tabelas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"cross-join\"\u003eCROSS JOIN\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emultiplicação dos dados das tabelas (produto cartesiano);\u003c/li\u003e\n\u003cli\u003eretorna uma combinação dos dados das duas colunas, possuindo\nn(linhas da tabela 1) x m (linhas da tabela 2);\u003c/li\u003e\n\u003cli\u003enão é utilizado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT * FROM table JOIN table2;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"inner-join\"\u003eINNER JOIN\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ejoin que une duas tabelas e pega apenas aquilo que tem relação;\u003c/li\u003e\n\u003cli\u003edois tipos são implementados em MySQL: EquiJOIN e Natural JOIN.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eO comando ON mostra sempre a relação entre a PK e FK.\u003c/p\u003e","title":"Ciências da computação dia 111"},{"content":"Funções de valor simples Retornam um valor ROUND(numero, [m]) arredonda o numero em m casas; por padrão ele retira a vírgula; arredonda para cima se o valor da próxima casa for \u0026gt;5. TRUNCATE(numero, m) trunca o numero em um m casas. SQRT(numero) retorna a raiz quadrada do numero Funções de grupo de valores retornam 1 linha apenas AVG(n) retorna o valor médio da coluna n; ignora nulos. COUNT(* | Expressão) retorna o total de linhas de uma tabela (no caso do *), ou que uma expressão retorna (desconsiderando nulos). MAX(n) retorna o valor máximo de uma coluna n; em uma coluna n, como nome, o comando retorna o ultimo em ordem alfabética. MIN(n) retorna o valor mínimo de uma coluna n; em uma coluna n, como nome, o comando retorna o primeiro em ordem alfabética. SUM(n) soma todos os valores de uma coluna n. GROUP BY Quando há a necessidade de selecionar outros campos também, você usa para juntar os valores; Claramente isso não pode ser usado em todos os casos, mas em casos que os dados estão corretos, e a coluna seleciona tem alguma relação isso pode ser usado. SELECT id, COUNT(quantidade) FROM compra GROUP BY id; Funções que devolvem caracteres CONCAT(texto1, texto2) retorna texto1 concatenado ao texto2. LOWER(texto) retorna o texto todo em minúsculo. UPPER(texto) retorna o texto todo em maiúsculo. REPLACE(texto, para_ser_substituído, o_que_vai_substituir) retorna o texto com o \u0026ldquo;para_ser_substituído\u0026rdquo; substituído pelo \u0026ldquo;o_que_vai_substituir\u0026rdquo;. SUBSTR(texto, m, [n]) retorna uma substring do texto comando em m e terminando em n; lembrando que m começa em 1 e não 0; por padrão n é o fim do texto. Funções que retornam números INSTR(texto1, texto2) retorna a primeira ocorrência do texto2 no texto1. LENGTH(texto) retorna o tamanho do texto. Funções de DATA NOW() retorna a data do sistema LAST_DAY(data) retorna o ultimo dia do mês da data. DAY(data) pega o dia da data. YEAR(data) pega o ano da data. MONTH(data) pega o mês da data. DATEDIFF(data1, data2) pega a diferença entre data1 e data2. Condições Case maneira de retornar valores específicos em buscas. SELECT CASE idade WHEN 7 THEN \u0026#39;Jovem\u0026#39; WHEN 14 THEN \u0026#39;Adolescente\u0026#39; ELSE \u0026#39;Outro\u0026#39; END as descricao; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-112-5figf0f43a88/","summary":"\u003ch3 id=\"funções-de-valorsimples\"\u003eFunções de valor simples\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRetornam um valor\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"roundnumero-m\"\u003eROUND(numero, [m])\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003earredonda o numero em m casas;\u003c/li\u003e\n\u003cli\u003epor padrão ele retira a vírgula;\u003c/li\u003e\n\u003cli\u003earredonda para cima se o valor da próxima casa for \u0026gt;5.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"truncatenumero-m\"\u003eTRUNCATE(numero, m)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etrunca o numero em um m casas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sqrtnumero\"\u003eSQRT(numero)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna a raiz quadrada do numero\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"funções-de-grupo-devalores\"\u003eFunções de grupo de valores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretornam 1 linha apenas\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"avgn\"\u003eAVG(n)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o valor médio da coluna n;\u003c/li\u003e\n\u003cli\u003eignora nulos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"count--expressão\"\u003eCOUNT(* | Expressão)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o total de linhas de uma tabela (no caso do *), ou que uma\nexpressão retorna (desconsiderando nulos).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"maxn\"\u003eMAX(n)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o valor máximo de uma coluna n;\u003c/li\u003e\n\u003cli\u003eem uma coluna n, como nome, o comando retorna o ultimo em ordem\nalfabética.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"minn\"\u003eMIN(n)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o valor mínimo de uma coluna n;\u003c/li\u003e\n\u003cli\u003eem uma coluna n, como nome, o comando retorna o primeiro em ordem\nalfabética.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sumn\"\u003eSUM(n)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esoma todos os valores de uma coluna n.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"group-by\"\u003eGROUP BY\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eQuando há a necessidade de selecionar outros campos também, você usa\npara juntar os valores;\u003c/li\u003e\n\u003cli\u003eClaramente isso não pode ser usado em todos os casos, mas em casos\nque os dados estão corretos, e a coluna seleciona tem alguma relação\nisso pode ser usado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT id, COUNT(quantidade)\nFROM compra\nGROUP BY id;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"funções-que-devolvem-caracteres\"\u003eFunções que devolvem caracteres\u003c/h3\u003e\n\u003ch4 id=\"concattexto1-texto2\"\u003eCONCAT(texto1, texto2)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna texto1 concatenado ao texto2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"lowertexto\"\u003eLOWER(texto)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o texto todo em minúsculo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"uppertexto\"\u003eUPPER(texto)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o texto todo em maiúsculo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"replacetexto-para_ser_substituído-o_que_vai_substituir\"\u003eREPLACE(texto, para_ser_substituído, o_que_vai_substituir)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o texto com o \u0026ldquo;para_ser_substituído\u0026rdquo; substituído pelo\n\u0026ldquo;o_que_vai_substituir\u0026rdquo;.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"substrtexto-mn\"\u003eSUBSTR(texto, m, [n])\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna uma substring do texto comando em m e terminando em n;\u003c/li\u003e\n\u003cli\u003elembrando que m começa em 1 e não 0;\u003c/li\u003e\n\u003cli\u003epor padrão n é o fim do texto.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"funções-que-retornamnúmeros\"\u003eFunções que retornam números\u003c/h3\u003e\n\u003ch4 id=\"instrtexto1-texto2\"\u003eINSTR(texto1, texto2)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna a primeira ocorrência do texto2 no texto1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"lengthtexto\"\u003eLENGTH(texto)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o tamanho do texto.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"funções-dedata\"\u003eFunções de DATA\u003c/h3\u003e\n\u003ch4 id=\"now\"\u003eNOW()\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna a data do sistema\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"last_daydata\"\u003eLAST_DAY(data)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna o ultimo dia do mês da data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"daydata\"\u003eDAY(data)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epega o dia da data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"yeardata\"\u003eYEAR(data)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epega o ano da data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"monthdata\"\u003eMONTH(data)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epega o mês da data.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"datediffdata1-data2\"\u003eDATEDIFF(data1, data2)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epega a diferença entre data1 e data2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"condições\"\u003eCondições\u003c/h3\u003e\n\u003ch4 id=\"case\"\u003eCase\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emaneira de retornar valores específicos em buscas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT CASE idade\n  WHEN 7 THEN \u0026#39;Jovem\u0026#39;\n  WHEN 14 THEN \u0026#39;Adolescente\u0026#39;\n  ELSE \u0026#39;Outro\u0026#39;\nEND as descricao;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 112"},{"content":" É melhor a empresa conseguir o planejado do que a mais.\nSubnichar, pode ser uma boa ideia, já que deixa mais fácil o processo de entender o público.\nMétodo de pesquisa de mercado 1 \u0026mdash; Segmentar/se posicionar no mercado\n2 \u0026mdash; Conhecer o ambiente escolhido\n3 \u0026mdash; entender o público\nMotivação é um motivo que leva à uma ação; Ninguém consegue motivar ninguém; O motivo está dentro de cada pessoa; O que uma outra pessoa pode fazer, é te dar estímulos que fazem você repensar os seus motivos; Quanto mais você conhece o motivo de alguém, mais fácil é gerar estímulos para ela; Decisão de compra é racional, mas o ato(através de estímulos) é irracional. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-113-9c8i4h2b1h0i/","summary":"\u003cblockquote\u003e\n\u003cp\u003eÉ melhor a empresa conseguir o planejado do que a mais.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSubnichar, pode ser uma boa ideia, já que deixa mais fácil o processo de\nentender o público.\u003c/p\u003e\n\u003ch3 id=\"método-de-pesquisa-demercado\"\u003eMétodo de pesquisa de mercado\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; Segmentar/se posicionar no mercado\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; Conhecer o ambiente escolhido\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; entender o público\u003c/p\u003e\n\u003ch3 id=\"motivação\"\u003eMotivação\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eé um motivo que leva à uma ação;\u003c/li\u003e\n\u003cli\u003eNinguém consegue motivar ninguém;\u003c/li\u003e\n\u003cli\u003eO motivo está dentro de cada pessoa;\u003c/li\u003e\n\u003cli\u003eO que uma outra pessoa pode fazer, é te dar estímulos que fazem você\nrepensar os seus motivos;\u003c/li\u003e\n\u003cli\u003eQuanto mais você conhece o motivo de alguém, mais fácil é gerar\nestímulos para ela;\u003c/li\u003e\n\u003cli\u003eDecisão de compra é racional, mas o ato(através de estímulos) é\nirracional.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 113"},{"content":"Herança Maneira de derivar classes para novas classes; Nova classe herda os métodos e estruturas da classe que foi derivada; A nova classe pode adicionar mais métodos, estruturas, assim como redefinir estruturas e métodos herdados; Em um diagrama, a classe filho sempre aponta para o pai; Use valores protected apenas em último caso; Vantages reutilizar classes; compartilhamento de recursos entre classes. class Base{} class Child extends Base{ Child(arguments...){ super(arguments...); //aqui você passa os argumentos para o construtor da classe Base, se não há nenhum argumento, você pode omitir } } obs: sobrecarga também pode acontecer aqui, contudo se você deixar com a mesma assinatura (mesmo nome e argumentos em uma função) essa função será reescrita(redefinição de métodos).\nNomenclaturas Subclasse → classe que herda; Superclasse → classe base (pai); Classe ancestral → classe que uma Superclasse herda; Classe descendente → classe que herda de uma subclasse. Polimorfismo Quando tenho classes herdadas que possuem métodos com mesma assinatura (sobrescrita ou por sobrecarga) mas com comportamentos diferentes (métodos polimórficos). Casting uma classe filho pode ser instanciada com o tipo da do pai, contudo se precisar de um método especifico da do filho você precisa fazer o casting. class Base{} class Child extends Base{} Base test = new Child(); (Child)test.method(); ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-114-gg2hed4d01h4/","summary":"\u003ch3 id=\"herança\"\u003eHerança\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eManeira de derivar classes para novas classes;\u003c/li\u003e\n\u003cli\u003eNova classe herda os métodos e estruturas da classe que foi\nderivada;\u003c/li\u003e\n\u003cli\u003eA nova classe pode adicionar mais métodos, estruturas, assim como\nredefinir estruturas e métodos herdados;\u003c/li\u003e\n\u003cli\u003eEm um diagrama, a classe filho sempre aponta para o pai;\u003c/li\u003e\n\u003cli\u003eUse valores protected apenas em último caso;\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"vantages\"\u003eVantages\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ereutilizar classes;\u003c/li\u003e\n\u003cli\u003ecompartilhamento de recursos entre classes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eclass Base{}\nclass Child extends Base{\n  Child(arguments...){\n    super(arguments...); //aqui você passa os argumentos para o construtor da classe Base, se não há nenhum argumento, você pode omitir\n  }\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eobs: sobrecarga também pode acontecer aqui, contudo se você deixar com a\nmesma assinatura (mesmo nome e argumentos em uma função) essa função\nserá reescrita(redefinição de métodos).\u003c/p\u003e","title":"Ciências da computação dia 114"},{"content":"Passos para criar um caso de uso 1 \u0026mdash; Identificar as interações (ações) que serão executadas dentro do sistema;\n2 \u0026mdash; Definir os atores (primários e secundários);\n3 \u0026mdash; Criar o caso de uso, com cenários de sucesso e falha, além das interações (fazer como uma história escrita).\nobs: não é obrigatório ter ator secundário, mas 99% das vezes há.\nNotação de caso de uso Resumido → forma simples, descrevendo a história;\nInformal/estruturada → transformação das histórias em formato de tópicos. Nesse caso, os cenários alternativos são dados como extensões, dessa vez podendo agir como um algoritmo, com condições e loops entre tópicos ;\nCompleto → detalha melhor o caso de uso, descrevendo pré-condições, pós condições e o uso da forma informal em conjunto;\npré-condições → algo que deve ser verdadeiro antes de o caso ocorrer (pode haver mais de uma);\npós-condições → o que ocorrerá depois de um fluxo de passos.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-115-275e909gi7f4/","summary":"\u003ch3 id=\"passos-para-criar-um-caso-deuso\"\u003ePassos para criar um caso de uso\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; Identificar as interações (ações) que serão executadas dentro do\nsistema;\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; Definir os atores (primários e secundários);\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; Criar o caso de uso, com cenários de sucesso e falha, além das\ninterações (fazer como uma história escrita).\u003c/p\u003e\n\u003cp\u003eobs: não é obrigatório ter ator secundário, mas 99% das vezes há.\u003c/p\u003e\n\u003ch3 id=\"notação-de-caso-deuso\"\u003eNotação de caso de uso\u003c/h3\u003e\n\u003cp\u003eResumido → forma simples, descrevendo a história;\u003c/p\u003e","title":"Ciências da computação dia 115"},{"content":"Listas restritas listas que possuem restrições quanto a suas operações (inserção, remoção e acesso aos dados). Pilha é uma lista restrita; LIFO(last in first out); operações: push(insere no topo) e pop(remove do topo); poder ser criado usando linked lists. Pilha de execução Um programa empilha as funções que devem ser executadas primeiro, para saber sua ordem lógica. main(){ f1(); } f1(){ f2(); } Pilha de execução 1. f2() 2. f1() 3. main() Notas de C para deletar um elemento de um array:\narray[last] = array[last-1]\nisso faz com que array[last] seja sobrescrito por array[last-1]\nao fazer p-\u0026gt;info[++p-\u0026gt;topo]\n++p-\u0026gt;topo incrementa p-\u0026gt;topo e também retorna o valor incrementado\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-116-bhe549daib5f/","summary":"\u003ch3 id=\"listas-restritas\"\u003eListas restritas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003elistas que possuem restrições quanto a suas operações (inserção,\nremoção e acesso aos dados).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pilha\"\u003ePilha\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eé uma lista restrita;\u003c/li\u003e\n\u003cli\u003eLIFO(last in first out);\u003c/li\u003e\n\u003cli\u003eoperações: push(insere no topo) e pop(remove do topo);\u003c/li\u003e\n\u003cli\u003epoder ser criado usando linked lists.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pilha-deexecução\"\u003ePilha de execução\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUm programa empilha as funções que devem ser executadas primeiro,\npara saber sua ordem lógica.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emain(){\n  f1();\n}\n\nf1(){\n  f2();\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ePilha de execução\n\n1. f2()\n2. f1()\n3. main()\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"notas-dec\"\u003eNotas de C\u003c/h3\u003e\n\u003cblockquote\u003e\n\u003cp\u003epara deletar um elemento de um array:\u003c/p\u003e","title":"Ciências da computação dia 116"},{"content":"Em um diagrama, a classe herdada aponta para o pai.\nConstrutor padrão construtor que não recebe parâmetros; não precisa ser declarado ou chamado (usando o super). Ao redefinir um método, caso você queira chamar a versão original do método (a que está no pai), faça:\nsuper.metodo(...arguments...); Notas Java ao dividir dois int, se você não forçar com que um seja float, o resultado será truncado.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-117-ce34i9bg63g4/","summary":"\u003cp\u003eEm um diagrama, a classe herdada aponta para o pai.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"classe herdada de\\u00a0Pessoa\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-117-ce34i9bg63g4/image_193.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"construtor-padrão\"\u003eConstrutor padrão\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econstrutor que não recebe parâmetros;\u003c/li\u003e\n\u003cli\u003enão precisa ser declarado ou chamado (usando o super).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAo redefinir um método, caso você queira chamar a versão original do\nmétodo (a que está no pai), faça:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esuper.metodo(...arguments...);\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"notas-java\"\u003eNotas Java\u003c/h3\u003e\n\u003cp\u003eao dividir dois int, se você não forçar com que um seja float, o\nresultado será truncado.\u003c/p\u003e","title":"Ciências da computação dia 117"},{"content":"Estrutura caso de uso estruturado 1 \u0026mdash; Nome do caso de uso(começa com um verbo no infinitivo);\n2 \u0026mdash; Atores;\n3 \u0026mdash; Caso de sucesso (fluxo principal);\n4 \u0026mdash; Extensões (exceções).\npré-condições e pós-condições são opcionais.\nExtensões Ao usar \u0026lsquo;*\u0026rsquo; , isso significa que essa exceção funciona para qualquer um dos passos do fluxo principal, podendo haver mais de um, para isso identifique como: *.a, *.b, *.c, etc.; Uma extensão pode possuir extensões dentro. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-118-865ibjabhg0f/","summary":"\u003ch3 id=\"estrutura-caso-de-uso-estruturado\"\u003eEstrutura caso de uso estruturado\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; Nome do caso de uso(começa com um verbo no infinitivo);\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; Atores;\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; Caso de sucesso (fluxo principal);\u003c/p\u003e\n\u003cp\u003e4 \u0026mdash; Extensões (exceções).\u003c/p\u003e\n\u003cp\u003epré-condições e pós-condições são opcionais.\u003c/p\u003e\n\u003ch3 id=\"extensões\"\u003eExtensões\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAo usar \u0026lsquo;*\u0026rsquo; , isso significa que essa exceção funciona para\nqualquer um dos passos do fluxo principal, podendo haver mais de um,\npara isso identifique como: *.a, *.b, *.c, etc.;\u003c/li\u003e\n\u003cli\u003eUma extensão pode possuir extensões dentro.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 118"},{"content":"Índice estrutura de dados que permite queries mais velozes; não é necessário criar, mas para aumentar a perfomance, é recomendado; é criado automaticamente quando você seta alguma coluna como PK ou UNIQUE, pois devido ao seu formato, ele garante que os dados não sejam repetidos; Deixa mais rápido as pesquisas(queries), pois utilizam uma estrutura que já deixa os dados já organizados e linkados, como uma B-tree. Com isso, caso você não possua indices, ao fazer um select o mysql fará um FULL TABLE SCAN, ou seja, percorrerá todos os dados pegando aqueles que foram selecionados e filtrados; Não é necessário selecionar o índice manualmente, ao fazer um select o mysql vai automaticamente usar o índice, caso ele veja que será mais rápido; Você pode usar com cláusulas Where; Ao fazer um update, insert ou delete na table, o indice será atualizado também. CREATE [UNIQUE] INDEX name ON table(column); #O unique é usado geralmente para PK e UNIQUE columns, sendo assim, geralmente não é usado View Armazena uma query; Dados são gerados dinamicamente quando você faz uma query usando a view; Usado quando você possui uma query muito complexa que você precisa executar muitas vezes em diferentes momentos; Também pode ser usado como uma maneira de limitar o acesso a certas tabelas (em conjunto com as regras de acesso); Usado geralmente para select, mas pode ser usado para insert, update e delete também, basta tomar cuidados com muitas tables e funções de grupo; Representa uma espécie de visão/ponto de vista dos dados; Pode ser usado em conjunto com outras queries/cláusulas. CREATE [OR REPLACE] VIEW view_name as \u0026lt;query\u0026gt;; #para selecionar os dados da view SELECT * FROM view_name; Cláusulas WHERE BETWEEN retorna os dados que estão entre um intervalo; o valor menor precisa sempre vir antes. SELECT id FROM users WHERE id BETWEEN 10 AND 100; #com numeros SELECT insert_date FROM users WHERE insert_date BETWEEN \u0026#39;2005-01-04\u0026#39; AND \u0026#39;2022-01-03\u0026#39;; #com datas SELECT name FROM users WHERE name BETWEEN \u0026#39;Ana\u0026#39; AND \u0026#39;Joana\u0026#39;; #com strings LIKE busca por padrões em strings; possui dois caracteres de substituição (coringas): % substitui nenhum ou vários caracteres e _ substitui exatamente 1 caractere. SELECT name FROM users WHERE name LIKE \u0026#39;%Ana%\u0026#39;; #pega nomes que possuem Ana SELECT name FROM users WHERE name LIKE \u0026#39;_ia\u0026#39;; #pega nomes que possuem 3 letras e a primeira pode ser qualquer uma e as duas ultimas sao ia IN Filtra dados que estão em uma lista de valores. SELECT id FROM users WHERE id IN (1, 2, 3, 5); IS NULL pega os dados que são null; lembre-se que NULL é diferente de \u0026rsquo; \u0026rsquo; (vazio). SELECT title FROM movies WHERE gender IS NULL; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-119-5fdaadbed9je/","summary":"\u003ch3 id=\"índice\"\u003eÍndice\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eestrutura de dados que permite queries mais velozes;\u003c/li\u003e\n\u003cli\u003enão é necessário criar, mas para aumentar a perfomance, é\nrecomendado;\u003c/li\u003e\n\u003cli\u003eé criado automaticamente quando você seta alguma coluna como PK ou\nUNIQUE, pois devido ao seu formato, ele garante que os dados não\nsejam repetidos;\u003c/li\u003e\n\u003cli\u003eDeixa mais rápido as pesquisas(queries), pois utilizam uma estrutura\nque já deixa os dados já organizados e linkados, como uma B-tree.\nCom isso, caso você não possua indices, ao fazer um select o mysql\nfará um FULL TABLE SCAN, ou seja, percorrerá todos os dados pegando\naqueles que foram selecionados e filtrados;\u003c/li\u003e\n\u003cli\u003eNão é necessário selecionar o índice manualmente, ao fazer um select\no mysql vai automaticamente usar o índice, caso ele veja que será\nmais rápido;\u003c/li\u003e\n\u003cli\u003eVocê pode usar com cláusulas Where;\u003c/li\u003e\n\u003cli\u003eAo fazer um update, insert ou delete na table, o indice será\natualizado também.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE [UNIQUE] INDEX name ON table(column);\n\n#O unique é usado geralmente para PK e UNIQUE columns, sendo assim, geralmente não é usado\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"view\"\u003eView\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eArmazena uma query;\u003c/li\u003e\n\u003cli\u003eDados são gerados dinamicamente quando você faz uma query usando a\nview;\u003c/li\u003e\n\u003cli\u003eUsado quando você possui uma query muito complexa que você precisa\nexecutar muitas vezes em diferentes momentos;\u003c/li\u003e\n\u003cli\u003eTambém pode ser usado como uma maneira de limitar o acesso a certas\ntabelas (em conjunto com as regras de acesso);\u003c/li\u003e\n\u003cli\u003eUsado geralmente para select, mas pode ser usado para insert, update\ne delete também, basta tomar cuidados com muitas tables e funções de\ngrupo;\u003c/li\u003e\n\u003cli\u003eRepresenta uma espécie de visão/ponto de vista dos dados;\u003c/li\u003e\n\u003cli\u003ePode ser usado em conjunto com outras queries/cláusulas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE [OR REPLACE] VIEW view_name as \u0026lt;query\u0026gt;;\n\n#para selecionar os dados da view\nSELECT * FROM view_name;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"cláusulas-where\"\u003eCláusulas WHERE\u003c/h3\u003e\n\u003ch4 id=\"between\"\u003eBETWEEN\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eretorna os dados que estão entre um intervalo;\u003c/li\u003e\n\u003cli\u003eo valor menor precisa sempre vir antes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT id FROM users WHERE id BETWEEN 10 AND 100; #com numeros\nSELECT insert_date FROM users WHERE insert_date BETWEEN \u0026#39;2005-01-04\u0026#39; AND \u0026#39;2022-01-03\u0026#39;; #com datas\nSELECT name FROM users WHERE name BETWEEN \u0026#39;Ana\u0026#39; AND \u0026#39;Joana\u0026#39;; #com strings\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"like\"\u003eLIKE\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebusca por padrões em strings;\u003c/li\u003e\n\u003cli\u003epossui dois caracteres de substituição (coringas): % substitui\nnenhum ou vários caracteres e _ substitui exatamente 1 caractere.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT name FROM users WHERE name LIKE \u0026#39;%Ana%\u0026#39;; #pega nomes que possuem Ana\nSELECT name FROM users WHERE name LIKE \u0026#39;_ia\u0026#39;; #pega nomes que possuem 3 letras e a primeira pode ser qualquer uma e as duas ultimas sao ia \n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"in\"\u003eIN\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFiltra dados que estão em uma lista de valores.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT id FROM users WHERE id IN (1, 2, 3, 5);\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"is-null\"\u003eIS NULL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epega os dados que são null;\u003c/li\u003e\n\u003cli\u003elembre-se que NULL é diferente de \u0026rsquo; \u0026rsquo; (vazio).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT title FROM movies WHERE gender IS NULL;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 119"},{"content":"sobre algoritmos em si, então irei colocar aqui algumas anotações simples que fiz.\nPorcentagens se você quer saber um preço já com o desconto faça:\npreço * (1 \u0026mdash; porcentagem)\nou seja se você quer ver quando vai dar 100 reais com 10% de desconto você fará:\n100 * (1\u0026ndash;0.1)\n100 * 0.9\n90\nagora caso você queira saber o preço do desconto faça:\npreço * porcentagem\nentão o mesmo exemplo a cima\n100 * 0.1\n10\nLógica se a == b e b == c então c == a\nTriângulos para ser um triangulo um lado deve ser menor do que a soma dos outros\nequilátero → todos os lados iguais\nisósceles → dois lados iguais\nescaleno → nenhum lado igual\nAno Bissexto um ano bissexto é aquele que pode ser dividido por 400 ou por 4 e não por 100\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-12-ba4eb6c0d27a/","summary":"\u003cp\u003esobre algoritmos em si, então irei colocar aqui algumas anotações\nsimples que fiz.\u003c/p\u003e\n\u003ch3 id=\"porcentagens\"\u003ePorcentagens\u003c/h3\u003e\n\u003cp\u003ese você quer saber um preço já com o desconto faça:\u003c/p\u003e\n\u003cp\u003epreço * (1 \u0026mdash; porcentagem)\u003c/p\u003e\n\u003cp\u003eou seja se você quer ver quando vai dar 100 reais com 10% de desconto\nvocê fará:\u003c/p\u003e\n\u003cp\u003e100 * (1\u0026ndash;0.1)\u003c/p\u003e\n\u003cp\u003e100 * 0.9\u003c/p\u003e\n\u003cp\u003e90\u003c/p\u003e\n\u003cp\u003eagora caso você queira saber o preço do desconto faça:\u003c/p\u003e\n\u003cp\u003epreço * porcentagem\u003c/p\u003e\n\u003cp\u003eentão o mesmo exemplo a cima\u003c/p\u003e","title":"Ciências da computação dia 12"},{"content":"Filas É uma lista restrita; FIFO(first in first out); Operações: Insere no fim e remove do começo; Segue a mesma ideia da pilha; Para atualizar a posição do primeiro da lista, ao invés de você ficar passando todos os valores para frente, você pode usar uma formula como essa ((fim + 1)%tamanho) para saber qual a posição do próximo elemento, sem a necessidade de usar ifs. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-120-764f3b6b7e79/","summary":"\u003ch3 id=\"filas\"\u003eFilas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eÉ uma lista restrita;\u003c/li\u003e\n\u003cli\u003eFIFO(first in first out);\u003c/li\u003e\n\u003cli\u003eOperações: Insere no fim e remove do começo;\u003c/li\u003e\n\u003cli\u003eSegue a mesma ideia da pilha;\u003c/li\u003e\n\u003cli\u003ePara atualizar a posição do primeiro da lista, ao invés de você\nficar passando todos os valores para frente, você pode usar uma\nformula como essa ((fim + 1)%tamanho) para saber qual a posição do\npróximo elemento, sem a necessidade de usar ifs.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 120"},{"content":"Marketing direciona a empresa para: como fazer o produto, para quem fazer o produto, como apresentar o produto, etc.; Marketing ajudar a fazer mais vendas; a ferramenta dos 4ps ajuda a entender melhor os clientes e fazer uma venda mais assertiva. Mix de marketing conjunto de ferramentas usadas para uma empresa conseguir uma resposta de deseja no mercado alvo; 4ps. 4ps produto bens e serviços que a empresa oferece; pontos: variedade, design, características, embalagem, serviço, etc. preço quantidade de dinheiro que os clientes vão ter que pagar; pontos: lista de peças, desconto, subsídios, prazo de pagamento, etc. praça atividades que fazer os serviço/produto ficar disponível; pontos: canais, locais, estoque, transporte, logística, etc. promoção atividades que comunica as pessoas sobre o produto/serviço; pontos: propaganda, vendas pessoais, relações públicas, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-121-fh17igd1717g/","summary":"\u003ch3 id=\"marketing\"\u003eMarketing\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edireciona a empresa para: como fazer o produto, para quem fazer o\nproduto, como apresentar o produto, etc.;\u003c/li\u003e\n\u003cli\u003eMarketing ajudar a fazer mais vendas;\u003c/li\u003e\n\u003cli\u003ea ferramenta dos 4ps ajuda a entender melhor os clientes e fazer uma\nvenda mais assertiva.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"mix-de-marketing\"\u003eMix de marketing\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econjunto de ferramentas usadas para uma empresa conseguir uma\nresposta de deseja no mercado alvo;\u003c/li\u003e\n\u003cli\u003e4ps.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"4ps\"\u003e4ps\u003c/h3\u003e\n\u003ch4 id=\"produto\"\u003eproduto\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebens e serviços que a empresa oferece;\u003c/li\u003e\n\u003cli\u003epontos: variedade, design, características, embalagem, serviço, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"preço\"\u003epreço\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equantidade de dinheiro que os clientes vão ter que pagar;\u003c/li\u003e\n\u003cli\u003epontos: lista de peças, desconto, subsídios, prazo de pagamento,\netc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"praça\"\u003epraça\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eatividades que fazer os serviço/produto ficar disponível;\u003c/li\u003e\n\u003cli\u003epontos: canais, locais, estoque, transporte, logística, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"promoção\"\u003epromoção\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eatividades que comunica as pessoas sobre o produto/serviço;\u003c/li\u003e\n\u003cli\u003epontos: propaganda, vendas pessoais, relações públicas, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 121"},{"content":"Casos de uso nunca pense na UI ao fazer os casos de uso, pense de uma forma mais genérica ao invés de dizer: \u0026ldquo;clica no botão\u0026rdquo;, \u0026ldquo;vai na aba x\u0026rdquo;, etc.; pense em o que é feito, ao invés de como é feito; Caso de uso caixa preta não descreve o funcionamento do sistema; diz apenas as responsabilidades do sistema (como cadastrar usuário, gerenciar estoque, etc.). Como identificar casos de uso 1 \u0026mdash; escolher fronteiras do sistema;\n2 \u0026mdash; identificar os atores;\n3 \u0026mdash; identificar os objetivos de cada ator;\n4 \u0026mdash; definir os casos para os objetivos.\nEm um diagrama, um escopo/restrições podem ser vistas quando há um outro agente que auxilia em uma interação, nesse caso o ator software, aqui ele representa um software de terceiro que realiza alguma operação que o nosso sistema não deve fazer.\nIsso também pode ser visto quando há uma pré-condição relacionada a ser conectar com algo, estabelecer comunicação com algo, etc.\nEscopo conjunto de objetivos dos usuários que serão atendidos. Objetivo uma pequena frase que descreve o que o usuário faz; geralmente um objetivo se torna um caso de uso; em casos que um objetivo possui o conectivo \u0026ldquo;e\u0026rdquo;, haverá mais de um caso de uso para esse; operações de CRUD(criar, selecionar, atualizar e deletar), de vários objetivos, se tornam um único caso de uso, exemplo: criar, selecionar, atualizar e deletar usuário, se torna gerenciar usuário. Modularidade assim como em uma arquitetura de um sistema, podemos juntar casos de uso por fatores comum, criando módulos; ajuda a gerenciar melhor os casos que temos. Monolito da mesma forma que em uma arquitetura de software, podemos deixar todos os casos de uso juntos, como um grande monolito. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-122-2942f47igi859/","summary":"\u003ch3 id=\"casos-deuso\"\u003eCasos de uso\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enunca pense na UI ao fazer os casos de uso, pense de uma forma mais\ngenérica ao invés de dizer: \u0026ldquo;clica no botão\u0026rdquo;, \u0026ldquo;vai na aba x\u0026rdquo;, etc.;\u003c/li\u003e\n\u003cli\u003epense em o que é feito, ao invés de como é feito;\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"caso-de-uso-caixapreta\"\u003eCaso de uso caixa preta\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enão descreve o funcionamento do sistema;\u003c/li\u003e\n\u003cli\u003ediz apenas as responsabilidades do sistema (como cadastrar usuário,\ngerenciar estoque, etc.).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"como-identificar-casos-deuso\"\u003eComo identificar casos de uso\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; escolher fronteiras do sistema;\u003c/p\u003e","title":"Ciências da computação dia 122"},{"content":"Interface Serve como um contrato; Define o que as classes que as estendem devem implementar, obrigatoriamente. List interface que define como implementar a List; subinterface do java collections; implementações: List, ArrayList, LinkedList, Vector, etc.; Não é necessário setar o tamanho ao instanciar; Diferentes implementações podem diferir nos algoritmos por trás; import java.util.ArrayList; //.... ArrayList\u0026lt;Integer\u0026gt; numeros = new ArrayList\u0026lt;Integer\u0026gt;(); //Integer é uma classe java, definida para valores inteiros ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-123-30b65786def8/","summary":"\u003ch3 id=\"interface\"\u003eInterface\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eServe como um contrato;\u003c/li\u003e\n\u003cli\u003eDefine o que as classes que as estendem devem implementar,\nobrigatoriamente.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"list\"\u003eList\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003einterface que define como implementar a List;\u003c/li\u003e\n\u003cli\u003esubinterface do java collections;\u003c/li\u003e\n\u003cli\u003eimplementações: List, ArrayList, LinkedList, Vector, etc.;\u003c/li\u003e\n\u003cli\u003eNão é necessário setar o tamanho ao instanciar;\u003c/li\u003e\n\u003cli\u003eDiferentes implementações podem diferir nos algoritmos por trás;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eimport java.util.ArrayList;\n//....\nArrayList\u0026lt;Integer\u0026gt; numeros = new ArrayList\u0026lt;Integer\u0026gt;();\n//Integer é uma classe java, definida para valores inteiros\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 123"},{"content":"Include Ao executar o caso A o caso B, necessariamente, é executado.\nExtend Ao executar o caso A você pode, ou não, executar o caso B\nGeneralização Vendedor e secretaria fazem tudo que um funcionário faz\nFronteiras o retângulo define as fronteiras do sistema (só o que o sistema faz).\nComunicação define a comunicação entre as partes.\nAtor(outra notação) Nota: Um bom diagrama mostra as fronteiras e como o sistema é usado.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/","summary":"\u003ch3 id=\"include\"\u003eInclude\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_195.png\"\u003e\u003c/p\u003e\n\u003cp\u003eAo executar o caso A o caso B, necessariamente, é executado.\u003c/p\u003e\n\u003ch3 id=\"extend\"\u003eExtend\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_196.png\"\u003e\u003c/p\u003e\n\u003cp\u003eAo executar o caso A você pode, ou não, executar o caso B\u003c/p\u003e\n\u003ch3 id=\"generalização\"\u003eGeneralização\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_197.png\"\u003e\u003c/p\u003e\n\u003cp\u003eVendedor e secretaria fazem tudo que um funcionário faz\u003c/p\u003e\n\u003ch3 id=\"fronteiras\"\u003eFronteiras\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_198.png\"\u003e\u003c/p\u003e\n\u003cp\u003eo retângulo define as fronteiras do sistema (só o que o sistema faz).\u003c/p\u003e\n\u003ch3 id=\"comunicação\"\u003eComunicação\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_199.png\"\u003e\u003c/p\u003e\n\u003cp\u003edefine a comunicação entre as partes.\u003c/p\u003e\n\u003ch3 id=\"atoroutra-notação\"\u003eAtor(outra notação)\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-124-aj5j7fiicfh3a/image_200.png\"\u003e\u003c/p\u003e\n\u003cp\u003eNota: Um bom diagrama mostra as fronteiras e como o sistema é usado.\u003c/p\u003e","title":"Ciências da computação dia 124"},{"content":"Árvore Usado para indexação (algoritmos de busca); Base T: T define o número máximo de ramificações que um nó pode ter; árvore base 0: árvore vazia; Raiz: primeiro nó; Descendentes: nós a baixo de outro nó; Descendentes diretos: nós que estão ligados logo a baixo de um nó; Altura: Maior nível da árvore(quanto maior, mais ineficiente); Nível: Distância entre a raiz e o nó (número de ligações); Arestas: linhas que interligam os nós; Folha: Nó sem filhos (descendentes); Grau do nó: número de descendentes diretos; Grau da árvore: maior grau do nó; sub-ávore: nós a partir de um nó. Árvore binária base = 2; Árvore estritamente binária: cada nó(não folha) há exatamente dois filhos; Árvore completa: quando todos os nós dos níveis estão preenchidos (ela sempre é estritamente binária); Árvore perfeitamente balanceada: Quando a árvore possui a menor altura possível para a quantidade total de nós, e são sempre preenchidos começando da esquerda ( a diferença entre a altura do nó da esquerda para o da direita é 1, sendo assim a quantidade de nós na esquerda da árvore é N/2 e da direita é N \u0026mdash; (N/2) \u0026mdash; 1 nós, onde N é o total de nós); Os compiladores utilizam muito árvores para diversas coisas, uma delas é operações aritméticas.\n(a+b/c) * (d-e*f) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-125-j2fdjb2d07d7/","summary":"\u003ch3 id=\"árvore\"\u003eÁrvore\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUsado para indexação (algoritmos de busca);\u003c/li\u003e\n\u003cli\u003eBase T: T define o número máximo de ramificações que um nó pode ter;\u003c/li\u003e\n\u003cli\u003eárvore base 0: árvore vazia;\u003c/li\u003e\n\u003cli\u003eRaiz: primeiro nó;\u003c/li\u003e\n\u003cli\u003eDescendentes: nós a baixo de outro nó;\u003c/li\u003e\n\u003cli\u003eDescendentes diretos: nós que estão ligados logo a baixo de um nó;\u003c/li\u003e\n\u003cli\u003eAltura: Maior nível da árvore(quanto maior, mais ineficiente);\u003c/li\u003e\n\u003cli\u003eNível: Distância entre a raiz e o nó (número de ligações);\u003c/li\u003e\n\u003cli\u003eArestas: linhas que interligam os nós;\u003c/li\u003e\n\u003cli\u003eFolha: Nó sem filhos (descendentes);\u003c/li\u003e\n\u003cli\u003eGrau do nó: número de descendentes diretos;\u003c/li\u003e\n\u003cli\u003eGrau da árvore: maior grau do nó;\u003c/li\u003e\n\u003cli\u003esub-ávore: nós a partir de um nó.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"árvore-binária\"\u003eÁrvore binária\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebase = 2;\u003c/li\u003e\n\u003cli\u003eÁrvore estritamente binária: cada nó(não folha) há exatamente dois\nfilhos;\u003c/li\u003e\n\u003cli\u003eÁrvore completa: quando todos os nós dos níveis estão preenchidos\n(ela sempre é estritamente binária);\u003c/li\u003e\n\u003cli\u003eÁrvore perfeitamente balanceada: Quando a árvore possui a menor\naltura possível para a quantidade total de nós, e são sempre\npreenchidos começando da esquerda ( a diferença entre a altura do nó\nda esquerda para o da direita é 1, sendo assim a quantidade de nós\nna esquerda da árvore é N/2 e da direita é N \u0026mdash; (N/2) \u0026mdash; 1 nós,\nonde N é o total de nós);\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-125-j2fdjb2d07d7/image_201.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 125"},{"content":"1. Ideia A ideia pode ser um produto ou um serviço que atende à uma necessidade ou aproveita alguma oportunidade do momento.\nPara entender melhor essa ideia, como ela deve ser moldada é preciso sondar o mercado, vendo:\npreços (matéria prima, concorrentes, etc.) clientes (quem são) quantidade de vendas(quanto eu espero q venda e porque) gastos (o que é preciso gastar para fazer ou manter esse produto no mercado) recursos (o que eu preciso pra fazer) 2. Formalização Na formalização, a ideia se transforma em um estudo mais concreto, com documentação e tudo.\nEstudo e segmentação Conhecimento do público Estruturação do mercado (marketing (4ps), previsão de vendas, etc.) Estruturação da empresa 3. Finanças/Estrutura Aqui vemos as questões monetárias e tudo que vai fazer entrar ou sair dinheiro da empresa.\nCustos (tudo que é gasto para fazer o produto, salário de operários, por exemplo, entra aqui) despesas (tudo que é gasto, mas não para fazer o produto, como salário do executivo, vale alimentação dos funcionários, etc.) receitas (previsão de vendas mês, preço, etc.) recursos margem bruta: preço do produto \u0026mdash; preço para fazer margem líquida: margem bruta \u0026mdash; despesas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-126-gd3aaee92id5a/","summary":"\u003ch3 id=\"1-ideia\"\u003e1. Ideia\u003c/h3\u003e\n\u003cp\u003eA ideia pode ser um produto ou um serviço que atende à uma necessidade\nou aproveita alguma oportunidade do momento.\u003c/p\u003e\n\u003cp\u003ePara entender melhor essa ideia, como ela deve ser moldada é preciso\nsondar o mercado, vendo:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003epreços (matéria prima, concorrentes, etc.)\u003c/li\u003e\n\u003cli\u003eclientes (quem são)\u003c/li\u003e\n\u003cli\u003equantidade de vendas(quanto eu espero q venda e porque)\u003c/li\u003e\n\u003cli\u003egastos (o que é preciso gastar para fazer ou manter esse produto no\nmercado)\u003c/li\u003e\n\u003cli\u003erecursos (o que eu preciso pra fazer)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2-formalização\"\u003e2. Formalização\u003c/h3\u003e\n\u003cp\u003eNa formalização, a ideia se transforma em um estudo mais concreto, com\ndocumentação e tudo.\u003c/p\u003e","title":"Ciências da computação dia 126"},{"content":"ArrayList Não precisa definir um tipo, você pode usar ele para diferentes tipos no mesmo objeto Switch o default não precisa de break, uma vez que não há mais casos a baixo dele Arquivos o java possui alguns objetos para a leitura e escrita de arquivos: BufferedReader, BufferedWriter, FileReader, FileWriter as funções de leitura e escrita podem levantar um erro do tipo IOException todas essas coisas podem ser importadas de java.io BufferedReader reader = new BufferedReder(new FileReader(\u0026#34;file.txt\u0026#34;)); BufferedWriter writer = new BufferedWriter(new FileWriter(\u0026#34;file.txt\u0026#34;)); #lembre-se de usar um bloco try catch para não travar o programa, caso haja # erros na execução Tratamento de exceção trata erros durante a execução sem travar o programa exemplos: dividir por zero, índice fora dos limites, problemas de conexão, falta de memória, valor numérico fora dos limites, etc. estrutura (try-catch-finally) try{ # aqui, executa o código q pode levantar uma exceção }catch(Exception e){ #aqui você pega o erro e pode trata-lo, como apresentar uma messagem #fazer outra ação, etc. #obs: é recomendado usar o tipo do erro ao invés do Exception # o Exception, captura qualquer erro }finally{ # aqui são executadas quaisquer instruções antes de terminar o bloco try-catch # mesmo que não hajam erros, o finally é executado } Alguns tipos de erros: ArithmeticException, ArrayIndexOutOfBoundException, InputMismatchException, NumberFormatException, NullPointException (esse geralmente aparece quando você tentar acessar um objeto que não foi instanciado) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-127-b2hfg0ha270b/","summary":"\u003ch3 id=\"arraylist\"\u003eArrayList\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNão precisa definir um tipo, você pode usar ele para diferentes\ntipos no mesmo objeto\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"switch\"\u003eSwitch\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo default não precisa de break, uma vez que não há mais casos a\nbaixo dele\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"arquivos\"\u003eArquivos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo java possui alguns objetos para a leitura e escrita de arquivos:\nBufferedReader, BufferedWriter, FileReader, FileWriter\u003c/li\u003e\n\u003cli\u003eas funções de leitura e escrita podem levantar um erro do tipo\nIOException\u003c/li\u003e\n\u003cli\u003etodas essas coisas podem ser importadas de java.io\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eBufferedReader reader = new BufferedReder(new FileReader(\u0026#34;file.txt\u0026#34;));\nBufferedWriter writer = new BufferedWriter(new FileWriter(\u0026#34;file.txt\u0026#34;));\n\n#lembre-se de usar um bloco try catch para não travar o programa, caso haja \n# erros na execução\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"tratamento-deexceção\"\u003eTratamento de exceção\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etrata erros durante a execução sem travar o programa\u003c/li\u003e\n\u003cli\u003eexemplos: dividir por zero, índice fora dos limites, problemas de\nconexão, falta de memória, valor numérico fora dos limites, etc.\u003c/li\u003e\n\u003cli\u003eestrutura (try-catch-finally)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etry{\n\n  # aqui, executa o código q pode levantar uma exceção\n\n}catch(Exception e){\n\n  #aqui você pega o erro e pode trata-lo, como apresentar uma messagem\n  #fazer outra ação, etc.\n\n  #obs: é recomendado usar o tipo do erro ao invés do Exception\n    # o Exception, captura qualquer erro\n\n}finally{\n  \n  # aqui são executadas quaisquer instruções antes de terminar o bloco try-catch\n  # mesmo que não hajam erros, o finally é executado\n\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eAlguns tipos de erros: ArithmeticException,\nArrayIndexOutOfBoundException, InputMismatchException,\nNumberFormatException, NullPointException (esse geralmente aparece\nquando você tentar acessar um objeto que não foi instanciado)\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 127"},{"content":"Modelagem complementar ao levamento de requisitos; maneiras de representar a solução; casos de uso, diagrama de atividades, diagrama de classes, diagrama de sequência, diagrama de estados, diagrama Entidade-relacionamento usado para facilitar a comunicação entre desenvolvedor e engenheiro de software; se preocupa com: instruções, interfaces, objetos, restrições, funções, comportamentos deve: descrever o que o cliente quer, dar base para a criação do projeto, definir os requisitos que podem ser validados depois de pronto (todo requisito precisa de um ID) Regras da modelagem alta abstração, a principio contribuir para o entendimento postergar dados de infra até a parte do projeto minimizar acoplamento agregar valor aos stakeholders deve ser simples (deve ser feito apenas o necessário) Abordagens analise estruturada (mais antigo) analise orientada a objetos obs: você pode unir as abordagens\nanalise estruturada pensa em entidades e como elas se relacionam descreve o passo a passo e como os dados trafegam analise orientada a objetos pensa em objetos e suas ações/comportamentos no sistema UML unified modelling language Modelos baseado em cenários (casos de uso) classes (diagrama de classes) comportamentais(diagrama de sequência (estados do objeto no sistema)) fluxo (modelos de dados) Diagrama de classes desenho das classes e seus relacionamentos OBS A documentação criada, deve ser passada por todos os stakeholders e incrementada com o tempo\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-127-jjd2fbc67709/","summary":"\u003ch3 id=\"modelagem\"\u003eModelagem\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecomplementar ao levamento de requisitos;\u003c/li\u003e\n\u003cli\u003emaneiras de representar a solução;\u003c/li\u003e\n\u003cli\u003ecasos de uso, diagrama de atividades, diagrama de classes, diagrama\nde sequência, diagrama de estados, diagrama Entidade-relacionamento\u003c/li\u003e\n\u003cli\u003eusado para facilitar a comunicação entre desenvolvedor e engenheiro\nde software;\u003c/li\u003e\n\u003cli\u003ese preocupa com: instruções, interfaces, objetos, restrições,\nfunções, comportamentos\u003c/li\u003e\n\u003cli\u003edeve: descrever o que o cliente quer, dar base para a criação do\nprojeto, definir os requisitos que podem ser validados depois de\npronto (todo requisito precisa de um ID)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"regras-da-modelagem\"\u003eRegras da modelagem\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ealta abstração, a principio\u003c/li\u003e\n\u003cli\u003econtribuir para o entendimento\u003c/li\u003e\n\u003cli\u003epostergar dados de infra até a parte do projeto\u003c/li\u003e\n\u003cli\u003eminimizar acoplamento\u003c/li\u003e\n\u003cli\u003eagregar valor aos stakeholders\u003c/li\u003e\n\u003cli\u003edeve ser simples (deve ser feito apenas o necessário)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"abordagens\"\u003eAbordagens\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eanalise estruturada (mais antigo)\u003c/li\u003e\n\u003cli\u003eanalise orientada a objetos\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003eobs: você pode unir as abordagens\u003c/em\u003e\u003c/p\u003e","title":"Ciências da computação dia 127"},{"content":"Diagrama de atividades complementar ao caso de uso não precisa ser usado em todos os casos de uso usado geralmente em casos de uso muito complexos representação similar a um fluxograma representa um fluxo de interação de um cenário não identifica os atores, mas através de raias (divisões verticais, ou colunas) podemos criar repartições que separação as ações por: tipo, ator, área, etc. Ponto de divisão/intercalação o ponto de divisão é usado para criar fluxos alternativos (se assemelha a um comando if). pode também ser usado com o intercalação, ou seja, juntar dois fluxos que foram separados antes pelo if Ação representa a ação que o ator vai fazer Nó inicial representa o começo do fluxo Nó final representa o fim de um fluxo podem haver mais de um Separação separa o fluxo em dois que serão executados em paralelo Junção une dois fluxos paralelos sincroniza as ações Fluxo Indica o fluxo Tempo indica prazo/tempo/período Envio de dados indica o envio de informações/sinais Recepção de dados recebe os dados enviados Loop Raias divide o diagrama em áreas Abstração você pode abstrair casos para outros diagramas e referenciar eles no diagrama principal usando esse símbolo com o nome do outro diagrama nele ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-128-0897ig3eb1fg/","summary":"\u003ch3 id=\"diagrama-de-atividades\"\u003eDiagrama de atividades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecomplementar ao caso de uso\u003c/li\u003e\n\u003cli\u003enão precisa ser usado em todos os casos de uso\u003c/li\u003e\n\u003cli\u003eusado geralmente em casos de uso muito complexos\u003c/li\u003e\n\u003cli\u003erepresentação similar a um fluxograma\u003c/li\u003e\n\u003cli\u003erepresenta um fluxo de interação de um cenário\u003c/li\u003e\n\u003cli\u003enão identifica os atores, mas através de raias (divisões verticais,\nou colunas) podemos criar repartições que separação as ações por:\ntipo, ator, área, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ponto-de-divisãointercalação\"\u003ePonto de divisão/intercalação\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-128-0897ig3eb1fg/image_204.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eo ponto de divisão é usado para criar fluxos alternativos (se\nassemelha a um comando if).\u003c/li\u003e\n\u003cli\u003epode também ser usado com o intercalação, ou seja, juntar dois\nfluxos que foram separados antes pelo if\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ação\"\u003eAção\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-128-0897ig3eb1fg/image_205.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 128"},{"content":"Percursos em árvores maneiras que você pode percorrer todos os nós de uma árvore Pré order acessa primeiro o root, depois os nós da esquerda e por fim os da direita. In Order acessa primeiro os nós da esquerda, depois o root e por fim os da direita. Pós Order acessa os da esquerda, depois os da direita e por último o root. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-128-abda4j6f9787/","summary":"\u003ch3 id=\"percursos-emárvores\"\u003ePercursos em árvores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emaneiras que você pode percorrer todos os nós de uma árvore\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pré-order\"\u003ePré order\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eacessa primeiro o root, depois os nós da esquerda e por fim os da\ndireita.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"in-order\"\u003eIn Order\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eacessa primeiro os nós da esquerda, depois o root e por fim os da\ndireita.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"pós-order\"\u003ePós Order\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eacessa os da esquerda, depois os da direita e por último o root.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 128"},{"content":"Subqueries comando select embutindo em outro select retorna um conjunto de linhas para a query principal pode ser usado: no where, como uma expressão (coluna), no lugar de uma tabela, no comando IN e no comando EXISTS #no IN SELECT numero FROM nfe WHERE numero IN ( SELECT numero FROM item_nfe WHERE quantidade \u0026gt;= 10 ); #como tabela (caso raro de acontecer) SELECT cidade.idcidade, cidade.nome, TB.qtde_bairro FROM cidade JOIN ( SELECT idcidade, COUNT(*) as qtde_bairro FROM bairro GROUP BY idcidade ) as TB ON (cidade.idcidade = TB.idcidade); #como uma coluna(expressão) SELECT descricao, valor_unitario ( SELECT AVG(valor_unitario) FROm produto ) as media FROM produto; Subquery correlata subquery que faz referência a colunas da query principal executa 1 vez para cada linha da query principal (nested loop join) #como coluna SELECT numero, data, ( SELECT SUM(quantidade * valor_unitario) FROM item_nfe JOIN produto ON (item_nfe.idproduto = produto.idproduto) WHERE item_nfe.numero = nfe.numero ) as total FROM nfe; #no EXISTS SELECT * FROM bairro WHERE EXISTS( SELECT 1 FROM ceps WHERE ceps.idbairro = bairro.idbairro AND auxiliar IS NOT NULL ); EXISTS vê se a relação devolve alguma linha SELECT 1 seta o valor 1 para cada linha retornada usado quando você não se importa com os dados em si você pode trocar o 1 por qualquer outra coisa CASE retorna dados para uma coluna Having filtra valores das resultantes das funções de grupo (já que o where não funciona) espécie de where para funções de grupo aparece depois do GROUP BY pode ser usado com os operadores do WHERE também, como o AND, OR, NOT, IS NOT NULL, BETWEEN, etc. SELECT numero, SUM(quantidade) as qtde FROM item_nfe GROUP BY numero HAVING qtde \u0026gt; 10; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-129-i8e8i5a3g3g7/","summary":"\u003ch3 id=\"subqueries\"\u003eSubqueries\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecomando select embutindo em outro select\u003c/li\u003e\n\u003cli\u003eretorna um conjunto de linhas para a query principal\u003c/li\u003e\n\u003cli\u003epode ser usado: no where, como uma expressão (coluna), no lugar de\numa tabela, no comando IN e no comando EXISTS\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#no IN\nSELECT numero\n  FROM nfe\n  WHERE numero IN (\n    SELECT numero\n      FROM item_nfe\n      WHERE quantidade \u0026gt;= 10\n  );\n\n#como tabela (caso raro de acontecer)\nSELECT cidade.idcidade, cidade.nome, TB.qtde_bairro\n  FROM cidade\n  JOIN  (\n    SELECT idcidade, COUNT(*) as qtde_bairro\n      FROM bairro\n      GROUP BY idcidade\n  ) as TB\n  ON (cidade.idcidade = TB.idcidade);\n\n#como uma coluna(expressão)\nSELECT descricao, valor_unitario (\n  SELECT AVG(valor_unitario)\n    FROm produto\n) as media\n  FROM produto;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"subquery-correlata\"\u003eSubquery correlata\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esubquery que faz referência a colunas da query principal\u003c/li\u003e\n\u003cli\u003eexecuta 1 vez para cada linha da query principal (nested loop join)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#como coluna\nSELECT numero, data, (\n  SELECT SUM(quantidade * valor_unitario)\n    FROM item_nfe\n    JOIN produto \n    ON (item_nfe.idproduto = produto.idproduto)\n    WHERE item_nfe.numero = nfe.numero\n) as total\n  FROM nfe;\n\n#no EXISTS\nSELECT * \n  FROM bairro\n  WHERE EXISTS(\n    SELECT 1\n      FROM ceps\n      WHERE ceps.idbairro = bairro.idbairro\n        AND auxiliar IS NOT NULL\n  );\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"exists\"\u003eEXISTS\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evê se a relação devolve alguma linha\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"select-1\"\u003eSELECT 1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eseta o valor 1 para cada linha retornada\u003c/li\u003e\n\u003cli\u003eusado quando você não se importa com os dados em si\u003c/li\u003e\n\u003cli\u003evocê pode trocar o 1 por qualquer outra coisa\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"case\"\u003eCASE\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretorna dados para uma coluna\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"having\"\u003eHaving\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efiltra valores das resultantes das funções de grupo (já que o where\nnão funciona)\u003c/li\u003e\n\u003cli\u003eespécie de where para funções de grupo\u003c/li\u003e\n\u003cli\u003eaparece depois do GROUP BY\u003c/li\u003e\n\u003cli\u003epode ser usado com os operadores do WHERE também, como o AND, OR,\nNOT, IS NOT NULL, BETWEEN, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT numero, SUM(quantidade) as qtde\n  FROM item_nfe\n  GROUP BY numero\n  HAVING qtde \u0026gt; 10;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 129"},{"content":"subtração e a base hexadecimal\nHexadecimal na base hexadecimal temos 16 dígitos → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F\nsendo\nA → 10\nB → 11\nC → 12\nD → 13\nE → 14\nF → 15\nSoma e conversão para decimal\npara a soma com hexa fazemos:\nexemplo:\n5C + 4D\nC + D → 12 + 13 → 25\n25\u0026ndash;16(numero da base) → 9\ndesce o 9 e sobe 1 pois a base estourou\n5 + 4 + 1(que subiu) → 10 → A\nsendo assim a resposta é\nA9\nque convertendo para decimal\nA * (16¹) + 9 * (16⁰)\n10 * 16 + 9 * 1 = 169\nOutra maneira de converter hexa para decimal\noutra maneira de converter é a mesma para binário, dessa vez trocando a multiplicação por 2 para 16\nA9\n10 * 16 = 160\n160 + 9 = 169\n5CA\n5 * 16 = 80\n80 + 12 = 92\n92 * 16 = 1472\n1472 + 10 = 1482\nconversão decimal para hexa\nfaça o mesmo algoritmo de divisões sucessivas nesse caso dividindo por 16\n120 / 16 = 7 resto (8)\n7 / 16 = 0 resto (7)\n78(hexa) = 120(decimal)\nconversão binário para hexadecimal\nsabendo que cada digito de hexa utiliza quatro bits divida o binário em blocos de 4, começando do menos significativo para o mais significativo, preenchendo com zeros caso o ultimo bloco não possua 4 dígitos\n110001001\n0001 1000 1001\nagora transforme\n1 8 9 (hexa) = 110001001(binário)\nobs:\nno caso de números com vírgula faça o mesmo para a parte inteira, mas na parte fracionada comece do mais significativo e complete com os zeros no lado direito do número\n10001,01101\n0001 0001, 0110 1000\nagora converta\n11, 68\nobs2\nnúmeros na base 8(octal, dígitos de 0\u0026ndash;7) possuem 3 bits\nsubtração de binários\npara fazer a subtração quando 1\u0026ndash;1, 0\u0026ndash;0 o resultado será 0 caso 1\u0026ndash;0 o resultado será 1, mas quando isso não for possível você pode fazer o mesmo que você faz normalmente com números na base decimal, no entanto, ao invés de passar 1 você passa 2\n101\u0026ndash;10\n1\u0026ndash;0 = 0\n0\u0026ndash;1 → empresta 2 → 2\u0026ndash;0\u0026ndash;1 = 1\n1 (emprestou para o do lado) ficou 0\nresultado:\n10\noutra maneira interessante de se fazer é a seguinte\ntoda vez que você precisar emprestar um valor, você soma a base com o valor de cima e faz a subtração e o valor do lado você subtrai 1 e faz a subtração total, exemplo em decimal:\n25\u0026ndash;19\n5\u0026ndash;9 → empresta a base → 10 + 5→ 15 → 15\u0026ndash;9 =6\n2\u0026ndash;1 → emprestou → 2\u0026ndash;1 → 1\u0026ndash;1 = 0\nresultado\n06\nagora em binário\n1001\u0026ndash;0011\n1\u0026ndash;1 = 0\n0\u0026ndash;1 → empresta a base 2- 0\u0026ndash;1 → 1\n0\u0026ndash;0 → emprestou ficou 1 → 0-1\u0026ndash;0 → empresa 2 → 2\u0026ndash;0\u0026ndash;1\u0026ndash;0 → 1\n1\u0026ndash;0 →emprestou ficou 1 → 1\u0026ndash;1- 0 → 0\nresposta 0110\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-13-972d908gei8f/","summary":"\u003cp\u003esubtração e a base hexadecimal\u003c/p\u003e\n\u003ch3 id=\"hexadecimal\"\u003eHexadecimal\u003c/h3\u003e\n\u003cp\u003ena base hexadecimal temos 16 dígitos → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,\nB, C, D, E, F\u003c/p\u003e\n\u003cp\u003esendo\u003c/p\u003e\n\u003cp\u003eA → 10\u003c/p\u003e\n\u003cp\u003eB → 11\u003c/p\u003e\n\u003cp\u003eC → 12\u003c/p\u003e\n\u003cp\u003eD → 13\u003c/p\u003e\n\u003cp\u003eE → 14\u003c/p\u003e\n\u003cp\u003eF → 15\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSoma e conversão para decimal\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003epara a soma com hexa fazemos:\u003c/p\u003e\n\u003cp\u003eexemplo:\u003c/p\u003e\n\u003cp\u003e5C + 4D\u003c/p\u003e\n\u003cp\u003eC + D → 12 + 13 → 25\u003c/p\u003e","title":"Ciências da computação dia 13"},{"content":"\nrelações:\n* * -\u0026gt; indica n:m 1 * -\u0026gt; indica 1:n é comum que os atores se tornem classes\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-130-a3ad13ce757f/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-130-a3ad13ce757f/image_217.png\"\u003e\u003c/p\u003e\n\u003cp\u003erelações:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e* * -\u0026gt; indica n:m\u003c/li\u003e\n\u003cli\u003e1 * -\u0026gt; indica 1:n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eé comum que os atores se tornem classes\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-130-a3ad13ce757f/image_218.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 130"},{"content":"Árvore de busca binária usado para buscas rápidas lado esquerdo é sempre menor que a raiz e o direito sempre maior Ao usar o In-Order você terá uma lista em ordem crescente dos valores Árvore degenerada árvore que cria um zigue-zague entre os nós ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-131-jej4e72252ah/","summary":"\u003ch3 id=\"árvore-de-buscabinária\"\u003eÁrvore de busca binária\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eusado para buscas rápidas\u003c/li\u003e\n\u003cli\u003elado esquerdo é sempre menor que a raiz e o direito sempre maior\u003c/li\u003e\n\u003cli\u003eAo usar o In-Order você terá uma lista em ordem crescente dos\nvalores\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"árvore-degenerada\"\u003eÁrvore degenerada\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eárvore que cria um zigue-zague entre os nós\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 131"},{"content":"curdate() retorna a data atual sem hora DELETE table se em uma query DELETE há mais de uma tabela (usando um JOIN, por exemplo) você deve especificar qual tabela você quer deletar (caso seja apenas uma tabela para ser deletada) fazendo: DELETE table FROM table .... ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-133-1hdc73e6cidf/","summary":"\u003ch3 id=\"curdate\"\u003ecurdate()\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretorna a data atual sem hora\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"delete-table\"\u003eDELETE table\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ese em uma query DELETE há mais de uma tabela (usando um JOIN, por\nexemplo) você deve especificar qual tabela você quer deletar (caso\nseja apenas uma tabela para ser deletada) fazendo:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eDELETE table FROM table ....\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 133"},{"content":"Classe concreta classe comum classe que pode ser instanciada como um objeto Classe abstrata serve de modelo para uma classe concreta devem sempre ser herdadas podem conter métodos abstratos e/ou métodos concretos usa a palavra chave abstract para definir se declarar um construtor você deve chama-lo no filho com o super() Método concreto método que possui lógica dentro Método abstrato método que só pode ser setado em classes abstratas apenas os headers são declarados devem sempre ser implementados nos filhos não requerem a definição dos parâmetros utilizam a palavra chave abstract também Constantes para declarar constantes basta setar as variáveis como static final Interface Especificação explicitas de um conjunto de métodos e atributos que devem ser implementados na classe que à implementa todos os métodos são abstratos não são permitidos métodos concretos é permitido que uma herança múltipla com intrfaces(classes não) interface C extends A,B {... class C implements A,B ao setar os métodos você não coloca o abstract aqui você declara apenas os headers dos métodos para os parâmetros você precisa coloca os nomes e os tipos para os atributos você pode setar valores, mas eles serão constantes para uma classe usar uma interface, ao invés do extends, você usa o implements uma interface pode extender outra Notas As classes podem usar o extends e o implements ao mesmo tempo ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-134-7i9ig5i90759/","summary":"\u003ch3 id=\"classe-concreta\"\u003eClasse concreta\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eclasse comum\u003c/li\u003e\n\u003cli\u003eclasse que pode ser instanciada como um objeto\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"classe-abstrata\"\u003eClasse abstrata\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eserve de modelo para uma classe concreta\u003c/li\u003e\n\u003cli\u003edevem sempre ser herdadas\u003c/li\u003e\n\u003cli\u003epodem conter métodos abstratos e/ou métodos concretos\u003c/li\u003e\n\u003cli\u003eusa a palavra chave \u003cem\u003e\u003cstrong\u003eabstract\u003c/strong\u003e\u003c/em\u003e para definir\u003c/li\u003e\n\u003cli\u003ese declarar um construtor você deve chama-lo no filho com o super()\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"método-concreto\"\u003eMétodo concreto\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emétodo que possui lógica dentro\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"método-abstrato\"\u003eMétodo abstrato\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emétodo que só pode ser setado em classes abstratas\u003c/li\u003e\n\u003cli\u003eapenas os headers são declarados\u003c/li\u003e\n\u003cli\u003edevem sempre ser implementados nos filhos\u003c/li\u003e\n\u003cli\u003enão requerem a definição dos parâmetros\u003c/li\u003e\n\u003cli\u003eutilizam a palavra chave \u003cem\u003e\u003cstrong\u003eabstract\u003c/strong\u003e\u003c/em\u003e também\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"constantes\"\u003eConstantes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epara declarar constantes basta setar as variáveis como \u003cem\u003e\u003cstrong\u003estatic\nfinal\u003c/strong\u003e\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"interface\"\u003eInterface\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEspecificação explicitas de um conjunto de métodos e atributos que\ndevem ser implementados na classe que à implementa\u003c/li\u003e\n\u003cli\u003etodos os métodos são abstratos\u003c/li\u003e\n\u003cli\u003enão são permitidos métodos concretos\u003c/li\u003e\n\u003cli\u003eé permitido que uma herança múltipla com intrfaces(classes não)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003einterface C extends A,B {...\nclass C implements A,B\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003eao setar os métodos você não coloca o \u003cem\u003e\u003cstrong\u003eabstract\u003c/strong\u003e\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eaqui você declara apenas os headers dos métodos\u003c/li\u003e\n\u003cli\u003epara os parâmetros você precisa coloca os nomes e os tipos\u003c/li\u003e\n\u003cli\u003epara os atributos você pode setar valores, mas eles serão constantes\u003c/li\u003e\n\u003cli\u003epara uma classe usar uma interface, ao invés do extends, você usa o\nimplements\u003c/li\u003e\n\u003cli\u003euma interface pode extender outra\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"notas\"\u003eNotas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAs classes podem usar o extends e o implements ao mesmo tempo\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 134"},{"content":"Design Thinking Usado para desenvolver novos produtos Pessoas interagem para criar coisas e resolver problemas Metodologia para estimular pessoas a pensarem Imersão \u0026mdash; Coloca as pessoas para entenderem o que será feito Ideação \u0026mdash; Pessoas jogam as ideias (Brainstorming pode ser usado) Prototipação \u0026mdash; Válida as melhores ideias Desenvolvimento \u0026mdash; Implementa as ideias Canvas Metodologia para apresentar o plano de negócios de forma objetiva Olha os principais pontos do plano Proposta de valor é um dos principais pontos \u0026mdash; aqui você indica o que seu produto agrega para o público Isso se transforma em uma espécie de tabela ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-134-992067360fi5/","summary":"\u003ch3 id=\"design-thinking\"\u003eDesign Thinking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUsado para desenvolver novos produtos\u003c/li\u003e\n\u003cli\u003ePessoas interagem para criar coisas e resolver problemas\u003c/li\u003e\n\u003cli\u003eMetodologia para estimular pessoas a pensarem\u003c/li\u003e\n\u003c/ul\u003e\n\u003col\u003e\n\u003cli\u003eImersão \u0026mdash; Coloca as pessoas para entenderem o que será feito\u003c/li\u003e\n\u003cli\u003eIdeação \u0026mdash; Pessoas jogam as ideias (Brainstorming pode ser usado)\u003c/li\u003e\n\u003cli\u003ePrototipação \u0026mdash; Válida as melhores ideias\u003c/li\u003e\n\u003cli\u003eDesenvolvimento \u0026mdash; Implementa as ideias\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"canvas\"\u003eCanvas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMetodologia para apresentar o plano de negócios de forma objetiva\u003c/li\u003e\n\u003cli\u003eOlha os principais pontos do plano\u003c/li\u003e\n\u003cli\u003eProposta de valor é um dos principais pontos \u0026mdash; aqui você indica o\nque seu produto agrega para o público\u003c/li\u003e\n\u003cli\u003eIsso se transforma em uma espécie de tabela\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://digital.sebraers.com.br/blog/estrategia/business-model-canvas-como-construir-seu-modelo-de-negocio/\\\"\u003eSEBRAE\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-134-992067360fi5/image_219.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 134"},{"content":" Java Permite você usar o extends e o implements ao mesmo tempo; É Possível definir uma variável com o tipo referente a interface (isso é útil quando a subclasse não tem métodos específicos); Pense em usar classes abstratas quando você precisa definir métodos concreto e/ou possui atributos. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-136-i14hc89a74da9/","summary":"\u003cul\u003e\n\u003cli\u003eJava Permite você usar o extends e o implements ao mesmo tempo;\u003c/li\u003e\n\u003cli\u003eÉ Possível definir uma variável com o tipo referente a interface\n(isso é útil quando a subclasse não tem métodos específicos);\u003c/li\u003e\n\u003cli\u003ePense em usar classes abstratas quando você precisa definir métodos\nconcreto e/ou possui atributos.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 136"},{"content":"Master-Detail abstração em que classes com relacionamento 1:N, você desmembra a o item em outra classe (Detail) Levantamento de requisitos arte de extrair os problemas dos stakeholders uma boa maneira de levantar requisitos é entender como o sistema é hoje Lista de requisitos a linguagem deve ser não técnica, para todos os stakeholders entenderem Brown paper \u0026mdash; White paper técnica antiga maneira mais fácil de vender um sistema coloca o sistema atual em um papel marrom e o novo em um branco, assim o cliente verá o antigo como se fosse algo velho e ruim Lista de serviços apresenta as atividades que são feitas não precisa ser só em software Mini especificação breve descrição de um serviço e/ou objeto bom para pegar regras de negócio Casos de uso completo ao usar o \u0026ldquo;-\u0026rdquo; nas extensões, estamos dizendo que tal extensão cabe de x até y (x-y), além disso também podem ser adicionadas letras para vários casos, 1\u0026ndash;10a, 1\u0026ndash;10b, etc. Nível de sub-função sub-funções de um caso de uso Diagrama de atividade descreve graficamente o caso de uso Herança (diagrama de classes) Dependência (Diagrama de classes) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-137-ah6c02e85ijd/","summary":"\u003ch3 id=\"master-detail\"\u003eMaster-Detail\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eabstração em que classes com relacionamento 1:N, você desmembra a o\nitem em outra classe (Detail)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"levantamento-de-requisitos\"\u003eLevantamento de requisitos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003earte de extrair os problemas dos stakeholders\u003c/li\u003e\n\u003cli\u003euma boa maneira de levantar requisitos é entender como o sistema é\nhoje\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"lista-de-requisitos\"\u003eLista de requisitos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ea linguagem deve ser não técnica, para todos os stakeholders\nentenderem\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"brown-paperwhitepaper\"\u003eBrown paper \u0026mdash; White paper\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etécnica antiga\u003c/li\u003e\n\u003cli\u003emaneira mais fácil de vender um sistema\u003c/li\u003e\n\u003cli\u003ecoloca o sistema atual em um papel marrom e o novo em um branco,\nassim o cliente verá o antigo como se fosse algo velho e ruim\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"lista-deserviços\"\u003eLista de serviços\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eapresenta as atividades que são feitas\u003c/li\u003e\n\u003cli\u003enão precisa ser só em software\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"mini-especificação\"\u003eMini especificação\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebreve descrição de um serviço e/ou objeto\u003c/li\u003e\n\u003cli\u003ebom para pegar regras de negócio\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"casos-de-usocompleto\"\u003eCasos de uso completo\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eao usar o \u0026ldquo;-\u0026rdquo; nas extensões, estamos dizendo que tal extensão cabe\nde x até y (x-y), além disso também podem ser adicionadas letras\npara vários casos, 1\u0026ndash;10a, 1\u0026ndash;10b, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"nível-de-sub-função\"\u003eNível de sub-função\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esub-funções de um caso de uso\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"diagrama-de-atividade\"\u003eDiagrama de atividade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edescreve graficamente o caso de uso\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"herança-diagrama-declasses\"\u003eHerança (diagrama de classes)\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-137-ah6c02e85ijd/image_220.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 137"},{"content":"Árvores AVL Árvore de busca binária balanceada balanceada com respeito a altura das sub-arvores altura maxima entre sub-arvores é de +- 1 (1 ≤ |hL \u0026mdash; hR| ≥ -1) Para inserir nessa árvore, usamos o mesmo algoritmo das árvores de busca binária, depois checamos o balanceamento, caso esteja desbalanceado, rotacionamos o primeiro nó que quebrou o balanceamento. Para remover é quase a mesma coisa de inserir, só que dessa vez você aplica a rotação contrária. Rotações LL (left-left) LR (left-right) RR (right-right) RL (right-left) Nota: LR é o mesmo que LL e depois RR ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-138-762g66b20i29a/","summary":"\u003ch3 id=\"árvores-avl\"\u003eÁrvores AVL\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eÁrvore de busca binária balanceada\u003c/li\u003e\n\u003cli\u003ebalanceada com respeito a altura das sub-arvores\u003c/li\u003e\n\u003cli\u003ealtura maxima entre sub-arvores é de +- 1 (1 ≤ |hL \u0026mdash; hR| ≥ -1)\u003c/li\u003e\n\u003cli\u003ePara inserir nessa árvore, usamos o mesmo algoritmo das árvores de\nbusca binária, depois checamos o balanceamento, caso esteja\ndesbalanceado, rotacionamos o primeiro nó que quebrou o\nbalanceamento.\u003c/li\u003e\n\u003cli\u003ePara remover é quase a mesma coisa de inserir, só que dessa vez você\naplica a rotação contrária.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo arvore\\u00a0avl\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-138-762g66b20i29a/image_222.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 138"},{"content":"PK quando há mais de uma PK, só haverá duplicatas quando a combinação delas for a mesma PK composta não pode ser definida a nível de coluna Subqueries não há problemas em usar subqueries com as mesmas tabelas, há problema apenas em queries correlatas, nesse caso use um alias pode ser alvo de tabela, do from ou do where Relacionamento Ao passar um auto relacionamento para o diagrama de estrutura de dados, você uma a PK da tabela e outra PK que você criará, gerando então uma segunda tabela N:M ao passar para o DED você cria uma terceira tabela, contendo as PKs de cada uma das outras duas, essas serão PK e FK ao mesmo tempo, sendo a referencia das FK a tabela que ela foi herdada 1:N a tabela N recebe uma coluna a mais que é a FK JOIN Inner join mostra apenas os elementos relacionados outer join mostra os elementos relacionados e os restantes da tabela da esquerda ou da direita o join sempre deve ser feito em ordem com os relacionamentos entre tabelas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-139-3ff62d9j6ejh/","summary":"\u003ch3 id=\"pk\"\u003ePK\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003equando há mais de uma PK, só haverá duplicatas quando a combinação\ndelas for a mesma\u003c/li\u003e\n\u003cli\u003ePK composta não pode ser definida a nível de coluna\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"subqueries\"\u003eSubqueries\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enão há problemas em usar subqueries com as mesmas tabelas, há\nproblema apenas em queries correlatas, nesse caso use um alias\u003c/li\u003e\n\u003cli\u003epode ser alvo de tabela, do from ou do where\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"relacionamento\"\u003eRelacionamento\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAo passar um auto relacionamento para o diagrama de estrutura de\ndados, você uma a PK da tabela e outra PK que você criará, gerando\nentão uma segunda tabela\u003c/li\u003e\n\u003cli\u003eN:M ao passar para o DED você cria uma terceira tabela, contendo as\nPKs de cada uma das outras duas, essas serão PK e FK ao mesmo tempo,\nsendo a referencia das FK a tabela que ela foi herdada\u003c/li\u003e\n\u003cli\u003e1:N a tabela N recebe uma coluna a mais que é a FK\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"join\"\u003eJOIN\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInner join mostra apenas os elementos relacionados\u003c/li\u003e\n\u003cli\u003eouter join mostra os elementos relacionados e os restantes da tabela\nda esquerda ou da direita\u003c/li\u003e\n\u003cli\u003eo join sempre deve ser feito em ordem com os relacionamentos entre\ntabelas\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 139"},{"content":"exemplo:\n123332135 % 10 = 5\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-14-1cg90idb80fca/","summary":"\u003cp\u003eexemplo:\u003c/p\u003e\n\u003cp\u003e123332135 % 10 = 5\u003c/p\u003e","title":"Ciências da computação dia 14"},{"content":"Qualquer valor concatenado com uma String vira uma string em java.\nPodemos acessar constantes das interfaces usando: Interface.constante.\nclasses abstratas podem herdar de classes concretas.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-140-27ehf3326h76/","summary":"\u003cp\u003eQualquer valor concatenado com uma String vira uma string em java.\u003c/p\u003e\n\u003cp\u003ePodemos acessar constantes das interfaces usando: Interface.constante.\u003c/p\u003e\n\u003cp\u003eclasses abstratas podem herdar de classes concretas.\u003c/p\u003e","title":"Ciências da computação dia 140"},{"content":"Bem, após um tempo de férias, minhas aulas finalmente voltaram. Para muitos esse momento foi um desespero, para mim um alívio. Pode parecer meio esquisito, mas realmente estava muito ansioso para voltar à faculdade e entrar nas novas matérias 🤓.\nNo primeiro dia, tivemos aula de engenharia de software. Diferentemente do semestre passado, dessa vez iremos focar em metodologias e uma visão mais prática da matéria.\nNessa aula tivemos uma breve apresentação da matéria e uma pequena revisão, veja a baixo algumas notas que fiz nessa aula.\nengenharia de software → define métodos, técnicas, especificações para desenvolver um software com agilidade e qualidade.\nEstudo de viabilidade → nos diz se faz sentido e vale a pena criar e implantar o software.\nPlanejamento do projeto → define um passo-a-passo para alcançar o sistema final.\nGestão de risco → define-se estratégias para caso algo dê errado durante os passos do projeto.\nMétricas → índices que podem dizer sobre a qualidade do software.\nCMMI → certificação de qualidade para empresas de tecnologia (como a ISO). Essa organização cria diretrizes de como agilizar processos.\nDiagrama de classes no diagrama de classes métodos/atributos públicos são representados com um sinal de + e os privados com -. associação representa uma relação N:M. agregação representa uma relação 1:N da qual, a ligação entre o 1 e o N pode ser redefinido e ligado com outra classe N ou outra classe 1. composição representa uma relação 1:N da qual, ao contrário da agregação, aqui há exclusividade entre as ligações, assim como, por exemplo, ligação entre cliente e produto. O Objetivo do teste de software é encontrar erros.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-141-ibehg7aha8d2/","summary":"\u003cp\u003eBem, após um tempo de férias, minhas aulas finalmente voltaram. Para\nmuitos esse momento foi um desespero, para mim um alívio. Pode parecer\nmeio esquisito, mas realmente estava muito ansioso para voltar à\nfaculdade e entrar nas novas matérias 🤓.\u003c/p\u003e\n\u003cp\u003eNo primeiro dia, tivemos aula de engenharia de software. Diferentemente\ndo semestre passado, dessa vez iremos focar em metodologias e uma visão\nmais prática da matéria.\u003c/p\u003e\n\u003cp\u003eNessa aula tivemos uma breve apresentação da matéria e uma pequena\nrevisão, veja a baixo algumas notas que fiz nessa aula.\u003c/p\u003e","title":"Ciências da computação dia 141"},{"content":"No segundo dia de volta às aulas, tivemos organização de computadores com foco em memórias. Aqui estão algumas notas:\nA RAM perde memória com o tempo.\nentre 1.7 e 0.8V não é considerado nenhum nível lógico.\nA parte da BIOS na memória principal é volátil.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-142-cf333bed97fc/","summary":"\u003cp\u003eNo segundo dia de volta às aulas, tivemos organização de computadores\ncom foco em memórias. Aqui estão algumas notas:\u003c/p\u003e\n\u003cp\u003eA RAM perde memória com o tempo.\u003c/p\u003e\n\u003cp\u003eentre 1.7 e 0.8V não é considerado nenhum nível lógico.\u003c/p\u003e\n\u003cp\u003eA parte da BIOS na memória principal é volátil.\u003c/p\u003e","title":"Ciências da computação dia 142"},{"content":"linguagens formais → maneira de descrever regras gramaticais de uma linguagem.\ngrafos → diferente das árvores, os grafos representam regras para algo.\nlinguagem → qualquer meio sistemático capaz de comunicar qualquer coisa a partir de qualquer meio.\nformal → meio definido por regras.\nautômato →maquina que funciona de forma automática. Nesse contexto, os grafos são autômatos, uma vez que, não importa se alguém sabe ou não as regras de uma linguagem, apenas seguindo o grafo é capaz de dizer seu uma palavra é válida ou não de forma automática. Em um contexto mais geral, um robô pode ser considerado um autômato, uma vez que ele seguirá apenas o que foi anteriormente programado, também de forma automática.\nalfabeto → conjunto de símbolos que pertencem à uma linguagem. Exemplo:{0,1}.\ncadeia → sequência de símbolos. Exemplo: 0101010000101010.\nautômatos finitos modelo computacional com quantidade limitada de estados; pode ser representado por tabelas também; pode ser implementado com poucos recursos; caso o último símbolo seja um estado final a palavra é válida; reconhece uma linguagem; autômatos finitos determinísticos → autômato finito que há apenas um caminho entre 2 estados para cada símbolo possível.\nPartes de um autômato finito M = (Q, ∑, δ, q0, F) Q → Conjunto de estados ∑ → alfabeto δ → função de transição q0 → estado inicial (não pode haver mais de um) F → conjunto de estados finais Símbolos transições observe que, os valores ficam nas transições, não nos estados.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-143-fibfjjid7412/","summary":"\u003cp\u003e\u003cstrong\u003elinguagens formais\u003c/strong\u003e → maneira de descrever regras gramaticais de uma\nlinguagem.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003egrafos\u003c/strong\u003e → diferente das árvores, os grafos representam regras para\nalgo.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003elinguagem\u003c/strong\u003e → qualquer meio sistemático capaz de comunicar qualquer\ncoisa a partir de qualquer meio.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eformal\u003c/strong\u003e → meio definido por regras.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eautômato\u003c/strong\u003e →maquina que funciona de forma automática. Nesse contexto,\nos grafos são autômatos, uma vez que, não importa se alguém sabe ou não\nas regras de uma linguagem, apenas seguindo o grafo é capaz de dizer seu\numa palavra é válida ou não de forma \u003cem\u003eautomática\u003c/em\u003e. Em um contexto mais\ngeral, um robô pode ser considerado um autômato, uma vez que ele seguirá\napenas o que foi anteriormente programado, também de forma \u003cem\u003eautomática\u003c/em\u003e.\u003c/p\u003e","title":"Ciências da computação dia 143"},{"content":"(a+b)² = (a+b)(a+b) = a² + 2ab + b²\n(a-b)²= (a-b)(a-b) = a²-2ab+b²\n(a+b)(a-b) = a² + b² (obs, eles precisam estar na mesma ordem, a+b e a-b)\n(a+b)³ = (a+b)(a+b)² = a³+b³+3a²b + 3ab²\n(a-b)³ = (a-b)(a-b)² = a³-b³-3a²b + 3ab²\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-144-59j7fejg6ha2b/","summary":"\u003cp\u003e(a+b)² = (a+b)(a+b) = a² + 2ab + b²\u003c/p\u003e\n\u003cp\u003e(a-b)²= (a-b)(a-b) = a²-2ab+b²\u003c/p\u003e\n\u003cp\u003e(a+b)(a-b) = a² + b² (obs, eles precisam estar na mesma ordem, a+b e\na-b)\u003c/p\u003e\n\u003cp\u003e(a+b)³ = (a+b)(a+b)² = a³+b³+3a²b + 3ab²\u003c/p\u003e\n\u003cp\u003e(a-b)³ = (a-b)(a-b)² = a³-b³-3a²b + 3ab²\u003c/p\u003e","title":"Ciências da computação dia 144"},{"content":"DCL segurança do banco de dados; criação de usuários e ajuste de privilégios que eles possuem. DTL transação do banco de dados; seta um bloco de transação e, caso algo aconteça no meio da transação, há a possibilidade de reverter, evitando inconsistências. Parâmetros durante a instalação do banco de dados,é necessário configurar alguns parâmetros para que o banco se encaixe na máquina usada, e a aplicação da qual usará o banco. Procedure funções que podem, ou não, retornar algo; pode possuir parâmetros de entrada e/ou saída. Function Função que retorna algo. Trigger procedure que está ligada à uma tabela; trabalha com eventos: Insert, update e delete; pode ser usado para criar logs/histórico. Backup incremental apenas dados que foram modificados após um backup anterior são salvos. Backup quente backup feito com o banco em funcionamento. Backup frio backup que é feito apenas quando o banco está desligado. Banco de dados formado por processos e dados; recomendável usar em um servidor diferente do servidor do qual a aplicação está rodando; ao fazer queries select no banco, além dos dados requisitados, ele também salva alguns dados do entorno na memória para deixar uma query futura mais rápida. Tablespace maneira de fazer um track de onde os dados vão ser salvos/lidos; reparte dados em múltiplos discos. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-145-3d5h3j5dg57e/","summary":"\u003ch4 id=\"dcl\"\u003eDCL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esegurança do banco de dados;\u003c/li\u003e\n\u003cli\u003ecriação de usuários e ajuste de privilégios que eles possuem.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dtl\"\u003eDTL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etransação do banco de dados;\u003c/li\u003e\n\u003cli\u003eseta um bloco de transação e, caso algo aconteça no meio da\ntransação, há a possibilidade de reverter, evitando inconsistências.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"parâmetros\"\u003eParâmetros\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edurante a instalação do banco de dados,é necessário configurar\nalguns parâmetros para que o banco se encaixe na máquina usada, e a\naplicação da qual usará o banco.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"procedure\"\u003eProcedure\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003efunções que podem, ou não, retornar algo;\u003c/li\u003e\n\u003cli\u003epode possuir parâmetros de entrada e/ou saída.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"function\"\u003eFunction\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFunção que retorna algo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"trigger\"\u003eTrigger\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprocedure que está ligada à uma tabela;\u003c/li\u003e\n\u003cli\u003etrabalha com eventos: Insert, update e delete;\u003c/li\u003e\n\u003cli\u003epode ser usado para criar logs/histórico.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"backup-incremental\"\u003eBackup incremental\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eapenas dados que foram modificados após um backup anterior são\nsalvos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"backup-quente\"\u003eBackup quente\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebackup feito com o banco em funcionamento.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"backup-frio\"\u003eBackup frio\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebackup que é feito apenas quando o banco está desligado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"banco-dedados\"\u003eBanco de dados\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eformado por processos e dados;\u003c/li\u003e\n\u003cli\u003erecomendável usar em um servidor diferente do servidor do qual a\naplicação está rodando;\u003c/li\u003e\n\u003cli\u003eao fazer queries select no banco, além dos dados requisitados, ele\ntambém salva alguns dados do entorno na memória para deixar uma\nquery futura mais rápida.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tablespace\"\u003eTablespace\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emaneira de fazer um track de onde os dados vão ser salvos/lidos;\u003c/li\u003e\n\u003cli\u003ereparte dados em múltiplos discos.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 145"},{"content":"estudo de viabilidade verifica se um sistema vale a pena ser feito/implantado, ajudando na tomada de decisão e, se houver, apresenta outras soluções. o que é analisado: Como a empresa funciona: como opera, quem são os usuários, quais são as políticas, etc. Problema com o sistema apresentado: ver como o sistema atual funciona e o que pode ser melhorado nele. Objetivos e outros requisitos: requisitos novos para o sistema. Restrições: requisitos não funcionais que delimitam o sistema. Alternativas possíveis: outros sistema que podem anteder o problema (o próprio sistema atual pode se encaixar nisso). Vantagens e Desvantagens das alternativas. questões que podem ser feitas: O que acontece se o sistema não for implementado? Quais os problemas atuais? É necessário novas tecnologias/habilidades? estrutura PLECES: Performance: tempo de resposta adequado. Informação: sistema gera informações úteis. Economia: sistema, economicamente, vale a pena. Controle: Controle de segurança. Eficiência: sistema usa de todos os recursos disponíveis. Serviços: sistema é flexível e confiável. Tipos de viabilidade: econômica: o quanto custará e o quanto dará de retorno. operacional: a tecnologia apresenta alguma barreira ao usuário. técnica: há tecnologias para implementar o sistema. Tipos de custos: de desenvolvimento: pessoas, software, hardware, instalação do sistema, treinamento, etc. operacionais(contínuos): manutenção, salários, etc. fixo: aluguel, salários, luz, etc. variável: servidores, manutenção, serviço de terceiros, etc. Tipos de benefícios: tangíveis: os quais você consegue ver os valores, como aumento de produção e redução de despesas. intangíveis: os quais você não consegue medir diretamente, como satisfação do cliente, melhor gestão, etc. técnicas para análises de custo x benefício: Payback: se e em quanto tempo haverá o retorno financeiro, baseando a análise se é melhor investir o dinheiro em renda fixa ou no projeto. valor líquido atual: subtrai os benefícios dos custos atuais, se for negativo haverá prejuízo. ROI (Análise de retorno dos investimentos): semelhante ao VLA, mas dessa vez pensa no investimento inicial e diz qual dá mais retorno. matriz da análise de viabilidade: maneira de comparar todos as técnicas acima usando uma matriz. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-146-a6g4jb262ecj/","summary":"\u003ch3 id=\"estudo-de-viabilidade\"\u003eestudo de viabilidade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003everifica se um sistema vale a pena ser feito/implantado, ajudando na\ntomada de decisão e, se houver, apresenta outras soluções.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"o-que-é-analisado\"\u003eo que é analisado:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eComo a empresa funciona: como opera, quem são os usuários, quais são\nas políticas, etc.\u003c/li\u003e\n\u003cli\u003eProblema com o sistema apresentado: ver como o sistema atual\nfunciona e o que pode ser melhorado nele.\u003c/li\u003e\n\u003cli\u003eObjetivos e outros requisitos: requisitos novos para o sistema.\u003c/li\u003e\n\u003cli\u003eRestrições: requisitos não funcionais que delimitam o sistema.\u003c/li\u003e\n\u003cli\u003eAlternativas possíveis: outros sistema que podem anteder o problema\n(o próprio sistema atual pode se encaixar nisso).\u003c/li\u003e\n\u003cli\u003eVantagens e Desvantagens das alternativas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"questões-que-podem-serfeitas\"\u003equestões que podem ser feitas:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eO que acontece se o sistema não for implementado?\u003c/li\u003e\n\u003cli\u003eQuais os problemas atuais?\u003c/li\u003e\n\u003cli\u003eÉ necessário novas tecnologias/habilidades?\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"estrutura-pleces\"\u003eestrutura PLECES:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance: tempo de resposta adequado.\u003c/li\u003e\n\u003cli\u003eInformação: sistema gera informações úteis.\u003c/li\u003e\n\u003cli\u003eEconomia: sistema, economicamente, vale a pena.\u003c/li\u003e\n\u003cli\u003eControle: Controle de segurança.\u003c/li\u003e\n\u003cli\u003eEficiência: sistema usa de todos os recursos disponíveis.\u003c/li\u003e\n\u003cli\u003eServiços: sistema é flexível e confiável.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-de-viabilidade\"\u003eTipos de viabilidade:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eeconômica: o quanto custará e o quanto dará de retorno.\u003c/li\u003e\n\u003cli\u003eoperacional: a tecnologia apresenta alguma barreira ao usuário.\u003c/li\u003e\n\u003cli\u003etécnica: há tecnologias para implementar o sistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-decustos\"\u003eTipos de custos:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ede desenvolvimento: pessoas, software, hardware, instalação do\nsistema, treinamento, etc.\u003c/li\u003e\n\u003cli\u003eoperacionais(contínuos): manutenção, salários, etc.\u003c/li\u003e\n\u003cli\u003efixo: aluguel, salários, luz, etc.\u003c/li\u003e\n\u003cli\u003evariável: servidores, manutenção, serviço de terceiros, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-de-benefícios\"\u003eTipos de benefícios:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etangíveis: os quais você consegue ver os valores, como aumento de\nprodução e redução de despesas.\u003c/li\u003e\n\u003cli\u003eintangíveis: os quais você não consegue medir diretamente, como\nsatisfação do cliente, melhor gestão, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"técnicas-para-análises-de-custo-x-benefício\"\u003etécnicas para análises de custo x benefício:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePayback: se e em quanto tempo haverá o retorno financeiro, baseando\na análise se é melhor investir o dinheiro em renda fixa ou no\nprojeto.\u003c/li\u003e\n\u003cli\u003evalor líquido atual: subtrai os benefícios dos custos atuais, se for\nnegativo haverá prejuízo.\u003c/li\u003e\n\u003cli\u003eROI (Análise de retorno dos investimentos): semelhante ao VLA, mas\ndessa vez pensa no investimento inicial e diz qual dá mais retorno.\u003c/li\u003e\n\u003cli\u003ematriz da análise de viabilidade: maneira de comparar todos as\ntécnicas acima usando uma matriz.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 146"},{"content":"RAM dividia em BIOS, OS, APPs e DATA. memória ROM também possui acesso aleatório. para testar a MP, é necessário testar cada bit, e caso um esteja comprometido a máquina não liga, já que a confiabilidade foi perdida. Ao ligar a máquina, a BIOS é carregada, essa, por sua vez, testa todos os dispositivos de ES, e, se tudo ocorrer bem, o OS é carregado para a MP. Uma vez que as instruções residem na memória, o tamanho da palavra delas é definido pelo tamanho do barramento de dados. HD acesso sequencial. possui diversas trilhas e essas trilhas possuem diversos blocos, geralmente de 512bytes, denominados setores. Registradores/CP/UP-DOWN registrador acumulador também é um registrador geral. contador de programa incrementa o endereço atual. ao usar tomada de decisões dentro de um software, o contador de programa, ao invés de incrementar, ele vai para a primeira função desse novo fluxo, o que consequentemente deixa a execução mais lenta. quando é feita uma divisão, o quociente fica no contador up/down, e através do multiplex ele vai para o registrador acumulador. Caso a gente queira o resto, basta pegar o resultado da operação feita pela ULA. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-147-67hcbhf4fffi/","summary":"\u003ch4 id=\"ram\"\u003eRAM\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edividia em BIOS, OS, APPs e DATA.\u003c/li\u003e\n\u003cli\u003ememória ROM também possui acesso aleatório.\u003c/li\u003e\n\u003cli\u003epara testar a MP, é necessário testar cada bit, e caso um esteja\ncomprometido a máquina não liga, já que a confiabilidade foi\nperdida.\u003c/li\u003e\n\u003cli\u003eAo ligar a máquina, a BIOS é carregada, essa, por sua vez, testa\ntodos os dispositivos de ES, e, se tudo ocorrer bem, o OS é\ncarregado para a MP.\u003c/li\u003e\n\u003cli\u003eUma vez que as instruções residem na memória, o tamanho da palavra\ndelas é definido pelo tamanho do barramento de dados.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"hd\"\u003eHD\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eacesso sequencial.\u003c/li\u003e\n\u003cli\u003epossui diversas trilhas e essas trilhas possuem diversos blocos,\ngeralmente de 512bytes, denominados setores.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"registradorescpup-down\"\u003eRegistradores/CP/UP-DOWN\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eregistrador acumulador também é um registrador geral.\u003c/li\u003e\n\u003cli\u003econtador de programa incrementa o endereço atual.\u003c/li\u003e\n\u003cli\u003eao usar tomada de decisões dentro de um software, o contador de\nprograma, ao invés de incrementar, ele vai para a primeira função\ndesse novo fluxo, o que consequentemente deixa a execução mais\nlenta.\u003c/li\u003e\n\u003cli\u003equando é feita uma divisão, o quociente fica no contador up/down, e\natravés do multiplex ele vai para o registrador acumulador. Caso a\ngente queira o resto, basta pegar o resultado da operação feita pela\nULA.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 147"},{"content":" o estado inicial não necessariamente é q0. na cadeia, a ordem dos símbolos importa. quanto mais palavras o autômato aceita, mais simples ele será, uma vez que terão menos regras à seguir. O autômato só para quando a cadeia terminal, ou seja, mesmo passando pelo estado final, se ainda houverem mais símbolos ele vai continuar. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-148-56f9d7c42246/","summary":"\u003cul\u003e\n\u003cli\u003eo estado inicial não necessariamente é q0.\u003c/li\u003e\n\u003cli\u003ena cadeia, a ordem dos símbolos importa.\u003c/li\u003e\n\u003cli\u003equanto mais palavras o autômato aceita, mais simples ele será, uma\nvez que terão menos regras à seguir.\u003c/li\u003e\n\u003cli\u003eO autômato só para quando a cadeia terminal, ou seja, mesmo passando\npelo estado final, se ainda houverem mais símbolos ele vai\ncontinuar.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 148"},{"content":"Hot swap dispositivo que pode ser conectado/desconectado enquanto a máquina está ligado. em servidores, quando é necessário adicionar um novo disco, há uma controladora HDA que faz com que os discos sejam hot swapable, implementando RAID. obs: o padrão desses discos é SAS de ≥ 10000 RPM Arquitetura Oracle v19 e v21 recebem atualizações (pelo menos até 2023). ORACLE_HOME → pasta instalação do oracle Oradata → pasta de arquivos do banco de dados network/admin → arquivo de configuração cliente/servidor(tnsnames.ora e listener.ora). padrão porta → 1521 ORACLE_HOME/database → onde ficam os parâmetros de inicialização #para mostrar os parâmetros SELECT name, value FROM v$parameters; #view com os parâmetros #ou SHOW parameter \u0026lt;parte_do_nome\u0026gt;; # para ver quais parâmetros são estáticos selecione #também a coluna ISINSTANCE_MODIFIABLE # para alterar parâmetros ALTER [SYSTEM|SESSION] SET \u0026lt;parametro\u0026gt;=\u0026lt;valor\u0026gt; SCOPE [MEMORY|SPFILE|BOTH]; #ao usar alter SESSION, as alterações só terão efeito na sessão atual #MEMORY pode ser usado para parâmetros dinâmicos e funciona na hora, #contudo ele não fica salvo para próximas sessões #SPFILE salva diretamente nos arquivos de parametros (parâmetros estáticos), #contudo é necessário reinciar a maquína para ter efeito #BOTH aplica ambos #obs: nunca edite os arquivos de parâmetros na mão #obs2: você precisa de previlégios para alterar parâmetros, geralmente, #apenas usuários SYS e SYSTEM conseguem Alguns comandos interessantes #sysdate SELECT SYSDATE FROM DUAL; #DUAL é uma tabela virtual sem valores para executar o SELECT sem erros #isso é devido ao SQL ANSI não permitir SELECT sem FROM ALTER SESSION SET NLS_DATE_FORMAT=\u0026#39;dd/mm/yyyy hh24:mi:ss\u0026#39;; #muda o formato de data para a sessão atual SELECT * FROM v$INSTANCE; #usa a view v$INSTANCE para mostrar dados sobre o banco e a máquina ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-149-da93bi10hb37/","summary":"\u003ch4 id=\"hot-swap\"\u003eHot swap\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edispositivo que pode ser conectado/desconectado enquanto a máquina\nestá ligado.\u003c/li\u003e\n\u003cli\u003eem servidores, quando é necessário adicionar um novo disco, há uma\ncontroladora HDA que faz com que os discos sejam hot swapable,\nimplementando RAID.\u003c/li\u003e\n\u003cli\u003eobs: o padrão desses discos é SAS de ≥ 10000 RPM\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"arquitetura-oracle\"\u003eArquitetura Oracle\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ev19 e v21 recebem atualizações (pelo menos até 2023).\u003c/li\u003e\n\u003cli\u003eORACLE_HOME → pasta instalação do oracle\u003c/li\u003e\n\u003cli\u003eOradata → pasta de arquivos do banco de dados\u003c/li\u003e\n\u003cli\u003enetwork/admin → arquivo de configuração\ncliente/servidor(tnsnames.ora e listener.ora).\u003c/li\u003e\n\u003cli\u003epadrão porta → 1521\u003c/li\u003e\n\u003cli\u003eORACLE_HOME/database → onde ficam os parâmetros de inicialização\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#para mostrar os parâmetros\n\nSELECT name,  value\nFROM v$parameters; #view com os parâmetros\n\n#ou\n\nSHOW parameter \u0026lt;parte_do_nome\u0026gt;;\n\n\n# para ver quais parâmetros são estáticos selecione \n#também a coluna ISINSTANCE_MODIFIABLE\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# para alterar parâmetros\n\nALTER [SYSTEM|SESSION]\nSET \u0026lt;parametro\u0026gt;=\u0026lt;valor\u0026gt;\nSCOPE [MEMORY|SPFILE|BOTH];\n\n#ao usar alter SESSION, as alterações só terão efeito na sessão atual\n\n#MEMORY pode ser usado para parâmetros dinâmicos e funciona na hora, \n#contudo ele não fica salvo para próximas sessões\n\n#SPFILE salva diretamente nos arquivos de parametros (parâmetros estáticos), \n#contudo é necessário reinciar a maquína para ter efeito\n\n#BOTH aplica ambos\n\n#obs: nunca edite os arquivos de parâmetros na mão\n#obs2: você precisa de previlégios para alterar parâmetros, geralmente, \n#apenas usuários SYS e SYSTEM conseguem\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"alguns-comandos-interessantes\"\u003eAlguns comandos interessantes\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#sysdate\nSELECT SYSDATE FROM DUAL;\n#DUAL é uma tabela virtual sem valores para executar o SELECT sem erros\n#isso é devido ao SQL ANSI não permitir SELECT sem FROM\n\nALTER SESSION SET NLS_DATE_FORMAT=\u0026#39;dd/mm/yyyy hh24:mi:ss\u0026#39;;\n#muda o formato de data para a sessão atual\n\nSELECT * FROM v$INSTANCE;\n#usa a view v$INSTANCE para mostrar dados sobre o banco e a máquina\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 149"},{"content":" for, while, do while while → mais usado while → repete algo enquanto a condição for verdadeira ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-15-fej43g759ah7a/","summary":"\u003cul\u003e\n\u003cli\u003efor, while, do while\u003c/li\u003e\n\u003cli\u003ewhile → mais usado\u003c/li\u003e\n\u003cli\u003ewhile → repete algo enquanto a condição for verdadeira\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 15"},{"content":"Evitar riscos/Gerenciamento de riscos Pode ser adotado medidas como: pagar mais para nenhum funcionario sair da empresa durante o projeto; tenta minimizar os riscos e seus efeitos; outras maneira de evitar riscos é montando times como mais de uma pessoa, assim caso uma saia, há outra no lugar que já sabe o que fazer; parte do gerenciamento de projeto; É preciso fazer uma listagem dos riscos e estimar suas probabilidades de acontecer para serem mitigados o quanto antes baseando-se em sua gravidade(planejamento de riscos); é preciso monitorar os riscos que podem aparecer durante o projeto; Para mitigar é necessário criar um plano de contingencia, do qual dirá o que fazer em certas situações, ou ainda um plano de prevenção, para evitar que o erro aconteça. Gerenciamento de projeto assegura que o software será entregue no prazo e orçamento; Pode ser utilizar resolusões de problemas já usados por outras engenharias que são semelhantes à de software. Atividades do gerenciamento Definição dos limites do projeto (o que faz e o que não faz); definição do cronograma; custo do projeto; monitoramento das ações; seleção de pessoas; relatórios. Planejamento definição do cronograma junto com cada equipe e suas responsabilidades (Plano principal); outros planos podem vir junto com o principal, como o de qualidade, validação, etc. Marcos finalização de um processo e apresentação de um resultado (também chamado de produto). Cronograma define data limite para cada atividade, pensando também em atividades simultâneas para otimizar o tempo. Rede de atividades espécie de grafo que demonstra as sequencias de atividades (assim como as simultanêas) e seus marcos; é possivel ver a data final do projeto seguindo o maior caminho do grafo (uma vez que as transições contêm o tempo estimado), esse é chamado de caminho critico, se algo atrasar nele, o projeto inteiro atrasa. Diagrama de barras Demonstra a sequência de atividades e a tolerância de atrasos no calendário. Gerente de projetos precisa conhecer o projeto, ter habilidades práticas e saber lidar com pessoas. Tipos de riscos de projeto → aumenta custos e tempo necessário; de produto → afeta a qualidade; de negócio → afeta a corporação. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-150-8a5ge4608202/","summary":"\u003ch3 id=\"evitar-riscosgerenciamento-deriscos\"\u003eEvitar riscos/Gerenciamento de riscos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePode ser adotado medidas como: pagar mais para nenhum funcionario\nsair da empresa durante o projeto;\u003c/li\u003e\n\u003cli\u003etenta minimizar os riscos e seus efeitos;\u003c/li\u003e\n\u003cli\u003eoutras maneira de evitar riscos é montando times como mais de uma\npessoa, assim caso uma saia, há outra no lugar que já sabe o que\nfazer;\u003c/li\u003e\n\u003cli\u003eparte do gerenciamento de projeto;\u003c/li\u003e\n\u003cli\u003eÉ preciso fazer uma listagem dos riscos e estimar suas\nprobabilidades de acontecer para serem mitigados o quanto antes\nbaseando-se em sua gravidade(planejamento de riscos);\u003c/li\u003e\n\u003cli\u003eé preciso monitorar os riscos que podem aparecer durante o projeto;\u003c/li\u003e\n\u003cli\u003ePara mitigar é necessário criar um plano de contingencia, do qual\ndirá o que fazer em certas situações, ou ainda um plano de\nprevenção, para evitar que o erro aconteça.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"gerenciamento-deprojeto\"\u003eGerenciamento de projeto\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eassegura que o software será entregue no prazo e orçamento;\u003c/li\u003e\n\u003cli\u003ePode ser utilizar resolusões de problemas já usados por outras\nengenharias que são semelhantes à de software.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"atividades-do-gerenciamento\"\u003eAtividades do gerenciamento\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefinição dos limites do projeto (o que faz e o que não faz);\u003c/li\u003e\n\u003cli\u003edefinição do cronograma;\u003c/li\u003e\n\u003cli\u003ecusto do projeto;\u003c/li\u003e\n\u003cli\u003emonitoramento das ações;\u003c/li\u003e\n\u003cli\u003eseleção de pessoas;\u003c/li\u003e\n\u003cli\u003erelatórios.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"planejamento\"\u003ePlanejamento\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edefinição do cronograma junto com cada equipe e suas\nresponsabilidades (Plano principal);\u003c/li\u003e\n\u003cli\u003eoutros planos podem vir junto com o principal, como o de qualidade,\nvalidação, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"marcos\"\u003eMarcos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efinalização de um processo e apresentação de um resultado (também\nchamado de produto).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"cronograma\"\u003eCronograma\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edefine data limite para cada atividade, pensando também em\natividades simultâneas para otimizar o tempo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"rede-de-atividades\"\u003eRede de atividades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eespécie de grafo que demonstra as sequencias de atividades (assim\ncomo as simultanêas) e seus marcos;\u003c/li\u003e\n\u003cli\u003eé possivel ver a data final do projeto seguindo o maior caminho do\ngrafo (uma vez que as transições contêm o tempo estimado), esse é\nchamado de caminho critico, se algo atrasar nele, o projeto inteiro\natrasa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"diagrama-debarras\"\u003eDiagrama de barras\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDemonstra a sequência de atividades e a tolerância de atrasos no\ncalendário.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"gerente-deprojetos\"\u003eGerente de projetos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eprecisa conhecer o projeto, ter habilidades práticas e saber lidar\ncom pessoas.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"tipos-deriscos\"\u003eTipos de riscos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ede projeto → aumenta custos e tempo necessário;\u003c/li\u003e\n\u003cli\u003ede produto → afeta a qualidade;\u003c/li\u003e\n\u003cli\u003ede negócio → afeta a corporação.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 150"},{"content":" UES usa comunicação serial (apenas um \u0026ldquo;fio\u0026rdquo;); UNDERFLOW pode ocorrer quando há um número com um muitas casas decimais; Quando há uma divisão por zero, o programa aborta, pois, caso contrário, ela ficaria eternamente tentando calcular, caso não houvessem flags e temporizadores; RAM é dinamica (perde informações com o tempo); CACHE é estática (não perde informações com o tempo); valores de 3.3v-5v é 1; valores de 0v-0.7v é 0; valores entre 0.7v-3.3v é tido como um estado indeterminado; A RAM possuim um sistema de REFRESH; um clock de 3Ghz tem 3*10⁹ ciclos/segundo, se 1 instrução leva 10 ciclos então temos 3*1⁰⁹/10 ciclos/segundo. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-151-h0d47ea5eh1g/","summary":"\u003cul\u003e\n\u003cli\u003eUES usa comunicação serial (apenas um \u0026ldquo;fio\u0026rdquo;);\u003c/li\u003e\n\u003cli\u003eUNDERFLOW pode ocorrer quando há um número com um muitas casas\ndecimais;\u003c/li\u003e\n\u003cli\u003eQuando há uma divisão por zero, o programa aborta, pois, caso\ncontrário, ela ficaria eternamente tentando calcular, caso não\nhouvessem flags e temporizadores;\u003c/li\u003e\n\u003cli\u003eRAM é dinamica (perde informações com o tempo);\u003c/li\u003e\n\u003cli\u003eCACHE é estática (não perde informações com o tempo);\u003c/li\u003e\n\u003cli\u003evalores de 3.3v-5v é 1;\u003c/li\u003e\n\u003cli\u003evalores de 0v-0.7v é 0;\u003c/li\u003e\n\u003cli\u003evalores entre 0.7v-3.3v é tido como um estado indeterminado;\u003c/li\u003e\n\u003cli\u003eA RAM possuim um sistema de REFRESH;\u003c/li\u003e\n\u003cli\u003eum clock de 3Ghz tem 3*10⁹ ciclos/segundo, se 1 instrução leva 10\nciclos então temos 3*1⁰⁹/10 ciclos/segundo.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 151"},{"content":"\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/","summary":"\u003cp\u003e\u003cimg alt=\"se e somente\\u00a0se\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/image_242.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/image_243.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/image_244.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"geometricamente\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/image_245.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-152-hi5gc14i038ab/image_246.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 152"},{"content":" MYSQL possui parâmetros (nesse caso variáveis de ambiente) que podem ser globais ou de sessão, estáticos ou dinâmicos. Para modificar parâmetros estáticos você precisa modificar o arquivo my.ini ou my.inf Pasta include do MYSQL, possui os headers para interagir com outras linguagens partes entre [] no arquivo my.ini são as seções de configuração parâmetros estáticos são read-only, ou seja precisam ser alterados no arquivo diretamente programa mysql é um cliente, enquanto o mysqld é o servidor Alguns Parâmetros key_buffer_size → parâmetro que seta a memoria ram que a instância pode usar sort_buffer_size → parâmetro que seta o tamanho do buffer para ordenação de dados max_connections → descreve a quantidade máxima de conexões ao banco (leve em consideração que alguns serviços do próprio MYSQL são tidos como clientes) port → qual porta o servidor vai rodar(parâmetro estático) innodb_file_per_table → quando OFF ele começa a utilizar tablespaces SHOW VARIABLES; --para alterar parametros dinamicos --esses comandos só irão alterar a nivel de sessão, para ser global --voce precisa alterar o arquivo my.ini SET GLOBAL parameter=value; --ou SET @@GLOBAL.parameter=value; Table Spaces arquivos lógicos que guardam os dados (só é possível acessar pelo banco dedados) arquivos são chamados de datafiles não são cross platform são vantajosos quando você possui vários discos, e quando quer acrescentar um, basta apontar no tablespace um datafile para esse disco oracle por padrão usa tablespaces tablespaces podem ter múltiplos datafiles cada usuário pode ter o seu tablespace, sendo necessários privilégios para criar também (em ORACLE) por padrão o sistema aloca todo o tamanho definido para o datafile antes, para evitar problemas como desfragmentação de disco Table Space permanente → usada para guardar os dados Table Space temporária → usada para guardar dados como em: ordenação, indices, etc. SELECT * FROM dba_tablespaces; ALTER TABLESPACE name ADD DATAFILE \u0026#39;datafile\u0026#39;; -- pode ter qualquer nome e extensão o datafile ALTER DATABASE DATAFILE \u0026#39;datafile\u0026#39; AUTOEXTEND ON NEXT 20M MAXSIZE 1000M; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-153-93i7cj389g9/","summary":"\u003cul\u003e\n\u003cli\u003eMYSQL possui parâmetros (nesse caso variáveis de ambiente) que podem\nser globais ou de sessão, estáticos ou dinâmicos.\u003c/li\u003e\n\u003cli\u003ePara modificar parâmetros estáticos você precisa modificar o arquivo\nmy.ini ou my.inf\u003c/li\u003e\n\u003cli\u003ePasta include do MYSQL, possui os headers para interagir com outras\nlinguagens\u003c/li\u003e\n\u003cli\u003epartes entre [] no arquivo my.ini são as seções de configuração\u003c/li\u003e\n\u003cli\u003eparâmetros estáticos são read-only, ou seja precisam ser alterados\nno arquivo diretamente\u003c/li\u003e\n\u003cli\u003eprograma mysql é um cliente, enquanto o mysqld é o servidor\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"alguns-parâmetros\"\u003eAlguns Parâmetros\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ekey_buffer_size → parâmetro que seta a memoria ram que a instância\npode usar\u003c/li\u003e\n\u003cli\u003esort_buffer_size → parâmetro que seta o tamanho do buffer para\nordenação de dados\u003c/li\u003e\n\u003cli\u003emax_connections → descreve a quantidade máxima de conexões ao banco\n(leve em consideração que alguns serviços do próprio MYSQL são tidos\ncomo clientes)\u003c/li\u003e\n\u003cli\u003eport → qual porta o servidor vai rodar(parâmetro estático)\u003c/li\u003e\n\u003cli\u003einnodb_file_per_table → quando OFF ele começa a utilizar tablespaces\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSHOW VARIABLES;\n\n--para alterar parametros dinamicos\n--esses comandos só irão alterar a nivel de sessão, para ser global\n--voce precisa alterar o arquivo my.ini\nSET GLOBAL parameter=value;\n--ou\nSET @@GLOBAL.parameter=value;\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"table-spaces\"\u003eTable Spaces\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003earquivos lógicos que guardam os dados (só é possível acessar pelo\nbanco dedados)\u003c/li\u003e\n\u003cli\u003earquivos são chamados de datafiles\u003c/li\u003e\n\u003cli\u003enão são cross platform\u003c/li\u003e\n\u003cli\u003esão vantajosos quando você possui vários discos, e quando quer\nacrescentar um, basta apontar no tablespace um datafile para esse\ndisco\u003c/li\u003e\n\u003cli\u003eoracle por padrão usa tablespaces\u003c/li\u003e\n\u003cli\u003etablespaces podem ter múltiplos datafiles\u003c/li\u003e\n\u003cli\u003ecada usuário pode ter o seu tablespace, sendo necessários\nprivilégios para criar também (em ORACLE)\u003c/li\u003e\n\u003cli\u003epor padrão o sistema aloca todo o tamanho definido para o datafile\nantes, para evitar problemas como desfragmentação de disco\u003c/li\u003e\n\u003cli\u003eTable Space permanente → usada para guardar os dados\u003c/li\u003e\n\u003cli\u003eTable Space temporária → usada para guardar dados como em:\nordenação, indices, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSELECT * FROM dba_tablespaces;\n\nALTER TABLESPACE name\n  ADD DATAFILE \u0026#39;datafile\u0026#39;; -- pode ter qualquer nome e extensão o datafile\n\nALTER DATABASE\n  DATAFILE \u0026#39;datafile\u0026#39;\n  AUTOEXTEND ON NEXT 20M\n  MAXSIZE 1000M;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 153"},{"content":"Métricas falta de controle de um projeto está ligada a falta de métricas; tem como objetivo: entender, achar, controlar e prever tudo do projeto; bom para entender em qual parte do projeto você está; usado para ter estimativas; usado para melhorar a qualidade do projeto. medida → valor de um indicador e/ou atributos usados para a medição; medição → processo de medir; métrica → estabelece um objetivo para a medição; indicador → classificação da medida (escala). ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-154-c3i4cjda9dhi/","summary":"\u003ch4 id=\"métricas\"\u003eMétricas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003efalta de controle de um projeto está ligada a falta de métricas;\u003c/li\u003e\n\u003cli\u003etem como objetivo: entender, achar, controlar e prever tudo do\nprojeto;\u003c/li\u003e\n\u003cli\u003ebom para entender em qual parte do projeto você está;\u003c/li\u003e\n\u003cli\u003eusado para ter estimativas;\u003c/li\u003e\n\u003cli\u003eusado para melhorar a qualidade do projeto.\u003c/li\u003e\n\u003cli\u003emedida → valor de um indicador e/ou atributos usados para a medição;\u003c/li\u003e\n\u003cli\u003emedição → processo de medir;\u003c/li\u003e\n\u003cli\u003emétrica → estabelece um objetivo para a medição;\u003c/li\u003e\n\u003cli\u003eindicador → classificação da medida (escala).\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 154"},{"content":"Funções mapeamento entre dois conjuntos f: A → B, cada elemento de A corresponde a um único elemento em B A é o domínio, B o contra domínio, a imagem são os elementos que foram mapeados pela função do domínio para o contra domínio Função quadrática ax²+bx+c a → diz se a concavidade é para cima ou para baixo |a| → diz se a concavidade é mais fechada ou aberta b → se pegarmos um ponto qualquer na parábola e mudarmos b, outra parábola será criado com esse ponto (nova parábola será o inverso da original) c → faz com que o gráfico suba ou desça em Y Função irracional 1/x no gráfico sempre há duas assíntotas (horizontal e vertical) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-155-667hg8236283/","summary":"\u003ch4 id=\"funções\"\u003eFunções\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emapeamento entre dois conjuntos\u003c/li\u003e\n\u003cli\u003ef: A → B, cada elemento de A corresponde a um único elemento em B\u003c/li\u003e\n\u003cli\u003eA é o domínio, B o contra domínio, a imagem são os elementos que\nforam mapeados pela função do domínio para o contra domínio\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-quadrática\"\u003eFunção quadrática\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eax²+bx+c\u003c/li\u003e\n\u003cli\u003ea → diz se a concavidade é para cima ou para baixo\u003c/li\u003e\n\u003cli\u003e|a| → diz se a concavidade é mais fechada ou aberta\u003c/li\u003e\n\u003cli\u003eb → se pegarmos um ponto qualquer na parábola e mudarmos b, outra\nparábola será criado com esse ponto (nova parábola será o inverso da\noriginal)\u003c/li\u003e\n\u003cli\u003ec → faz com que o gráfico suba ou desça em Y\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-irracional\"\u003eFunção irracional\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e1/x\u003c/li\u003e\n\u003cli\u003eno gráfico sempre há duas assíntotas (horizontal e vertical)\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 155"},{"content":" É recomendado criar pelo menos 2 tablespaces para cada sistema, sendo um para dados e outro para indices, ajudando no balanceamento de carga tablespace sysaux → informações auxiliares do sistema tablespace undotbs → usado para rollbacks CREATE TABLESPACE name datafile \u0026#39;datafile\u0026#39; size 10M --tamanho inicial AUTOEXTEND ON NEXT 2M MAXSIZE 20M; DROP TABLESPACE name INCLUDING CONTENTS AND datafiles; SELECT * FROM dba_data_files; --just for admins SELECT username, default_tablespace, temporary_tablespace FROM user_users; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-156-42bj83j5f6h1/","summary":"\u003cul\u003e\n\u003cli\u003eÉ recomendado criar pelo menos 2 tablespaces para cada sistema,\nsendo um para dados e outro para indices, ajudando no balanceamento\nde carga\u003c/li\u003e\n\u003cli\u003etablespace sysaux → informações auxiliares do sistema\u003c/li\u003e\n\u003cli\u003etablespace undotbs → usado para rollbacks\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE TABLESPACE name\n  datafile \u0026#39;datafile\u0026#39;\n  size 10M --tamanho inicial\n  AUTOEXTEND ON NEXT 2M\n  MAXSIZE 20M;\n\nDROP TABLESPACE name INCLUDING CONTENTS AND datafiles;\n\nSELECT * FROM dba_data_files; --just for admins\n\nSELECT username, default_tablespace, temporary_tablespace\nFROM user_users;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 156"},{"content":"Diagrama comportamental visão completa do sistema representação baseada em eventos indica a resposta dele à eventos Diagrama máquina de estados necessário antes ter feito o diagrama de casos de uso e de classes mostra o ciclo de vida de um objeto baseado em autômatos ações são os métodos previstos no diagrama de classe ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-157-476g2cgebe98a/","summary":"\u003ch4 id=\"diagrama-comportamental\"\u003eDiagrama comportamental\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evisão completa do sistema\u003c/li\u003e\n\u003cli\u003erepresentação baseada em eventos\u003c/li\u003e\n\u003cli\u003eindica a resposta dele à eventos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"diagrama-máquina-deestados\"\u003eDiagrama máquina de estados\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enecessário antes ter feito o diagrama de casos de uso e de classes\u003c/li\u003e\n\u003cli\u003emostra o ciclo de vida de um objeto\u003c/li\u003e\n\u003cli\u003ebaseado em autômatos\u003c/li\u003e\n\u003cli\u003eações são os métodos previstos no diagrama de classe\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo diagrama máquina de\\u00a0estados\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-157-476g2cgebe98a/image_247.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 157"},{"content":"Memórias toda RAM pode se transformar em sequencial (como em filas e pilhas) CACHE é estática (não perde informações com o tempo) quando a MP esta fazendo refresh ela não pode ser usada naquele momento ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-158-8gchdda41213/","summary":"\u003ch4 id=\"memórias\"\u003eMemórias\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etoda RAM pode se transformar em sequencial (como em filas e pilhas)\u003c/li\u003e\n\u003cli\u003eCACHE é estática (não perde informações com o tempo)\u003c/li\u003e\n\u003cli\u003equando a MP esta fazendo refresh ela não pode ser usada naquele\nmomento\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"Hierarquia de memórias, retirado de\\n\u003ca href=\\\"https://blog.cod3r.com.br/o-que-e-hierarquia-de-memoria/\\\"\u003eblog.cod3r.com.br\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-158-8gchdda41213/image_248.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"hd\"\u003eHD\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eOS fica na trilha 0 setor 0\u003c/li\u003e\n\u003cli\u003etrilhas mais internas cabem menos informações\u003c/li\u003e\n\u003cli\u003ecom quantidades iguais de setores por trilha temos mais capacidade\nde armazenamento, mas é mais lento para encontrar as informações\u003c/li\u003e\n\u003cli\u003ecom mesma quantidade de setores por trilha você tem menor capacidade\nde armazenamento, mas o acesso fica um pouco mais rápido\u003c/li\u003e\n\u003cli\u003eo OS pode marcar certos setores como corrompidos\u003c/li\u003e\n\u003cli\u003econforme você adiciona e remove coisas de um HD ele vai se\nfragmentando, uma vez que certos setores vão ficar livres no meio de\noutros setores usados, e quando você precisa colocar um novo, o\nsistema terá de repartir o arquivo e colocar em setores distantes,\ndeixando mais lento.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cd\"\u003eCD\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epara gravar um CD é usado um laser para queimar uma camada de\ncorante definindo um bit\u003c/li\u003e\n\u003cli\u003epara ler o CD é jogado uma luz nele e, naqueles pontos que foram\nqueimados, a luz passará e será refletida por uma camada reflexiva\nque devolve a luz e é rebatida por um prisma até um fotodetector\u003c/li\u003e\n\u003cli\u003eNo blue-ray, por utilizar um laser mais para o azul, seu comprimento\nde onda é muito menor, fazendo com que seja possível colocar muito\nmais informações nele\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 158"},{"content":"\nPara transformar o automato em uma tabela, pegue todos os estados e depois faça uma lista dos símbolos e apenas preencha qual transição cada estado fará para aquele símbolo.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-159-7jbbg02g1i98/","summary":"\u003cp\u003e\u003cimg alt=\"exemplo automato\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-159-7jbbg02g1i98/image_249.png\"\u003e\u003c/p\u003e\n\u003cp\u003ePara transformar o automato em uma tabela, pegue todos os estados e\ndepois faça uma lista dos símbolos e apenas preencha qual transição cada\nestado fará para aquele símbolo.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo tabela\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-159-7jbbg02g1i98/image_250.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 159"},{"content":"Complemento em decimal\nobs: usar o complemento de um número é uma maneira de transformar uma subtração em uma soma\n745\u0026ndash;84\npara transformar em um complemento pegue o maior numero da subtração(745) e conte o numero de dígitos(3), agora ache o maior com esse número de dígitos (999), agora vamos fazer o complemento de 9\n999\u0026ndash;84 = 915\nagora some o maior numero da subtração com o complemento do número 84\n745 + 915 = 1660\nrepare que esse numero 1 no resultado a gente irá descartar já que ele veio do carry quando você fez 7 + 9\nentão o resultado dessa soma na real é 660, esse é o resultado parcial, agora para fazer o complemento de 10, você pega esse parcial e soma 1(correção do resultado)\n660 + 1 = 661\nBom, em decimal isso é um pouco trabalhoso mas em binário isso tem uma característica muito interessante\nObs esse algoritmo pode ser usado para qualquer base\ncomplemento em binário\npara fazer o complemento de 1 em binário é a mesma coisa do complemento de 9\n100010\u0026ndash;10010\npega o maior (100010) e pega o maior numero com o mesmo numero de bits(111111) agora faça\n111111+010010 =101101\nreparou uma coisa?\n101101 é a mesma coisa que inverter cada bit de 010010, por isso complemento é tão usado em binário, já que ao invés de você precisar ficar fazendo subtrações você só usa algoritmos ou circuitos de soma, dessa forma maquinas ficam mais baratas, já que ao invés de n somadores e n subtratores, agora você só precisa de n somadores\nbom, então, fazendo o complemento, pegue o menor número e inverta os bits (0 vira 1 e 1 vira 0, lembrando de preencher o inicio para o numero de cima ter o mesmo numero do d baixo)\nou seja\n100010+101101\nresultando em\n001111 (lembrando de descartar o carry final) ← resultado parcial\nagora para fazer o complemento de dois pegue esse e some 1\nresultando em\n10000\nMultiplicação em binário\na multiplicação funciona da mesma forma que em decimal, ou seja quando você multiplicar um numero por 0, tudo será 0 quando for por 1 o numero resultante será o mesmo\ntabuada\n0 * 0 = 0\n0 * 1 = 0\n1 * 0 = 0\n1 * 1 = 1\nobs: essa tabela se assemelha a tabela verdade da porta AND\nCódigos maneira de representar tudo que existe de uma certa forma que facilite a comunicação entre coisas\nASCII\ntabela criada para padronizar os caracteres usados em diferentes sistemas, já que no começo da história da computação cada maquina tinha sua tabela de caracteres próprio o que dificultava a comunicação entre máquinas\nEntão criou-se uma tabela com diferentes representações de caracteres que conhecemos em diferentes formatos como decimal, hexadecimal, html, octal, etc\nCódigos Ponderados\nsão códigos em que cada posição possui um certo valor (peso)\nbinário é um código ponderado, já cada posição possui uma potência de 2\nObservações\nword = 4bits\nvocê pode criar qualquer código, desde que seja possível representar todos os decimais (0\u0026ndash;9)\ncódigos podem possuir duas ou mais maneiras de representar o mesmo digito, mas nunca dois dígitos podem possuir o mesmo código\nnúmero de combinações em qualquer base = base^n de dígitos\npara representar um número decimal você precisa de no mínimo 4 bits, pois 2⁴ = 16 e seu antecessor 2³ = 8 então com 4 bits você consegue representar os 10 números decimais\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-16-j371732c2je6/","summary":"\u003cp\u003e\u003cstrong\u003eComplemento em decimal\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eobs: usar o complemento de um número é uma maneira de transformar uma\nsubtração em uma soma\u003c/p\u003e\n\u003cp\u003e745\u0026ndash;84\u003c/p\u003e\n\u003cp\u003epara transformar em um complemento pegue o maior numero da\nsubtração(745) e conte o numero de dígitos(3), agora ache o maior com\nesse número de dígitos (999), agora vamos fazer o complemento de 9\u003c/p\u003e\n\u003cp\u003e999\u0026ndash;84 = 915\u003c/p\u003e\n\u003cp\u003eagora some o maior numero da subtração com o complemento do número 84\u003c/p\u003e","title":"Ciências da computação dia 16"},{"content":" SYS é o dono do banco de dados; SYSTEM é o admin; usuário schema: possui objetos no banco, possui privilégios para criar objetos; usuário de aplicação: tem privilégios para acessar objetos, mas não pode alterá-los; por padrão usuários não tem permissão para nada (nem para logar no banco); privilégios não precisam de restart do sistema para funcionar; packages empacotam várias procedures dentro; DCL → data control language (GRANT e REVOKE); cada banco criar o DCL do seu jeito (não possui padrão ANSI); donos dos objetos podem fazer o que quiser com eles. Usuários CREATE TEMPORARY TABLESPACE tmp_tablespace_name; --criar usuário schema CREATE USER name IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name TEMPORARY TABLESPACE tmp_tablespace_name; --RESOURCE deixa o user criar coisas (devs usam esse) --CONNECT dá permissões para logar no bacno GRANT CONNECT, RESOURCE TO name; --altera o limite para o usuário no tablespace ALTER USER name QUOTA UNLIMITED ON tablespace_name; --para usar outro tablespace ao inves do default CREATE TABLE table_name ( coluna1 datatype, coluna2 datatype, coluna3 datatype, ) USING INDEX TABLESPACE tablespace_name; --para setar um tablespace para o index CREATE INDEX index_name on table_name ( coluna1, coluna2, coluna3 ) TABLESPACE tablespace_name; --cria um usário de aplicação CREATE USER name IDENTIFIED BY password; Privilégios --TIPOS DE PRIVILÉGIO --privilégio de sistema GRANT privilegio1, privilegio2,... TO user1, user2,...; --alguns privilégios CREATE SESSION; --para conectar no banco CREATE TABLE; --para criar tabela e indices CREATE SEQUENCE; CREATE VIEW; CREATE PROCEDURE; --privilégio de objetos GRANT privilegio1, privilegio2, ... | ALL [colunas...] ON objeto TO user1, user2, ... | role | PUBLIC [WITH GRANT OPTION]; --permite o usuario dar privilégios para outros usuários nesse objeto --alguns privilégios INSERT, UPDATE, SELECT, DELETE --para tabelas EXECUTE --para procedures --obs: um unico grant não pode misturar privilégio de objeto e de sistema junto --ROLES --grupo de permissões --do sistema CONNECT, RESOURCE, DBA --para admin --para criar uma role CREATE ROLE role_name; GRANT privilegio1, privilegio2,... TO role_name; --REVOKE --remove privilegios REVOKE privilegio1, privilegio2,... ON objeto FROM user1, user2,... | role | PUBLIC [CASCADE CONSTRAINT]; --quando existem tables interligadas com privilégios --SYNONYM --maneira de criar um alias para um objeto CREATE SYNONYM synonym_name FOR object; SELECT * FROM synonym_name; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-160-g7f73df865d3/","summary":"\u003cul\u003e\n\u003cli\u003eSYS é o dono do banco de dados;\u003c/li\u003e\n\u003cli\u003eSYSTEM é o admin;\u003c/li\u003e\n\u003cli\u003eusuário schema: possui objetos no banco, possui privilégios para\ncriar objetos;\u003c/li\u003e\n\u003cli\u003eusuário de aplicação: tem privilégios para acessar objetos, mas não\npode alterá-los;\u003c/li\u003e\n\u003cli\u003epor padrão usuários não tem permissão para nada (nem para logar no\nbanco);\u003c/li\u003e\n\u003cli\u003eprivilégios não precisam de restart do sistema para funcionar;\u003c/li\u003e\n\u003cli\u003epackages empacotam várias procedures dentro;\u003c/li\u003e\n\u003cli\u003eDCL → data control language (GRANT e REVOKE);\u003c/li\u003e\n\u003cli\u003ecada banco criar o DCL do seu jeito (não possui padrão ANSI);\u003c/li\u003e\n\u003cli\u003edonos dos objetos podem fazer o que quiser com eles.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"usuários\"\u003eUsuários\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE TEMPORARY TABLESPACE tmp_tablespace_name;\n\n--criar usuário schema\nCREATE USER name\n  IDENTIFIED BY password\n  DEFAULT TABLESPACE tablespace_name\n  TEMPORARY TABLESPACE tmp_tablespace_name;\n\n--RESOURCE deixa o user criar coisas (devs usam esse)\n--CONNECT dá permissões para logar no bacno\nGRANT CONNECT, RESOURCE TO name;\n\n--altera o limite para o usuário no tablespace\nALTER USER name QUOTA UNLIMITED ON tablespace_name;\n\n--para usar outro tablespace ao inves do default\nCREATE TABLE table_name (\n    coluna1 datatype,\n    coluna2 datatype,\n    coluna3 datatype,\n) USING INDEX TABLESPACE tablespace_name;\n\n--para setar um tablespace para o index\nCREATE INDEX index_name on table_name ( coluna1, coluna2, coluna3 ) \nTABLESPACE tablespace_name;\n\n--cria um usário de aplicação\nCREATE USER name \n  IDENTIFIED BY password;\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"privilégios\"\u003ePrivilégios\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--TIPOS DE PRIVILÉGIO\n\n--privilégio de sistema\nGRANT privilegio1, privilegio2,... TO user1, user2,...;\n\n--alguns privilégios\nCREATE SESSION; --para conectar no banco\nCREATE TABLE; --para criar tabela e indices\nCREATE SEQUENCE;\nCREATE VIEW;\nCREATE PROCEDURE;\n\n--privilégio de objetos\nGRANT privilegio1, privilegio2, ... | ALL [colunas...]\n  ON objeto\n  TO user1, user2, ... | role | PUBLIC\n  [WITH GRANT OPTION]; --permite o usuario dar privilégios para outros usuários nesse objeto\n\n--alguns privilégios\nINSERT, UPDATE, SELECT, DELETE --para tabelas\nEXECUTE --para procedures\n\n--obs: um unico grant não pode misturar privilégio de objeto e de sistema junto\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--ROLES\n--grupo de permissões\n\n--do sistema\nCONNECT, \nRESOURCE,\nDBA --para admin\n\n--para criar uma role\nCREATE ROLE role_name;\nGRANT privilegio1, privilegio2,... TO role_name;\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--REVOKE\n--remove privilegios\n\nREVOKE privilegio1, privilegio2,...\nON objeto\nFROM user1, user2,... | role | PUBLIC\n[CASCADE CONSTRAINT]; --quando existem tables interligadas com privilégios\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--SYNONYM\n--maneira de criar um alias para um objeto\n\nCREATE SYNONYM synonym_name FOR object;\nSELECT * FROM synonym_name;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 160"},{"content":" F(x) → mapeia valor dos reais para os reais F(x) = x → função identidade reta bissetriz → reta que passa pelo ponto 0 e divide 90° em 2 Função afim quando a \u0026gt; 0 → crescente quando a \u0026lt; 0 → decrescente quando crescente o gráfico sai do terceiro quadrante e vai em direção ao primeiro quandro decrescente o gráfico sai do quarto quadrante e vai para o segundo a raiz da função é → F(x) = ax + b = 0 coeficiente a denota também o quão inclinado será a reta, quanto maior mais inclinado Função modular F(x) = |x|+a → função sobe em Y F(x) = |x+a| → função se move para a esquerda quando a\u0026gt;0 e direita quando a\u0026lt;0 Função quadrática ponto máximo ou minimo da parábola é denominado de vértice coordenada do vértice → (-b/2a, -Δ/4a ou F(x)) quando Δ \u0026gt; 0 → duas raizes (parabola corta o eixo x) quando Δ = 0 → uma raiz (único ponto em x) quando Δ \u0026lt; 0 → nenhuma raiz (não corta o eixo x) Função par/ímpar f(x) = f(x) →função par f(x) = -f(x) → função ímpar ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-161-8632jd7fghah/","summary":"\u003cul\u003e\n\u003cli\u003eF(x) → mapeia valor dos reais para os reais\u003c/li\u003e\n\u003cli\u003eF(x) = x → função identidade\u003c/li\u003e\n\u003cli\u003ereta bissetriz → reta que passa pelo ponto 0 e divide 90° em 2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-afim\"\u003eFunção afim\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equando a \u0026gt; 0 → crescente\u003c/li\u003e\n\u003cli\u003equando a \u0026lt; 0 → decrescente\u003c/li\u003e\n\u003cli\u003equando crescente o gráfico sai do terceiro quadrante e vai em\ndireção ao primeiro\u003c/li\u003e\n\u003cli\u003equandro decrescente o gráfico sai do quarto quadrante e vai para o\nsegundo\u003c/li\u003e\n\u003cli\u003ea raiz da função é → F(x) = ax + b = 0\u003c/li\u003e\n\u003cli\u003ecoeficiente a denota também o quão inclinado será a reta, quanto\nmaior mais inclinado\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-modular\"\u003eFunção modular\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eF(x) = |x|+a → função sobe em Y\u003c/li\u003e\n\u003cli\u003eF(x) = |x+a| → função se move para a esquerda quando a\u0026gt;0 e\ndireita quando a\u0026lt;0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-quadrática\"\u003eFunção quadrática\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eponto máximo ou minimo da parábola é denominado de vértice\u003c/li\u003e\n\u003cli\u003ecoordenada do vértice → (-b/2a, -Δ/4a ou F(x))\u003c/li\u003e\n\u003cli\u003equando Δ \u0026gt; 0 → duas raizes (parabola corta o eixo x)\u003c/li\u003e\n\u003cli\u003equando Δ = 0 → uma raiz (único ponto em x)\u003c/li\u003e\n\u003cli\u003equando Δ \u0026lt; 0 → nenhuma raiz (não corta o eixo x)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"função-parímpar\"\u003eFunção par/ímpar\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ef(x) = f(x) →função par\u003c/li\u003e\n\u003cli\u003ef(x) = -f(x) → função ímpar\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 161"},{"content":"CACHE maneira temporal de preencher → realizada durante a busca de instruções, uma cópia é enviada para a CACHE. Além disso a UCP usa de alguns truques, como pegar instruções para a CACHE apenas quando não estão lá, para ganhar tempo; maneira espacial → pega um pedaço da MP e copia para a CACHE. Assim sempre que algo for ser executado, possivelmente, já esta na CACHE; para a CACHE o mais eficiente são estruturas de repetição, já que é necessário poucas instruções dentro dela para conseguir um ganho de performance. Filas todas as filas possuem limites (superior e inferior); há duas flags: underflow e overflow; há um ponteiro para a próxima posição livre para inserir, e um para o endereço para remover o valor; possui operações de inserção(INS) e remoção(REM). Pilhas possuem limites (superior e inferior); há flags também, como: underflow e overflow; possui um ponteiro dizendo a posição para adicionar um valor ou ainda para remover o valor anterior; possui instruções de inserção (PUSH) e remoção (POP). ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-162-c41i775j03b1/","summary":"\u003ch4 id=\"cache\"\u003eCACHE\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emaneira temporal de preencher → realizada durante a busca de\ninstruções, uma cópia é enviada para a CACHE. Além disso a UCP usa\nde alguns truques, como pegar instruções para a CACHE apenas quando\nnão estão lá, para ganhar tempo;\u003c/li\u003e\n\u003cli\u003emaneira espacial → pega um pedaço da MP e copia para a CACHE. Assim\nsempre que algo for ser executado, possivelmente, já esta na CACHE;\u003c/li\u003e\n\u003cli\u003epara a CACHE o mais eficiente são estruturas de repetição, já que é\nnecessário poucas instruções dentro dela para conseguir um ganho de\nperformance.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"filas\"\u003eFilas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etodas as filas possuem limites (superior e inferior);\u003c/li\u003e\n\u003cli\u003ehá duas flags: underflow e overflow;\u003c/li\u003e\n\u003cli\u003ehá um ponteiro para a próxima posição livre para inserir, e um para\no endereço para remover o valor;\u003c/li\u003e\n\u003cli\u003epossui operações de inserção(INS) e remoção(REM).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"pilhas\"\u003ePilhas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epossuem limites (superior e inferior);\u003c/li\u003e\n\u003cli\u003ehá flags também, como: underflow e overflow;\u003c/li\u003e\n\u003cli\u003epossui um ponteiro dizendo a posição para adicionar um valor ou\nainda para remover o valor anterior;\u003c/li\u003e\n\u003cli\u003epossui instruções de inserção (PUSH) e remoção (POP).\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 162"},{"content":"Autômato finito não determinístico transições são ambíguas; Vários caminhos para um mesmo símbolo; não é obrigatório adicionar transições para todos os símbolos; para checar a validade da entrada é necessário analisar todos os caminhos usando uma árvore; Para ser válido precisa parar em pelo menos um estado final dentre todas as possibilidades de caminhos; como tivemos um estado final ao testar o valor 1100, esse valor é válido\npara representar como uma tabela, agora temos um conjunto de estados em cada transição, e também temos conjuntos vazios quando não há transição.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-163-7j8ffhc2d6ee/","summary":"\u003ch4 id=\"autômato-finito-não-determinístico\"\u003eAutômato finito não determinístico\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etransições são ambíguas;\u003c/li\u003e\n\u003cli\u003eVários caminhos para um mesmo símbolo;\u003c/li\u003e\n\u003cli\u003enão é obrigatório adicionar transições para todos os símbolos;\u003c/li\u003e\n\u003cli\u003epara checar a validade da entrada é necessário analisar todos os\ncaminhos usando uma árvore;\u003c/li\u003e\n\u003cli\u003ePara ser válido precisa parar em pelo menos um estado final dentre\ntodas as possibilidades de caminhos;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo autômato\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-163-7j8ffhc2d6ee/image_251.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"verificando o valor 1100 usando uma\\u00a0árvore\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-163-7j8ffhc2d6ee/image_252.png\"\u003e\u003c/p\u003e\n\u003cp\u003ecomo tivemos um estado final ao testar o valor 1100, esse valor é válido\u003c/p\u003e","title":"Ciências da computação dia 163"},{"content":"\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-164-2gj23bf2e644/","summary":"\u003cp\u003e\u003cimg alt=\"limite lateral a direita de f(x) tendendo x à\\u00a01\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-164-2gj23bf2e644/image_254.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"limite lateral a esquerda de f(x) tendendo x à\\u00a01\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-164-2gj23bf2e644/image_255.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"assíntota vertical\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-164-2gj23bf2e644/image_256.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"assíntota horizontal\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-164-2gj23bf2e644/image_257.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 164"},{"content":"--Criar usuário CREATE USER \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;; -- o host é o ip, podendo ser usado caracteres corringa como % e _ -- um usuário pode ter vários hosts diferentes -- permissões de tabela CREATE, ALTER, DROP -- Permissões de dados SELECT, INSERT, UPDATE, DELETE -- outras permissões ALL PRIVILEGES, GRANT OPTION -- dexa um user dar permissões para outros -- dar permissões GRANT permissao1, permissao2, ... ON database.table TO \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;; FLUSH PRIVILEGES; -- para limpar o cache de permissões SHOW GRANTS FOR \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39;; -- mostra as permissões de um user -- remover permissões REVOKE permissao1, permissao2, ... ON database.table FROM \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39;; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-165-gg55jfii7709/","summary":"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--Criar usuário\nCREATE USER \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39; IDENTIFIED BY \u0026#39;password\u0026#39;;\n-- o host é o ip, podendo ser usado caracteres corringa como % e _\n-- um usuário pode ter vários hosts diferentes\n\n-- permissões de tabela\nCREATE, ALTER, DROP\n\n-- Permissões de dados\nSELECT, INSERT, UPDATE, DELETE\n\n-- outras permissões\nALL PRIVILEGES, \nGRANT OPTION -- dexa um user dar permissões para outros\n\n-- dar permissões\nGRANT permissao1, permissao2, ... ON database.table \n  TO \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39;\n  IDENTIFIED BY \u0026#39;password\u0026#39;;\nFLUSH PRIVILEGES; -- para limpar o cache de permissões\n\nSHOW GRANTS FOR \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39;; -- mostra as permissões de um user\n\n-- remover permissões\nREVOKE permissao1, permissao2, ... ON database.table\n  FROM \u0026#39;username\u0026#39;@\u0026#39;host\u0026#39;;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 165"},{"content":"Dentro das memórias do computador (memória RAM), podemos ter vários tipos de interligação de bancos de memórias para alcançarmos o tamanho desejado.\nMais precisamente, há dois formatos de ligação, série e paralelo.\nA ligação em paralelo, aumenta o tamanho de bits que uma palavra pode ter, mas mantem a quantidade de palavras que a memória pode suportar (aumenta o barramento de dados e não o de endereços).\nJá a ligação em série age de forma inversa, aumentando a quantidade de palavras que uma memória pode suportar, mas mantendo o tamanho dessas palavras.\nNesse exemplo, temos uma memória de 256M x 8bits, sendo 8 bits para o barramento de dados e 28 bits (2⁸ = 256, e 2²⁰ = 1M) para o barramento de endereços.\nPara aumentar o tamanho da palavra para 32 bits, poderíamos fazer:\nsendo agora uma memória de 256M x 32bits.\nAlém disso, poderíamos ter aumentado o tamanho da memória da seguinte maneira, fazendo:\nCom a associação em série de quatro componentes de 256M x 8 bits, temos: 4 * 256M = 2**2 * 2**8 = 2**10 * 2**20 = 2**30 = 1G, sendo assim um G de memória com 8bits cada palavra.\nPoderíamos também, unir esses dois componentes fazendo uma memória ainda maior:\ndessa forma temos uma Memoria de 1G x 32bits.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-166-4g30fa6d49j/","summary":"\u003cp\u003eDentro das memórias do computador (memória RAM), podemos ter vários\ntipos de interligação de bancos de memórias para alcançarmos o tamanho\ndesejado.\u003c/p\u003e\n\u003cp\u003eMais precisamente, há dois formatos de ligação, série e paralelo.\u003c/p\u003e\n\u003cp\u003eA ligação em paralelo, aumenta o tamanho de bits que uma palavra pode\nter, mas mantem a quantidade de palavras que a memória pode suportar\n(aumenta o barramento de dados e não o de endereços).\u003c/p\u003e\n\u003cp\u003eJá a ligação em série age de forma inversa, aumentando a quantidade de\npalavras que uma memória pode suportar, mas mantendo o tamanho dessas\npalavras.\u003c/p\u003e","title":"Ciências da computação dia 166"},{"content":" ao converter (diminuir) um autômato finito não deterministico(AFND), você transforma ele em um autômato finito deterministico(AFD); o autômato menor sempre será um AFD. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-167-jfj8b6hf9hee/","summary":"\u003cul\u003e\n\u003cli\u003eao converter (diminuir) um autômato finito não deterministico(AFND),\nvocê transforma ele em um autômato finito deterministico(AFD);\u003c/li\u003e\n\u003cli\u003eo autômato menor sempre será um AFD.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 167"},{"content":"Dado ε \u0026gt; 0, existe um δ \u0026gt; 0 tal que:\nsempre que\nUnicidade dos limites Outras propriedades Notas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/","summary":"\u003cp\u003eDado ε \u0026gt; 0, existe um δ \u0026gt; 0 tal que:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_262.png\"\u003e\u003c/p\u003e\n\u003cp\u003esempre que\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_263.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"unicidade-doslimites\"\u003eUnicidade dos limites\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_264.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"outras-propriedades\"\u003eOutras propriedades\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_265.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_266.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_267.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_268.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_269.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"notas\"\u003eNotas\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-168-69ja7g160cd5/image_270.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 168"},{"content":"Sequence objeto presente em alguns SGBD(o Oracle tem) usado para a criação de valores sequênciais (como aquele AUTO INCREMENT do MYSQL). CREATE SEQUENCE sequence_name START WITH 0 --valor para começar INCREMENT BY 1 --valor do increment, pode ser negativo para fazer uma sequência inversa MAXVALUE 10 --valor maximo CYCLE --quando chegar no 10 ele volta para o minimo (padrao do min é 1) CACHE 2; --já aloca os dois proximos valores em cache -- de preferência a usar NO CYCLE e NO CACHE INSER INTO table (id, name) VALUES(sequence_name.NextVal, \u0026#39;test\u0026#39;); -- sequence.NextVal pega o próximo valor da sequência SELECT * FROM sys.user_sequences; -- mostra as sequences criadas SELECT sequence_name.NextVal, sequence_name.currval; -- valor atual da sequence FROM dual; CREATE SEQUENCE inverse_sequence START WITH 10 INCREMENT BY -1 MAXVALUE 0 NO CYCLE NO CACHE; SELECT * from dba_sequences; -- todas as sequences do banco -- necessario ser DBA ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-169-328a8ai46j01/","summary":"\u003ch4 id=\"sequence\"\u003eSequence\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eobjeto presente em alguns SGBD(o Oracle tem)\u003c/li\u003e\n\u003cli\u003eusado para a criação de valores sequênciais (como aquele AUTO\nINCREMENT do MYSQL).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE SEQUENCE sequence_name\n  START WITH 0 --valor para começar\n  INCREMENT BY 1 --valor do increment, pode ser negativo para fazer uma sequência inversa\n  MAXVALUE 10 --valor maximo\n  CYCLE --quando chegar no 10 ele volta para o minimo (padrao do min é 1)\n  CACHE 2; --já aloca os dois proximos valores em cache\n\n\n-- de preferência a usar NO CYCLE e NO CACHE\n\nINSER INTO table (id, name)\n  VALUES(sequence_name.NextVal, \u0026#39;test\u0026#39;); -- sequence.NextVal pega o próximo valor da sequência\n\nSELECT * FROM sys.user_sequences; -- mostra as sequences criadas\n\nSELECT sequence_name.NextVal, \n       sequence_name.currval; -- valor atual da sequence\n  FROM dual;\n\nCREATE SEQUENCE inverse_sequence\n  START WITH 10\n  INCREMENT BY -1 \n  MAXVALUE 0 \n  NO CYCLE \n  NO CACHE; \n\nSELECT * from dba_sequences; -- todas as sequences do banco\n                             -- necessario ser DBA\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 169"},{"content":"Aristóteles (322 a.C. \u0026mdash; 384 a.C.)\nabiogênese → coisas sem vida dão origem a coisas com vida (teoria de 350 a.C. até 1862 d.C.) Pai da escola aristoteliana → antes as pessoas que queriam aprender algo elas iam atrás de filósofos e ficavam andando com ele, agora com a escola aristoteliana você fica em um local parada e um grupo de pessoas ficam discutindo sobre coisas, modelo usado até hoje Pai da lógica → silogismo → uma premissa (informação) e a partir dessa premissa se faz uma inferência (interpretação) sofismas → mentiras → uma interpretação pode gerar\nsofistas → pessoas com o dom da oratória mas mentem\nexemplo de sofisma\nQuem não trabalha tem muito tempo livre.\nTempo é dinheiro\nEntão quem não trabalha é rico.\nexemplo retirado de https://brainly.com.br/tarefa/21378636\nEm 1806 Augustus Morgan transformou a lógica em simbologia matemática\ntabela verdade\no numero n de linhas para um tabela verdade vai depender do numero de combinações de sua proposições (p, q e r nesse caso) então para achar esse numero faça 2^número de proposições\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-17-248ciegc099b/","summary":"\u003cp\u003eAristóteles (322 a.C. \u0026mdash; 384 a.C.)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eabiogênese → coisas sem vida dão origem a coisas com vida (teoria de\n350 a.C. até 1862 d.C.)\u003c/li\u003e\n\u003cli\u003ePai da escola aristoteliana → antes as pessoas que queriam aprender\nalgo elas iam atrás de filósofos e ficavam andando com ele, agora\ncom a escola aristoteliana você fica em um local parada e um grupo\nde pessoas ficam discutindo sobre coisas, modelo usado até hoje\u003c/li\u003e\n\u003cli\u003ePai da lógica → silogismo → uma premissa (informação) e a partir\ndessa premissa se faz uma inferência (interpretação)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003esofismas → mentiras → uma interpretação pode gerar\u003c/p\u003e","title":"Ciências da computação dia 17"},{"content":"Limites laterais limite pensando em valores maiores do que a (lateral pela direita +), ou menores que a (lateral pela esquerda -); caso ambos os limites laterais deem o mesmo resultado, então o limite de x tendendo à a existe. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-170-4f1c7bib1i41/","summary":"\u003ch4 id=\"limites-laterais\"\u003eLimites laterais\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003elimite pensando em valores maiores do que a (lateral pela direita\n+), ou menores que a (lateral pela esquerda -);\u003c/li\u003e\n\u003cli\u003ecaso ambos os limites laterais deem o mesmo resultado, então o\nlimite de \u003cem\u003ex\u003c/em\u003e tendendo à \u003cem\u003ea\u003c/em\u003e existe.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-170-4f1c7bib1i41/image_271.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-170-4f1c7bib1i41/image_272.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 170"},{"content":"MYSQL não possui transactions por padrão Oracle usa transactions por padrão comandos internos são tratados atomicamente, ou seja, caso a transaction não seja concluída, tudo será descartado transaction inicia com o primeiro DML e termina ao: COMMIT, ROLLBACK, comando DDL, quando o user sai ou quando o sistema cai voce pode criar savepoints e dar rollback para pontos especificos desfazendo alterações duas sessões diferentes não conseguem editar a mesma parte do banco até que uma delas dé um COMMIT ou ROLLBACK DELETE + COMMIT -- deleta definitivamente START TRANSACTION; ... ... SAVEPOINT savepoint_name; ... COMMIT; ROLLBACK TO SAVEPOINT savepoint_name; ----- -- da tablespace ilimitado para o user ALTER user user_name QUOTA UNLIMITED ON tablescape; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-171-fa40fhb2ed1c/","summary":"\u003ch4 id=\"mysql\"\u003eMYSQL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enão possui transactions por padrão\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"oracle\"\u003eOracle\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa transactions por padrão\u003c/li\u003e\n\u003cli\u003ecomandos internos são tratados atomicamente, ou seja, caso a\ntransaction não seja concluída, tudo será descartado\u003c/li\u003e\n\u003cli\u003etransaction inicia com o primeiro DML e termina ao: COMMIT,\nROLLBACK, comando DDL, quando o user sai ou quando o sistema cai\u003c/li\u003e\n\u003cli\u003evoce pode criar savepoints e dar rollback para pontos especificos\ndesfazendo alterações\u003c/li\u003e\n\u003cli\u003eduas sessões diferentes não conseguem editar a mesma parte do banco\naté que uma delas dé um COMMIT ou ROLLBACK\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eDELETE + COMMIT -- deleta definitivamente\n\nSTART TRANSACTION;\n...\n...\nSAVEPOINT savepoint_name;\n...\nCOMMIT;\n\nROLLBACK TO SAVEPOINT savepoint_name;\n\n-----\n\n-- da tablespace ilimitado para o user\nALTER user user_name QUOTA UNLIMITED ON tablescape;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 171"},{"content":"Tipos de memórias ROM → read only\nPROM → programmable ROM\nEPROM → necessário apagar tudo para modificar\nEEPROM → bits individuais podem ser apagados\nFLASH → EEPROM que não precisa de equipamentos especiais para manipular\nOperação de INS verifica overflow insere na onde está o ponteiro de INS atualiza o ponteiro verifica se a fila está vazia (ponteiro REM no limite inferior) Operação REM verifica underflow remove o elemento do ponteiro REM atualiza o ponteiro verifica se a fila está cheia (ponteiro INS no limite superior) Operação PUSH verifica se não atingiu o limite superior coloca o valor na posição do ponteiro atualiza o ponteiro Operação POP verifica se não atingiu o limite inferior remove do topo decrementa o ponteiro ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-172-d8i5cc9e1003/","summary":"\u003ch4 id=\"tipos-dememórias\"\u003eTipos de memórias\u003c/h4\u003e\n\u003cp\u003eROM → read only\u003c/p\u003e\n\u003cp\u003ePROM → programmable ROM\u003c/p\u003e\n\u003cp\u003eEPROM → necessário apagar tudo para modificar\u003c/p\u003e\n\u003cp\u003eEEPROM → bits individuais podem ser apagados\u003c/p\u003e\n\u003cp\u003eFLASH → EEPROM que não precisa de equipamentos especiais para manipular\u003c/p\u003e\n\u003ch4 id=\"operação-deins\"\u003eOperação de INS\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003everifica overflow\u003c/li\u003e\n\u003cli\u003einsere na onde está o ponteiro de INS\u003c/li\u003e\n\u003cli\u003eatualiza o ponteiro\u003c/li\u003e\n\u003cli\u003everifica se a fila está vazia (ponteiro REM no limite inferior)\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"operação-rem\"\u003eOperação REM\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003everifica underflow\u003c/li\u003e\n\u003cli\u003eremove o elemento do ponteiro REM\u003c/li\u003e\n\u003cli\u003eatualiza o ponteiro\u003c/li\u003e\n\u003cli\u003everifica se a fila está cheia (ponteiro INS no limite superior)\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"operação-push\"\u003eOperação PUSH\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003everifica se não atingiu o limite superior\u003c/li\u003e\n\u003cli\u003ecoloca o valor na posição do ponteiro\u003c/li\u003e\n\u003cli\u003eatualiza o ponteiro\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"operação-pop\"\u003eOperação POP\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003everifica se não atingiu o limite inferior\u003c/li\u003e\n\u003cli\u003eremove do topo\u003c/li\u003e\n\u003cli\u003edecrementa o ponteiro\u003c/li\u003e\n\u003c/ol\u003e","title":"Ciências da computação dia 172"},{"content":"Para minimizar o nosso AFND, podemos fazer a conversão dele para um AFD. Para isso faça:\nliste todas as transições que um estado faz para outro como um conjunto único, em seguida use esse conjunto como sendo o próximo estado a ser observado na tabela: você para de testar novas combinações quando nenhuma combinação nova aparece como transição. Além disso, todo conjunto que tiver um estado final, também sera considerado um estado final (*).\nTambém, se houver uma parte desconexa com o automato principal, você pode desconsiderá-lo na conversão.\n2. dê nomes as transições: Agora, você pega essas transições que foram descobertas e de nomes diferentes à elas (aliases).\n3. pronto, podemos pegar essa tabela e fazer um AFD\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-173-ga397h5fgf4c/","summary":"\u003cp\u003ePara minimizar o nosso AFND, podemos fazer a conversão dele para um AFD.\nPara isso faça:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-173-ga397h5fgf4c/image_273.png\"\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eliste todas as transições que um estado faz para outro como um\nconjunto único, em seguida use esse conjunto como sendo o próximo\nestado a ser observado na tabela:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-173-ga397h5fgf4c/image_274.png\"\u003e\u003c/p\u003e\n\u003cp\u003evocê para de testar novas combinações quando nenhuma combinação nova\naparece como transição. Além disso, todo conjunto que tiver um estado\nfinal, também sera considerado um estado final (*).\u003c/p\u003e","title":"Ciências da computação dia 173"},{"content":"Durante a manipulação de limites, algumas indeterminações podem aparecer:\nobs: lembre-se que infinito é uma idea/conceito, não um número\nem alguns casos conseguimos nos livrar facilmente deles:\nmas em outros precisamos de alguns truques:\nnesse caso, podemos pegar o conjugado do numerador, fazendo com que seja possível reduzi-lo à 1, removendo a indeterminação do tipo algo/0.\nNotas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-174-4bgf560390ii/","summary":"\u003cp\u003eDurante a manipulação de limites, algumas indeterminações podem\naparecer:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-174-4bgf560390ii/image_277.png\"\u003e\u003c/p\u003e\n\u003cp\u003eobs: lembre-se que infinito é uma idea/conceito, não um número\u003c/p\u003e\n\u003cp\u003eem alguns casos conseguimos nos livrar facilmente deles:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-174-4bgf560390ii/image_278.png\"\u003e\u003c/p\u003e\n\u003cp\u003emas em outros precisamos de alguns truques:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-174-4bgf560390ii/image_279.png\"\u003e\u003c/p\u003e\n\u003cp\u003enesse caso, podemos pegar o conjugado do numerador, fazendo com que seja\npossível reduzi-lo à 1, removendo a indeterminação do tipo algo/0.\u003c/p\u003e\n\u003ch4 id=\"notas\"\u003eNotas\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-174-4bgf560390ii/image_280.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 174"},{"content":"Diagrama de sequência representa o ciclo de vida de um caso de uso usado para casos de uso complexos (dos quais envolvem varias classes e métodos) comunicação entre objetos (troca de mensagens) métodos/classes precisam estar previstos no diagrama de classes parte sempre de um ator define objetos já instanciados e novos que serão instanciados durante a execução * → indica que uma mensagem pode ser ativada varias vezes quem recebe a mensagem é quem executa o método parâmetros e seus retornos também também podem ser representados nas mensagens condições são configuradas dentro de → [] Nesse exemplo de diagrama, começamos com o ator. Logo abaixo dele, é possível ver uma linha tracejada, isso representa a linha de vida de um objeto/ator. Sobre a linha de vida, há algumas caixas na vertical, elas representam as caixas de ativação, essas mostram o tempo de execução de uma chamada.\nLogo a frente do ator, há dois objetos (a e b), esses são objetos que já estavam instanciados antes, por isso são colocados ao lado do ator.\nNa horizontal, temos setas mais escuras que representam as chamadas de métodos aos objetos. Repare que temos dois casos especiais, \u0026lt;\u0026lt;create\u0026gt;\u0026gt; do qual cria uma nova instância de uma classe, e kill (com um x na ponta), do qual finaliza a vida de um objeto. Além disso, há linhas de retorno, representam os retornos dos métodos.\nNotas Simbolo do qual representa composição.\nNão é necessário usar todos os métodos no diagrama de máquina de estados ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-175-cffi68ddjb4b/","summary":"\u003ch4 id=\"diagrama-de-sequência\"\u003eDiagrama de sequência\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003erepresenta o ciclo de vida de um caso de uso\u003c/li\u003e\n\u003cli\u003eusado para casos de uso complexos (dos quais envolvem varias classes\ne métodos)\u003c/li\u003e\n\u003cli\u003ecomunicação entre objetos (troca de mensagens)\u003c/li\u003e\n\u003cli\u003emétodos/classes precisam estar previstos no diagrama de classes\u003c/li\u003e\n\u003cli\u003eparte sempre de um ator\u003c/li\u003e\n\u003cli\u003edefine objetos já instanciados e novos que serão instanciados\ndurante a execução\u003c/li\u003e\n\u003cli\u003e* → indica que uma mensagem pode ser ativada varias vezes\u003c/li\u003e\n\u003cli\u003equem recebe a mensagem é quem executa o método\u003c/li\u003e\n\u003cli\u003eparâmetros e seus retornos também também podem ser representados nas\nmensagens\u003c/li\u003e\n\u003cli\u003econdições são configuradas dentro de → []\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-175-cffi68ddjb4b/image_281.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 175"},{"content":"Autômato de pilha Quando há a necessidade de contar segue a ideia de um valor fazer empilhar e outro faz desempilhar geralmente começa com uma marca (por exemplo #) Toda palavra começa com ε(vazio) e termina com ε Se você tentar desempilhar e o valor não estiver no topo da pilha haverá um erro (programa termina, palavra não é aceita) transições seguem o seguinte padrão → (lê o valor, desempilha o valor -\u0026gt; empilha o valor), por exemplo (x, ε -\u0026gt; 1), poderíamos entender que ele vai ler da palavra de entrada o valor x, e se for x ele vai desempilhar nenhum valor e empilhar o valor 1 nesse exemplo estou usando ep representando ε.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-176-35fi6g7g876f/","summary":"\u003ch4 id=\"autômato-depilha\"\u003eAutômato de pilha\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eQuando há a necessidade de contar\u003c/li\u003e\n\u003cli\u003esegue a ideia de um valor fazer empilhar e outro faz desempilhar\u003c/li\u003e\n\u003cli\u003egeralmente começa com uma marca (por exemplo #)\u003c/li\u003e\n\u003cli\u003eToda palavra começa com ε(vazio) e termina com ε\u003c/li\u003e\n\u003cli\u003eSe você tentar desempilhar e o valor não estiver no topo da pilha\nhaverá um erro (programa termina, palavra não é aceita)\u003c/li\u003e\n\u003cli\u003etransições seguem o seguinte padrão → (lê o valor, desempilha o\nvalor -\u0026gt; empilha o valor), por exemplo (x, ε -\u0026gt; 1), poderíamos\nentender que ele vai ler da palavra de entrada o valor x, e se for x\nele vai desempilhar nenhum valor e empilhar o valor 1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-176-35fi6g7g876f/image_283.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 176"},{"content":" você não pode ler ε mais de uma vez seguida a pilha sempre deve terminar vazia para a palavra ser aceita ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-177-ah874af1985d/","summary":"\u003cul\u003e\n\u003cli\u003evocê não pode ler ε mais de uma vez seguida\u003c/li\u003e\n\u003cli\u003ea pilha sempre deve terminar vazia para a palavra ser aceita\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 177"},{"content":"Limites no infinito quando x tende ao infinito Limite infinito quando o resultado de f(x) é infinito ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/","summary":"\u003ch4 id=\"limites-noinfinito\"\u003eLimites no infinito\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equando x tende ao infinito\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_284.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_285.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_286.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_287.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"limite-infinito\"\u003eLimite infinito\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equando o resultado de f(x) é infinito\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_288.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-178-jfa2d71g7j3g/image_289.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 178"},{"content":" procedures não precisam retornar algo (diferente das funções) trigger reage a uma ação sem a necessidade de chama-lo diretamente cada SGBD tem sua linguagem para criar esses objetos (PL/SQL é o da ORACLE) PL/SQL bloco que utiliza SQL para executar coisas 3 partes → declaração (opcional), execução, tratamento de erros (opcional) adiciona mais coisas ao SQL (como loops, if, etc.) oracle por padrão, se você nãos tratar os erros, ele exibe o erro e para a execução dentro da declaração você pode declarar → constantes, variáveis, cursores(objetos que definem um DQL dentro) DECLARE -- declara os elementos -- variavel -- nome tipo [NOT NULL] := valor exemplo_1 NUMBER(4) NOT NULL := 4; exemplo_2 CHAR(1); -- ROWTYPE pega o tipo de uma linha de uma tabela (deixa mais rapido, usando cursors) -- TYPE pega o mesmo tipo de uma coluna de uma tabela exemplo_3 Tabela.coluna%Type; BEGIN -- execucao --exemplo SELECT idade, sexo INTO exemplo_1, exemplo_2 FROM Tabela WHERE id=1; -- aqui a Tabela precisa retornar exatemente 1 elemento -- uso do if IF ... THEN ... ELSE IF ... THEN ... ELSE ... END IF; EXCEPTION -- excecoes END; -- coloca algo no console -- || concatena elementos dbms_output.put_line(\u0026#39;test\u0026#39; || a || \u0026#39; test\u0026#39;); ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-179-fiade82cca51/","summary":"\u003cul\u003e\n\u003cli\u003eprocedures não precisam retornar algo (diferente das funções)\u003c/li\u003e\n\u003cli\u003etrigger reage a uma ação sem a necessidade de chama-lo diretamente\u003c/li\u003e\n\u003cli\u003ecada SGBD tem sua linguagem para criar esses objetos (PL/SQL é o da\nORACLE)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"plsql\"\u003ePL/SQL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebloco que utiliza SQL para executar coisas\u003c/li\u003e\n\u003cli\u003e3 partes → declaração (opcional), execução, tratamento de erros\n(opcional)\u003c/li\u003e\n\u003cli\u003eadiciona mais coisas ao SQL (como loops, if, etc.)\u003c/li\u003e\n\u003cli\u003eoracle por padrão, se você nãos tratar os erros, ele exibe o erro e\npara a execução\u003c/li\u003e\n\u003cli\u003edentro da declaração você pode declarar → constantes, variáveis,\ncursores(objetos que definem um DQL dentro)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eDECLARE\n  -- declara os elementos\n\n-- variavel\n-- nome tipo [NOT NULL] := valor\nexemplo_1 NUMBER(4) NOT NULL := 4;\nexemplo_2 CHAR(1);\n\n-- ROWTYPE pega o tipo de uma linha de uma tabela (deixa mais rapido, usando cursors)\n-- TYPE pega o mesmo tipo de uma coluna de uma tabela\nexemplo_3 Tabela.coluna%Type;\n\nBEGIN\n-- execucao\n\n--exemplo\nSELECT idade, sexo\nINTO exemplo_1, exemplo_2\nFROM Tabela\nWHERE id=1;\n-- aqui a Tabela precisa retornar exatemente 1 elemento \n\n-- uso do if\nIF ... THEN\n...\nELSE IF ... THEN\n...\nELSE\n...\nEND IF;\n\nEXCEPTION\n\n-- excecoes\n\nEND;\n\n\n-- coloca algo no console\n-- || concatena elementos\ndbms_output.put_line(\u0026#39;test\u0026#39; || a || \u0026#39; test\u0026#39;);\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 179"},{"content":"Áreas\nárea do circulo = pi * r²\nárea do triângulo = b * h / 2\npotências de 10 vs notação científica\npotencia de 10 não importa o numero que vem antes do *10^n (tbm chamado de mantissa)\njá em notação científica esse número deve ser ≥ 1 e \u0026lt; 10\nentão\n90 * 10⁵ em potência de 10 está correto\n90 * 10⁵ em notação científica está errado (o certo seria 9*10⁶)\nmantissa aumenta expoente diminui\nequação do segundo grau\nΔ \u0026gt; 0 → duas soluções\nΔ = 0 → uma solução\nΔ \u0026lt; 0 → sem solução\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-18-036f1eg6faec/","summary":"\u003cp\u003e\u003cstrong\u003eÁreas\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eárea do circulo = pi * r²\u003c/p\u003e\n\u003cp\u003eárea do triângulo = b * h / 2\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003epotências de 10 vs notação científica\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003epotencia de 10 não importa o numero que vem antes do *10^n (tbm\nchamado de mantissa)\u003c/p\u003e\n\u003cp\u003ejá em notação científica esse número deve ser ≥ 1 e \u0026lt; 10\u003c/p\u003e\n\u003cp\u003eentão\u003c/p\u003e\n\u003cp\u003e90 * 10⁵ em potência de 10 está correto\u003c/p\u003e\n\u003cp\u003e90 * 10⁵ em notação científica está errado (o certo seria 9*10⁶)\u003c/p\u003e","title":"Ciências da computação dia 18"},{"content":"pontos de função com base no tamanho da entrada e saída de uma função, qual a pontuação dela estimativa esforço quantidade de pessoas para fazer o software ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-180-a2iad3f9bfg8/","summary":"\u003ch4 id=\"pontos-defunção\"\u003epontos de função\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecom base no tamanho da entrada e saída de uma função, qual a\npontuação dela\u003c/li\u003e\n\u003cli\u003eestimativa\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"esforço\"\u003eesforço\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equantidade de pessoas para fazer o software\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 180"},{"content":"Hierarquia de Chomsky Descreve os tipos de autômatos e o que eles conseguem fazer ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-181-71b530cjeeb/","summary":"\u003ch4 id=\"hierarquia-dechomsky\"\u003eHierarquia de Chomsky\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eDescreve os tipos de autômatos e o que eles conseguem fazer\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://en.wikipedia.org/wiki/Chomsky_hierarchy\\\"\u003ewikipedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-181-71b530cjeeb/image_290.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 181"},{"content":"Exceptions NO_DATA_FOUND -- exceção que informa que nenhum dado foi encontrado CASE_NOT_FOUND -- variavel do case não existe TOO_MANY_ROWS -- quando um SELECT INTO retorna varias linhas OTHERS -- error generico DECLARE ... BEGIN -- se voce tiver varios inserts, e você quer que a alteração já seja salva -- use o commit depois dele, lembrando que se for apenas um comando, não -- há necessidade de fazer isso INSERT .... COMMIT; INSERT ... EXCEPTION WHEN \u0026lt;error\u0026gt; THEN ... WHEN NO_DATA_FOUND THEN ... WHEN CASE_NOT_FOUND THEN ... WHEN TOO_MANY_ROWS THEN ... WHEN OTHERS THEN --erro generico ... END; -- para levantar um erro use o seguinte comando raise application_error(\u0026lt;number\u0026gt;, \u0026lt;message\u0026gt;, [TRUE|FALSE]); -- o numero vai de -20000 ate -20999 -- e o TRUE/FALSE diz se é pegar pegar todos os erros (TRUE) ou só -- o primeiro (FALSE) Cursor cursor implícito → consultas em PL/SQL que retorna 1 linha cursor explicito → usado quando for retornar várias rows CURSOR \u0026lt;cursor_name\u0026gt; [parametro1, parametro2, ...] IS SELECT ...; OPEN cursor_name; -- executa a query do cursor e faz com que os valores -- virem um array FETCH cursor_name INTO variavel1, variavel2; -- pega uma linha do cursor CLOSE cursor_name; -- finaliza o cursor cursor_name%FOUND -- TRUE quando o fetch retorna sucesso cursor_name%NOTFOUND -- TRUE quando não foi possivel pegar mais nada (ultimo fetch) cursor_name%ISOPEN -- TRUE quando o cursor esta em uso cursor_name%ROWCOUNT -- total de fetchs com sucesso cursor_name%status -- status/eventos do cursor RAPD(value, total, pad); -- padding de texto %ROWTYPE -- deixa mais pesad a execucao ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-182-7i1h21d4i7if/","summary":"\u003ch4 id=\"exceptions\"\u003eExceptions\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eNO_DATA_FOUND -- exceção que informa que nenhum dado foi encontrado\nCASE_NOT_FOUND -- variavel do case não existe\nTOO_MANY_ROWS -- quando um SELECT INTO retorna varias linhas\nOTHERS -- error generico\n\nDECLARE\n...\nBEGIN\n\n  -- se voce tiver varios inserts, e você quer que a alteração já seja salva\n  -- use o commit depois dele, lembrando que se for apenas um comando, não\n  -- há necessidade de fazer isso\n  INSERT ....\n  COMMIT;\n\n  INSERT ...\n\n\nEXCEPTION\n  WHEN \u0026lt;error\u0026gt; THEN\n    ...\n  WHEN NO_DATA_FOUND THEN\n    ...\n  WHEN CASE_NOT_FOUND THEN\n    ...\n  WHEN TOO_MANY_ROWS THEN\n    ...\n  WHEN OTHERS THEN --erro generico\n    ...\nEND;\n\n\n\n-- para levantar um erro use o seguinte comando\nraise application_error(\u0026lt;number\u0026gt;, \u0026lt;message\u0026gt;, [TRUE|FALSE]);\n-- o numero vai de -20000 ate -20999\n-- e o TRUE/FALSE diz se é pegar pegar todos os erros (TRUE) ou só \n-- o primeiro (FALSE)\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"cursor\"\u003eCursor\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecursor implícito → consultas em PL/SQL que retorna 1 linha\u003c/li\u003e\n\u003cli\u003ecursor explicito → usado quando for retornar várias rows\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCURSOR \u0026lt;cursor_name\u0026gt; [parametro1, parametro2, ...] IS SELECT ...;\n\nOPEN cursor_name; -- executa a query do cursor e faz com que os valores \n                  -- virem um array\n\nFETCH cursor_name INTO variavel1, variavel2; -- pega uma linha do cursor\nCLOSE cursor_name; -- finaliza o cursor\ncursor_name%FOUND -- TRUE quando o fetch retorna sucesso\ncursor_name%NOTFOUND -- TRUE quando não foi possivel pegar mais nada (ultimo fetch)\ncursor_name%ISOPEN -- TRUE quando o cursor esta em uso\ncursor_name%ROWCOUNT -- total de fetchs com sucesso\ncursor_name%status -- status/eventos do cursor\n\n\nRAPD(value, total, pad); -- padding de texto\n\n%ROWTYPE -- deixa mais pesad a execucao\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 182"},{"content":"Qualidade de software modelos de qualidade (semelhante ao ISO) → CMMI, MPS.BR trabalho com qualidade = produto de qualidade implica: um software confiável, sem defeitos, acessível, seguro, portável, interoperável(sistema capaz de se comunicar com outros) pode ser algo subjetivo ao cliente, sendo necessário estipular as expectativas e tentar quebra-las gerenciamento total da qualidade → atender as expectativas do cliente; desenvolver processos para melhoria constante para garantir a qualidade → usar métodos, técnicas, ferramentas, versionamento, padrões, métricas, registros, etc. controle de qualidade → evitar que produtos defeituosos sejam entregues garantia de qualidade → fazer o software com o minimo de defeitos avaliação → classificação dos processos/produtos auditoria → verificar se o produto segue os padrões/normas através de evidências de testes, observações, medições, etc. Teste de software objetivo é encontrar erros, e não fazer os testes passarem Falha → software não consegue executar sua função (aparente ao usuário) Falta → causa de uma falha Erro → instabilidade que vem de uma falta e pode se tornar uma falha Dados de teste → amostra do que seria uma entrada real Casos de teste → cenários de execução usando os dados de teste e sua saída esperada Eficácia dos testes → quanto mais erros você consegue descobrir com o menor esforço Teste funcional(caixa preta, black box) → coloca o software para funcionar e vê como ele age com as entradas (analisa partes pequenas do software, como funções, requisitos) Teste Estrutural(caixa branca, white box) → Baseado no código, analisá o funcionamento interno (complexidade ciclomática, big O, etc) Técnicas Para testes black box partição por equivalência → quando os possíveis dados de entrada estão em blocos de válidos e inválidos, então pega-se alguns dados validos e inválidos para avaliar análise de valor limite → quando seus dados também estão divididos em blocos de válidos e inválidos, mas dessa vez você pega aqueles que estão no limite entre um bloco e outro Tabela de decisão → tabela criada a partir das regras de negócio, visando testar todos os casos possíveis (diferentes combinações de entradas) Técnicas para testes White box complexidade ciclomática → vê a quantida de desvios do fluxo principal do programa (quantidade de ifs,for, while, etc). Nesses casos é necessário criar testes para cada caminho possível. Para isso podemos usar uma espécie de autômato, e o numero de caminhos é = numero de transições (E) \u0026mdash; número de estados (N) + 2 V = E \u0026mdash; N + 2\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-183-bf6j6a9j66ef/","summary":"\u003ch4 id=\"qualidade-desoftware\"\u003eQualidade de software\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emodelos de qualidade (semelhante ao ISO) → CMMI, MPS.BR\u003c/li\u003e\n\u003cli\u003etrabalho com qualidade = produto de qualidade\u003c/li\u003e\n\u003cli\u003eimplica: um software confiável, sem defeitos, acessível, seguro,\nportável, interoperável(sistema capaz de se comunicar com outros)\u003c/li\u003e\n\u003cli\u003epode ser algo subjetivo ao cliente, sendo necessário estipular as\nexpectativas e tentar quebra-las\u003c/li\u003e\n\u003cli\u003egerenciamento total da qualidade → atender as expectativas do\ncliente; desenvolver processos para melhoria constante\u003c/li\u003e\n\u003cli\u003epara garantir a qualidade → usar métodos, técnicas, ferramentas,\nversionamento, padrões, métricas, registros, etc.\u003c/li\u003e\n\u003cli\u003econtrole de qualidade → evitar que produtos defeituosos sejam\nentregues\u003c/li\u003e\n\u003cli\u003egarantia de qualidade → fazer o software com o minimo de defeitos\u003c/li\u003e\n\u003cli\u003eavaliação → classificação dos processos/produtos\u003c/li\u003e\n\u003cli\u003eauditoria → verificar se o produto segue os padrões/normas através\nde evidências de testes, observações, medições, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"teste-desoftware\"\u003eTeste de software\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eobjetivo é encontrar erros, e não fazer os testes passarem\u003c/li\u003e\n\u003cli\u003eFalha → software não consegue executar sua função (aparente ao\nusuário)\u003c/li\u003e\n\u003cli\u003eFalta → causa de uma falha\u003c/li\u003e\n\u003cli\u003eErro → instabilidade que vem de uma falta e pode se tornar uma falha\u003c/li\u003e\n\u003cli\u003eDados de teste → amostra do que seria uma entrada real\u003c/li\u003e\n\u003cli\u003eCasos de teste → cenários de execução usando os dados de teste e sua\nsaída esperada\u003c/li\u003e\n\u003cli\u003eEficácia dos testes → quanto mais erros você consegue descobrir com\no menor esforço\u003c/li\u003e\n\u003cli\u003eTeste funcional(caixa preta, black box) → coloca o software para\nfuncionar e vê como ele age com as entradas (analisa partes pequenas\ndo software, como funções, requisitos)\u003c/li\u003e\n\u003cli\u003eTeste Estrutural(caixa branca, white box) → Baseado no código,\nanalisá o funcionamento interno (complexidade ciclomática, big O,\netc)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"técnicas-para-testes-blackbox\"\u003eTécnicas Para testes black box\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epartição por equivalência → quando os possíveis dados de entrada\nestão em blocos de válidos e inválidos, então pega-se alguns dados\nvalidos e inválidos para avaliar\u003c/li\u003e\n\u003cli\u003eanálise de valor limite → quando seus dados também estão divididos\nem blocos de válidos e inválidos, mas dessa vez você pega aqueles\nque estão no limite entre um bloco e outro\u003c/li\u003e\n\u003cli\u003eTabela de decisão → tabela criada a partir das regras de negócio,\nvisando testar todos os casos possíveis (diferentes combinações de\nentradas)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"técnicas-para-testes-whitebox\"\u003eTécnicas para testes White box\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecomplexidade ciclomática → vê a quantida de desvios do fluxo\nprincipal do programa (quantidade de ifs,for, while, etc). Nesses\ncasos é necessário criar testes para cada caminho possível. Para\nisso podemos usar uma espécie de autômato, e o numero de caminhos é\n= numero de transições (E) \u0026mdash; número de estados (N) + 2\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eV = E \u0026mdash; N + 2\u003c/strong\u003e\u003c/p\u003e","title":"Ciências da computação dia 183"},{"content":"\nNo exemplo acima, temos uma memoria genérica em série.\nNesse exemplo, temos 4 bancos de memória (B0-B3), 3 barramentos (dados (D), endereços(A) e saída de dados(O)), além de elementos como DE (decodificador de endereços), e os componentes (parecidos com uma porta not) ligados ao bus de saída, representando buffers com um trigger.\nNesse circuito, podemos setar o valor que queremos no barramento de dados, podemos configurar o endereço que o dado vai ser guardado no barramento de endereços. Ao darmos pulsos no clock(do qual foi omitido aqui), os dados passarão para os componentes, e quando ativarmos o E(enable, para escrita), o decodificador de endereços usará uma logica interna para determinar quais bancos serão necessários para guardar os dados, fazendo com que dados diferentes fiquem em endereços diferentes, fazendo então com que tenhamos mais endereços para guardar dados do que em circuitos paralelo).\nApós guardar o dado, podemos colocar novamente o endereço que queremos ler, e o segundo DE se encarregará de verificar quais são os bancos necessários e assim acionar o trigger dos buffers para a passagem dos dados para o barramento de saída.\nNesse exemplo, é possível ver que os endereços dos bancos vão de Am-3 até A0, enquanto o barramento em si vai de Am-1 até A0, isso acontece pois os 2 bits mais significativos são usados para identificar o banco usado (como no caso aqui estamos usando 4 bancos(2²) dois bits é o suficiente).\nSe quiséssemos, por exemplo, uma memoria de 1Kb, poderíamos usar a memoria base de 256x8, então 4*256 = 1024 = 1Kb, sendo assim, o total de bits para endereçar 1Kb é 2¹⁰, ou seja A9..A0. (repare que 256 = 2⁸ ou seja A7..A0, novamente os dois bits entram em ação).\nPara ver melhor como os endereços são distribuídos entre os bancos, podemos pegar o exemplo de 1Kb e identificar o range de valores da seguinte forma:\nB0 → 0000000000\u0026ndash;0011111111\nB1 → 0100000000\u0026ndash;0111111111\nB2 → 1000000000\u0026ndash;1011111111\nB3 → 1100000000\u0026ndash;1111111111\nRepare que a cada iteração é feito +1 com os dois primeiros bits, indicando então qual o banco será usado para determinado valor.\nCom isso podemos entender porque o DE utiliza os dois bits mais significativos.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-184-jc0gib1ffc23/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-184-jc0gib1ffc23/image_292.png\"\u003e\u003c/p\u003e\n\u003cp\u003eNo exemplo acima, temos uma memoria genérica em série.\u003c/p\u003e\n\u003cp\u003eNesse exemplo, temos 4 bancos de memória (B0-B3), 3 barramentos (dados\n(D), endereços(A) e saída de dados(O)), além de elementos como DE\n(decodificador de endereços), e os componentes (parecidos com uma porta\nnot) ligados ao bus de saída, representando buffers com um trigger.\u003c/p\u003e\n\u003cp\u003eNesse circuito, podemos setar o valor que queremos no barramento de\ndados, podemos configurar o endereço que o dado vai ser guardado no\nbarramento de endereços. Ao darmos pulsos no clock(do qual foi omitido\naqui), os dados passarão para os componentes, e quando ativarmos o\nE(enable, para escrita), o decodificador de endereços usará uma logica\ninterna para determinar quais bancos serão necessários para guardar os\ndados, fazendo com que dados diferentes fiquem em endereços diferentes,\nfazendo então com que tenhamos mais endereços para guardar dados do que\nem circuitos paralelo).\u003c/p\u003e","title":"Ciências da computação dia 184"},{"content":"\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-185-998f3hagh237/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_293.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_294.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_295.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_296.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_297.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_298.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_299.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_300.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_301.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-185-998f3hagh237/image_302.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 185"},{"content":"Estratégias de teste teste de unidade → testa a menor unidade do software (classes, funções, etc) de forma independente teste de integração → testa a comunicação entre as partes (entre classes, por exemplo) teste de validação → testa os requisitos teste de sistema → coloca o projeto em um sistema próximo do real e testa-se , por exemplo, requisitos não funcionais ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-186-bic4e9a8j0c3/","summary":"\u003ch4 id=\"estratégias-deteste\"\u003eEstratégias de teste\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eteste de unidade → testa a menor unidade do software (classes,\nfunções, etc) de forma independente\u003c/li\u003e\n\u003cli\u003eteste de integração → testa a comunicação entre as partes (entre\nclasses, por exemplo)\u003c/li\u003e\n\u003cli\u003eteste de validação → testa os requisitos\u003c/li\u003e\n\u003cli\u003eteste de sistema → coloca o projeto em um sistema próximo do real e\ntesta-se , por exemplo, requisitos não funcionais\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 186"},{"content":"Procedures procedimentos armazenados (como uma função sem retorno) pode ser escrito em PL/SQL, C, JAVA, etc. podem ser chamadas por softwares externos são compilados podem ser agendados não é permitido COMMIT, ROLLBACK, SAVEPOINT dentro deles CREATE OR REPLACE procedure_name [parametros] AS [variaveis] \u0026lt;bloco PL/SQL\u0026gt;; -- parâmetros podem ser de entrada(IN) ou de saida(OUT) -- por padrao ele é IN \u0026lt;name\u0026gt; IN \u0026lt;type\u0026gt;; \u0026lt;name\u0026gt; OUT \u0026lt;type\u0026gt;; Triggers gatilho atrelado à uma tabela pode ser atrelado ao evento de INSERT, UPDATE e/ou DELETE não necessita de privilégios não é permitido COMMIT, ROLLBACK, SAVEPOINT dentro deles BEFORE, AFTER, statement, row -- trigger type INSERT, UPDATE, DELETE -- trigger event BEFORE INSERT OR UPDATE OF salario, funcao ON empregado -- type colunas tabela -- WHEN pode ser usado para dar uma restrição de quando o trigger vai ser -- rodado, exemplo: BEFORE INSERT OR UPDATE OF salario, funcao ON empregado WHEN salario \u0026gt; 10000 -- ao usar o BEFORE, você pode pegar os novos dados passados pela query usando -- o :NEW. essa clausula dara para você acesso à todos os novos dados -- para a clausula WHEN no inicio, não é necessário usar :NEW basta usar NEW BEFORE INSERT OR UPDATE OF salario, funcao ON empregado WHEN NEW.salario \u0026gt; 10000 ... IF(:NEW.salario == 2000) THEN .... .... -- como certas queries podem modificar varias linhas -- pode ser necessário utilizar a clausula FOR EACH ROW, aplicando o trigger -- para cada row modificada CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE OF salario, funcao ON empregado FOR EACH ROW WHEN NEW.salario \u0026gt; 1000 ....; -- alem do NEW, há também o OLD, quando você vai deletar ou modificar algo -- sendo assim: -- INSERT: NEW -- UPDATE: NEW OLD -- DELETE: OLD -- obs: apenas os dados adicionados/editados são acessíveis por essas clausulas CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE OF salario, funcao ON empregado FOR EACH ROW WHEN NEW.salario \u0026gt; 1000 AND OLD.funcao = \u0026#39;RH\u0026#39; ....; -- se um trigger possui mais de um evento atrelado a ele, você possui três -- variaveis para verificar qual foi o evento: INSERTING, UPDATING e DELETING CREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE OF salario, funcao ON empregado FOR EACH ROW WHEN NEW.salario \u0026gt; 1000 AND OLD.funcao = \u0026#39;RH\u0026#39; BEGIN IF INSERTING THEN ... ELSE ... END IF; ....; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-187-d84d396d5aeb/","summary":"\u003ch4 id=\"procedures\"\u003eProcedures\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprocedimentos armazenados (como uma função sem retorno)\u003c/li\u003e\n\u003cli\u003epode ser escrito em PL/SQL, C, JAVA, etc.\u003c/li\u003e\n\u003cli\u003epodem ser chamadas por softwares externos\u003c/li\u003e\n\u003cli\u003esão compilados\u003c/li\u003e\n\u003cli\u003epodem ser agendados\u003c/li\u003e\n\u003cli\u003enão é permitido COMMIT, ROLLBACK, SAVEPOINT dentro deles\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE OR REPLACE procedure_name [parametros] AS\n[variaveis]\n\u0026lt;bloco PL/SQL\u0026gt;;\n\n-- parâmetros podem ser de entrada(IN) ou de saida(OUT)\n-- por padrao ele é IN\n\u0026lt;name\u0026gt; IN \u0026lt;type\u0026gt;;\n\u0026lt;name\u0026gt; OUT \u0026lt;type\u0026gt;;\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"triggers\"\u003eTriggers\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egatilho atrelado à uma tabela\u003c/li\u003e\n\u003cli\u003epode ser atrelado ao evento de INSERT, UPDATE e/ou DELETE\u003c/li\u003e\n\u003cli\u003enão necessita de privilégios\u003c/li\u003e\n\u003cli\u003enão é permitido COMMIT, ROLLBACK, SAVEPOINT dentro deles\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eBEFORE, AFTER, statement, row -- trigger type\nINSERT, UPDATE, DELETE -- trigger event\n\nBEFORE INSERT OR UPDATE    OF  salario, funcao   ON  empregado\n-- type                           colunas             tabela\n\n-- WHEN pode ser usado para dar uma restrição de quando o trigger vai ser \n-- rodado, exemplo:\nBEFORE INSERT OR UPDATE OF salario, funcao ON empregado WHEN salario \u0026gt; 10000\n\n\n-- ao usar o BEFORE, você pode pegar os novos dados passados pela query usando\n-- o :NEW. essa clausula dara para você acesso à todos os novos dados\n-- para a clausula WHEN no inicio, não é necessário usar :NEW basta usar NEW\n\nBEFORE INSERT OR UPDATE OF salario, funcao ON empregado \nWHEN NEW.salario \u0026gt; 10000\n...\nIF(:NEW.salario == 2000) THEN ....\n....\n\n-- como certas queries podem modificar varias linhas\n-- pode ser necessário utilizar a clausula FOR EACH ROW, aplicando o trigger \n-- para cada row modificada\nCREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE \n  OF salario, funcao ON empregado FOR EACH ROW\n  WHEN NEW.salario \u0026gt; 1000\n....;\n\n-- alem do NEW, há também o OLD, quando você vai deletar ou modificar algo\n-- sendo assim:\n-- INSERT: NEW\n-- UPDATE: NEW OLD\n-- DELETE:     OLD\n-- obs: apenas os dados adicionados/editados são acessíveis por essas clausulas\nCREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE \n  OF salario, funcao ON empregado FOR EACH ROW\n  WHEN NEW.salario \u0026gt; 1000 AND OLD.funcao = \u0026#39;RH\u0026#39;\n....;\n\n\n-- se um trigger possui mais de um evento atrelado a ele, você possui três\n-- variaveis para verificar qual foi o evento:\nINSERTING, UPDATING e DELETING\n\n\nCREATE OR REPLACE TRIGGER trigger_name BEFORE INSERT OR UPDATE \n  OF salario, funcao ON empregado FOR EACH ROW\n  WHEN NEW.salario \u0026gt; 1000 AND OLD.funcao = \u0026#39;RH\u0026#39;\n  BEGIN\n    IF INSERTING THEN\n      ...\n    ELSE\n      ...\n    END IF;\n....;\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 187"},{"content":"Generalização dos limites fundamentais Continuidade funções deriváveis uma função pode no geral não ser continua, mas em algum pode ela pode ser você até pode simplificar a função original, mas sempre pense se isso não implicará em mudanças no domínio existem casos onde a função é definida em sf(a), mas em f(a) não ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-187-he82626j24gc/","summary":"\u003ch4 id=\"generalização-dos-limites-fundamentais\"\u003eGeneralização dos limites fundamentais\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-187-he82626j24gc/image_303.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"continuidade\"\u003eContinuidade\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003efunções deriváveis\u003c/li\u003e\n\u003cli\u003euma função pode no geral não ser continua, mas em algum pode ela\npode ser\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"função continua em\\u00a0a\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-187-he82626j24gc/image_304.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"algumas funções não continuas\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-187-he82626j24gc/image_305.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003evocê até pode simplificar a função original, mas sempre pense se\nisso não implicará em mudanças no domínio\u003c/li\u003e\n\u003cli\u003eexistem casos onde a função é definida em sf(a), mas em f(a) não\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-187-he82626j24gc/image_306.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 187"},{"content":"Maquina de Turing automato capaz de representar qualquer algoritmo computacional é um AFD não precisa de transições para todos os estados ele começa a ler a fita a partir de um símbolo inicial (como um δ) cada transição tem 3 parâmetros(leia -\u0026gt; escreva, vá) vá pode ser direita ou esquerda quando você não quer escrever outro valor, você coloca o mesmo (A -\u0026gt; A) pense em uma fita infinita, do qual uma cabeça de leitura pode ler, modificar valores e ir para a direita ou esquerda nesse caso, d representa δ e 3 representa ε\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-188-2c1fc6ij698b/","summary":"\u003ch4 id=\"maquina-deturing\"\u003eMaquina de Turing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eautomato capaz de representar qualquer algoritmo computacional\u003c/li\u003e\n\u003cli\u003eé um AFD\u003c/li\u003e\n\u003cli\u003enão precisa de transições para todos os estados\u003c/li\u003e\n\u003cli\u003eele começa a ler a fita a partir de um símbolo inicial (como um\n\u003cstrong\u003eδ)\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003ecada transição tem 3 parâmetros(leia -\u0026gt; escreva, vá)\u003c/li\u003e\n\u003cli\u003evá pode ser direita ou esquerda\u003c/li\u003e\n\u003cli\u003equando você não quer escrever outro valor, você coloca o mesmo (A\n-\u0026gt; A)\u003c/li\u003e\n\u003cli\u003epense em uma fita infinita, do qual uma cabeça de leitura pode ler,\nmodificar valores e ir para a direita ou esquerda\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-188-2c1fc6ij698b/image_307.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 188"},{"content":"continuando códigos ponderados código auto-complementável → quando um código ponderado tem o valor 1111 para o decimal 9 e quando você faz 9 \u0026mdash; n é só você inverter n (inverter 0 com 1 e 1 com 0)\nex:\npesos respectivos(3, -1, 1, 6)\n1 | 0 0 1 0\n2 | 1 1 0 0\n7 | 0 0 1 1 (9\u0026ndash;2 (2 é o n))\n8 | 11 0 1 (9\u0026ndash;1)\nobs: soma dos pesos de um código ponderado precisa ser ≥ 9\nCódigos não Ponderados não possuem pesos obedecem regras especificas a sua aplicação código excesso de 3\nvocê pega o numero atual em binário e soma 3 em binário\n1 em excesso de 3\n0 0 0 1 + 0 0 1 1 = 0 1 0 0\ncódigo cíclico\nApenas um bit se modifica de uma palavra para outra (essa distância é chamada de distância entre palavras) A lógica para a criação da tabela de código depende da lógica da aplicação dele a distancia entre 0 e 9 deve ser 1 tbm, por isso que é ciclico a distancia vai se repetindo código de Gray\ntambém é cíclico criação com comprimento n\ncomprimento 1:\n0\n1\ncomprimento 2\n0 | 0\n0 | 1\n\u0026mdash; \u0026mdash; (espelho)\n1 | 1\n1 | 0\nos valores são espelhados e do lado esquerdo da | tudo que esta para cima do espelho é sempre 0 e tudo que está para baixo é 0\ncomprimento 3\n0 | 0 0\n0 | 0 1\n0 | 1 1\n0 | 1 0\n\u0026mdash; \u0026mdash; \u0026mdash; (espelho)\n1 | 1 0\n1 | 1 1\n1 | 0 1\n1 | 0 0\nrepare que na parte direita acima do espelho é exatamente o resultado do código de tamanho n \u0026mdash; 1 ou seja código de tamanho 2, e isso se repete a todo os subsequentes\nentão um template geral\n0 | código n \u0026mdash; 1\n\u0026mdash; \u0026mdash; (espelho)\n1 | código n \u0026mdash; 1 espelhado\nbinário para código Gray\npara transformar binário em código Gray você deixa o bit mais significativo como 1 e o resto você vai somando com o antecessor e desconsiderando o carry\nex:\n1 1 0 0 1 0 1(2)\n1 (1 +1 (\u0026ldquo;desconsidera o carry\u0026rdquo;)) (1 + 0) (0 + 0) (0 + 1) (1 + 0) (0+ 1)\n1 0 1 0 1 1 1\ncódigo Gray para binário\npara o caminho inverso você deixa o mais significativo como 1 e pega o resultado anterior menos binário atual (lembrando que 0\u0026ndash;1 = 1)\n1 0 1 0 0 0 0 1 1 1\n1 (1\u0026ndash;0) 1 1\n1 1 (1\u0026ndash;1) = 1 1 0\n1 1 0 (0\u0026ndash;0) = 1 1 0 0\n1 1 0 0 (0\u0026ndash;0) = 1 1 0 0 0\n1 1 0 0 0 (0\u0026ndash;0) = 1 1 0 0 0 0\n1 1 0 0 0 0 (0\u0026ndash;0) =1 1 0 0 0 0 0\n1 1 0 0 0 0 0 (0\u0026ndash;1) = 1 1 0 0 0 0 0 1\n1 1 0 0 0 0 0 1 (1\u0026ndash;1) = 1 1 0 0 0 0 0 1 0\n1 1 0 0 0 0 0 1 0 (0\u0026ndash;1) = 1 1 0 0 0 0 0 1 0 1(código Gray)\nDetecção e correção de erros detecção e correção na transmissão de dados segurança e confiabilidade nos dados transmitidos Paridade → total de dígitos 1\nParidade par → total de dígitos 1 é par\nParidade ímpar → total de dígitos 1 é ímpar\nDistância entre palavras → número de bits diferentes de uma palavra para outra\nDistância entre códigos → menor distância entre palavras de um código\nBCD paridade par → para deixar um BCD com paridade par, adicionamos uma coluna sem valor (0) que não implicará nas contas, apenas na sua paridade, e caso o numero de 1 for par adicionamos um 0 nessa coluna se não adicionamos 1 (para paridade ímpar é só fazer o inverso)\ncódigo ponderado 2 em 5 → código com pesos respectivos (0, 1, 2, 4, 7) → código com paridade par com todos os código com 2 números 1 e 5 bits, por isso 2 em 5, e como sua primeira coluna é 0 então ela não entra nas contas, apenas para paridade\ncódigos dectores e corretores de erros\ncódigo que possuem uma paridade detectar\ncaso uma informação seja enviada e não esteja na tabela ou não siga a paridade é então detectado um erro\nNo entanto caso mais de um bit seja modificado, provavelmente vai existir um valor desse na tabela de códigos e não será detectado um erro, e o valor enviado será considerado outro, esse fato é chamado de erro na interpretação\nNo geral os erros que ocorrem são erros únicos (apenas 1 bit de erro) por isso no geral são adicionados apenas um bit de paridade\nAlém disso com a paridade também aumenta-se a distância do código, sendo assim para detectar um erro, a distância do código precisa ser pelo menos n + 1 (n = numero de erros) = 2\ncorrigir\npara corrigir o erro você precisa ter uma distância mínima de n * 2 + 1, no exemplo anterior 2 * 1 + 1 = 3\nou seja\ndigamos que nossa tabela de codigos é a seguinte\n0 0 0\n1 1 1\ncaso a gente envie 0 0 0 mas ocorra um erro no meio e o valor que vai chegar seja 0 0 1\nentão deverá ser necessário olhar na tabela e ver a menor distância de palavras entre a errada (001) e as que estão na tabela, a menor distância será o valor certo\nentão\ndistancia entre 001 e 000 = 1\ndistancia entre 001 e 111 = 2\nentão o valor correto é 000 e o valor foi corrigido\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-19-4dgh0g4gb5i2/","summary":"\u003ch3 id=\"continuando-códigos-ponderados\"\u003econtinuando códigos ponderados\u003c/h3\u003e\n\u003cp\u003ecódigo auto-complementável → quando um código ponderado tem o valor 1111\npara o decimal 9 e quando você faz 9 \u0026mdash; n é só você inverter n\n(inverter 0 com 1 e 1 com 0)\u003c/p\u003e\n\u003cp\u003eex:\u003c/p\u003e\n\u003cp\u003epesos respectivos(3, -1, 1, 6)\u003c/p\u003e\n\u003cp\u003e1 | 0 0 1 0\u003c/p\u003e\n\u003cp\u003e2 | 1 1 0 0\u003c/p\u003e\n\u003cp\u003e7 | 0 0 1 1 (9\u0026ndash;2 (2 é o n))\u003c/p\u003e\n\u003cp\u003e8 | 11 0 1 (9\u0026ndash;1)\u003c/p\u003e","title":"Ciências da computação dia 19"},{"content":"Script(interpretado) Em linguagens de script, os comados são interpretados e executados linha a linha pelo interpretador.\nCompilação Todo o código é escrito e depois o compilador procura por erros e traduz os comandos para linguagem de máquina.\nPartes do compilador Análise Na parte da análise, o compilador verifica se o código está sintaticamente e semanticamente correto, caso negativo os erros são mostrados para o usuário.\nAlém disso, aqui é criado uma representação intermediária do programa em formato de árvore, assim como uma tabela com os símbolos usados.\nSíntese Aqui o programa objeto em si é construído a partir da estrutura intermediária gerada na análise.\nEstrutura do compilador Analisador léxico Aqui cada linha do programa é quebrada em \u0026rsquo;tokens\u0026rsquo; (partes da linha de fazem sentido estarem juntas por si só) e atribui valores para elas dando significado.\nObs: cada parte é chamada de lexema, e o lexema com os valores (como uma hashtable chave-valor) é chamado de token.\n# exemplo if a \u0026gt; b: \u0026lt;id-1, if, palavra-reservada\u0026gt; \u0026lt;id-2, a, variavel, inteiro\u0026gt; \u0026lt;id-3, b, variavel, inteiro\u0026gt; \u0026lt;id-4, \u0026gt;, comparador\u0026gt; \u0026lt;id-5, :, stop-symbol\u0026gt; ## alem disso aqui é gerado a tabela com esses elementos (tabela de simbolos) | id | symbol | type | function | value | |------|----------|--------|------------|-------| | 1 | if | - | reservado | - | | 2 | a | int | variavel | 10 | | 3 | b | int | variavel | 30 | | 4 | \u0026gt; | - | comparador | - | | 5 | : | - | stop | - | Esse formato é interessante, pois poderíamos pensar nisso como um automato também. Sendo assim poderíamos pegar e criar um autômato para reconhecer cada token separadamente.\nOBS: lembre-se que os lexemas não são necessariamente separados por espaço, poderíamos repensar no exemplo como: \u0026ldquo;if(a\u0026gt;b):\u0026rdquo;\nAnalisador sintático Com ele, pegamos os tokens, e criamos uma representação em formato de árvore. Cada Nó pai é uma operação e os filhos os argumentos ou operandos.\nAnalisador Semântico Aqui ele verifica por incongruências no código, como variáveis não declaradas, variáveis de tipos diferentes em comparações, etc.\nAlém disso, se necessário ele pode fazer conversões simples, como int to float.\nGerador de código intermediário Aqui a árvore é convertida em um código com a sequencia de execução.\nNão é necessariamente assembly, mas se aproxima de como será a estrutura do assembly final.\nOtimização Aqui é feita toda e qualquer otimização possível no código intermediário para reduzir ciclos necessários.\nEssa parte pode, em alguns casos, estar junto com a geração do código intermediário.\nNotas Função INPUT é bloqueante, uma vez que precisa de fazer várias operações no hardware e esperar por elas para guardar valores com o sinal, o bit mais significativo é reservado para o sinal, sendo 1 para \u0026lsquo;-\u0026rsquo; e 0 para \u0026lsquo;+\u0026rsquo; Para guardar floats uma parte dos bits (parte mais significativa) guarda os números, e a parte menos significativa para guardar as casas decimais. Com isso, para operações basta ter dois números nesse formato, fazer a operação com a parte mais significativa e ajustar as casas decimais ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-190-bjcb630h1f5d/","summary":"\u003ch4 id=\"scriptinterpretado\"\u003eScript(interpretado)\u003c/h4\u003e\n\u003cp\u003eEm linguagens de script, os comados são interpretados e executados linha\na linha pelo interpretador.\u003c/p\u003e\n\u003ch4 id=\"compilação\"\u003eCompilação\u003c/h4\u003e\n\u003cp\u003eTodo o código é escrito e depois o compilador procura por erros e traduz\nos comandos para linguagem de máquina.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-190-bjcb630h1f5d/image_308.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"partes-do-compilador\"\u003ePartes do compilador\u003c/h3\u003e\n\u003ch4 id=\"análise\"\u003eAnálise\u003c/h4\u003e\n\u003cp\u003eNa parte da análise, o compilador verifica se o código está\nsintaticamente e semanticamente correto, caso negativo os erros são\nmostrados para o usuário.\u003c/p\u003e\n\u003cp\u003eAlém disso, aqui é criado uma representação intermediária do programa em\nformato de árvore, assim como uma tabela com os símbolos usados.\u003c/p\u003e","title":"Ciências da computação dia 190"},{"content":"Sistemas de informação qualquer sistema (digital ou não) que armazena, coleta, processa e distribui informações para a tomada de decisão. O ambiente pode ser visto como o local onde o sistema está rodando o feedback pode ser visto como o estímulo de retorno do usuário benefícios → aumento da eficiência, monitoramento, coleta de informações, etc. componente do SI → pessoas, hardware, software, dados, rede tipos de usuários do SI → especialista (quem conhece as Tecnologias) e usuário final (quem não sabe nada de tecnologia, mas precisa usar o sistema) Pessoas de culturas diferentes usam os sistemas de maneiras diferentes Dimensões do sistema de informação organização como a empresa está organizada Para isso existem 2 tipos de sistemas: sob medida para a empresa e o de prateleira (comprado no mercado e a empresa precisa se moldar a ele) Tecnologia Tudo envolvendo tecnologia dentro da empresa, desde software ate hardware Pessoas tudo envolvendo as pessoas do projeto cultura, organização, etc. Notas SAP é um ERP Monolito → sistema funciona como um bloco único Microserviços → sistema quebrado em pequenos serviços realizando uma única função, possuindo seus próprios recursos, como Banco de dados ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-191-73bf5d54b5aj/","summary":"\u003ch4 id=\"sistemas-de-informação\"\u003eSistemas de informação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equalquer sistema (digital ou não) que armazena, coleta, processa e\ndistribui informações para a tomada de decisão.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"elementos de um sistema de informação\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-191-73bf5d54b5aj/image_311.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eO ambiente pode ser visto como o local onde o sistema está rodando\u003c/li\u003e\n\u003cli\u003eo feedback pode ser visto como o estímulo de retorno do usuário\u003c/li\u003e\n\u003cli\u003ebenefícios → aumento da eficiência, monitoramento, coleta de\ninformações, etc.\u003c/li\u003e\n\u003cli\u003ecomponente do SI → pessoas, hardware, software, dados, rede\u003c/li\u003e\n\u003cli\u003etipos de usuários do SI → especialista (quem conhece as Tecnologias)\ne usuário final (quem não sabe nada de tecnologia, mas precisa usar\no sistema)\u003c/li\u003e\n\u003cli\u003ePessoas de culturas diferentes usam os sistemas de maneiras\ndiferentes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dimensões-do-sistema-de-informação\"\u003eDimensões do sistema de informação\u003c/h3\u003e\n\u003ch4 id=\"organização\"\u003eorganização\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecomo a empresa está organizada\u003c/li\u003e\n\u003cli\u003ePara isso existem 2 tipos de sistemas: sob medida para a empresa e o\nde prateleira (comprado no mercado e a empresa precisa se moldar a\nele)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tecnologia\"\u003eTecnologia\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTudo envolvendo tecnologia dentro da empresa, desde software ate\nhardware\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"pessoas\"\u003ePessoas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etudo envolvendo as pessoas do projeto\u003c/li\u003e\n\u003cli\u003ecultura, organização, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"notas\"\u003eNotas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSAP é um ERP\u003c/li\u003e\n\u003cli\u003eMonolito → sistema funciona como um bloco único\u003c/li\u003e\n\u003cli\u003eMicroserviços → sistema quebrado em pequenos serviços realizando uma\núnica função, possuindo seus próprios recursos, como Banco de dados\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 191"},{"content":"Mobile API de android mais antigos dão suporte para mais aparelhos, contudo os recursos disponíveis nativamente são menores sempre melhor usar APIs da própria SDK do que de terceiros package name define o nome do app na loja \u0026ldquo;com.meu.exemplo\u0026rdquo; nativo → usa a SDK oficial da plataforma (Kotlin/Java em android e Objective-C/Swift em IOS) hibrido → uma única base de dados consegue criar apps para ambas as plataformas (Xamarin, IONIC, React Native, Flutter, etc.) UI → geralmente é fornecido um padrão pela própria SDK UX → experiencia do usuário, geralmente também é seguido um padrão da plataforma em questão (leva em consideração o contexto do uso do APP também) Business mobile é nichado Quando você não quer que algo seja usado (muito) você dificulta/esconde Churn → perca de usuários Taxa de retenção → quantos usuários ficam/usam o app sessão → quantos users entram no app diariamente ARR/FTE (quanto faturo no ano / número de funcionários) → quanto maior maior o prejuizo (por isso de alguns layoffs) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-192-224hjjigdh2i/","summary":"\u003ch4 id=\"mobile\"\u003eMobile\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eAPI de android mais antigos dão suporte para mais aparelhos, contudo\nos recursos disponíveis nativamente são menores\u003c/li\u003e\n\u003cli\u003esempre melhor usar APIs da própria SDK do que de terceiros\u003c/li\u003e\n\u003cli\u003epackage name define o nome do app na loja \u0026ldquo;com.meu.exemplo\u0026rdquo;\u003c/li\u003e\n\u003cli\u003enativo → usa a SDK oficial da plataforma (Kotlin/Java em android e\nObjective-C/Swift em IOS)\u003c/li\u003e\n\u003cli\u003ehibrido → uma única base de dados consegue criar apps para ambas as\nplataformas (Xamarin, IONIC, React Native, Flutter, etc.)\u003c/li\u003e\n\u003cli\u003eUI → geralmente é fornecido um padrão pela própria SDK\u003c/li\u003e\n\u003cli\u003eUX → experiencia do usuário, geralmente também é seguido um padrão\nda plataforma em questão (leva em consideração o contexto do uso do\nAPP também)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"business\"\u003eBusiness\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emobile é nichado\u003c/li\u003e\n\u003cli\u003eQuando você não quer que algo seja usado (muito) você\ndificulta/esconde\u003c/li\u003e\n\u003cli\u003eChurn → perca de usuários\u003c/li\u003e\n\u003cli\u003eTaxa de retenção → quantos usuários ficam/usam o app\u003c/li\u003e\n\u003cli\u003esessão → quantos users entram no app diariamente\u003c/li\u003e\n\u003cli\u003eARR/FTE (quanto faturo no ano / número de funcionários) → quanto\nmaior maior o prejuizo (por isso de alguns layoffs)\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 192"},{"content":"Derivada Se fizermos uma curva e passarmos uma linha secante (que toca apenas dois pontos) com os pontos P e Q nessa curva, teremos um triângulo retângulo. Com isso, podemos descobrir a tangente desse angulo, usando as coordenadas x e y relativos aos pontos P e Q.\npara encontrarmos então a reta tangente(reta que encosta em apenas um ponto), podemos aproximar o ponto Q do ponto P. Com isso, a razão cada vez mais se aproxima da indefinição 0/0.\npodemos fazer algumas modificações algébricas e chegar nessa equação final, sendo essa a definição de derivada em um ponto.\ntrocando x1 por x, definimos então a derivada de uma função.\nusando a definição, podemos pegar certas funções e deriva-lás.\nRetas como o resultado da derivada nos da a inclinação (m) da reta tangente. Podemos pegar esses valores em um certo ponto (x1,y1) e descobrir a equação da reta tangente, lembrando que cada ponto da curva dará um (m) diferente, sendo necessário ir aproximando para valores melhores.\nFísica Na física, as derivadas são extremamente úteis.\npodemos começar vendo a função que descreve a posição de um corpo em determinados momentos.\nA partir dessa função, podemos derivar e encontrar a função da velocidade.\nDerivando a velocidade podemos encontrar a aceleração, e assim sucessivamente.\npodemos também entender a função de um corpo em queda livre. Primeiro começamos com a função espaço, novamente, ao derivar conseguimos a velocidade, dada pela gravidade*tempo. Por fim conseguimos a aceleração que é a própria gravidade, demonstrando então que o faz um corpo em queda livre aumentar sua velocidade é a gravidade.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-193-748fif6hef4a/","summary":"\u003ch4 id=\"derivada\"\u003eDerivada\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-193-748fif6hef4a/image_312.png\"\u003e\u003c/p\u003e\n\u003cp\u003eSe fizermos uma curva e passarmos uma linha secante (que toca apenas\ndois pontos) com os pontos P e Q nessa curva, teremos um triângulo\nretângulo. Com isso, podemos descobrir a tangente desse angulo, usando\nas coordenadas x e y relativos aos pontos P e Q.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-193-748fif6hef4a/image_313.png\"\u003e\u003c/p\u003e\n\u003cp\u003epara encontrarmos então a reta tangente(reta que encosta em apenas um\nponto), podemos aproximar o ponto Q do ponto P. Com isso, a razão cada\nvez mais se aproxima da indefinição 0/0.\u003c/p\u003e","title":"Ciências da computação dia 193"},{"content":"Registradores Para um registrador geral com entrada serial ou paralela podemos fazer o seguinte:\nguardar valor de forma paralela seta o LOAD=1, ENABLE=X, e coloca-se os dados no barramento de dados, precisando por fim apenas de um pulso do clock para inserir os dados.\nguardar valor de forma serial seta o LOAD=0, ENABLE=1. Então, configura-se o tipo de shift, LEFT=1 para shift left e LEFT=0 para shift right, lembrando que shift left multiplica o valor por 2 e shift right divide o valor por 2.\nApós setar isso, a cada pulso do clock(são necessários n, sendo n o numero de bits) é necessário adicionar 0 ou 1 na entrada Shift_L ou Shift_R (use o respectivo ao escolhido em LEFT). Sendo assim, conforme os pulsos vão passando, o valor atual setado em Shift_L/Shift_R seria movido para a esquerda ou direita configurando a sequência de bits desejada.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-194-093iahb882c6/","summary":"\u003ch3 id=\"registradores\"\u003eRegistradores\u003c/h3\u003e\n\u003cp\u003ePara um registrador geral com entrada serial ou paralela podemos fazer o\nseguinte:\u003c/p\u003e\n\u003ch4 id=\"guardar-valor-de-formaparalela\"\u003eguardar valor de forma paralela\u003c/h4\u003e\n\u003cp\u003eseta o LOAD=1, ENABLE=X, e coloca-se os dados no barramento de dados,\nprecisando por fim apenas de um pulso do clock para inserir os dados.\u003c/p\u003e\n\u003ch4 id=\"guardar-valor-de-formaserial\"\u003eguardar valor de forma serial\u003c/h4\u003e\n\u003cp\u003eseta o LOAD=0, ENABLE=1. Então, configura-se o tipo de shift, LEFT=1\npara shift left e LEFT=0 para shift right, lembrando que shift left\nmultiplica o valor por 2 e shift right divide o valor por 2.\u003c/p\u003e","title":"Ciências da computação dia 194"},{"content":"Compilador é difícil reinventar a sintaxe de uma linguagem, por isso várias linguagens utilizam estruturas semelhantes, como if, for, etc. métodos formais → especificação sintática (autômatos com regras pré definidas) métodos informais → semântica (necessário entender o contexto do programa para identificar os erros) Expressões poderíamos configurar regras de expressões da seguinte maneira\nE = conjunto das expressões 1 - a e b são expressões (a,b ∈ E) 2 - se a e b são expressões então a+b e a*b também são(a+b, a*b ∈ E) 3 - (a) também é uma expressão ((a) ∈ E) sendo assim E pode ser --\u0026gt; a | b | E+E | E*E | (E) com essas regras podemos montar uma árvore para, por exemplo, a seguinte expressão, a + (a * b)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-195-dd0fdj8ihah5/","summary":"\u003ch4 id=\"compilador\"\u003eCompilador\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eé difícil reinventar a sintaxe de uma linguagem, por isso várias\nlinguagens utilizam estruturas semelhantes, como if, for, etc.\u003c/li\u003e\n\u003cli\u003emétodos formais → especificação sintática (autômatos com regras pré\ndefinidas)\u003c/li\u003e\n\u003cli\u003emétodos informais → semântica (necessário entender o contexto do\nprograma para identificar os erros)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"expressões\"\u003eExpressões\u003c/h4\u003e\n\u003cp\u003epoderíamos configurar regras de expressões da seguinte maneira\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eE = conjunto das expressões\n\n1 - a e b são expressões (a,b ∈ E)\n2 - se a e b são expressões então a+b e a*b também são(a+b, a*b ∈ E)\n3 - (a) também é uma expressão ((a) ∈ E)\n\nsendo assim E pode ser --\u0026gt; a | b | E+E | E*E | (E)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ecom essas regras podemos montar uma árvore para, por exemplo, a seguinte\nexpressão, a + (a * b)\u003c/p\u003e","title":"Ciências da computação dia 195"},{"content":"Tipos de SI cada tipo de SI tem uma tarefa especifica que é executada\nTransacional → realiza transações (vendas, reservas, folha de pagamento, etc.)\nEspecialista → armazena dados que geram conhecimento para a empresa (como dados de pesquisa de satisfação), podendo então uma AI ser utilizada aqui para dar insights. a parte operacional da organização alimenta o sistema enquanto a gerancial usa\nGerenciais → gera relatórios para a gerencia, trabalhando com problemas estruturados, sendo ferramentas analíticas\nPara tomada de decisão → auxilia na tomada de decisão, usando dados dos outros 3\nERP → sistema que engloba tudo isso em um unico lugar\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-196-73di3i75g5g2/","summary":"\u003ch4 id=\"tipos-desi\"\u003eTipos de SI\u003c/h4\u003e\n\u003cp\u003ecada tipo de SI tem uma tarefa especifica que é executada\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"camadas de uma organização\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-196-73di3i75g5g2/image_322.png\"\u003e\u003c/p\u003e\n\u003cp\u003eTransacional → realiza transações (vendas, reservas, folha de pagamento,\netc.)\u003c/p\u003e\n\u003cp\u003eEspecialista → armazena dados que geram conhecimento para a empresa\n(como dados de pesquisa de satisfação), podendo então uma AI ser\nutilizada aqui para dar insights. a parte operacional da organização\nalimenta o sistema enquanto a gerancial usa\u003c/p\u003e\n\u003cp\u003eGerenciais → gera relatórios para a gerencia, trabalhando com problemas\nestruturados, sendo ferramentas analíticas\u003c/p\u003e","title":"Ciências da computação dia 196"},{"content":" para publicar um app usando login de terceiros, você precisa ter também o login da apple para acessar internet e outras coisas, você precisa pedir permissão para o usuário, no caso do android isso está no AndroidManifest.xml ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-197-gh75e25g9gh/","summary":"\u003cul\u003e\n\u003cli\u003epara publicar um app usando login de terceiros, você precisa ter\ntambém o login da apple\u003c/li\u003e\n\u003cli\u003epara acessar internet e outras coisas, você precisa pedir permissão\npara o usuário, no caso do android isso está no AndroidManifest.xml\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 197"},{"content":" Toda função continua em um ponto x1 é derivável naquele ponto\nregra da função constante Regra da potência Regra do produto por uma constante Regra da soma Regra do produto Regra da divisão Regra da potência negativa ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-198-j020jh573i6h/","summary":"\u003cblockquote\u003e\n\u003cp\u003eToda função continua em um ponto x1 é derivável naquele ponto\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"regra-da-função-constante\"\u003eregra da função constante\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_323.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-dapotência\"\u003eRegra da potência\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_324.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-do-produto-por-uma-constante\"\u003eRegra do produto por uma constante\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_325.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-dasoma\"\u003eRegra da soma\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_326.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-doproduto\"\u003eRegra do produto\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_327.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-dadivisão\"\u003eRegra da divisão\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_328.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"regra-da-potêncianegativa\"\u003eRegra da potência negativa\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-198-j020jh573i6h/image_329.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 198"},{"content":"\nPara interconectarmos dois registradores acumuladores de entrada serial/paralela, primeiro precisamos interconectar o barramento de entrada e saída e repartir parte dos dados para cada registrador. Dessa forma, conseguimos fazer com que a entrada paralela funcione adequadamente usando os dois registradores em conjunto.\nJá para a entrada serial, precisamos de uma lógica a mais. Para o shift left, começamos no registrador menos significativo (registrador 0), e então pegamos a saída mais significava dele e jogamos para o próximo registrador (nesse caso o registrador 1), ligando o na entrada de shift_left. Assim toda vez que ultimo dado for 1, esse dado será repassado para o próximo registrado e o ciclo poderá ser feito. Já no caso do shift_right, tomamos ações semelhantes, mas dessa vez pegamos do registrador mais significativo (registrador 1), e do valor menos significativo da saída dele, interligamos com o shift_right do próximo registrador.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-199-67hdf595dh1i/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-199-67hdf595dh1i/image_330.png\"\u003e\u003c/p\u003e\n\u003cp\u003ePara interconectarmos dois registradores acumuladores de entrada\nserial/paralela, primeiro precisamos interconectar o barramento de\nentrada e saída e repartir parte dos dados para cada registrador. Dessa\nforma, conseguimos fazer com que a entrada paralela funcione\nadequadamente usando os dois registradores em conjunto.\u003c/p\u003e\n\u003cp\u003eJá para a entrada serial, precisamos de uma lógica a mais. Para o shift\nleft, começamos no registrador menos significativo (registrador 0), e\nentão pegamos a saída mais significava dele e jogamos para o próximo\nregistrador (nesse caso o registrador 1), ligando o na entrada de\nshift_left. Assim toda vez que ultimo dado for 1, esse dado será\nrepassado para o próximo registrado e o ciclo poderá ser feito. Já no\ncaso do shift_right, tomamos ações semelhantes, mas dessa vez pegamos do\nregistrador mais significativo (registrador 1), e do valor menos\nsignificativo da saída dele, interligamos com o shift_right do próximo\nregistrador.\u003c/p\u003e","title":"Ciências da computação dia 199"},{"content":"o hardware e a história da computação de uma forma geral.\n(um pedaço)História da computação em ordem Pessoas começaram a fazer contas para a troca de mercadorias Passaram a escrever e fazer cálculos usando a base decimal Criaram o ábaco para cálculos mais rápidos e fáceis (300 A.C.) Primeira calculadora (em 1642 criada por Blaise Pascal da qual se chamava Pascaline) calculo do censo dos EUA (1890, pela atual IBM) calculo da trajetória de misseis (ENIAC, 1945) Conceitos passados Computador → máquina repleta de circuitos lógicos digitais que executam programas lógicos\nHardware + Software = Computador\nSegundo o modelo de Von Neumann os programas ficam na memória e assim que necessário são executados pelo processador e seus periféricos se encarregam de pedir uma entrada ou mostrar uma saída\nUnidade de controle + unidade lógica aritmética + acumulador = CPU\nUnidade lógica aritmética → responsável por cálculos matemáticos e operações lógicas\nClock\né usado para sincronizar todas as operações da CPU a frequência dele significa quantas operações por segundo a CPU pode fazer memória principal → RAM → memória volátil (apaga quando o computador é desligado)\nKilo → 2¹⁰ → 1024\nMega → 2²⁰\nGiga → 2³⁰\nTera → 2⁴⁰\no menor número de uma base → 0\no maior numero de uma base → base \u0026mdash; 1\nex: hexa → 16\u0026ndash;1 = 15 (F)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-2-b5jcj2979j5a/","summary":"\u003cp\u003eo hardware e a história da computação de uma forma geral.\u003c/p\u003e\n\u003ch3 id=\"um-pedaçohistória-da-computação-emordem\"\u003e(um pedaço)História da computação em ordem\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePessoas começaram a fazer contas para a troca de mercadorias\u003c/li\u003e\n\u003cli\u003ePassaram a escrever e fazer cálculos usando a base decimal\u003c/li\u003e\n\u003cli\u003eCriaram o ábaco para cálculos mais rápidos e fáceis (300 A.C.)\u003c/li\u003e\n\u003cli\u003ePrimeira calculadora (em 1642 criada por Blaise Pascal da qual se\nchamava Pascaline)\u003c/li\u003e\n\u003cli\u003ecalculo do censo dos EUA (1890, pela atual IBM)\u003c/li\u003e\n\u003cli\u003ecalculo da trajetória de misseis (ENIAC, 1945)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"conceitos-passados\"\u003e\u003cstrong\u003eConceitos passados\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003eComputador → máquina repleta de circuitos lógicos digitais que executam\nprogramas lógicos\u003c/p\u003e","title":"Ciências da computação dia 2"},{"content":"tautologia → quando todos os elementos de uma tabela verdade ou de uma coluna da tabela verdade são verdadeiros\ncontradição → quanto todos os elementos de uma tabela verdade ou de uma coluna da tabela verdade são falsos\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-20-42ebhdc8fcai/","summary":"\u003cp\u003etautologia → quando todos os elementos de uma tabela verdade ou de uma\ncoluna da tabela verdade são \u003cstrong\u003everdadeiros\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003econtradição → quanto todos os elementos de uma tabela verdade ou de uma\ncoluna da tabela verdade são \u003cstrong\u003efalsos\u003c/strong\u003e\u003c/p\u003e","title":"Ciências da computação dia 20"},{"content":"Arquitetura ajuda na manutenção de sistemas complexos certas linguagens podem não funcionar bem com certas arquiteturas técnicas e estruturas para organizar componentes e suas interações interações entre as partes é feito de forma padrão (interface) Componentes uma abstração do mundo real no sistema precisam ser específicos se crio um componente cliente, em todas as camadas eu tenho q ter um componente cliente também Camada parte usada para gerenciar a arquitetura separação de acordo com os interesses, em partes comuns do código Um sistema é um conjunto de subsistemas;\nCada sub-sistema é separado em módulos;\nCada módulo é dividido em várias camadas;\nCada camada é especializada em uma única coisa;\nPor fim em cada camada temos vários componentes.\nMVC Model, View, Controller View não pode acessar o banco de dados Model → todas as regras de negócio View → todas as interações com o user Controller → parte que recebe os requests e verifica se é necessário usar um view ou model N-Camadas user interface → parte de interação com o user Business logic → limites e ações do user(um pouco diferente do model em MVC) Data Access (DAL) → aqui é feita a interação com o BD, contudo temos dois componente nessa camada, o primeiro chama-se DAO, esse é responsável por apenas acessar os dados, e o segundo é o DTO, responsável por transmitir os dados. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-201-30fdjdh89961/","summary":"\u003ch4 id=\"arquitetura\"\u003eArquitetura\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eajuda na manutenção de sistemas complexos\u003c/li\u003e\n\u003cli\u003ecertas linguagens podem não funcionar bem com certas arquiteturas\u003c/li\u003e\n\u003cli\u003etécnicas e estruturas para organizar componentes e suas interações\u003c/li\u003e\n\u003cli\u003einterações entre as partes é feito de forma padrão (interface)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"componentes\"\u003eComponentes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003euma abstração do mundo real no sistema\u003c/li\u003e\n\u003cli\u003eprecisam ser específicos\u003c/li\u003e\n\u003cli\u003ese crio um componente cliente, em todas as camadas eu tenho q ter um\ncomponente cliente também\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada\"\u003eCamada\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eparte usada para gerenciar a arquitetura\u003c/li\u003e\n\u003cli\u003eseparação de acordo com os interesses, em partes comuns do código\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eUm sistema é um conjunto de subsistemas;\u003c/p\u003e","title":"Ciências da computação dia 201"},{"content":"4 componentes de um app android atividade → o que está sendo executado no momento. ao transicionar de uma atividade (tela) para outra, a anterior é fechada. Para transicionar de uma atividade para outra é necessário criar uma intenção (Intent). serviços → tudo que roda em plano de fundo broadcast receivers → app é notificado quando algo ocorrer no sistema provedores de conteúdo → API, BD, internet, etc. Layout constraint layout → posiciona um elemento baseado em outro você pode ter diferentes tipos de layouts dentro de outro layout Context passa para o sistema android, quem está chamando uma certa função (tela) isso deixa possível um app conversar com outro Pilha de volta toda vez que uma nova atividade é aberta, ela é empilhada quando você clica para voltar a atividade do topo é desempilhada e você volta para a atividade anterior A primeira atividade da pilha é o próprio Android Para não deixar o usuário voltar à uma certa tela, você deve destrui-la ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-202-h17j6de48g16/","summary":"\u003ch4 id=\"4-componentes-de-um-appandroid\"\u003e4 componentes de um app android\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eatividade → o que está sendo executado no momento. ao transicionar\nde uma atividade (tela) para outra, a anterior é fechada. Para\ntransicionar de uma atividade para outra é necessário criar uma\nintenção (Intent).\u003c/li\u003e\n\u003cli\u003eserviços → tudo que roda em plano de fundo\u003c/li\u003e\n\u003cli\u003ebroadcast receivers → app é notificado quando algo ocorrer no\nsistema\u003c/li\u003e\n\u003cli\u003eprovedores de conteúdo → API, BD, internet, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"layout\"\u003eLayout\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003econstraint layout → posiciona um elemento baseado em outro\u003c/li\u003e\n\u003cli\u003evocê pode ter diferentes tipos de layouts dentro de outro layout\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"context\"\u003eContext\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epassa para o sistema android, quem está chamando uma certa função\n(tela)\u003c/li\u003e\n\u003cli\u003eisso deixa possível um app conversar com outro\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"pilha-devolta\"\u003ePilha de volta\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etoda vez que uma nova atividade é aberta, ela é empilhada\u003c/li\u003e\n\u003cli\u003equando você clica para voltar a atividade do topo é desempilhada e\nvocê volta para a atividade anterior\u003c/li\u003e\n\u003cli\u003eA primeira atividade da pilha é o próprio Android\u003c/li\u003e\n\u003cli\u003ePara não deixar o usuário voltar à uma certa tela, você deve\ndestrui-la\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 202"},{"content":" view não interage com o banco de dados relação com banco de dados deve ser feita através de controllers ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-203-835e0a68532g/","summary":"\u003cul\u003e\n\u003cli\u003eview não interage com o banco de dados\u003c/li\u003e\n\u003cli\u003erelação com banco de dados deve ser feita através de controllers\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 203"},{"content":" nunca coloque textos puros, sempre utilize as labels configuradas em strings.xml, pois assim fica mais de fazer traduções depois ciclo de vida de atividades → como a atividade vai iniciar e terminar(oncreate, onpause, onresume, ondestroy, etc.) banco de dados padrão é o sqlite(local) cache é feito através do SharedPreferences (chave-valor) Pensando em como o app deve agir em relação a login, depende de que tipo de app é e deve ser levado em consideração que é algo pessoal. Sendo assim, apps de bancos pendem para logar a cada certo período de tempo, já apps como redes sociais não vale a pena, já que, teoricamente, só o dono irá usar Jetcompose → nova maneira de criar widgets usando código kotlin ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-204-9dj4e5jcd32d/","summary":"\u003cul\u003e\n\u003cli\u003enunca coloque textos puros, sempre utilize as labels configuradas em\nstrings.xml, pois assim fica mais de fazer traduções depois\u003c/li\u003e\n\u003cli\u003eciclo de vida de atividades → como a atividade vai iniciar e\nterminar(oncreate, onpause, onresume, ondestroy, etc.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"https://developer.android.com/guide/components/activities/activity-lifecycle\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-204-9dj4e5jcd32d/image_331.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebanco de dados padrão é o sqlite(local)\u003c/li\u003e\n\u003cli\u003ecache é feito através do SharedPreferences (chave-valor)\u003c/li\u003e\n\u003cli\u003ePensando em como o app deve agir em relação a login, depende de que\ntipo de app é e deve ser levado em consideração que é algo pessoal.\nSendo assim, apps de bancos pendem para logar a cada certo período\nde tempo, já apps como redes sociais não vale a pena, já que,\nteoricamente, só o dono irá usar\u003c/li\u003e\n\u003cli\u003eJetcompose → nova maneira de criar widgets usando código kotlin\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 204"},{"content":"a reta normal é uma reta que faz 90° com a tangente.\né possível ver que a reta normal e tangente são inversas e opostas uma a outra.sendo assim, o fato m das retas segue a relação:\nCom isso, podemos encontrar a equação da reta usando os dados da reta tangente e essa relação.\nRetas paralelas significa que possuem a mesma inclinação m.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-205-1gj106i0h8ja/","summary":"\u003cp\u003ea reta normal é uma reta que faz 90° com a tangente.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-205-1gj106i0h8ja/image_332.png\"\u003e\u003c/p\u003e\n\u003cp\u003eé possível ver que a reta normal e tangente são inversas e opostas uma a\noutra.sendo assim, o fato m das retas segue a relação:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-205-1gj106i0h8ja/image_333.png\"\u003e\u003c/p\u003e\n\u003cp\u003eCom isso, podemos encontrar a equação da reta usando os dados da reta\ntangente e essa relação.\u003c/p\u003e\n\u003cp\u003eRetas paralelas significa que possuem a mesma inclinação m.\u003c/p\u003e","title":"Ciências da computação dia 205"},{"content":"Uma gramatica é composta de uma tupla com 4 items:\nG = N, Σ, P, S\nonde G é a gramática, N são os símbolos não terminais, Σ o alfabeto (simbolos terminais), P são as regras de derivação e S o símbolo inicial.\nos símbolos terminais são aqueles que não possuem qualquer derivação, já os simbolos não terminais são aqueles que podem ser derivados para outros símbolos (ex: A(não terminal)-\u0026gt; b(terminal))\nSegundo a hierarquia de Chomsky, temos a organização dos tipos de gramática elencados do mais díficil para o mais simples de reconhecer. Dentro dessas gramáticas temos as seguintes características.\nGramática Irrestrita não existe regra de produção linguagem natural impraticavel para linguagens de programação, já que possui muitos valores possíveis e nenhuma regra simples de seguir qualquer conjuntos de símbolos terminais e não terminais é válido a -\u0026gt; X, X -\u0026gt; a (qualquer simbolo pode gerar outro) apenas o operador vazio precisa ser definido X -\u0026gt; Ɛ Gramática sensível ao contexto αAβ -\u0026gt; αyβ ,onde αβ são simbolos terminais e não terminais, A é um simbolo não terminal e y um símbolo terminal S -\u0026gt; Ɛ Como αβ podem ter qualquer combinação de dois símbolos, é possível ter inumeras combinações, fazendo com que essa gramática seja difícil de computar, sendo assim, impraticável Gramática livre de contexto A -\u0026gt; α, S -\u0026gt; Ɛ Gramática regular A -\u0026gt; a, A -\u0026gt; aβ, A-\u0026gt; βa linguagem lógica boa para linguagens de programação sempre do lado esquerdo há um símbolo não terminal as regras podem criar outras regras através da derivação na derivação um símbolo não terminal do lado direito pode ser substituido por um de uma regra que ele está do lado esquerdo P = S -\u0026gt; aB, B -\u0026gt; cS, S -\u0026gt; Ɛ\nS -\u0026gt; aB -\u0026gt; cS -\u0026gt; Ɛ\nsendo assim A -\u0026gt; β\nS -\u0026gt; b1, S -\u0026gt; b2, S -\u0026gt; b3 = S -\u0026gt; b1|b2|b3 Exemplo G = Vn, Vt, P, S\nVn = T, X\nVt = a,b\nP = (T-\u0026gt;aX), (T-\u0026gt;Ɛ), (X-\u0026gt;bT)\nS = T\ncom isso, conseguimos derivar imediatamente de T, após cada aplicação de X -\u0026gt; bT a palavra ababab.\nNesse caso, pode ser visto que, utilizando as regras temos a seguinte linguagem:\nL(G) = Ɛ, ab, abab, ababab, abababab, \u0026hellip;\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-206-h7j6dfgb1i6b/","summary":"\u003cp\u003eUma gramatica é composta de uma tupla com 4 items:\u003c/p\u003e\n\u003cp\u003eG = N, Σ, P, S\u003c/p\u003e\n\u003cp\u003eonde G é a gramática, N são os símbolos não terminais, Σ o alfabeto\n(simbolos terminais), P são as regras de derivação e S o símbolo\ninicial.\u003c/p\u003e\n\u003cp\u003eos símbolos terminais são aqueles que não possuem qualquer derivação, já\nos simbolos não terminais são aqueles que podem ser derivados para\noutros símbolos (ex: A(não terminal)-\u0026gt; b(terminal))\u003c/p\u003e","title":"Ciências da computação dia 206"},{"content":"Scaffolding dotnet cria um CRUD em poucos comandos a partir de um model. liga com banco de dados, cria controller, views, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-207-ab13jbch6ige/","summary":"\u003ch4 id=\"scaffolding-dotnet\"\u003eScaffolding dotnet\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecria um CRUD em poucos comandos a partir de um model.\u003c/li\u003e\n\u003cli\u003eliga com banco de dados, cria controller, views, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 207"},{"content":"derivadas laterais uma função é derivavel em x se suas derivadas laterias são iguais Derivada de funções compostas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-208-d13d08188h04/","summary":"\u003ch4 id=\"derivadas-laterais\"\u003ederivadas laterais\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003euma função é derivavel em x se suas derivadas laterias são iguais\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-208-d13d08188h04/image_336.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"derivada-de-funções-compostas\"\u003eDerivada de funções compostas\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-208-d13d08188h04/image_337.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 208"},{"content":"\nÚteis ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-209-4aj176afj959/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-209-4aj176afj959/image_338.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"úteis\"\u003eÚteis\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-209-4aj176afj959/image_339.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 209"},{"content":"while →geralmente usado quando você não tem uma quantidade determinada de loops que você vai ter que fazer (quando por exemplo você precisa de uma condição para parar)\nfor → quando você sabe exatamente a quantidade de vezes que você precisa rodar um bloco de código\nNo entanto esses dois podem ser usados também dependendo da natureza do problema e da sua lógica\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-21-2df18fj29677/","summary":"\u003cp\u003ewhile →geralmente usado quando você não tem uma quantidade determinada\nde loops que você vai ter que fazer (quando por exemplo você precisa de\numa condição para parar)\u003c/p\u003e\n\u003cp\u003efor → quando você sabe exatamente a quantidade de vezes que você precisa\nrodar um bloco de código\u003c/p\u003e\n\u003cp\u003eNo entanto esses dois podem ser usados também dependendo da natureza do\nproblema e da sua lógica\u003c/p\u003e","title":"Ciências da computação dia 21"},{"content":"Análise sintática segunda fase da compilação usa gramática livre de contexto (por permitir recursões e outras coisas) dada uma gramática G e uma sentença S, o analisador identifica se S ∈ G recebe a lista de tokens da primeira fase Métodos de derivação a esquerda → faz a substituição do simbolo não terminal a partir do lado esquerdo a direita → faz a substituição do simbolo não terminal a partir do lado direito # a esquerda S -\u0026gt; S * S S -\u0026gt; a * S S -\u0026gt; a * a # a direita S -\u0026gt; S * S S -\u0026gt; S * a S -\u0026gt; a * a pode ser visto em formato de árvore (AST (arvore sintatica abstrata)) ou parse tree AST símbolos não terminais criam os ramos da árvore símbolos terminais são as folhas raiz é o símbolo inicial niveis mais baixos da árvore determinam qual a ordem de prescedencia das operaçoes (de baixo para cima) deve seguir todo o código fonte sem dar erros antes de analisar tudo apresenta a hierarquia de S Ambiguidade gramática não pode ser ambígua gera duas ASTs para a mesma sentença exemplo:\nS -\u0026gt; if b then S S -\u0026gt; if b then S else S S -\u0026gt; a Nesse exemplo, um else pode ser associado a mais de um if, gerando incongrências\nnão há algoritmo pré-pronto para determinar se uma gramática é ou não ambígua uma das maneiras de checar se uma gramática é ambigua é derivando à esquerda e a direita e verificar se há incongruências com as ordens de prescedencia regras que não definem ordem de prescedencia são ambiguas algumas das maneiras de remover a ambiguidade é adioncando novos símbolos não terminais exemplo:\nS -\u0026gt; S + S | a (ambiguo pois não define ordem) # sem ambiguidade S -\u0026gt; S + T | T T -\u0026gt; a ---- S -\u0026gt; S + S | S * S | T E -\u0026gt; E + T | T T -\u0026gt; T * F | F F -\u0026gt; a nessa versão sem ambiguidade é possivel ver que o operador * fica nos niveis mais baixos da AST, fazendo com que a ordem de prescedencia seja seguida Alguns passos para remover a ambiguidade:\nestabelecer a prescedencia os operadores definir a associatividade dos operadores usar a recursão à esquerda para força a associatividade à esquerda Recursividade à esquerda acontece em gramáticas livre de contexto regra possui seu próprio símbolo como o símbolo mais à esquerda Exemplo A -\u0026gt; Aa | b dessa forma, podemos ter uma sentença enorme que segue o padrão baaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..., contudo a àrvore cresce a esquerda indo: Aa Aaa Aaaa Aaaaa Aaaaaa Aaaaaaa baaaaaa o que queremos é remover isso e fazer se tornar bA baA baaA baaaA baaaa para isso podemos fazer: A -\u0026gt; bA\u0026#39; | b A\u0026#39; -\u0026gt; aA\u0026#39; | a Restrições gramaticais não pode haver U -\u0026gt; U não pode haver regras que não são usadas simbolo U deve permitir que a cadeia chegue à um símbolo terminal ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-210-7205j03g7j7d/","summary":"\u003ch4 id=\"análise-sintática\"\u003eAnálise sintática\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esegunda fase da compilação\u003c/li\u003e\n\u003cli\u003eusa gramática livre de contexto (por permitir recursões e outras\ncoisas)\u003c/li\u003e\n\u003cli\u003edada uma gramática G e uma sentença S, o analisador identifica se S\n∈ G\u003c/li\u003e\n\u003cli\u003erecebe a lista de tokens da primeira fase\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"métodos-de-derivação\"\u003eMétodos de derivação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ea esquerda → faz a substituição do simbolo não terminal a partir do\nlado esquerdo\u003c/li\u003e\n\u003cli\u003ea direita → faz a substituição do simbolo não terminal a partir do\nlado direito\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# a esquerda\n\nS -\u0026gt; S * S\nS -\u0026gt; a * S\nS -\u0026gt; a * a\n\n# a direita\n\nS -\u0026gt; S * S\nS -\u0026gt; S * a\nS -\u0026gt; a * a\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003epode ser visto em formato de árvore (AST (arvore sintatica\nabstrata)) ou parse tree\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"ast\"\u003eAST\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esímbolos não terminais criam os ramos da árvore\u003c/li\u003e\n\u003cli\u003esímbolos terminais são as folhas\u003c/li\u003e\n\u003cli\u003eraiz é o símbolo inicial\u003c/li\u003e\n\u003cli\u003eniveis mais baixos da árvore determinam qual a ordem de prescedencia\ndas operaçoes (de baixo para cima)\u003c/li\u003e\n\u003cli\u003edeve seguir todo o código fonte sem dar erros antes de analisar tudo\u003c/li\u003e\n\u003cli\u003eapresenta a hierarquia de S\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"exmplo de árvore para\\u00a0a+a+a\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-210-7205j03g7j7d/image_340.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 210"},{"content":"Migrations Nome padrão da primeira migration é InitialCreate seta a configuração do banco (tabelas, permissões etc) consegue voltar à migrações antigas caso algo de errado Visões do sistema lógica: descrição de requisitos comportamentais do sistema abstrações diagrama de classes e diagrama de sequência implementação descrição de modulos diagrama de módulos implantação (física) hardware usado, redes como será instalado requisitos não funcionais processos como o processos de um sistema se comunicam diagrama de atividade casos de uso Desde o começo, pense em como o sistema vai funcionar\nO sistema também deve ser agnóstico ao BD\nArquitetura de camadas POO organiza o sistema de umaforma melhor para mudanças ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-211-eee0ce04b7i/","summary":"\u003ch4 id=\"migrations\"\u003eMigrations\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eNome padrão da primeira migration é InitialCreate\u003c/li\u003e\n\u003cli\u003eseta a configuração do banco (tabelas, permissões etc)\u003c/li\u003e\n\u003cli\u003econsegue voltar à migrações antigas caso algo de errado\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"visões-dosistema\"\u003eVisões do sistema\u003c/h3\u003e\n\u003ch4 id=\"lógica\"\u003elógica:\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edescrição de requisitos comportamentais do sistema\u003c/li\u003e\n\u003cli\u003eabstrações\u003c/li\u003e\n\u003cli\u003ediagrama de classes e diagrama de sequência\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"implementação\"\u003eimplementação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edescrição de modulos\u003c/li\u003e\n\u003cli\u003ediagrama de módulos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"implantação-física\"\u003eimplantação (física)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ehardware usado, redes\u003c/li\u003e\n\u003cli\u003ecomo será instalado\u003c/li\u003e\n\u003cli\u003erequisitos não funcionais\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"processos\"\u003eprocessos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecomo o processos de um sistema se comunicam\u003c/li\u003e\n\u003cli\u003ediagrama de atividade\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"casos-deuso\"\u003ecasos de uso\u003c/h4\u003e\n\u003cp\u003eDesde o começo, pense em como o sistema vai funcionar\u003c/p\u003e","title":"Ciências da computação dia 211"},{"content":" Flutter segue a mesma ideia de pilhas de atividades, por isso para mudar de tela é usado o push e para voltar o pop ter um PWA é estratégico para certas empresas é mais fácil primeiro pensar em mobile e depois ir para desktop(mobile first) PWA de empresas grandes são pensados para ter operações básicas e forçar o usuário a baixar o app ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-212-510h6j3d4ce4/","summary":"\u003cul\u003e\n\u003cli\u003eFlutter segue a mesma ideia de pilhas de atividades, por isso para\nmudar de tela é usado o push e para voltar o pop\u003c/li\u003e\n\u003cli\u003eter um PWA é estratégico para certas empresas\u003c/li\u003e\n\u003cli\u003eé mais fácil primeiro pensar em mobile e depois ir para\ndesktop(mobile first)\u003c/li\u003e\n\u003cli\u003ePWA de empresas grandes são pensados para ter operações básicas e\nforçar o usuário a baixar o app\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 212"},{"content":"Acréscimo O acréscimo pode ser visto o quanto x varia e o quanto y varia em um certo intervalo. Sendo assim Δx e Δy são os acréscimos em x e y respectivamente.\nDiferencial O diferencial pode ser visto então como a relação entre o acréscimos.\nPodemos ver também que ao correlacionar os diferenciais, encontramos a notação de Leibniz para derivadas.\nCom o diferencial podemos aproximar raízes:\nNotas arc tg x → qual o arco em que a tangente da x\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-213-8ca4ii56g02i9/","summary":"\u003ch4 id=\"acréscimo\"\u003eAcréscimo\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-213-8ca4ii56g02i9/image_343.png\"\u003e\u003c/p\u003e\n\u003cp\u003eO acréscimo pode ser visto o quanto x varia e o quanto y varia em um\ncerto intervalo. Sendo assim Δx e Δy são os acréscimos em x e y\nrespectivamente.\u003c/p\u003e\n\u003ch4 id=\"diferencial\"\u003eDiferencial\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-213-8ca4ii56g02i9/image_344.png\"\u003e\u003c/p\u003e\n\u003cp\u003eO diferencial pode ser visto então como a relação entre o acréscimos.\u003c/p\u003e\n\u003cp\u003ePodemos ver também que ao correlacionar os diferenciais, encontramos a\nnotação de Leibniz para derivadas.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-213-8ca4ii56g02i9/image_345.png\"\u003e\u003c/p\u003e\n\u003cp\u003eCom o diferencial podemos aproximar raízes:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-213-8ca4ii56g02i9/image_346.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 213"},{"content":"ASD com retrocesso começa pela raiz da árvore e vai até as folhas visita os ramos da esquerda para a direita A → α Processo expande o simbolo não terminal emparelha com a entrada e verifica se a regra pode se encaixar, se não ele retrocede e tenta a próxima tenta todas as possibilidades Características difícil de manter os estados para retrocesso mais lento mais poderoso ineficiente na maioria dos casos implementação complicada problemas para gerenciar a tabela de símbolos número de operação cresce exponencialmente não permite recursão à esquerda Para remover o retrocesso A → xA (terminal sempre no começo) deixar terminais distintos para a produção (mais fácil de identificar qual o próximo, baseado no caractere atual) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-214-d489egfc42b4/","summary":"\u003ch3 id=\"asd-com-retrocesso\"\u003eASD com retrocesso\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecomeça pela raiz da árvore e vai até as folhas\u003c/li\u003e\n\u003cli\u003evisita os ramos da esquerda para a direita\u003c/li\u003e\n\u003cli\u003eA → \u003cstrong\u003eα\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"processo\"\u003eProcesso\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eexpande o simbolo não terminal\u003c/li\u003e\n\u003cli\u003eemparelha com a entrada e verifica se a regra pode se encaixar, se\nnão ele retrocede e tenta a próxima\u003c/li\u003e\n\u003cli\u003etenta todas as possibilidades\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-214-d489egfc42b4/image_349.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"características\"\u003eCaracterísticas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edifícil de manter os estados para retrocesso\u003c/li\u003e\n\u003cli\u003emais lento\u003c/li\u003e\n\u003cli\u003emais poderoso\u003c/li\u003e\n\u003cli\u003eineficiente na maioria dos casos\u003c/li\u003e\n\u003cli\u003eimplementação complicada\u003c/li\u003e\n\u003cli\u003eproblemas para gerenciar a tabela de símbolos\u003c/li\u003e\n\u003cli\u003enúmero de operação cresce exponencialmente\u003c/li\u003e\n\u003cli\u003enão permite recursão à esquerda\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"para-remover-o-retrocesso\"\u003ePara remover o retrocesso\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eA → xA (terminal sempre no começo)\u003c/li\u003e\n\u003cli\u003edeixar terminais distintos para a produção (mais fácil de\nidentificar qual o próximo, baseado no caractere atual)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-214-d489egfc42b4/image_350.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 214"},{"content":"Diferencial Taxa de variação uma das aplicações de derivadas usa as derivadas para encontrar a variação instantânea ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-215-g1030i8i3d9c/","summary":"\u003ch4 id=\"diferencial\"\u003eDiferencial\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-215-g1030i8i3d9c/image_351.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"taxa-devariação\"\u003eTaxa de variação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003euma das aplicações de derivadas\u003c/li\u003e\n\u003cli\u003eusa as derivadas para encontrar a variação instantânea\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-215-g1030i8i3d9c/image_352.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 215"},{"content":"LL(1) gramática da esquerda para a direita de cima para baixo (top-down) ou bottom-up pega sempre o primeiro símbolo não terminal mais à esquerda não aceita recursão à esquerda o analisador utiliza uma estrutura de pilha para verificar a entrada, além de uma tabela first-follow O sistema da pilha começa com um determinado símbolo de controle ($) e vai empilhando e desempilhando os caracteres conforme as regras, a entrada é válida quando sobra apenas o caractere de controle na pilha First primeiro caractere que uma regra pode ter S -\u0026gt; AB A -\u0026gt; b | empty B -\u0026gt; a First - table S | {a,b} A | {b, empty} B | {a} repare que em S, não temos só o b, uma vez que A pode ser vazio também, sendo assim, caso A seja vazio, o primeiro caractere será a Follow próximo caractere após certo simbolo não terminal a direta S -\u0026gt; AB A -\u0026gt; b | empty B -\u0026gt; a S | {$} A | {a} B | {$} De uma forma algoritmica, podemos representar o padrão do follow da seguinte forma: ``` adicionar $ para o conjunto do simbolo inicial para cada regra existente faça se termina com o B (A -\u0026gt; αB) então Follow de B tem tudo do Follow de A senão (A -\u0026gt; αBβ) Follow de B possui o First de β se \u0026#39;empty\u0026#39; está em First de β então Follow de B tem tudo do Follow de A ``` ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-216-44253564ihjc/","summary":"\u003ch4 id=\"ll1\"\u003eLL(1)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egramática da esquerda para a direita\u003c/li\u003e\n\u003cli\u003ede cima para baixo (top-down) ou bottom-up\u003c/li\u003e\n\u003cli\u003epega sempre o primeiro símbolo não terminal mais à esquerda\u003c/li\u003e\n\u003cli\u003enão aceita recursão à esquerda\u003c/li\u003e\n\u003cli\u003eo analisador utiliza uma estrutura de pilha para verificar a\nentrada, além de uma tabela first-follow\u003c/li\u003e\n\u003cli\u003eO sistema da pilha começa com um determinado símbolo de controle\n($) e vai empilhando e desempilhando os caracteres conforme as\nregras, a entrada é válida quando sobra apenas o caractere de\ncontrole na pilha\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"first\"\u003eFirst\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprimeiro caractere que uma regra pode ter\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eS -\u0026gt; AB\nA -\u0026gt; b | empty\nB -\u0026gt; a\n\n\nFirst - table\nS  |  {a,b}\nA  |  {b, empty}\nB  |  {a}\n\nrepare que em S, não temos só o b, uma vez que A pode ser vazio também, \nsendo assim, caso A seja vazio, o primeiro caractere será a\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"follow\"\u003eFollow\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epróximo caractere após certo simbolo não terminal a direta\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eS -\u0026gt; AB\nA -\u0026gt; b | empty\nB -\u0026gt; a\n\nS  | {$}       \nA  | {a}       \nB  | {$}       \n\n\nDe uma forma algoritmica, podemos representar o padrão do follow da\n seguinte forma:\n\n```\nadicionar $ para o conjunto do simbolo inicial\n\npara cada regra existente faça\n  se termina com o B (A -\u0026gt; αB) então\n    Follow de B tem tudo do Follow de A\n  senão (A -\u0026gt; αBβ)\n    Follow de B possui o First de β\n    \n    se \u0026#39;empty\u0026#39; está em First de β então\n      Follow de B tem tudo do Follow de A\n```\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 216"},{"content":"Integral indefinida (antiderivada) função inversa da derivada uma função é chamada de primitiva quando tomamos a integral de uma função que foi derivada previamente uma integral pode ter infinitas funções primitivas toda integral sempre haverá um termo no final +c, isso pois ao fazer a derivada de algo as constantes são eliminadas, e para voltar a função original precisamos ter as constantes lá Dessa forma, sempre que tivermos uma função primitiva e adicionarmos uma constante, essa nova função também será uma primitiva. Assim como se fizermos a diferença entre duas primitivas, essa será a constante.\nsempre é colocado dx, ou d$(variável) no fim da integral constantes ficam pra fora da integral ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-217-ei0494ch681j/","summary":"\u003ch4 id=\"integral-indefinida-antiderivada\"\u003eIntegral indefinida (antiderivada)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003efunção inversa da derivada\u003c/li\u003e\n\u003cli\u003euma função é chamada de primitiva quando tomamos a integral de uma\nfunção que foi derivada previamente\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-217-ei0494ch681j/image_353.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003euma integral pode ter infinitas funções primitivas\u003c/li\u003e\n\u003cli\u003etoda integral sempre haverá um termo no final +c, isso pois ao fazer\na derivada de algo as constantes são eliminadas, e para voltar a\nfunção original precisamos ter as constantes lá\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-217-ei0494ch681j/image_354.png\"\u003e\u003c/p\u003e\n\u003cp\u003eDessa forma, sempre que tivermos uma função primitiva e adicionarmos uma\nconstante, essa nova função também será uma primitiva. Assim como se\nfizermos a diferença entre duas primitivas, essa será a constante.\u003c/p\u003e","title":"Ciências da computação dia 217"},{"content":"Tabela de Análise Dada uma gramatica, é analisado o conjunto First e Follow de cada regra\nApós isso, podemos utilizar esses símbolos de First e Follow para descrever qual a próxima regra quando encontrar certo token na sequência de entrada\nNessa tabela, adicionamos todas as regras de baseando-se nos caracteres de First, contudo ao encontrar ε, é necessário preencher todas os símbolos de Follow com simbolo → ε\nCom isso, podemos testar entradas e verificar se estão ou não dentro da gramática\ndessa forma, utilizamos a estrutura de pilha, e vamos expandindo os símbolos não terminais e casando os tokens. Se e a entrada terminarem com $, então a entrada é válida.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-218-125947b37fjf/","summary":"\u003ch4 id=\"tabela-deanálise\"\u003eTabela de Análise\u003c/h4\u003e\n\u003cp\u003eDada uma gramatica, é analisado o conjunto First e Follow de cada regra\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-218-125947b37fjf/image_358.png\"\u003e\u003c/p\u003e\n\u003cp\u003eApós isso, podemos utilizar esses símbolos de First e Follow para\ndescrever qual a próxima regra quando encontrar certo token na sequência\nde entrada\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-218-125947b37fjf/image_359.png\"\u003e\u003c/p\u003e\n\u003cp\u003eNessa tabela, adicionamos todas as regras de baseando-se nos caracteres\nde First, contudo ao encontrar ε, é necessário preencher todas os\nsímbolos de Follow com \u003cem\u003esimbolo → ε\u003c/em\u003e\u003c/p\u003e","title":"Ciências da computação dia 218"},{"content":" A cor da Status Bar é baseada na cor da App Bar Arquitetura da informação em UX é basicamente quais dados serão mostrados para o usuário Login manual → email e senha ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-219-3ai97e4ie8ag/","summary":"\u003cul\u003e\n\u003cli\u003eA cor da Status Bar é baseada na cor da App Bar\u003c/li\u003e\n\u003cli\u003eArquitetura da informação em UX é basicamente quais dados serão\nmostrados para o usuário\u003c/li\u003e\n\u003cli\u003eLogin manual → email e senha\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 219"},{"content":"Para detectar e corrigir um erro e necessário que o código utilizado tenha distância mínima de 3\nmaneiras de detectar um erro:\nquando o código recebido não está na tabela quando a paridade do código recebido é diferente da usada código 2 em 5\nno código 2 em 5, o valor zero é representado por 0 0 0 11, isso pois os dois uns tem os pesos 4 e 7 respectivamente, e quando somados dão o valor 11, por representar um número maior que 10 (que é base que esta sendo representada pelo código) ele interpreta como 0\nUm problema que apareceu na ultima aula dessa matéria foi como corrigir um erro, o exemplo que foi apresentado recebíamos um código errado e para saber qual era o certo era só observar qual tinha a menor distância em relação ao recebido. No entanto, essa técnica é válida apenas para 1 erro, e em tabelas maiores a chance de ter dois ou mais dígitos com a mesma distância é alta, então isso não funciona sempre.\npara isso então começamos a utilizar os códigos de Hamming\nCódigos de Hamming\nutilizado para transformar códigos que não possuem a capacidade de detectar e corrigir erros em códigos que detectam e corrigem erros. 1 \u0026mdash; Descubra a quantidade de dígitos de paridade que serão adicionados, para isso:\npegue o tamanho do código(m) (00011 → tamanho m de 5) e encontre o menor numero k que satisfaça a seguinte inequação\n2^k ≥ m + k + 1\ndessa forma ao encontrar o valor de k, você também saberá que o tamanho do seu código final será m + k\nobs: você pode encontrar valores maiores para k, no entanto acaba ficando custoso, sendo melhor utilizar o menor k.\nobs: isso é feito para aumentar a distancia do código, deixando ele com no mínimo de 3\n2 \u0026mdash; utilize a tabela check de paridade\npara construir essa tabela você numerará as linhas de 0 até 2^k \u0026mdash; 1, e as colunas de C k, C k -1, C K \u0026mdash; 2, \u0026hellip;.\nexemplo com BCD\nagora você deve adicionar nas linhas quais quer números de k bits, com exceção do 0 que sempre será 0, 0, 0, \u0026hellip; k\nagora para cada coluna C, veja as linhas que possuem 1\nC1 = (2, 3, 5, 7)\nC2 = (2, 4, 5, 6)\nC3 = (1, 3, 5, 6)\napós isso veja para cada coluna C, a linha que possui apenas um número 1\nC1 = 7\nC2 = 4\nC3 = 1\nessas serão as posições na tabela do código de Hamming\n3 \u0026mdash; Montando o código de Hamming\npara montar o código de Hamming você terá linhas numeradas de 0 a 9 e m+ k colunas, sendo m colunas onde você colocará os bits do código que você está transformando e k colunas com dígitos de paridade\nabaixo dos números de 1\u0026ndash;7, você colocará mi para cada valor que não será de paridade e pj para o valor de paridade, lembrando que a posição da paridade dependerá daqueles números de C3, C2, C1 que vimos antes na hora que pegamos as linhas que continham apenas 1 número 1\nagora preencha os m com os valores do código\nagora para preencher os P com a paridade que você escolher comparando as linhas da do check de paridade que possuiam os números 1\nlembrando que P3=C3, P2 = C2 e P1 = C1\nobs: no meu caso escolhi paridade par, mas não importa muito, você pode escolher ímpar, o que importa é você escolher uma paridade para seu código\npronto, agora você tem um código que detecta e corrige erros\n4 \u0026mdash; detectando e corrigindo\nsuponhamos que o código que foi enviado foi 1001010 mas o que for recebido foi 1001011\nprimeiro vamos checar se há um erro, para fazer isso iremos utilizar de novo as linhas do check de paridade que possuíam o numero 1\nse todas as paridades derem a mesma que você escolheu o código recebido está certo, mas se ao menos 1 estiver diferente o código está errado\ntodo C que for ímpar você troca por 1 e todo C que for par você coloca 0, dessa forma teremos 0 0 1 (respectivamente C3, C2, C1), agora pegue esse valor e vá para a tabela check de paridade e veja qual linha tem esse valor, o número dessa linha seja a posição que o valor está errado, sendo assim você sabe a posição em que está o erro e para corrigi-lo basta apenas inverter seu valor, 0 vira 1 e 1 vira 0\nobs: por isso o nome da coluna o ficam os índices das linhas no check de paridade chama-se posição do erro, com ela você consegue saber exatamente onde está o erro.\nLembrando que está tabela feita tem a capacidade de corrigir e detectar apenas 1 erro, para mais você teria que adicionar mais valores de paridade\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-22-bhbdb6188d4b/","summary":"\u003cp\u003ePara detectar e corrigir um erro e necessário que o código utilizado\ntenha distância mínima de 3\u003c/p\u003e\n\u003cp\u003emaneiras de detectar um erro:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003equando o código recebido não está na tabela\u003c/li\u003e\n\u003cli\u003equando a paridade do código recebido é diferente da usada\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003ecódigo 2 em 5\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eno código 2 em 5, o valor zero é representado por 0 0 0 11, isso pois os\ndois uns tem os pesos 4 e 7 respectivamente, e quando somados dão o\nvalor 11, por representar um número maior que 10 (que é base que esta\nsendo representada pelo código) ele interpreta como 0\u003c/p\u003e","title":"Ciências da computação dia 22"},{"content":"Princípios de arquitetura usado para criar aplicações limpas e de fácil manutenção Separação de interesses separa as partes de acordo com o que cada um executa(especialização) Design de arquitetura sempre siga a arquitetura escolhida a risca Encapsulamento elementos privados parte encapsulada recebe interfaces para se comunicar com o resto não é necessário saber como as partes agem por dentro Inversão de dependência um módulo que depende de outro, não pode ter detalhes de implementação desse outro, esse deve ser mais genérico módulos se comunicam através de uma interface padrão, assim as classes vão ficar dependentes das interfaces, mas não dos detalhes da outra classe ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-220-e608i9iiigi6/","summary":"\u003ch4 id=\"princípios-de-arquitetura\"\u003ePrincípios de arquitetura\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusado para criar aplicações limpas e de fácil manutenção\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"separação-de-interesses\"\u003eSeparação de interesses\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esepara as partes de acordo com o que cada um executa(especialização)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"design-de-arquitetura\"\u003eDesign de arquitetura\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esempre siga a arquitetura escolhida a risca\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"encapsulamento\"\u003eEncapsulamento\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eelementos privados\u003c/li\u003e\n\u003cli\u003eparte encapsulada recebe interfaces para se comunicar com o resto\u003c/li\u003e\n\u003cli\u003enão é necessário saber como as partes agem por dentro\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"inversão-de-dependência\"\u003eInversão de dependência\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eum módulo que depende de outro, não pode ter detalhes de\nimplementação desse outro, esse deve ser mais genérico\u003c/li\u003e\n\u003cli\u003emódulos se comunicam através de uma interface padrão, assim as\nclasses vão ficar dependentes das interfaces, mas não dos detalhes\nda outra classe\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://learn.microsoft.com/pt-br/dotnet/architecture/modern-web-apps-azure/architectural-principles\\\"\u003esem inversão de\\ndependência\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-220-e608i9iiigi6/image_361.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 220"},{"content":"Compiladores são divididos em duas partes: análise e síntese ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-221-ddc7hajfdfef/","summary":"\u003ch4 id=\"compiladores\"\u003eCompiladores\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esão divididos em duas partes: análise e síntese\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 221"},{"content":"Core (núcleos dos processadores) No começo dos Pentium, a intel usava um truque de software para simular como se houvessem mais núcleos (como as threads) depois do core 2 duo começaram a ser usados multicores reais processadores com muitos núcleos não necessariamente são melhores, já que há a possibilidade de um core atrapalhar o outro CISC complex instructions set computers ampla variedade de instruções executa muitas instruções complexas em sequência (tempo maior, mais pulsos de clock) antiga, mas ainda usada executa muito bem as tarefas mais métodos de endereçamento(direto, indireto, relativo, etc.) maior flexibilidade para o dev maior complexidade para o hardware tamanhos de instrução são variados pode se criar microcódigo sequenciando múltiplas instruções em linguagem de máquina, dando mais flexibilidade mais aumentando a latência maior possibilidade de CACHE x86(intel, amd, 68k da motorola, etc.) ajuda na otimização de código é complexo de fazer difícil de dizer qual será o desempenho maior dificuldade para o compilador CACHE l1,l2 e l3 dizem respeito à distância dos módulos de cache sendo assim o processador busca informações na seguinte ordem: L1, L2, L3, RAM, HD RISC reduced instructions set computers operações mais limitadas poucas instruções mais simples operações básicas e repetitivas poucos modos de endereçamento instruções de tamanho fixo dando resultados mais precisos simplifica o processo de compilação usa pipelines → quebra a instrução em instruções menores e executa elas em paralelo muitos registradores de uso geral pode ter problemas durante a execução, uma vez que é mais rápida que a CISC, e faz operações em paralelo ao invés de sequencial necessita de menos energia menor flexibilidade maior carga para os compiladores usado em ARM, MIPS, POWERPC, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-222-jd760a0a6344/","summary":"\u003ch4 id=\"core-núcleos-dos-processadores\"\u003eCore (núcleos dos processadores)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eNo começo dos Pentium, a intel usava um truque de software para\nsimular como se houvessem mais núcleos (como as threads)\u003c/li\u003e\n\u003cli\u003edepois do core 2 duo começaram a ser usados multicores reais\u003c/li\u003e\n\u003cli\u003eprocessadores com muitos núcleos não necessariamente são melhores,\njá que há a possibilidade de um core atrapalhar o outro\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cisc\"\u003eCISC\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecomplex instructions set computers\u003c/li\u003e\n\u003cli\u003eampla variedade de instruções\u003c/li\u003e\n\u003cli\u003eexecuta muitas instruções complexas em sequência (tempo maior, mais\npulsos de clock)\u003c/li\u003e\n\u003cli\u003eantiga, mas ainda usada\u003c/li\u003e\n\u003cli\u003eexecuta muito bem as tarefas\u003c/li\u003e\n\u003cli\u003emais métodos de endereçamento(direto, indireto, relativo, etc.)\u003c/li\u003e\n\u003cli\u003emaior flexibilidade para o dev\u003c/li\u003e\n\u003cli\u003emaior complexidade para o hardware\u003c/li\u003e\n\u003cli\u003etamanhos de instrução são variados\u003c/li\u003e\n\u003cli\u003epode se criar microcódigo sequenciando múltiplas instruções em\nlinguagem de máquina, dando mais flexibilidade mais aumentando a\nlatência\u003c/li\u003e\n\u003cli\u003emaior possibilidade de CACHE\u003c/li\u003e\n\u003cli\u003ex86(intel, amd, 68k da motorola, etc.)\u003c/li\u003e\n\u003cli\u003eajuda na otimização de código\u003c/li\u003e\n\u003cli\u003eé complexo de fazer\u003c/li\u003e\n\u003cli\u003edifícil de dizer qual será o desempenho\u003c/li\u003e\n\u003cli\u003emaior dificuldade para o compilador\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cache\"\u003eCACHE\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003el1,l2 e l3 dizem respeito à distância dos módulos de cache\u003c/li\u003e\n\u003cli\u003esendo assim o processador busca informações na seguinte ordem: L1,\nL2, L3, RAM, HD\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"risc\"\u003eRISC\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ereduced instructions set computers\u003c/li\u003e\n\u003cli\u003eoperações mais limitadas\u003c/li\u003e\n\u003cli\u003epoucas instruções\u003c/li\u003e\n\u003cli\u003emais simples\u003c/li\u003e\n\u003cli\u003eoperações básicas e repetitivas\u003c/li\u003e\n\u003cli\u003epoucos modos de endereçamento\u003c/li\u003e\n\u003cli\u003einstruções de tamanho fixo dando resultados mais precisos\u003c/li\u003e\n\u003cli\u003esimplifica o processo de compilação\u003c/li\u003e\n\u003cli\u003eusa pipelines → quebra a instrução em instruções menores e executa\nelas em paralelo\u003c/li\u003e\n\u003cli\u003emuitos registradores de uso geral\u003c/li\u003e\n\u003cli\u003epode ter problemas durante a execução, uma vez que é mais rápida que\na CISC, e faz operações em paralelo ao invés de sequencial\u003c/li\u003e\n\u003cli\u003enecessita de menos energia\u003c/li\u003e\n\u003cli\u003emenor flexibilidade\u003c/li\u003e\n\u003cli\u003emaior carga para os compiladores\u003c/li\u003e\n\u003cli\u003eusado em ARM, MIPS, POWERPC, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 222"},{"content":" protótipo é tudo que tem interação UX deve guiar o dev protótipo é feito primeiro em escala de cinza, para, ao mostrar ao cliente, ele não se preocupe com cores e tipografia, apenas funcionalidade ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-223-772i4hi85hb59/","summary":"\u003cul\u003e\n\u003cli\u003eprotótipo é tudo que tem interação\u003c/li\u003e\n\u003cli\u003eUX deve guiar o dev\u003c/li\u003e\n\u003cli\u003eprotótipo é feito primeiro em escala de cinza, para, ao mostrar ao\ncliente, ele não se preocupe com cores e tipografia, apenas\nfuncionalidade\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 223"},{"content":"\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-224-5gh9gdbe5j66/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-224-5gh9gdbe5j66/image_363.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 224"},{"content":" Hoje, Intel e AMD usam um modelo híbrido de CISC e RISC A vida útil de um processador, em condições ideais, é de 10 à 15 anos 3Ghz → 3 bilhões de instruções por segundo multicore → particiona a tarefa em varias menores, e executa em ciclos diferentes juntando tudo no final Unidade de controle Controla as comunicações com o hardware Controla onde é necessário levar uma instrução ou o que acionar durante uma instrução Arquitetura de Von Neumann base para todas as arquiteturas CPU executa coisas Possui sistema de E/S Usa barramentos para comunicação MP armazena dados e programas de forma contiguá Instruções são executadas uma depois da outra dentro da CPU há uma unidade de controle, os registradores e a ULA na Arquitetura CISC, uma unica instrução, complexa, é executada em um ciclo\njá na arquitetura RISC, a instrução é quebrada em pedaços e executado em paralelo\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-225-cgbe65815bab/","summary":"\u003cul\u003e\n\u003cli\u003eHoje, Intel e AMD usam um modelo híbrido de CISC e RISC\u003c/li\u003e\n\u003cli\u003eA vida útil de um processador, em condições ideais, é de 10 à 15\nanos\u003c/li\u003e\n\u003cli\u003e3Ghz → 3 bilhões de instruções por segundo\u003c/li\u003e\n\u003cli\u003emulticore → particiona a tarefa em varias menores, e executa em\nciclos diferentes juntando tudo no final\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"unidade-decontrole\"\u003eUnidade de controle\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eControla as comunicações com o hardware\u003c/li\u003e\n\u003cli\u003eControla onde é necessário levar uma instrução ou o que acionar\ndurante uma instrução\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"arquitetura-de-vonneumann\"\u003eArquitetura de Von Neumann\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebase para todas as arquiteturas\u003c/li\u003e\n\u003cli\u003eCPU executa coisas\u003c/li\u003e\n\u003cli\u003ePossui sistema de E/S\u003c/li\u003e\n\u003cli\u003eUsa barramentos para comunicação\u003c/li\u003e\n\u003cli\u003eMP armazena dados e programas de forma contiguá\u003c/li\u003e\n\u003cli\u003eInstruções são executadas uma depois da outra\u003c/li\u003e\n\u003cli\u003edentro da CPU há uma unidade de controle, os registradores e a ULA\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-225-cgbe65815bab/image_364.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 225"},{"content":"Modelo Complexo modelo que une dois outros modelos, não no sentido de colocar tudo de implementação em um, mas sim interliga-los em formato de relacionamento como um relacionamento de BD ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-226-31d0djbi00j/","summary":"\u003ch4 id=\"modelo-complexo\"\u003eModelo Complexo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emodelo que une dois outros modelos, não no sentido de colocar tudo\nde implementação em um, mas sim interliga-los em formato de\nrelacionamento\u003c/li\u003e\n\u003cli\u003ecomo um relacionamento de BD\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-226-31d0djbi00j/image_368.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 226"},{"content":"Método da substituição realiza alguma manipulação (método de integração) na função semelhante à regra da cadeia para derivadas Se Temos f(x) = F\u0026rsquo;(x) e g(x) seja uma função que sua imagem esteja contida em F(x) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-226-c168heg2040cb/","summary":"\u003ch4 id=\"método-da-substituição\"\u003eMétodo da substituição\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003erealiza alguma manipulação (método de integração) na função\u003c/li\u003e\n\u003cli\u003esemelhante à regra da cadeia para derivadas\u003c/li\u003e\n\u003cli\u003eSe Temos f(x) = F\u0026rsquo;(x) e g(x) seja uma função que sua imagem esteja\ncontida em F(x)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-226-c168heg2040cb/image_366.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-226-c168heg2040cb/image_367.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 226"},{"content":" Siga sempre o mesmo padrão de espaçamento e ações no app se você pediu pra clicar em salvar, você precisa perdir pra confirmação a remoção de algo também ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-227-bh78i473g635/","summary":"\u003cul\u003e\n\u003cli\u003eSiga sempre o mesmo padrão de espaçamento e ações no app\u003c/li\u003e\n\u003cli\u003ese você pediu pra clicar em salvar, você precisa perdir pra\nconfirmação a remoção de algo também\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 227"},{"content":"Análise sintática ascendente (shift-reduce) de baixo para cima (folha para a raiz) reduz(reduce) ao invés de derivar vai do terminal reduzindo a cadeia para um não terminal (chegando no símbolo não terminal inicial da cadeia, se a entrada for válida) gramática LR(K) por utilizar gramáticas LR(K), podemos verificar qualquer quantidade de simbolos a frente K, sendo 0 ou 1 os mais comuns e o suficiente para a maioria dos casos São eficientes podem ser usadas com uma grande variedade de gramáticas aceita recursão à esquerda e ambiguidade Por aceitar ambiguidade há várias maneiras de reduzir uma unica expressão, mas o resultando sempre deve ser o mesmo usado por diversas linguagens vai empilhando(shift) os símbolos e a partir da tabela sintática (dos produtos da expansão), o conjunto de símbolos(handle) é convertido para um único não terminal S -\u0026gt; [L] | a L -\u0026gt; L;S | S entrada = [a;a] | Pilha | Entrada | Ação | |--------|----------|---------| | $ | [a;a]$ | shift [ | | $[ | a;a]$ | shift a | | $[a | ;a]$ | reduce a to S | | $[S | ;a]$ | reduce S to L | | $[L | ;a]$ | shift ; | | $[L; | a]$ | shift a | | $[L;a | ]$ | reduce a to S | | $[L;S | ]$ | reduce L;S to S | | $[L | ]$ | shift ] | | $[L] | $ | reduce [L] to S | | $S | $ | reduce S to L | | $L | $ | ACCEPT | ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-228-j60ah36fg6b99/","summary":"\u003ch4 id=\"análise-sintática-ascendente-shift-reduce\"\u003eAnálise sintática ascendente (shift-reduce)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ede baixo para cima (folha para a raiz)\u003c/li\u003e\n\u003cli\u003ereduz(reduce) ao invés de derivar\u003c/li\u003e\n\u003cli\u003evai do terminal reduzindo a cadeia para um não terminal (chegando no\nsímbolo não terminal inicial da cadeia, se a entrada for válida)\u003c/li\u003e\n\u003cli\u003egramática LR(K)\u003c/li\u003e\n\u003cli\u003epor utilizar gramáticas LR(K), podemos verificar qualquer quantidade\nde simbolos a frente K, sendo 0 ou 1 os mais comuns e o suficiente\npara a maioria dos casos\u003c/li\u003e\n\u003cli\u003eSão eficientes\u003c/li\u003e\n\u003cli\u003epodem ser usadas com uma grande variedade de gramáticas\u003c/li\u003e\n\u003cli\u003eaceita recursão à esquerda e ambiguidade\u003c/li\u003e\n\u003cli\u003ePor aceitar ambiguidade há várias maneiras de reduzir uma unica\nexpressão, mas o resultando sempre deve ser o mesmo\u003c/li\u003e\n\u003cli\u003eusado por diversas linguagens\u003c/li\u003e\n\u003cli\u003evai empilhando(shift) os símbolos e a partir da tabela sintática\n(dos produtos da expansão), o conjunto de símbolos(handle) é\nconvertido para um único não terminal\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eS -\u0026gt; [L] | a\nL -\u0026gt; L;S | S\n\nentrada = [a;a]\n\n|  Pilha |  Entrada |  Ação   |\n|--------|----------|---------|\n| $      | [a;a]$   | shift [ |\n| $[     | a;a]$    | shift a |\n| $[a    | ;a]$     | reduce a to S |\n| $[S    | ;a]$     | reduce S to L |\n| $[L    | ;a]$     | shift ; |\n| $[L;   | a]$      | shift a |\n| $[L;a  | ]$       | reduce a to S |\n| $[L;S  | ]$       | reduce L;S to S |\n| $[L    | ]$       | shift ] |\n| $[L]   | $        | reduce [L] to S |\n| $S     | $        | reduce S to L |\n| $L     | $        | ACCEPT |\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 228"},{"content":"Mobile systems \u0026mdash; tabela de esforço/valor\nPrimeiro são enumeradas as tarefas e são coladas em uma tabela como essa:\nquanto maior o valor e menor o esforço melhor\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-229-f7dj0hi3772d/","summary":"\u003cp\u003eMobile systems \u0026mdash; tabela de esforço/valor\u003c/p\u003e\n\u003cp\u003ePrimeiro são enumeradas as tarefas e são coladas em uma tabela como\nessa:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-229-f7dj0hi3772d/image_369.png\"\u003e\u003c/p\u003e\n\u003cp\u003equanto maior o valor e menor o esforço melhor\u003c/p\u003e","title":"Ciências da computação dia 229"},{"content":"Nas outras aulas vimos como transformar proposições lógicas em tabelas e expressões matemáticas, agora vamos fazer circuitos com isso\nobs: as operações lógicas foram feitas por Boole em 1850 e as portas lógicas e sua simbologia foi feita em 1938\nCada operador lógico possui uma certa simbologia\nlembrando que você também pode negar proposições ou a saída delas\npor exemplo a porta nor, que basicamente pega todo o valor resultante da porta OR e inverte\nou ainda você pode pegar uma porta e inverter uma entrada, colando essas bolinhas ou ainda colando simplesmente uma porta not\nOperações\nAND → equiavale ao *\nOR → equivale ao +\nNOT → equivale a negação ou como símbolo um traço em cima da letra\nfazendo o circuito de S = (A * C) + B\nValores negados\ntodo valor negado nessas \u0026ldquo;equações\u0026rdquo; possui um traço em cima, mas aqui usarei um~para ficar mais fácil\nS =~(A + B) * C\nPorta NOT por debaixo do CI\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-23-dd288i7h9agg/","summary":"\u003cp\u003eNas outras aulas vimos como transformar proposições lógicas em tabelas e\nexpressões matemáticas, agora vamos fazer circuitos com isso\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eobs: as operações lógicas foram feitas por Boole em 1850 e as portas\nlógicas e sua simbologia foi feita em 1938\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eCada operador lógico possui uma certa simbologia\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"AND (porta\\u00a0E)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-23-dd288i7h9agg/image_19.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"OR (porta\\u00a0ou)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-23-dd288i7h9agg/image_20.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"not (porta\\u00a0não)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-23-dd288i7h9agg/image_21.png\"\u003e\u003c/p\u003e\n\u003cp\u003elembrando que você também pode negar proposições ou a saída delas\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"porta NOR\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-23-dd288i7h9agg/image_22.png\"\u003e\u003c/p\u003e\n\u003cp\u003epor exemplo a porta nor, que basicamente pega todo o valor resultante da\nporta OR e inverte\u003c/p\u003e","title":"Ciências da computação dia 23"},{"content":"para fazer subtrações em binário, podemos fazer da seguinte forma\n10 -\u0026gt; 2 - 01 -\u0026gt; 1 ----- 1 00 --\u0026gt; o zero mais a direita pega 1 empresato e fica 10 (2 em decimal) - 01 ----- 01 -\u0026gt; 1 Com isso, podemos fazer a seguinte tabela verdade para um meio subtrator\nusando os mintermos de S e VOUT, podemos criar uma expressão usando a soma de produtos da seguinte forma:\nS = (A\u0026rsquo;B) + (AB\u0026rsquo;) = XOR\nVOUT = A\u0026rsquo;B\ngerando o circuito\nPara o subtrator completo, podemos seguir o mesmo padrão, mas dessa vez usando mais uma entrada (VIN) da qual receberá o valor \u0026ldquo;emprestado\u0026rdquo; e para gerar as saídas S e VOUT será necessário fazer A-B-VIN\nsendo então\nS = (A\u0026rsquo; B\u0026rsquo; VIN) + (A\u0026rsquo; B VIN\u0026rsquo;) + (A B\u0026rsquo; VIN\u0026rsquo;) + (A B VIN)\nVOUT = (A\u0026rsquo; B\u0026rsquo; VIN) + (A\u0026rsquo; B VIN\u0026rsquo;) + (A\u0026rsquo; B VIN) + (A B VIN)\nVOUT = VIN(A\u0026rsquo;B\u0026rsquo; + A\u0026rsquo;B + AB) + (A\u0026rsquo; B VIN')\nVOUT = VIN(A\u0026rsquo;(B\u0026rsquo; + B) + AB) + (A\u0026rsquo; B VIN')\nVOUT = VIN(A'1 + AB) + (A\u0026rsquo; B VIN\u0026rsquo;)\nVOUT = VIN((A\u0026rsquo; + A) (A\u0026rsquo; + B)) + (A\u0026rsquo; B VIN')\nVOUT = VIN(A\u0026rsquo;+B) + (A\u0026rsquo; B VIN')\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-230-f666d7b7d28/","summary":"\u003cp\u003epara fazer subtrações em binário, podemos fazer da seguinte forma\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e  10  -\u0026gt; 2 \n- 01  -\u0026gt; 1\n-----\n\n   1\n  00 --\u0026gt; o zero mais a direita pega 1 empresato e fica 10 (2 em decimal)\n- 01\n-----\n  01  -\u0026gt; 1\n  \n   \n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eCom isso, podemos fazer a seguinte tabela verdade para um meio subtrator\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-230-f666d7b7d28/image_370.png\"\u003e\u003c/p\u003e\n\u003cp\u003eusando os mintermos de S e VOUT, podemos criar uma expressão usando a\nsoma de produtos da seguinte forma:\u003c/p\u003e","title":"Ciências da computação dia 230"},{"content":"\nUsando essa formulação, podemos pegar integrais que não eram passiveis de serem resolvidas usando substituição e agora resolve-las.\nContudo, precisamos entender qual parte chamar de u e qual de dv, para isso podemos usar um artificio\nusando o LIATE, podemos identificar quais tipos de função temos em uma integral, e, com base no seu tipo, encontrar u e dv. Nesse método, u sempre será o tipo de função mais a esquerda e dv o mais a direita. Caso sejam do mesmo tipo, podemos escolher o que fica mais fácil de integrar e derivar.\nCom isso, é possivel seguir com a integração. Contudo, existem casos que é necessário fazer modificações algébricas ou integrar partes usando outras técnicas.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-231-6jaa2ee786b3/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-231-6jaa2ee786b3/image_374.png\"\u003e\u003c/p\u003e\n\u003cp\u003eUsando essa formulação, podemos pegar integrais que não eram passiveis\nde serem resolvidas usando substituição e agora resolve-las.\u003c/p\u003e\n\u003cp\u003eContudo, precisamos entender qual parte chamar de \u003cem\u003eu\u003c/em\u003e e qual de \u003cem\u003edv\u003c/em\u003e,\npara isso podemos usar um artificio\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-231-6jaa2ee786b3/image_375.png\"\u003e\u003c/p\u003e\n\u003cp\u003eusando o LIATE, podemos identificar quais tipos de função temos em uma\nintegral, e, com base no seu tipo, encontrar u e dv. Nesse método, \u003cem\u003eu\u003c/em\u003e\nsempre será o tipo de função mais a esquerda e \u003cem\u003edv\u003c/em\u003e o mais a direita.\nCaso sejam do mesmo tipo, podemos escolher o que fica mais fácil de\nintegrar e derivar.\u003c/p\u003e","title":"Ciências da computação dia 231"},{"content":"Micro-serviço mais fácil de escalar mais custoso para infra API comunica a aplicação com os micro-serviços micro-serviço não se importa com a aplicação em si, eles simplesmente fazem a tarefa e retornam algo, dai a aplicação se encarrega de como lidar com ela. Fazendo assim com que seja possível reutilizar os micro-serviços em outras aplicações Não possui Views com base nas finalidades do projeto, é constituído um padrão para essas APIs pode have uma camada para padronização de dados usando os DTOs (camada DTL) usa chamadas HTTP ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-232-9g5fj5fcggc2/","summary":"\u003ch4 id=\"micro-serviço\"\u003eMicro-serviço\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emais fácil de escalar\u003c/li\u003e\n\u003cli\u003emais custoso para infra\u003c/li\u003e\n\u003cli\u003eAPI comunica a aplicação com os micro-serviços\u003c/li\u003e\n\u003cli\u003emicro-serviço não se importa com a aplicação em si, eles\nsimplesmente fazem a tarefa e retornam algo, dai a aplicação se\nencarrega de como lidar com ela. Fazendo assim com que seja possível\nreutilizar os micro-serviços em outras aplicações\u003c/li\u003e\n\u003cli\u003eNão possui Views\u003c/li\u003e\n\u003cli\u003ecom base nas finalidades do projeto, é constituído um padrão para\nessas APIs\u003c/li\u003e\n\u003cli\u003epode have uma camada para padronização de dados usando os DTOs\n(camada DTL)\u003c/li\u003e\n\u003cli\u003eusa chamadas HTTP\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"tabela de chamadas\\u00a0http\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-232-9g5fj5fcggc2/image_377.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 232"},{"content":"micro-serviço cada micro-serviço deve ser único, especializado e individual Não pode haver mais de um serviço com a mesma funcionalidade, removendo assim, conflitos se um micro-serviço não for especializado, ele se torna um monólito cada micro-serviço deve pensar em si mesmo, sem pensando no que há fora, por isso individual ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-233-9432gjf22i7fb/","summary":"\u003ch4 id=\"micro-serviço\"\u003emicro-serviço\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecada micro-serviço deve ser único, especializado e individual\u003c/li\u003e\n\u003cli\u003eNão pode haver mais de um serviço com a mesma funcionalidade,\nremovendo assim, conflitos\u003c/li\u003e\n\u003cli\u003ese um micro-serviço não for especializado, ele se torna um monólito\u003c/li\u003e\n\u003cli\u003ecada micro-serviço deve pensar em si mesmo, sem pensando no que há\nfora, por isso individual\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 233"},{"content":"A\u0026rsquo;.B + A.B\u0026rsquo; → isso representa uma XOR, para diminuir isso poderiamos fazer: (A ⊕ B)\nA\u0026rsquo; B\u0026rsquo; + A.B → representa uma XNOR(ou consequente), que é o mesmo que uma XOR barrada (XOR\u0026rsquo;) podendo ser reduzido para: (A⊙B)\nexemplo de uso: S = B\u0026#39;(A⊕C) + B(A⊙C) S = B\u0026#39;(A⊕C) + B(A⊕C)\u0026#39; X = A⊕C S = B\u0026#39;X + BX\u0026#39; S = B⊕X S = B⊕A⊕C ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-234-2fg9706h0ii6a/","summary":"\u003cp\u003eA\u0026rsquo;.B + A.B\u0026rsquo; → isso representa uma XOR, para diminuir isso poderiamos\nfazer: (A ⊕ B)\u003c/p\u003e\n\u003cp\u003eA\u0026rsquo; B\u0026rsquo; + A.B → representa uma XNOR(ou consequente), que é o mesmo que uma\nXOR barrada (XOR\u0026rsquo;) podendo ser reduzido para: (A⊙B)\u003c/p\u003e\n\u003ch4 id=\"exemplo-deuso\"\u003eexemplo de uso:\u003c/h4\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eS = B\u0026#39;(A⊕C) + B(A⊙C)\nS = B\u0026#39;(A⊕C) + B(A⊕C)\u0026#39;\n\nX = A⊕C\n\nS = B\u0026#39;X + BX\u0026#39;\nS = B⊕X\nS = B⊕A⊕C\n\u003c/code\u003e\u003c/pre\u003e","title":"Ciências da computação dia 234"},{"content":"\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-235-d895f46dbe45/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-235-d895f46dbe45/image_379.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 235"},{"content":" O melhor é ter um core que é monolito e ligar as partes com microserviços ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-236-31f06ch278h8/","summary":"\u003cul\u003e\n\u003cli\u003eO melhor é ter um core que é monolito e ligar as partes com\nmicroserviços\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 236"},{"content":"Analisador semântico usa a AST verificas diversos erros, como o de escopo você define as regras e como analisa-las (não é bem formalizado) possui uma tabela de simbolos, contendo dados como simbolo, tipo, valor, escopo, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-237-de88fcjgei3/","summary":"\u003ch4 id=\"analisador-semântico\"\u003eAnalisador semântico\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa a AST\u003c/li\u003e\n\u003cli\u003everificas diversos erros, como o de escopo\u003c/li\u003e\n\u003cli\u003evocê define as regras e como analisa-las (não é bem formalizado)\u003c/li\u003e\n\u003cli\u003epossui uma tabela de simbolos, contendo dados como simbolo, tipo,\nvalor, escopo, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 237"},{"content":"Uma ULA age como um seletor (multiplexador) de operações, quando certo valor chega no seletor ele pega os resultados da operação\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-238-fic1jahi5288/","summary":"\u003cp\u003eUma ULA age como um seletor (multiplexador) de operações, quando certo\nvalor chega no seletor ele pega os resultados da operação\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"from:https://www.cs.emory.edu/~cheung/Courses/355/Syllabus/1-circuits/alu.html\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-238-fic1jahi5288/image_380.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"from:https://www.cs.emory.edu/~cheung/Courses/355/Syllabus/1-circuits/alu.html\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-238-fic1jahi5288/image_381.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 238"},{"content":"\nPara calcular a área da região em vermelho, poderíamos usar o método da exaustão e um pouco de geometria.\nNesse método, dividimos a região que queremos encontrar a área em formas geométricas menores que conseguimos encontrar seus lados, nesse caso usaremos triângulos.\nCom isso, podemos aproximar a área que queremos usando vários triângulos menores. Assim, a área pode ser expressa como:\nsendo assim, ao aumentar a quantidade de triângulos, conseguimos aproximar ao máximo a área.\nDefinindo a integral usando a definição acima, podemos usar para calcular a área a baixo de uma curva em um certo intervalo de a à b.\nsendo esse o mesmo resultado de (b*h)/2 → (3*2)/2 = 3.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-239-7f85igfadj39/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-239-7f85igfadj39/image_382.png\"\u003e\u003c/p\u003e\n\u003cp\u003ePara calcular a área da região em vermelho, poderíamos usar o método da\nexaustão e um pouco de geometria.\u003c/p\u003e\n\u003cp\u003eNesse método, dividimos a região que queremos encontrar a área em formas\ngeométricas menores que conseguimos encontrar seus lados, nesse caso\nusaremos triângulos.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-239-7f85igfadj39/image_383.png\"\u003e\u003c/p\u003e\n\u003cp\u003eCom isso, podemos aproximar a área que queremos usando vários triângulos\nmenores. Assim, a área pode ser expressa como:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-239-7f85igfadj39/image_384.png\"\u003e\u003c/p\u003e\n\u003cp\u003esendo assim, ao aumentar a quantidade de triângulos, conseguimos\naproximar ao máximo a área.\u003c/p\u003e","title":"Ciências da computação dia 239"},{"content":"Números primos\npara calcular números primos, sabemos que temos que dividir todos os antecessores de certo numero e ele for divisível por apenas ele e o numero 1(que lembrando não é primo),ele é um número primo, mas há uma maneira um pouco menos demorada de se saber se um número é primo ou não\n1 \u0026mdash; você não precisa checar se o número é divisível por ele, ou pelo número 1, já que logicamente ele é\n2 \u0026mdash; agora, só lhe resta n-2 números para checar, mas tem algo que da para ser feito também, todo número é apenas divisível pela metade dele, então você não precisa checar de 2 até n-1, mas sim de 2 até n // 2 + 1, já que você vai pegar só até a metade do número\nNúmeros super primos\nos números super primos, são aqueles números que são primos e sua posição dentre os primos também é um número primo, como o numero, 3 que é primo é sua posição é de número 2 e o 5 que também é primo e sua posição é a 3\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-24-b5ecgi5g870b/","summary":"\u003cp\u003e\u003cstrong\u003eNúmeros primos\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003epara calcular números primos, sabemos que temos que dividir todos os\nantecessores de certo numero e ele for divisível por apenas ele e o\nnumero 1(que lembrando não é primo),ele é um número primo, mas há uma\nmaneira um pouco menos demorada de se saber se um número é primo ou não\u003c/p\u003e\n\u003cp\u003e1 \u0026mdash; você não precisa checar se o número é divisível por ele, ou pelo\nnúmero 1, já que logicamente ele é\u003c/p\u003e","title":"Ciências da computação dia 24"},{"content":" DTO → ao invés de enviar o modelo do banco, você pega DTOs, dos quais mapeiam apenas os dados necessários que o usuário pode ver do banco e coloca em uma classe. A camada DATA de micro serviços também é conhecida como DAO Layer DAO → design pattern da camada de dados ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-240-c61ea1aac81j/","summary":"\u003cul\u003e\n\u003cli\u003eDTO → ao invés de enviar o modelo do banco, você pega DTOs, dos\nquais mapeiam apenas os dados necessários que o usuário pode ver do\nbanco e coloca em uma classe.\u003c/li\u003e\n\u003cli\u003eA camada DATA de micro serviços também é conhecida como DAO Layer\u003c/li\u003e\n\u003cli\u003eDAO → design pattern da camada de dados\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-240-c61ea1aac81j/image_388.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 240"},{"content":"S -\u0026gt; Aa A -\u0026gt; bA | b entrada: bba Pilha Entrada Ação $ bba$ push b $b ba$ reduce b -\u0026gt; A $A ba$ push b $Ab a$ reduce Ab -\u0026gt; A $A a$ push a $Aa $ reduce Aa -\u0026gt; S $S $ ENTRADA ACEITA Por aceitar gramáticas com recursão à esquerda e ambiguidade, o analisador shift-reduce pode reduzir tanto bA -\u0026gt; A como Ab -\u0026gt; A O compilador tenta reduzir tudo de uma vez, caso não de certo ele tenta novamente Podemos, por exemplo, ir empilhando tudo, e depois ir juntando e reduzindo ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-241-i9i1ed646ed7/","summary":"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eS -\u0026gt; Aa\nA -\u0026gt; bA | b\n\nentrada: bba\n\nPilha     Entrada    Ação\n$         bba$       push b\n$b        ba$        reduce b -\u0026gt; A\n$A        ba$        push b\n$Ab       a$         reduce Ab -\u0026gt; A\n$A        a$         push a\n$Aa       $          reduce Aa -\u0026gt; S\n$S        $          ENTRADA ACEITA\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003ePor aceitar gramáticas com recursão à esquerda e ambiguidade, o\nanalisador shift-reduce pode reduzir tanto bA -\u0026gt; A como Ab -\u0026gt; A\u003c/li\u003e\n\u003cli\u003eO compilador tenta reduzir tudo de uma vez, caso não de certo ele\ntenta novamente\u003c/li\u003e\n\u003cli\u003ePodemos, por exemplo, ir empilhando tudo, e depois ir juntando e\nreduzindo\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 241"},{"content":" obs: ao usar integrais para calcular a área, você calcula a area a baixo da curva no geral, você deve analisar como as funções se interceptam e como a área em si é formada Área da senoide Área entre duas funções Área entre múltiplas funções ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-242-0626f96b6f96/","summary":"\u003cul\u003e\n\u003cli\u003eobs: ao usar integrais para calcular a área, você calcula a area a\nbaixo da curva\u003c/li\u003e\n\u003cli\u003eno geral, você deve analisar como as funções se interceptam e como a\nárea em si é formada\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"área-dasenoide\"\u003eÁrea da senoide\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-242-0626f96b6f96/image_389.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"área-entre-duasfunções\"\u003eÁrea entre duas funções\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-242-0626f96b6f96/image_390.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"área-entre-múltiplas-funções\"\u003eÁrea entre múltiplas funções\u003c/h3\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-242-0626f96b6f96/image_391.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 242"},{"content":" DDD → o foco principal é o dominio (dominio é a representação de algo da vida real) clean archicteture → beaseado no DDD ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-243-dbjf37567ehh/","summary":"\u003cul\u003e\n\u003cli\u003eDDD → o foco principal é o dominio (dominio é a representação de\nalgo da vida real)\u003c/li\u003e\n\u003cli\u003eclean archicteture → beaseado no DDD\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"from:\\n\u003ca href=\\\"https://medium.com/@aboutcoding/clean-architecture-the-essence-of-the-dependency-rule-969f1e8417f6\\\"\u003eaboutcoding\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-243-dbjf37567ehh/image_392.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-243-dbjf37567ehh/image_393.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDomain/Core → regras de negócios (modelos também entram aqui)\u003c/li\u003e\n\u003cli\u003eApp → parte que se comunica com o Core (APIS, LIB, Interfaces, etc.)\u003c/li\u003e\n\u003cli\u003ePresentation → fala com o USER (web/MVC)\u003c/li\u003e\n\u003cli\u003eInfra → liga a aplicação com o mundo externo\u003c/li\u003e\n\u003cli\u003eA comunicação acontece de fora para dentro\u003c/li\u003e\n\u003cli\u003eIOc (inversão de controle) → uma parte exterior pede uma coisa\nespecifica para uma área que sabe fazer aquilo muito bem\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dependencias-entrecamadas\"\u003eDependencias entre camadas\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-243-dbjf37567ehh/image_394.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 243"},{"content":"UC(unidade de controle) garante a sincronia e coordena as operações que serão repassadas para a ULA interage com os dispositivos Busca as instruções na memória e guarda elas em registradores controla o tempo (Clock) gera sinais de controle (coordena os núcleos) Gerencia interrupções, caso seja necessário ele para a execução Buffer componentes que armazenam dados para serem processados rapidamente\nnão é considerado uma memória\né preciso limpar a entrada (opcode) da UC, por que caso contrário, se não vier outra operação, ele pode continuar fazendo a operação anterior de novo e de novo (mesma coisa do clock)\nos buffers são usados em sequência para que o dado de um vá para o outro passando em sequência armazenando, assim, alguns dados\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-244-73044j44b03f/","summary":"\u003ch4 id=\"ucunidade-de-controle\"\u003eUC(unidade de controle)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egarante a sincronia e coordena as operações que serão repassadas\npara a ULA\u003c/li\u003e\n\u003cli\u003einterage com os dispositivos\u003c/li\u003e\n\u003cli\u003eBusca as instruções na memória e guarda elas em registradores\u003c/li\u003e\n\u003cli\u003econtrola o tempo (Clock)\u003c/li\u003e\n\u003cli\u003egera sinais de controle (coordena os núcleos)\u003c/li\u003e\n\u003cli\u003eGerencia interrupções, caso seja necessário ele para a execução\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"buffer\"\u003eBuffer\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ecomponentes que armazenam dados para serem processados rapidamente\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003enão é considerado uma memória\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eé preciso limpar a entrada (opcode) da UC, por que caso contrário,\nse não vier outra operação, ele pode continuar fazendo a operação\nanterior de novo e de novo (mesma coisa do clock)\u003c/p\u003e","title":"Ciências da computação dia 244"},{"content":" antes da década de 90 os aparelhos não possuíam protocolos para padronizar a comunicação entre dispositivos Protocolos SMTP → protocolo para entrega de emails RDP → protocolo para área remota do windows DHCP → é responsável por entregar os IPs para as maquinas, garantindo que não haja conflito SNMP → protocolo usado para coletar e enviar dados dos dispositivos em uma rede Tipos de redes PAN → tipo de rede que está sendo desenvolvida para sensores, e coisas do tipo, para uma única pessoa CAN → rede para veículos Dispositivos Hub e switch tem a mesma função, só que o HUB divide a banda entre os dispositivos conectados, já o switch entrega toda a banda para todos os dispositivos (nominal) Nos dispositivos vem marcado 10/100/100. 10 significa que o dispositivo suporta Ethernet (máximo 10Mib/s); 100 significa que o dispositivo suporta Fast-Ethernet (máximo de 100 Mib/s); 1000 significa que o dispositivo suporta Giga-Ethernet (máximo de 1000 Mibs/s). Hoje em dia existem outras larguras de banda também, com 10Giga Ethernet, etc. Mas esse é geralmente para servidores e alguns dispositivos móveis (notebooks) Saber se seu dispositivos suporta apenas Ethernet, ou Fast-Ethernet ou ainda Giga-Ethernet, é importante para saber se seu plano vai ser aproveitado pelos seus aparelhos, uma vez q caso você tenha um plano de 1000Mb, mas seu roteador é Fast-Ethernet, você só conseguirá usar 100Mb (você sempre será limitado pelo menor valor) Cabo categoria 5e consegue trafegar Gigabit, mas não de forma pura, ou seja, só consegue trafegar os dados em 4 dos cabos, e não nos 8. A única maneira dele trafegar Gigabit é se a rede não estiver fazendo mais nada, só recebendo ou enviando para um único ponto Cabo de categorial 6 consegue trafegar Gigabit puro Nos dispositivos wireless, algumas letras são usadas para descrever a velocidade (a/b/c/g/n/ac, etc.) wifi com menor frequência consegue chegar mais longe, wifi com maior frequência consegue trafegar mais coisas e uma curta distância. cabo categoria 5 consegue 10Gigabit existem padrões para comprimento, conectores(802A ou 802B), como devem ser trançados existem outros conectores além do RJ-45, para categorias diferentes de cabos (cabo 5e funciona com RJ-45) comprimento mínimo de cabo é 12m Modelo Cliente-Servidor Uma rede interliga o cliente a um servidor Um processo na máquina do cliente faz um requisição para o servidor e um processo rodando o servidor responde a essa requisição e devolve o resultado via rede Tipos de Topologia Física → descreve como a rede é ligada fisicamente Lógica → regras para envio e recebimento de pacotes (protocolos) Topologia Barramento mais antiga e não é usada mais utiliza um barramento de cabo coaxial máquinas são ligadas em série em cada extremidade há um terminador (resistor) vantagens: elimina o uso de switches desvantagens: caso uma placa de rede de problema, todo o resto para de funcionar Não há possibilidade de remendar o cabo coaxial com outros cabos, já que a placa de rede perceberá a mudança de impedância chegava no máximo a 10Mib/s (Ethernet) Usava repetidores, bridges e interfaces (placas de rede) Bridge era usado para duas redes funcionarem como uma ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-245-6267b1262e0e/","summary":"\u003cul\u003e\n\u003cli\u003eantes da década de 90 os aparelhos não possuíam protocolos para\npadronizar a comunicação entre dispositivos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"protocolos\"\u003eProtocolos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSMTP → protocolo para entrega de emails\u003c/li\u003e\n\u003cli\u003eRDP → protocolo para área remota do windows\u003c/li\u003e\n\u003cli\u003eDHCP → é responsável por entregar os IPs para as maquinas,\ngarantindo que não haja conflito\u003c/li\u003e\n\u003cli\u003eSNMP → protocolo usado para coletar e enviar dados dos dispositivos\nem uma rede\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-deredes\"\u003eTipos de redes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePAN → tipo de rede que está sendo desenvolvida para sensores, e\ncoisas do tipo, para uma única pessoa\u003c/li\u003e\n\u003cli\u003eCAN → rede para veículos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dispositivos\"\u003eDispositivos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHub e switch tem a mesma função, só que o HUB divide a banda entre\nos dispositivos conectados, já o switch entrega toda a banda para\ntodos os dispositivos (nominal)\u003c/li\u003e\n\u003cli\u003eNos dispositivos vem marcado 10/100/100. 10 significa que o\ndispositivo suporta Ethernet (máximo 10Mib/s); 100 significa que o\ndispositivo suporta Fast-Ethernet (máximo de 100 Mib/s); 1000\nsignifica que o dispositivo suporta Giga-Ethernet (máximo de 1000\nMibs/s). Hoje em dia existem outras larguras de banda também, com\n10Giga Ethernet, etc. Mas esse é geralmente para servidores e alguns\ndispositivos móveis (notebooks)\u003c/li\u003e\n\u003cli\u003eSaber se seu dispositivos suporta apenas Ethernet, ou Fast-Ethernet\nou ainda Giga-Ethernet, é importante para saber se seu plano vai ser\naproveitado pelos seus aparelhos, uma vez q caso você tenha um plano\nde 1000Mb, mas seu roteador é Fast-Ethernet, você só conseguirá usar\n100Mb (você sempre será limitado pelo menor valor)\u003c/li\u003e\n\u003cli\u003eCabo categoria 5e consegue trafegar Gigabit, mas não de forma pura,\nou seja, só consegue trafegar os dados em 4 dos cabos, e não nos 8.\nA única maneira dele trafegar Gigabit é se a rede não estiver\nfazendo mais nada, só recebendo ou enviando para um único ponto\u003c/li\u003e\n\u003cli\u003eCabo de categorial 6 consegue trafegar Gigabit puro\u003c/li\u003e\n\u003cli\u003eNos dispositivos wireless, algumas letras são usadas para descrever\na velocidade (a/b/c/g/n/ac, etc.)\u003c/li\u003e\n\u003cli\u003ewifi com menor frequência consegue chegar mais longe, wifi com maior\nfrequência consegue trafegar mais coisas e uma curta distância.\u003c/li\u003e\n\u003cli\u003ecabo categoria 5 consegue 10Gigabit\u003c/li\u003e\n\u003cli\u003eexistem padrões para comprimento, conectores(802A ou 802B), como\ndevem ser trançados\u003c/li\u003e\n\u003cli\u003eexistem outros conectores além do RJ-45, para categorias diferentes\nde cabos (cabo 5e funciona com RJ-45)\u003c/li\u003e\n\u003cli\u003ecomprimento mínimo de cabo é 12m\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"modelo-cliente-servidor\"\u003eModelo Cliente-Servidor\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eUma rede interliga o cliente a um servidor\u003c/li\u003e\n\u003cli\u003eUm processo na máquina do cliente faz um requisição para o servidor\ne um processo rodando o servidor responde a essa requisição e\ndevolve o resultado via rede\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-de-topologia\"\u003eTipos de Topologia\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFísica → descreve como a rede é ligada fisicamente\u003c/li\u003e\n\u003cli\u003eLógica → regras para envio e recebimento de pacotes (protocolos)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"topologia-barramento\"\u003eTopologia Barramento\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emais antiga e não é usada mais\u003c/li\u003e\n\u003cli\u003eutiliza um barramento de cabo coaxial\u003c/li\u003e\n\u003cli\u003emáquinas são ligadas em série\u003c/li\u003e\n\u003cli\u003eem cada extremidade há um terminador (resistor)\u003c/li\u003e\n\u003cli\u003evantagens: elimina o uso de switches\u003c/li\u003e\n\u003cli\u003edesvantagens: caso uma placa de rede de problema, todo o resto para\nde funcionar\u003c/li\u003e\n\u003cli\u003eNão há possibilidade de remendar o cabo coaxial com outros cabos, já\nque a placa de rede perceberá a mudança de impedância\u003c/li\u003e\n\u003cli\u003echegava no máximo a 10Mib/s (Ethernet)\u003c/li\u003e\n\u003cli\u003eUsava repetidores, bridges e interfaces (placas de rede)\u003c/li\u003e\n\u003cli\u003eBridge era usado para duas redes funcionarem como uma\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://www.geeksforgeeks.org/advantages-and-disadvantages-of-bus-topology/\\\"\u003egeeksforgeeks\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-245-6267b1262e0e/image_395.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 245"},{"content":"Arredondamentos ao arredondar por 5, se o valor da frente for diferente de 0, aumenta-se 1 → 35,56 = 35,6 ao arredondar por 5, se o valor da frente for igual a 0, deixa como está se o valor anterior for par, se não aumenta 1 → 35,5 = 35,6; 34.5 = 34.5 não faça arredondamentos sucessivos, faça apenas no final Termos da estatística Estatística estudo de fenômenos coletivos Estatística Descritiva → coleta, organiza e descreve os dados Estatística indutiva ou inferencial → interpreta e generaliza as conclusões (usa probabilidade) Variáveis conjuntos de resultados possíveis de um fenômeno variáveis qualitativas → variável que é representada por classes (sexo, cidade, etc.) variáveis quantitativas → variável representada por números (idade, peso, etc.) variável continua → pode assumir qualquer valor dentro de certos limites variável discreta → só pode assumir valores que estão no conjunto possível População todo o grupo de dados Amostra parte (representativa) da população quando é dito representativo, significa pegar parte dos dados que possuam características semelhantes, sem precisar pegar o todo Dados Brutos Dados coletados da pesquisa, sem qualquer tipo de tratamento dados que não organizados ROL dados brutos colocados em ordem pode ser crescente ou decrescente Amostragem técnicas para escolher a amostra Amostragem casual ou aleatória simples → amostragem por sorteio Amostragem proporcional estratificada → retirada da amostra através de subgrupos (estratos) dos dados. Deve ser proporcional ao número de elementos em cada subgrupo (se tiver mais eu pego mais dados, se tiver menos eu pego menos). Para achar o numero de dados de cada subgrupo faça: total_para_retirar_subgrupo = ((total_subgrupo)(total_que_quero_da_amostra)) / (total_de_elementos)\nAmostragem sistemática → quando os elementos estão organizados por padrões, você pode arbitrariamente retirar a amostra de regularmente (ex: em uma linha de produção, para testes, pega 1 a cada 1000 fabricados). Para saber quantos elementos pular faça: total_a_ser_pulado = total/total_da_amostra\npara saber a porcentagem usada para os elementos da amostra, faça: porcentagem = tamanho_da_amostra / total_aos_dados\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-246-g05f28gj5f3/","summary":"\u003ch4 id=\"arredondamentos\"\u003eArredondamentos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eao arredondar por 5, se o valor da frente for diferente de 0,\naumenta-se 1 → 35,56 = 35,6\u003c/li\u003e\n\u003cli\u003eao arredondar por 5, se o valor da frente for igual a 0, deixa como\nestá se o valor anterior for par, se não aumenta 1 → 35,5 = 35,6;\n34.5 = 34.5\u003c/li\u003e\n\u003cli\u003enão faça arredondamentos sucessivos, faça apenas no final\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"termos-da-estatística\"\u003eTermos da estatística\u003c/h3\u003e\n\u003ch4 id=\"estatística\"\u003eEstatística\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eestudo de fenômenos coletivos\u003c/li\u003e\n\u003cli\u003eEstatística Descritiva → coleta, organiza e descreve os dados\u003c/li\u003e\n\u003cli\u003eEstatística indutiva ou inferencial → interpreta e generaliza as\nconclusões (usa probabilidade)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"variáveis\"\u003eVariáveis\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003econjuntos de resultados possíveis de um fenômeno\u003c/li\u003e\n\u003cli\u003evariáveis qualitativas → variável que é representada por classes\n(sexo, cidade, etc.)\u003c/li\u003e\n\u003cli\u003evariáveis quantitativas → variável representada por números (idade,\npeso, etc.)\u003c/li\u003e\n\u003cli\u003evariável continua → pode assumir qualquer valor dentro de certos\nlimites\u003c/li\u003e\n\u003cli\u003evariável discreta → só pode assumir valores que estão no conjunto\npossível\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"população\"\u003ePopulação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etodo o grupo de dados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"amostra\"\u003eAmostra\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eparte (representativa) da população\u003c/li\u003e\n\u003cli\u003equando é dito representativo, significa pegar parte dos dados que\npossuam características semelhantes, sem precisar pegar o todo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dados-brutos\"\u003eDados Brutos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eDados coletados da pesquisa, sem qualquer tipo de tratamento\u003c/li\u003e\n\u003cli\u003edados que não organizados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"rol\"\u003eROL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edados brutos colocados em ordem\u003c/li\u003e\n\u003cli\u003epode ser crescente ou decrescente\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"amostragem\"\u003eAmostragem\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etécnicas para escolher a amostra\u003c/li\u003e\n\u003cli\u003eAmostragem casual ou aleatória simples → amostragem por sorteio\u003c/li\u003e\n\u003cli\u003eAmostragem proporcional estratificada → retirada da amostra através\nde subgrupos (estratos) dos dados. Deve ser proporcional ao número\nde elementos em cada subgrupo (se tiver mais eu pego mais dados, se\ntiver menos eu pego menos). Para achar o numero de dados de cada\nsubgrupo faça:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003etotal_para_retirar_subgrupo =\n((total_subgrupo)(total_que_quero_da_amostra)) / (total_de_elementos)\u003c/p\u003e","title":"Ciências da computação dia 246"},{"content":" Modo Kernel → acesso completo ao hardware e pode executar qualquer instrução de máquina Modo usuário →instruções que o user pode executar (mais limitado) Programas de interface → parte que o usuário consegue mandar instruções para a máquina (shell, programas GUI, etc.) SO básico → programa gigante que gerencia hardware e rotinas do usuário. Funciona através de eventos que o usuário realiza MIPS = milhões de instruções por segundo ciclo de máquina = o PC executa 1 instrução de um ciclo Multi threading = simulação de mais núcleos, um thread é chaveado para o outro multi-core = o SO deve manipular e gerenciar os cores (como se fossem vários processadores) memória virtual = memória ram em disco IBM 360 criação do MULTICS que serviu de base para o UNIX começa o uso de multi-programação (vários processos simultâneos) uso de SPOOLING → quando uma tarefa finaliza ele pega a próxima da fila time sharing → executa um pouco de cada processo usando um único núcleo terminais burros → vários users podem se conectar numa mesma máquina que não faz nenhum processamento ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-247-4h89a16jie6ja/","summary":"\u003cul\u003e\n\u003cli\u003eModo Kernel → acesso completo ao hardware e pode executar qualquer\ninstrução de máquina\u003c/li\u003e\n\u003cli\u003eModo usuário →instruções que o user pode executar (mais limitado)\u003c/li\u003e\n\u003cli\u003eProgramas de interface → parte que o usuário consegue mandar\ninstruções para a máquina (shell, programas GUI, etc.)\u003c/li\u003e\n\u003cli\u003eSO básico → programa gigante que gerencia hardware e rotinas do\nusuário. Funciona através de eventos que o usuário realiza\u003c/li\u003e\n\u003cli\u003eMIPS = milhões de instruções por segundo\u003c/li\u003e\n\u003cli\u003eciclo de máquina = o PC executa 1 instrução de um ciclo\u003c/li\u003e\n\u003cli\u003eMulti threading = simulação de mais núcleos, um thread é chaveado\npara o outro\u003c/li\u003e\n\u003cli\u003emulti-core = o SO deve manipular e gerenciar os cores (como se\nfossem vários processadores)\u003c/li\u003e\n\u003cli\u003ememória virtual = memória ram em disco\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"ibm-360\"\u003eIBM 360\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecriação do MULTICS que serviu de base para o UNIX\u003c/li\u003e\n\u003cli\u003ecomeça o uso de multi-programação (vários processos simultâneos)\u003c/li\u003e\n\u003cli\u003euso de SPOOLING → quando uma tarefa finaliza ele pega a próxima da\nfila\u003c/li\u003e\n\u003cli\u003etime sharing → executa um pouco de cada processo usando um único\nnúcleo\u003c/li\u003e\n\u003cli\u003eterminais burros → vários users podem se conectar numa mesma máquina\nque não faz nenhum processamento\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 247"},{"content":" diferente dos autômatos, grafos possuem vertices (o que era chamado de estado) e arestas (o que eram as transições) arestas possuem pesos ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-248-388g4defc4ch/","summary":"\u003cul\u003e\n\u003cli\u003ediferente dos autômatos, grafos possuem vertices (o que era chamado\nde estado) e arestas (o que eram as transições)\u003c/li\u003e\n\u003cli\u003earestas possuem pesos\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 248"},{"content":"Topologias topologia barramento não era necessário todos os computadores estarem ligados para funcionar a parte lógica da topologia estrela continua barramento Tipos de rede VLAN → rede LAN virtual, apenas dispositivos inseridos nessa rede virtual se comunicam rede de difusão → os pacotes são enviados para todas as máquinas da mesma rede, contendo dentro dele a origem e o destino, assim se a placa de rede de cada máquina verifica se o destino é a maquina em questão, se for ele pega e senão apenas descarta. Isso é usado para redes menores (locais geralmente). Tanto na ida quando na volta dos dados. Broadcasting → Sinais são enviados para todos os dispositivos da rede. Muito usado para compartilhar coisas em rede, impressoras, pastas, etc. Multicasting → Transmite os sinais para todas as máquinas de um grupo especifico (mais de 1 máquina) Unicasting → Há apenas um transmissor e um receptor rede ponto a ponto → rede Unicast usada ara para transmitir de uma máquina a outra por longas distâncias. PAN(até 1m) → Bluetooth, por exemplo, uma rede pequena, no máximo uma mesa de trabalho LAN (até 1km) → redes locais, casa, campus, etc MAN (até 10km) → cidades (tv por exemplo). Necessário um local que concentra e distribui a rede para caixas de junção, que vão para casas, estabelecimentos, etc. WAN (até 1000km) → regiões geográficas. Composta por Hosts e conectadas por subredes (ISPs, empresas de telefonia, etc.) internet (acima de 1000km) Dispositivos Switch é gerenciável, com ele você pode criar uma VLAN, mandar desligar certas portas, etc. RJ-11 é usado para telefonia (aceita apenas 2 pares, ou quatro fios) Cabo categoria 4 era Ethernet (max 10 Mbps) Cabo categoria 5 é fastethernet Cabo categoria 5e é Gigabit half duplex, ou seja, ele carrega dados em Gigabit por todos os pares, sendo assim, para trafegar Gigabit eu só posso ou mandar ou receber, não os dois ao mesmo tempo Cabo categoria 6 é Gigabit full duplex, ou seja, os dados trafegam em Gigabit por apenas dois dos pares, podendo assim enviar e receber ao mesmo tempo Quando se pensa em hardware para redes, pensa-se em como transmitir os dados e em que escala se a placa de rede estiver em modo promiscuous, ela consegue processar todos os pacotes, mesmo não sendo o destinado a ela (rede de difusão) Roteador → interliga duas redes lógicas diferentes Switch → interliga dispositivos físicos Para empresas o roteador só faz rota, DHCP é feito por outro dispositivo Unidades em redes não são usados bytes, mas sim bits 1Mbps = 1000000 bits por segundo Componentes de Subrede interligam o mundo possuem linhas de transmissão para ISPs (usando cobre, fibra óptica, radio, torres de transmissão, satélites, etc.) possuem elementos de comutação → computadores que interligam 3 ou mais linhas de transmissão Há também cabos submarinos (de fibra óptica) interligando continentes, usando amplificadores para alcançar essas longas distâncias. O mesmo cabo também é usado para telefone. PPOe → Uma espécie de Usario e senha que te deixa acessar a rede provida pelo ISP gateway padrão → IP do roteador. Caso você tente acessar um IP que não está dentro da subrede, o padrão é esse ip ser redirecionado para o roteador que se encarregará de encontrar ele fora da rede Quando você tenta acessar algo de fora da rede, o maximo que ele salta pra tentar encontrar o IP é 30 Para haver conexão é necessário ter conexão física e lógica Máscara de subrede /24 no fim do IP significa que o final da máscara é 0 255 é o valor máximo para cada octeto, assim como 0 é o mínimo cada 255 na mascará significa que o número ali não mudara nos IPs, e o 0 significa que aquele octeto pode ir de 1\u0026ndash;254 final .0 e .255 dos IPS são reservados X.X.X.255 é o endereço de broadcasting X.X.X.0 é o IP de rede Protocolos ICMP → usado para verificar os dispositivos na rede e verificar o tempo de resposta, nome, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-249-4f954j561904a/","summary":"\u003ch4 id=\"topologias\"\u003eTopologias\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etopologia barramento não era necessário todos os computadores\nestarem ligados para funcionar\u003c/li\u003e\n\u003cli\u003ea parte lógica da topologia estrela continua barramento\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-derede\"\u003eTipos de rede\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eVLAN → rede LAN virtual, apenas dispositivos inseridos nessa rede\nvirtual se comunicam\u003c/li\u003e\n\u003cli\u003erede de difusão → os pacotes são enviados para todas as máquinas da\nmesma rede, contendo dentro dele a origem e o destino, assim se a\nplaca de rede de cada máquina verifica se o destino é a maquina em\nquestão, se for ele pega e senão apenas descarta. Isso é usado para\nredes menores (locais geralmente). Tanto na ida quando na volta dos\ndados.\u003c/li\u003e\n\u003cli\u003eBroadcasting → Sinais são enviados para todos os dispositivos da\nrede. Muito usado para compartilhar coisas em rede, impressoras,\npastas, etc.\u003c/li\u003e\n\u003cli\u003eMulticasting → Transmite os sinais para todas as máquinas de um\ngrupo especifico (mais de 1 máquina)\u003c/li\u003e\n\u003cli\u003eUnicasting → Há apenas um transmissor e um receptor\u003c/li\u003e\n\u003cli\u003erede ponto a ponto → rede Unicast usada ara para transmitir de uma\nmáquina a outra por longas distâncias.\u003c/li\u003e\n\u003cli\u003ePAN(até 1m) → Bluetooth, por exemplo, uma rede pequena, no máximo\numa mesa de trabalho\u003c/li\u003e\n\u003cli\u003eLAN (até 1km) → redes locais, casa, campus, etc\u003c/li\u003e\n\u003cli\u003eMAN (até 10km) → cidades (tv por exemplo). Necessário um local que\nconcentra e distribui a rede para caixas de junção, que vão para\ncasas, estabelecimentos, etc.\u003c/li\u003e\n\u003cli\u003eWAN (até 1000km) → regiões geográficas. Composta por Hosts e\nconectadas por subredes (ISPs, empresas de telefonia, etc.)\u003c/li\u003e\n\u003cli\u003einternet (acima de 1000km)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dispositivos\"\u003eDispositivos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSwitch é gerenciável, com ele você pode criar uma VLAN, mandar\ndesligar certas portas, etc.\u003c/li\u003e\n\u003cli\u003eRJ-11 é usado para telefonia (aceita apenas 2 pares, ou quatro fios)\u003c/li\u003e\n\u003cli\u003eCabo categoria 4 era Ethernet (max 10 Mbps)\u003c/li\u003e\n\u003cli\u003eCabo categoria 5 é fastethernet\u003c/li\u003e\n\u003cli\u003eCabo categoria 5e é Gigabit half duplex, ou seja, ele carrega dados\nem Gigabit por todos os pares, sendo assim, para trafegar Gigabit eu\nsó posso ou mandar ou receber, não os dois ao mesmo tempo\u003c/li\u003e\n\u003cli\u003eCabo categoria 6 é Gigabit full duplex, ou seja, os dados trafegam\nem Gigabit por apenas dois dos pares, podendo assim enviar e receber\nao mesmo tempo\u003c/li\u003e\n\u003cli\u003eQuando se pensa em hardware para redes, pensa-se em como transmitir\nos dados e em que escala\u003c/li\u003e\n\u003cli\u003ese a placa de rede estiver em modo promiscuous, ela consegue\nprocessar todos os pacotes, mesmo não sendo o destinado a ela (rede\nde difusão)\u003c/li\u003e\n\u003cli\u003eRoteador → interliga duas redes lógicas diferentes\u003c/li\u003e\n\u003cli\u003eSwitch → interliga dispositivos físicos\u003c/li\u003e\n\u003cli\u003ePara empresas o roteador só faz rota, DHCP é feito por outro\ndispositivo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"unidades\"\u003eUnidades\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eem redes não são usados bytes, mas sim bits\u003c/li\u003e\n\u003cli\u003e1Mbps = 1000000 bits por segundo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"componentes-desubrede\"\u003eComponentes de Subrede\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003einterligam o mundo\u003c/li\u003e\n\u003cli\u003epossuem linhas de transmissão para ISPs (usando cobre, fibra óptica,\nradio, torres de transmissão, satélites, etc.)\u003c/li\u003e\n\u003cli\u003epossuem elementos de comutação → computadores que interligam 3 ou\nmais linhas de transmissão\u003c/li\u003e\n\u003cli\u003eHá também cabos submarinos (de fibra óptica) interligando\ncontinentes, usando amplificadores para alcançar essas longas\ndistâncias. O mesmo cabo também é usado para telefone.\u003c/li\u003e\n\u003cli\u003ePPOe → Uma espécie de Usario e senha que te deixa acessar a rede\nprovida pelo ISP\u003c/li\u003e\n\u003cli\u003egateway padrão → IP do roteador. Caso você tente acessar um IP que\nnão está dentro da subrede, o padrão é esse ip ser redirecionado\npara o roteador que se encarregará de encontrar ele fora da rede\u003c/li\u003e\n\u003cli\u003eQuando você tenta acessar algo de fora da rede, o maximo que ele\nsalta pra tentar encontrar o IP é 30\u003c/li\u003e\n\u003cli\u003ePara haver conexão é necessário ter conexão física e lógica\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"máscara-desubrede\"\u003eMáscara de subrede\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e/24 no fim do IP significa que o final da máscara é 0\u003c/li\u003e\n\u003cli\u003e255 é o valor máximo para cada octeto, assim como 0 é o mínimo\u003c/li\u003e\n\u003cli\u003ecada 255 na mascará significa que o número ali não mudara nos IPs, e\no 0 significa que aquele octeto pode ir de 1\u0026ndash;254\u003c/li\u003e\n\u003cli\u003efinal .0 e .255 dos IPS são reservados\u003c/li\u003e\n\u003cli\u003eX.X.X.255 é o endereço de broadcasting\u003c/li\u003e\n\u003cli\u003eX.X.X.0 é o IP de rede\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"protocolos\"\u003eProtocolos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eICMP → usado para verificar os dispositivos na rede e verificar o\ntempo de resposta, nome, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 249"},{"content":"Álgebra Booleana\ncriada por George Boole a partir dos conceitos de conjunto vazio(0) e conjunto universo(1) ele criou essa álgebra possui 3 operações básicas → AND, OR, NOT No começo ela era usada apenas na filosofia, com proposições lógicas(século 18), mas com o advento dos semicondutores ela passou a ser usada também na eletrônica(a partir do século 20) Ordem de precedência\nNOT → AND → OR\nPOSTULADOS FUNDAMENTAIS\nseguindo esses postulados se prova que a álgebra booleana é válida axioma 1(fechamento)\nqualquer valor operado consigo mesmo resulta nele\nx + x = x (OR)\nx * x = x (AND)\nA partir disso podemos simplificar o circuito, ao invés de utilizarmos uma porta para esse circuito, como sabemos que sempre a saída será igual a entrada, podemos simplesmente remover a porta e deixar apenas um fio\naxioma 2 (elemento nulo)\nvalor que quando usado em uma certa operação o resultado sempre será ele\n0 + 1 = 1 (valor nulo OR → 1)\n1 * 0 = 0 (valor nulo AND → 0)\nnesse podemos substituir as portas por apenas fios ou se necessário um pull up para o valor 1, e pull down para o valor 0\naxioma 3 (elemento neutro)\nvalor que não modifica o resultado da operação\n0 + 1 =1 (valor neutro OR → 0)\n0 * 1 = 0 (valor neutro AND → 1)\nnesse caso podemos também remover a porta e deixar apenas a entrada com um simples fio\naxioma 4 (propriedade comutativa)\na ordem dos fatores não altera o produto\nx + y = y + x\nx * y = y * x\nInfelizmente nesse caso o circuito não pode ser reduzido\naxioma 5(propriedade associativa)\nem operações iguais não importa por qual par você comece operando\nx + y + z = (x + y) + z = x + (y+z) = y + (z + x)\nx * y *z = (x * y) *z = x *(y*z) = y *(z *x)\nInfelizmente nesse caso o circuito também não pode ser reduzido\naxioma 6 (elemento inverso)\nvalor operado com seu valor inverso é sempre fixo\nx + x\u0026rsquo; = 1\nx * x\u0026rsquo; = 0\nnesse caso você pode trocar isso por um pull up ou pull down, ou só um fio\naxioma 7 (propriedade distributiva)\nvocê pode fazer distributiva entre os valores\nx * (y + z) = x * y + x * z\nx +(y * z) = (x + y) * (x + z)\ntambém não há como reduzir\nexpressão dual\numa expressão dual é basicamente o inverso de uma expressão\nexemplo\n(x + y) * (a + 0) + c ← expressão comum a\n(x * y) + (a + 1) * c ← expressão dual a'\npara fazer uma expressão dual, pegue a expressão e inversa AND com OR e OR com AND e inverta também 0 com 1 e 1 com 0\nCircuitos melhores\npara se fazer um circuito melhor deve ser levado em consideração o tempo que ele levará para entregar o resultado, para isso pegue cada circuito (cada coluna de componentes) e adicione 10ns para cada, o circuito que tiver menos tempo de execução será um pouco melhor para executar uma certa tarefa\nnesse caso o tempo total de um circuito será de 20ns\nOBSERVAÇÕES\nnúmero de bits de um processador significa o quanto de bits ele pode processar de uma só vez ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-25-g464i12574e9/","summary":"\u003cp\u003eÁlgebra Booleana\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ecriada por George Boole\u003c/li\u003e\n\u003cli\u003ea partir dos conceitos de conjunto vazio(0) e conjunto universo(1)\nele criou essa álgebra\u003c/li\u003e\n\u003cli\u003epossui 3 operações básicas → AND, OR, NOT\u003c/li\u003e\n\u003cli\u003eNo começo ela era usada apenas na filosofia, com proposições\nlógicas(século 18), mas com o advento dos semicondutores ela passou\na ser usada também na eletrônica(a partir do século 20)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eOrdem de precedência\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eNOT → AND → OR\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePOSTULADOS FUNDAMENTAIS\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eseguindo esses postulados se prova que a álgebra booleana é válida\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eaxioma 1(fechamento)\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e","title":"Ciências da computação dia 25"},{"content":" tabela de distribuição de frequência → tabela estatísticas relativas a frequência dos valores na amostra (intervalo [ [ ) classe(i) → intervalos limite inferior(li) → de cada intervalo, esse é o menor valor(150, 154, 158) limite superior(Li) → de cada intervalo, esse é o maior valor(154, 158, 162) amplitude(h) → tamanho do limite (Li \u0026mdash; li) Limite minimo(Lmin) → menor limite inferior(150) Limite máximo(Lmax) → maior limite superior (162) amplitude total (AT) → AT=Lmax-Lmin maior valor da amostra (Xmax) menor valor da amostra (Xmin) amplitude amostral (AA) → AA = Xmax \u0026mdash; Xmin ponto médio da classe (Xi) → média dos valores (valores da amostra) frequência absoluta(fi) → quantidade de aparições de um elemento contido em certo intervalo frequência relativa(fri) → fi/ Σfi frequência relativa % (fri%) → fri*100 frequência acumulada (fac) → frequência absoluta da classe atual, somado com a frequência acumulada anterior frequência acumulada relativa(far) → fac/Σfi Calculo do numero de intervalos depende do caso e da experiencia do pesquisador há algumas formulas que ajudam a achar também Critério da raiz → i = √n (i é o numero de intervalos e n a quantidade de elementos) formula de Sturges → i≅1 + 3.3*log(n) usando essas formulas, o valor não seria sempre exato, sendo assim, você pode ajustar colocando um a mais ou a menos, dependendo do caso para saber qual será a amplitude de cada intervalo, basta pegar o i resultante e fazer: h = AA/i\ncaso h seja muito pequeno, não vale a pena usar intervalos, as vezes utilizar os valores absolutos da amostra seja o melhor. Isso vai depender, novamente, da finalidade da pesquisa ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-250-feb9a3312g4ha/","summary":"\u003cul\u003e\n\u003cli\u003etabela de distribuição de frequência → tabela estatísticas relativas\na frequência dos valores na amostra (intervalo [ [ )\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-250-feb9a3312g4ha/image_397.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eclasse(i) → intervalos\u003c/li\u003e\n\u003cli\u003elimite inferior(li) → de cada intervalo, esse é o menor valor(150,\n154, 158)\u003c/li\u003e\n\u003cli\u003elimite superior(Li) → de cada intervalo, esse é o maior valor(154,\n158, 162)\u003c/li\u003e\n\u003cli\u003eamplitude(h) → tamanho do limite (Li \u0026mdash; li)\u003c/li\u003e\n\u003cli\u003eLimite minimo(Lmin) → menor limite inferior(150)\u003c/li\u003e\n\u003cli\u003eLimite máximo(Lmax) → maior limite superior (162)\u003c/li\u003e\n\u003cli\u003eamplitude total (AT) → AT=Lmax-Lmin\u003c/li\u003e\n\u003cli\u003emaior valor da amostra (Xmax)\u003c/li\u003e\n\u003cli\u003emenor valor da amostra (Xmin)\u003c/li\u003e\n\u003cli\u003eamplitude amostral (AA) → AA = Xmax \u0026mdash; Xmin\u003c/li\u003e\n\u003cli\u003eponto médio da classe (Xi) → média dos valores (valores da amostra)\u003c/li\u003e\n\u003cli\u003efrequência absoluta(fi) → quantidade de aparições de um elemento\ncontido em certo intervalo\u003c/li\u003e\n\u003cli\u003efrequência relativa(fri) → fi/ Σfi\u003c/li\u003e\n\u003cli\u003efrequência relativa % (fri%) → fri*100\u003c/li\u003e\n\u003cli\u003efrequência acumulada (fac) → frequência absoluta da classe atual,\nsomado com a frequência acumulada anterior\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-250-feb9a3312g4ha/image_398.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 250"},{"content":"Tipos de sistemas multiprocessados → sistemas com múltiplos núcleos (múltiplas CPUS) tempo-real → sistemas de baixa latência (sem atrasos), ou que podem ter atrasos, mas poucos (sistemas não críticos) servidor → sistema de alto desempenho. Podendo ter dimensões de um computador de mesa ou de mainframes. Usado para atender a múltiplas requisições embarcados → sistemas que fazem uma única coisa. O sistema não permite a instalação de softwares externos (tudo está em uma ROM) cartões inteligentes → JAVA possuía uma plataforma para programar para esses sistemas, contendo dentro de si uma JVM Computadores de grande porte para processamento de muitas coisas ao mesmo tempo(time sharing) e grande volume de dados OS/390 da IBM era o OS mais usado, hj o LINUX tem crescido pra isso Mainframes só processavam os dados Mainframes possuíam terminais burros q recolhiam os valores e repassavam para o mainframe OSes Linux foi baseado no MINIX Ecos → usado para sistemas embarcados de tempo real para aplicações criticas Arquitetura comunicação pode ser feita entre processos usando socket shell é a camada mais acima do kernel → local onde o user pode executar comandos para o kernel ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-251-fb2e997h2hjj/","summary":"\u003ch4 id=\"tipos-desistemas\"\u003eTipos de sistemas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emultiprocessados → sistemas com múltiplos núcleos (múltiplas CPUS)\u003c/li\u003e\n\u003cli\u003etempo-real → sistemas de baixa latência (sem atrasos), ou que podem\nter atrasos, mas poucos (sistemas não críticos)\u003c/li\u003e\n\u003cli\u003eservidor → sistema de alto desempenho. Podendo ter dimensões de um\ncomputador de mesa ou de mainframes. Usado para atender a múltiplas\nrequisições\u003c/li\u003e\n\u003cli\u003eembarcados → sistemas que fazem uma única coisa. O sistema não\npermite a instalação de softwares externos (tudo está em uma ROM)\u003c/li\u003e\n\u003cli\u003ecartões inteligentes → JAVA possuía uma plataforma para programar\npara esses sistemas, contendo dentro de si uma JVM\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"computadores-de-grandeporte\"\u003eComputadores de grande porte\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epara processamento de muitas coisas ao mesmo tempo(time sharing) e\ngrande volume de dados\u003c/li\u003e\n\u003cli\u003eOS/390 da IBM era o OS mais usado, hj o LINUX tem crescido pra isso\u003c/li\u003e\n\u003cli\u003eMainframes só processavam os dados\u003c/li\u003e\n\u003cli\u003eMainframes possuíam terminais burros q recolhiam os valores e\nrepassavam para o mainframe\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"oses\"\u003eOSes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLinux foi baseado no MINIX\u003c/li\u003e\n\u003cli\u003eEcos → usado para sistemas embarcados de tempo real para aplicações\ncriticas\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"arquitetura\"\u003eArquitetura\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-251-fb2e997h2hjj/image_399.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 251"},{"content":" um grafo pode ser composto de subgrafos há a possibilidade de um grafo não ter arestas grafos podem ter loops como o grafo é, depende do contexto grau de um vértice → quantas arestas saem dele Problema das pontes No problema das pontes, há quatro regiões, e 7 pontes que as interligam. A ideia aqui é descobrir se há alguma maneira de sair de um ponto, passar por todas as pontes, sem repetir nenhuma, e voltar ao ponto inicial.\nesse problema, pode ser visto como um grafo não dirigido, possuindo 4 vertices.\nNesse caso, para encontrar a solução, podemos olhar para o grau de cada nó.\nd(V1) = 3\nd(V2) = 3\nd(V3) = 5\nd(V4) = 3\nPensando que, para sair de um local, e voltar para ele sem repetir o trajeto, precisamos de um numero par de caminhos, esse problema não é possível, já que todos os trajetos são ímpar.\nMesmo reduzindo o numero de pontes, e deixando alguns graus pares, isso não será possível ainda.\nProblema do tabuleiro Imagine um tabuleiro 3x3 com quatro peças, duas nomeadas como A e duas como B. Todas estão nos cantos de uma certa forma. Aqui, queremos saber se é possível deixar essas peças no canto, deixando seus relativos lado a lado (pode ser tanto horizontal como vertical) movendo as apenas em L.\nalgo que poderíamos fazer é mapear as posições que cada posição do tabuleiro pode ir.\nagora, podemos fazer um grafo com essas informações, para entender melhor o problema, será utilizado o layout circular.\nObservando o grafo do problema, é possível ver que, mesmo movimentando as peças para a esquerda ou direita, é impossível conseguir inverter as posições de A e B, sendo assim, é impossível fazer o que problema requer.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-252-8i4afba2h3d1/","summary":"\u003cul\u003e\n\u003cli\u003eum grafo pode ser composto de subgrafos\u003c/li\u003e\n\u003cli\u003ehá a possibilidade de um grafo não ter arestas\u003c/li\u003e\n\u003cli\u003egrafos podem ter loops\u003c/li\u003e\n\u003cli\u003ecomo o grafo é, depende do contexto\u003c/li\u003e\n\u003cli\u003egrau de um vértice → quantas arestas saem dele\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"problema-daspontes\"\u003eProblema das pontes\u003c/h4\u003e\n\u003cp\u003eNo problema das pontes, há quatro regiões, e 7 pontes que as interligam.\nA ideia aqui é descobrir se há alguma maneira de sair de um ponto,\npassar por todas as pontes, sem repetir nenhuma, e voltar ao ponto\ninicial.\u003c/p\u003e","title":"Ciências da computação dia 252"},{"content":"Imperativo mais antigo mais próximo de assembly segue a sequência do código lista de instruções que modificam valores na memória até atingir o estado final sem loops, ou similares, apenas estados sendo modificados e GOTOs sendo realizado quando uma certa condição é verdadeira baseado na arquitetura de Jon Von Neumann não possui blocos, aqui, para realizar \u0026ldquo;sub-operações\u0026rdquo;, é necessário usar GOTO, para ir para certas regiões do código Turing complete quando uma linguagem possui todas as peças necessárias para executar qualquer coisa que seja computacionalmente computável Abstração de células de memória simples → variáveis sofisticadas → matrix, arrays, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-253-31cg14j07d36/","summary":"\u003ch4 id=\"imperativo\"\u003eImperativo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emais antigo\u003c/li\u003e\n\u003cli\u003emais próximo de assembly\u003c/li\u003e\n\u003cli\u003esegue a sequência do código\u003c/li\u003e\n\u003cli\u003elista de instruções que modificam valores na memória até atingir o\nestado final\u003c/li\u003e\n\u003cli\u003esem loops, ou similares, apenas estados sendo modificados e GOTOs\nsendo realizado quando uma certa condição é verdadeira\u003c/li\u003e\n\u003cli\u003ebaseado na arquitetura de Jon Von Neumann\u003c/li\u003e\n\u003cli\u003enão possui blocos, aqui, para realizar \u0026ldquo;sub-operações\u0026rdquo;, é necessário\nusar GOTO, para ir para certas regiões do código\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"turing-complete\"\u003eTuring complete\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equando uma linguagem possui todas as peças necessárias para executar\nqualquer coisa que seja computacionalmente computável\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"abstração-de-células-dememória\"\u003eAbstração de células de memória\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esimples → variáveis\u003c/li\u003e\n\u003cli\u003esofisticadas → matrix, arrays, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 253"},{"content":"Paradigma declarativo não há sequência de ordens Usado para fazer perguntas sobre os dados SQL, Prolog são exemplos de linguagem paradigmas baseados neste são: Funcional, Lógica e descritivo ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-254-9ec7g0c5a7gc/","summary":"\u003ch4 id=\"paradigma-declarativo\"\u003eParadigma declarativo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enão há sequência de ordens\u003c/li\u003e\n\u003cli\u003eUsado para fazer perguntas sobre os dados\u003c/li\u003e\n\u003cli\u003eSQL, Prolog são exemplos de linguagem\u003c/li\u003e\n\u003cli\u003eparadigmas baseados neste são: Funcional, Lógica e descritivo\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 254"},{"content":"linhas poligonais linhas que não possuem curva polígonos (apenas lados retos) Histograma Mostra a frequência dos dados o valor do meio da barra é o ponto médio do intervalo barras são postas lado a lado ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-255-79f4fb319h1f/","summary":"\u003ch4 id=\"linhas-poligonais\"\u003elinhas poligonais\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003elinhas que não possuem curva\u003c/li\u003e\n\u003cli\u003epolígonos (apenas lados retos)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"histograma\"\u003eHistograma\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eMostra a frequência dos dados\u003c/li\u003e\n\u003cli\u003eo valor do meio da barra é o ponto médio do intervalo\u003c/li\u003e\n\u003cli\u003ebarras são postas lado a lado\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://www.investopedia.com/terms/h/histogram.asp\\\"\u003einvestopedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-255-79f4fb319h1f/image_408.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"gráfico-de-polígonos-de-frequência\"\u003eGráfico de polígonos de frequência\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eespécie de histograma mas feito com linhas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://byjus.com/maths/frequency-polygons/\\\"\u003eBYJUS\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-255-79f4fb319h1f/image_409.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"pictograma\"\u003ePictograma\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eutiliza figuras ao invés de barras\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://venngage.com/blog/pictogram/\\\"\u003eVenngage\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-255-79f4fb319h1f/image_410.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"cartograma\"\u003eCartograma\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egráficos usando o mapa\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://pt.wikipedia.org/wiki/Cartograma\\\"\u003ewikipedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-255-79f4fb319h1f/image_411.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 255"},{"content":"Pipeline quebra uma instrução em partes menores que serão executadas de formas diferentes para ser mais rápido Processos programa em execução e sistemas multiprocessados, você não sabe qual processo entrará primeiro é imprevisível qual processo o escalonador escolherá para executar tudo do programa fica junto de seu processo, incluindo variáveis e afins processo sequencial → um processo é executado por vez processo paralelo → varias processos são executados de uma só vez. Pode ser executado tudo de um programa, ou executa uma parte de cada por vez Um programa pode ter mais de um processo, mas no mínimo 1 Reentrância ajuda um programa a ser paralelo Para criar um processo, é feita uma chamada ao Kernel(como com o fork) e é criado um processo pai e filho com o mesmo endereçamento, depois o filho recebe um novo Processos podem terminar de forma voluntaria (exit) ou involuntária(forçar parada, error, KILL) Reentrância Um processo permite que vários users (processos) sejam adicionados na mesma área da memória do processo pai, sem precisar carregar as instruções várias vezes na memória variável global impede a reentrância funções que não compartilham nada externamente são reentrantes (cada chamada da função terá o seu contexto/espaço) o programa é executado várias vezes, mas só é carregado uma única vez na memória ao executar em várias threads, um código reentrante garante independência var a = 1; function nao_reentrante(n){ for(let i = 0; i \u0026lt; n; i++){ a += i; } return a; } function reentrante(n){ let a = 1; for(let i = 0; i \u0026lt; n; i++){ a += i; } return a; } interface Func{ public int exec(int n); } class Reentrant implements Func{ public int exec(int n){ int a = 0; for(int i = 0; i \u0026lt; n; i++) a += i; return a; } } class NonReentrant implements Func{ private int a = 0; public int exec(int n){ for(int i = 0; i \u0026lt; n; i++) a += i; return a; } } class TestThread extends Thread{ private String name; private Func func; private int n; public TestThread(String name, Func func, int n){ this.name = name; this.func = func; this.n = n; } public void run(){ System.out.println(\u0026#34;Executing Thread: \u0026#34; + this.name); int result = this.func.exec(this.n); System.out.println(\u0026#34;Result from Thread \u0026#34; + this.name + \u0026#34;= \u0026#34;+result); } } public class ThreadsTest{ public static void main(String[] args) { //Func reentrant = new Reentrant(); Func nonReentrant = new NonReentrant(); //System.out.println(\u0026#34;---Reentrant Test---\u0026#34;); //Thread t1 = new TestThread(\u0026#34;T1\u0026#34;, reentrant, 5); //Thread t2 = new TestThread(\u0026#34;T2\u0026#34;, reentrant, 6); // //t1.start(); //t2.start(); System.out.println(\u0026#34;---Non Reentrant Test---\u0026#34;); Thread t1 = new TestThread(\u0026#34;T1\u0026#34;, nonReentrant, 5); Thread t2 = new TestThread(\u0026#34;T2\u0026#34;, nonReentrant, 6); t1.start(); t2.start(); } } Hierarquia de processos Um processo pai pode dar fork e criar um novo nó na árvore Windows não possui hierarquia de processos, todos são criados da mesma forma Paralelismo sistemas logicamente paralelos → em sistemas com uma única CPU, pequenas partes de um processo é executado de tempos em tempos de forma intercalada. sistemas fisicamente paralelos → você possui várias CPUS então pode executar vários processos ao mesmo tempo usando o hardware disponível Estados de um processo Indefinido → código não está executando (é apenas um código fonte ainda) Bloqueado → processo parado esperando um evento (I/O por exemplo) Pronto para Execução → processo não está rodando, está esperando uma vaga na CPU Em execução → utilizando a CPU Transições de estados Criar → Coloca o processo em memória (Indefinido para Pronto) Acordar → terminou o processo de I/O (Bloqueado pra Pronto) Despacho → Coloca o próximo processo a executar que está na fila(Pronto para Em Execução) Bloquear → Esperando I/O (Em Execução para Bloqueado) Preempção (Suspender) → força a comutação do processo (Em Execução para Pronto) Destruir → Finaliza o processo (Em Execução para Indefinido) IBM\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-256-jg1abc0a9d349/image_415.png\"\u003e\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-256-jg1abc0a9d349/","summary":"\u003ch4 id=\"pipeline\"\u003ePipeline\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equebra uma instrução em partes menores que serão executadas de\nformas diferentes para ser mais rápido\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"processos\"\u003eProcessos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprograma em execução\u003c/li\u003e\n\u003cli\u003ee sistemas multiprocessados, você não sabe qual processo entrará\nprimeiro\u003c/li\u003e\n\u003cli\u003eé imprevisível qual processo o escalonador escolherá para executar\u003c/li\u003e\n\u003cli\u003etudo do programa fica junto de seu processo, incluindo variáveis e\nafins\u003c/li\u003e\n\u003cli\u003eprocesso sequencial → um processo é executado por vez\u003c/li\u003e\n\u003cli\u003eprocesso paralelo → varias processos são executados de uma só vez.\nPode ser executado tudo de um programa, ou executa uma parte de cada\npor vez\u003c/li\u003e\n\u003cli\u003eUm programa pode ter mais de um processo, mas no mínimo 1\u003c/li\u003e\n\u003cli\u003eReentrância ajuda um programa a ser paralelo\u003c/li\u003e\n\u003cli\u003ePara criar um processo, é feita uma chamada ao Kernel(como com o\nfork) e é criado um processo pai e filho com o mesmo endereçamento,\ndepois o filho recebe um novo\u003c/li\u003e\n\u003cli\u003eProcessos podem terminar de forma voluntaria (exit) ou\ninvoluntária(forçar parada, error, KILL)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"processo sequencial\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-256-jg1abc0a9d349/image_412.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 256"},{"content":"Grafos representado por um conjunto de vertices e nós → G(V,E) (E=edges) pares de nós não ordenados sempre são pares não há necessidade de retas, podem haver curvas redução de um caminho Relações Incidência → aresta que ligam dois nós adjacência → dois nós ligados por uma aresta incidente vizinhos → todos os nós ligados diretamente à um certo nó Todas as arestas são incidentes, dessa forma AC são adjacentes e AB também.\nJá a relação de vizinhos é a seguinte:\nA → B,C\nB → A\nC → A\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-257-e46h943f7e5g/","summary":"\u003ch4 id=\"grafos\"\u003eGrafos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003erepresentado por um conjunto de vertices e nós → G(V,E) (E=edges)\u003c/li\u003e\n\u003cli\u003epares de nós não ordenados\u003c/li\u003e\n\u003cli\u003esempre são pares\u003c/li\u003e\n\u003cli\u003enão há necessidade de retas, podem haver curvas\u003c/li\u003e\n\u003cli\u003eredução de um caminho\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"relações\"\u003eRelações\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eIncidência → aresta que ligam dois nós\u003c/li\u003e\n\u003cli\u003eadjacência → dois nós ligados por uma aresta incidente\u003c/li\u003e\n\u003cli\u003evizinhos → todos os nós ligados diretamente à um certo nó\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-257-e46h943f7e5g/image_417.png\"\u003e\u003c/p\u003e\n\u003cp\u003eTodas as arestas são incidentes, dessa forma AC são adjacentes e AB\ntambém.\u003c/p\u003e","title":"Ciências da computação dia 257"},{"content":"IPs IANA → responsável por distribuir IPs existem 3 tipos de IPs não roteáveis → 10.0.0.0/8, 172.168.0.0/16 e 192.168.0.0/24. Todos os outros IPS são roteáveis (maquinas externas ligadas a internet podem receber) 8, 16, 24 são as mascaras de IP, elas dizem quais números são estáticos. Dado que um IPv4 tem 32 bits, se dividirmos 32/4 = 8, sendo assim cada parte equivale a 8 bits. Com isso, quando temos IP/8, apenas o primeiro número é fixo, IP/16, os dois primeiros são fixos e IP/24 os três primeiros são Dispositivos Você pode ter uma rede só com um switch, não necessariamente um roteador Em Ethernet, quando tem muito trafego, a rede pode se atrapalhar com a pilha de pacotes a serem entregues e acabar dando colisão Para um pacote passar é necessário que a rede esteja totalmente livre Uma das maneiras de resolver a colisão é utilizar um delay para a entrega de cada pacote (há um protocolo para isso) O hub enviar as informações para todos os dispositivos. Já o Switch, com o uso ele descobre qual o ip de cada maquina e assimila elas a cada porta, dessa forma, ao mandar algo para um IP especifico, ele envia diretamente para aquela porta do switch que ele já conhece Cascateamento → interliga dois uma mais switches cabo crossover → uma ponta é diferente da outra. Geralmente utilizada para ligar computadores diretamente Ao fazer o cascateamento, ambos os switches devem ter o mesmo endereço de rede (como o 192.168.0.0). Se estiverem com endereços diferentes, ao tentarem se comunicar, mesmo estando fisicamente ligados a parte lógica não está. Para resolver isso, você pode colocar um roteador no meio, e configurar o Gateway Padrão para os switches, apontando para o roteador Roteadores são necessários configurações antes de usar, já o switch já vem pronto Firewall pode ser para dispositivo ou para uma rede toda NAT → usando o IP da internet, há uma dispositivo que pega os pacotes e redireciona de fora para uma maquina internet a rede. Sendo assim usado para servidores (isso também é um firewall) Serviços IIS → serviços para WEB da Microsoft Quando você acessa algo .com.br, ele bate no DNS do registro.br e retorna o IP do servidor da aplicação WEB VPN ponto a ponto → conecta dois ponto de forma barata e criptografada VPN também é instalado em firewalls Há também VPN que age como um túnel para criptografar a comunicação com a internet Proxy nasceu para interligar faculdades, exercitos, empresas, etc. é um meio que pega uma copia (cache) de algo que varias pessoas vão acessar e ao invés do resto acessar na internet ele acessa do proxy (economiza internet) → uso mais antigo, já que a internet hoje é mais rápida e não é necessário esse tipo de cache usado também como um ACL(lista de controle de acesso) para bloquear coisas que passam pela rede há também como configurar um proxy externo para pegar algo que está sendo bloqueado na rede atual proxy reverso → você configura uma porta da sua aplicação dai alguém de fora acessa em uma outra porta, mas quando vai trafegar para a aplicação o proxy faz esse redirecionamento de portas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-258-0cae1j9cfi65/","summary":"\u003ch4 id=\"ips\"\u003eIPs\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eIANA → responsável por distribuir IPs\u003c/li\u003e\n\u003cli\u003eexistem 3 tipos de IPs não roteáveis → 10.0.0.0/8, 172.168.0.0/16 e\n192.168.0.0/24. Todos os outros IPS são roteáveis (maquinas externas\nligadas a internet podem receber)\u003c/li\u003e\n\u003cli\u003e8, 16, 24 são as mascaras de IP, elas dizem quais números são\nestáticos. Dado que um IPv4 tem 32 bits, se dividirmos 32/4 = 8,\nsendo assim cada parte equivale a 8 bits. Com isso, quando temos\nIP/8, apenas o primeiro número é fixo, IP/16, os dois primeiros são\nfixos e IP/24 os três primeiros são\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dispositivos\"\u003eDispositivos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eVocê pode ter uma rede só com um switch, não necessariamente um\nroteador\u003c/li\u003e\n\u003cli\u003eEm Ethernet, quando tem muito trafego, a rede pode se atrapalhar com\na pilha de pacotes a serem entregues e acabar dando colisão\u003c/li\u003e\n\u003cli\u003ePara um pacote passar é necessário que a rede esteja totalmente\nlivre\u003c/li\u003e\n\u003cli\u003eUma das maneiras de resolver a colisão é utilizar um delay para a\nentrega de cada pacote (há um protocolo para isso)\u003c/li\u003e\n\u003cli\u003eO hub enviar as informações para todos os dispositivos. Já o Switch,\ncom o uso ele descobre qual o ip de cada maquina e assimila elas a\ncada porta, dessa forma, ao mandar algo para um IP especifico, ele\nenvia diretamente para aquela porta do switch que ele já conhece\u003c/li\u003e\n\u003cli\u003eCascateamento → interliga dois uma mais switches\u003c/li\u003e\n\u003cli\u003ecabo crossover → uma ponta é diferente da outra. Geralmente\nutilizada para ligar computadores diretamente\u003c/li\u003e\n\u003cli\u003eAo fazer o cascateamento, ambos os switches devem ter o mesmo\nendereço de rede (como o 192.168.0.0). Se estiverem com endereços\ndiferentes, ao tentarem se comunicar, mesmo estando fisicamente\nligados a parte lógica não está. Para resolver isso, você pode\ncolocar um roteador no meio, e configurar o Gateway Padrão para os\nswitches, apontando para o roteador\u003c/li\u003e\n\u003cli\u003eRoteadores são necessários configurações antes de usar, já o switch\njá vem pronto\u003c/li\u003e\n\u003cli\u003eFirewall pode ser para dispositivo ou para uma rede toda\u003c/li\u003e\n\u003cli\u003eNAT → usando o IP da internet, há uma dispositivo que pega os\npacotes e redireciona de fora para uma maquina internet a rede.\nSendo assim usado para servidores (isso também é um firewall)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"serviços\"\u003eServiços\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eIIS → serviços para WEB da Microsoft\u003c/li\u003e\n\u003cli\u003eQuando você acessa algo .com.br, ele bate no DNS do registro.br e\nretorna o IP do servidor da aplicação WEB\u003c/li\u003e\n\u003cli\u003eVPN ponto a ponto → conecta dois ponto de forma barata e\ncriptografada\u003c/li\u003e\n\u003cli\u003eVPN também é instalado em firewalls\u003c/li\u003e\n\u003cli\u003eHá também VPN que age como um túnel para criptografar a comunicação\ncom a internet\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"proxy\"\u003eProxy\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enasceu para interligar faculdades, exercitos, empresas, etc.\u003c/li\u003e\n\u003cli\u003eé um meio que pega uma copia (cache) de algo que varias pessoas vão\nacessar e ao invés do resto acessar na internet ele acessa do proxy\n(economiza internet) → uso mais antigo, já que a internet hoje é\nmais rápida e não é necessário esse tipo de cache\u003c/li\u003e\n\u003cli\u003eusado também como um ACL(lista de controle de acesso) para bloquear\ncoisas que passam pela rede\u003c/li\u003e\n\u003cli\u003ehá também como configurar um proxy externo para pegar algo que está\nsendo bloqueado na rede atual\u003c/li\u003e\n\u003cli\u003eproxy reverso → você configura uma porta da sua aplicação dai alguém\nde fora acessa em uma outra porta, mas quando vai trafegar para a\naplicação o proxy faz esse redirecionamento de portas\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 258"},{"content":"Padrão Ethernet quando foi inventado era utilizado barramento com cabo coaxial começou com a ideia de ser suportado por qualquer computador começou como uma transmissão simplex (um envia o resto aguarda) Ethernet checa em certos períodos de tempo se o pacote foi entregue, caso não tenha ele retransmite Padrão Ethernet é 802 camadas física e de enlace cada pacote tem de 64 \u0026ndash; 1518bytes não é possível enviar pacotes maiores do que isso, para enviar mais dados é necessário adicionar mais pacotes MAC → 3 primeiros é o fabricante e o resto é a placa ao usar DHCP, se queremos enviar um pacote para a mesma máquina sempre é necessário usar o endereço MAC MAC controla a transmissão e recepção com o meio físico CSMA/CD → controla se pode ou não transmitir no half duplex, também checa colisão e retransmite (usando um intervalo de tempo aleatório). possui um formato especifico para o pacote (quadro Ethernet) Quadro Ethernet destination address → MAC do destinatário source address → MAC do remetente Type/Length → tamanho do campo Data Data → dados (de 46\u0026ndash;1500 bytes) FCS → CRC Estados CSMA/CD transmitindo disputando → houve colisão inativo → ninguém está transmitindo Rádio amador é Simplex A palavra câmbio era usado como uma palavra chave para dizer que um lado pararia de enviar para o outro então para de receber e começar a enviar Simplex apenas um lado transmite e o outro recebe assim que ninguém está enviando, o outro lado pode começar a enviar e o outro receber Camada de Enlace camada que fecha a conexão entre as partes Fast Ethernet mudou a velocidade de transmissão de 10 → 100mbps e o modo que agora pode ser half ou full duplex em full duplex foi criado os passive trans → avisa a uma máquina de que deve pausar a transmissão por um tempo, removendo assim o CSMA/CD. Com isso, o Fast Ethernet não precisa ficar checando se há silêncio na rede para outro dispositivo começar a enviar dados Cabos de par trançado Unshielded Twisted Pair (UTP) → cabo sem blindagem. 4 pares de fios entrelaçados e revestidos com PVC (verão mais barata) (possui 100R) Shielded Twisted Pair(STP) → cabo com blindagem. Possui uma malha envolta que protege. Necessita de aterramento. Diminui a interferência. Mais caro. Categoria de cabos cat. 5 → frequência até 100Mhz e 100Mbps Cat. 5e → frequência até 125Mhz para redes 1000Base-T GigaEthernet Cat. 6 → frequência até 250Mhz até Gigabit (norma ANSI TIA/EIA 568B-2 ← cabo não pode ser feito manualmente, deve ser comprado de uma fábrica) Cat. 6A → até 10Gb/s para redes 10GBase-T Cat. 7 → até 10Gb/s para 100m com frequência até 600Mhz Cores dos fios par 1 → azul e branco; azul par 2 → laranja e branco; laranja par 3 → verde e branco; verde par 4 → marrom e branco; marrom Padrão T568A → B-V; V; B-L; A; B-A; L; B-M; M Padrão T568B → B-L; L; B-V; A; B-A; V; B-M; M ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-259-4b4j0gcg1ij5/","summary":"\u003ch4 id=\"padrão-ethernet\"\u003ePadrão Ethernet\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003equando foi inventado era utilizado barramento com cabo coaxial\u003c/li\u003e\n\u003cli\u003ecomeçou com a ideia de ser suportado por qualquer computador\u003c/li\u003e\n\u003cli\u003ecomeçou como uma transmissão simplex (um envia o resto aguarda)\u003c/li\u003e\n\u003cli\u003eEthernet checa em certos períodos de tempo se o pacote foi entregue,\ncaso não tenha ele retransmite\u003c/li\u003e\n\u003cli\u003ePadrão Ethernet é 802\u003c/li\u003e\n\u003cli\u003ecamadas física e de enlace\u003c/li\u003e\n\u003cli\u003ecada pacote tem de 64 \u0026ndash; 1518bytes\u003c/li\u003e\n\u003cli\u003enão é possível enviar pacotes maiores do que isso, para enviar mais\ndados é necessário adicionar mais pacotes\u003c/li\u003e\n\u003cli\u003eMAC → 3 primeiros é o fabricante e o resto é a placa\u003c/li\u003e\n\u003cli\u003eao usar DHCP, se queremos enviar um pacote para a mesma máquina\nsempre é necessário usar o endereço MAC\u003c/li\u003e\n\u003cli\u003eMAC controla a transmissão e recepção com o meio físico\u003c/li\u003e\n\u003cli\u003eCSMA/CD → controla se pode ou não transmitir no half duplex, também\ncheca colisão e retransmite (usando um intervalo de tempo\naleatório).\u003c/li\u003e\n\u003cli\u003epossui um formato especifico para o pacote (quadro Ethernet)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"quadro-ethernet\"\u003eQuadro Ethernet\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edestination address → MAC do destinatário\u003c/li\u003e\n\u003cli\u003esource address → MAC do remetente\u003c/li\u003e\n\u003cli\u003eType/Length → tamanho do campo Data\u003c/li\u003e\n\u003cli\u003eData → dados (de 46\u0026ndash;1500 bytes)\u003c/li\u003e\n\u003cli\u003eFCS → CRC\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"estados-csmacd\"\u003eEstados CSMA/CD\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etransmitindo\u003c/li\u003e\n\u003cli\u003edisputando → houve colisão\u003c/li\u003e\n\u003cli\u003einativo → ninguém está transmitindo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"rádio-amador\"\u003eRádio amador\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eé Simplex\u003c/li\u003e\n\u003cli\u003eA palavra câmbio era usado como uma palavra chave para dizer que um\nlado pararia de enviar para o outro então para de receber e começar\na enviar\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"simplex\"\u003eSimplex\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eapenas um lado transmite e o outro recebe\u003c/li\u003e\n\u003cli\u003eassim que ninguém está enviando, o outro lado pode começar a enviar\ne o outro receber\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-deenlace\"\u003eCamada de Enlace\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecamada que fecha a conexão entre as partes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"fast-ethernet\"\u003eFast Ethernet\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emudou a velocidade de transmissão de 10 → 100mbps e o modo que agora\npode ser half ou full duplex\u003c/li\u003e\n\u003cli\u003eem full duplex foi criado os passive trans → avisa a uma máquina de\nque deve pausar a transmissão por um tempo, removendo assim o\nCSMA/CD. Com isso, o Fast Ethernet não precisa ficar checando se há\nsilêncio na rede para outro dispositivo começar a enviar dados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cabos-de-partrançado\"\u003eCabos de par trançado\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eUnshielded Twisted Pair (UTP) → cabo sem blindagem. 4 pares de fios\nentrelaçados e revestidos com PVC (verão mais barata) (possui 100R)\u003c/li\u003e\n\u003cli\u003eShielded Twisted Pair(STP) → cabo com blindagem. Possui uma malha\nenvolta que protege. Necessita de aterramento. Diminui a\ninterferência. Mais caro.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"categoria-decabos\"\u003eCategoria de cabos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecat. 5 → frequência até 100Mhz e 100Mbps\u003c/li\u003e\n\u003cli\u003eCat. 5e → frequência até 125Mhz para redes 1000Base-T GigaEthernet\u003c/li\u003e\n\u003cli\u003eCat. 6 → frequência até 250Mhz até Gigabit (norma ANSI TIA/EIA\n568B-2 ← cabo não pode ser feito manualmente, deve ser comprado de\numa fábrica)\u003c/li\u003e\n\u003cli\u003eCat. 6A → até 10Gb/s para redes 10GBase-T\u003c/li\u003e\n\u003cli\u003eCat. 7 → até 10Gb/s para 100m com frequência até 600Mhz\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cores-dosfios\"\u003eCores dos fios\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epar 1 → azul e branco; azul\u003c/li\u003e\n\u003cli\u003epar 2 → laranja e branco; laranja\u003c/li\u003e\n\u003cli\u003epar 3 → verde e branco; verde\u003c/li\u003e\n\u003cli\u003epar 4 → marrom e branco; marrom\u003c/li\u003e\n\u003cli\u003ePadrão T568A → B-V; V; B-L; A; B-A; L; B-M; M\u003c/li\u003e\n\u003cli\u003ePadrão T568B → B-L; L; B-V; A; B-A; V; B-M; M\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://canaltech.com.br/produtos/como-fazer-um-cabo-de-rede-209886/\\\"\u003ecanaltech\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-259-4b4j0gcg1ij5/image_418.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 259"},{"content":"na eletrônica temos diversas portas lógicas que são derivadas de outras, nesse caso o XOR é uma porta derivada da porta OR\nassim como na vida real o ou exclusivo (ou, ou excludente) leva uma característica excludente de sua operação. Na vida real, se dizermos ou um ou outro, você poderia escolher apenas um dos elementos, no entanto a porta or ela não segue esse padrão, sendo também verdadeiro quando os dois valores forem verdadeiros, dai que vem a porta XOR, ela só será verdadeira quando só uma das entradas forem verdadeiras.\nAlém disso, em suas operações, geralmente,é atribuído o operador ⊕ como símbolo para essa porta\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-26-1ded8ag6ec16/","summary":"\u003cp\u003ena eletrônica temos diversas portas lógicas que são derivadas de outras,\nnesse caso o XOR é uma porta derivada da porta OR\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"XOR simbolo, fonte: Wikipedia\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-26-1ded8ag6ec16/image_30.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"OR simbolo, fonte: Wikipedia\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-26-1ded8ag6ec16/image_31.png\"\u003e\u003c/p\u003e\n\u003cp\u003eassim como na vida real o ou exclusivo (ou, ou excludente) leva uma\ncaracterística excludente de sua operação. Na vida real, se dizermos ou\num ou outro, você poderia escolher apenas um dos elementos, no entanto a\nporta or ela não segue esse padrão, sendo também verdadeiro quando os\ndois valores forem verdadeiros, dai que vem a porta XOR, ela só será\nverdadeira quando só uma das entradas forem verdadeiras.\u003c/p\u003e","title":"Ciências da computação dia 26"},{"content":" média, moda e mediana podem ser usados para dados → não agrupados, agrupados sem intervalos de classe e agrupados com intervalos de classe Média aritmética simples sendo n o total de elementos da amostra Média aritmética ponderada valores possuem pesos diferentes sendo w o pesos de cada elemento Mediana(Md) valor do meio do ROL (tanto faz crescente ou decrescente) para n ímpar → (n+1)/2 é o índice do elemento do meio que representa a mediana para n par → x1=(n/2) e x2=(n/2)+1 representa os indices dos dois elementos centrais, após pega-los basta fazer: (x1+x2)/2 e assim teremos a mediana Média e Mediana usos dão uma ideia de qual valor você encontrará se você tirar um elemento ao acaso quando há outliers nos dados, mediana representa melhor o conjunto de dados do que a média Mediana é usada também quando quer-se dividir a distribuição em partes iguais Moda valor(es) que mais aparece(m) amodal → não há moda no conjunto unimodal → apenas um valor (uma moda) bimodal → dois valores aparecem o mesmo tanto de vezes e ambos são modas trimodal → 3 modas polimodal → mais de 3 modas {1, 2, 5, 5, 6, 6, 7, 8} → bimodal, pois 5 e 6 aparecem duas vezes\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-260-1b7iaba10d7b/","summary":"\u003cul\u003e\n\u003cli\u003emédia, moda e mediana podem ser usados para dados → não agrupados,\nagrupados sem intervalos de classe e agrupados com intervalos de\nclasse\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"média-aritmética-simples\"\u003eMédia aritmética simples\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-260-1b7iaba10d7b/image_419.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esendo \u003cem\u003en\u003c/em\u003e o total de elementos da amostra\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"média-aritmética-ponderada\"\u003eMédia aritmética ponderada\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evalores possuem pesos diferentes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-260-1b7iaba10d7b/image_420.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esendo \u003cem\u003ew\u003c/em\u003e o pesos de cada elemento\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"medianamd\"\u003eMediana(Md)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evalor do meio do ROL (tanto faz crescente ou decrescente)\u003c/li\u003e\n\u003cli\u003epara n ímpar → (n+1)/2 é o índice do elemento do meio que representa\na mediana\u003c/li\u003e\n\u003cli\u003epara n par → x1=(n/2) e x2=(n/2)+1 representa os indices dos dois\nelementos centrais, após pega-los basta fazer: (x1+x2)/2 e assim\nteremos a mediana\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"média-e-medianausos\"\u003eMédia e Mediana usos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edão uma ideia de qual valor você encontrará se você tirar um\nelemento ao acaso\u003c/li\u003e\n\u003cli\u003equando há outliers nos dados, mediana representa melhor o conjunto\nde dados do que a média\u003c/li\u003e\n\u003cli\u003eMediana é usada também quando quer-se dividir a distribuição em\npartes iguais\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"moda\"\u003eModa\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evalor(es) que mais aparece(m)\u003c/li\u003e\n\u003cli\u003eamodal → não há moda no conjunto\u003c/li\u003e\n\u003cli\u003eunimodal → apenas um valor (uma moda)\u003c/li\u003e\n\u003cli\u003ebimodal → dois valores aparecem o mesmo tanto de vezes e ambos são\nmodas\u003c/li\u003e\n\u003cli\u003etrimodal → 3 modas\u003c/li\u003e\n\u003cli\u003epolimodal → mais de 3 modas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e{1, 2, 5, 5, 6, 6, 7, 8} → bimodal, pois 5 e 6 aparecem duas vezes\u003c/p\u003e","title":"Ciências da computação dia 260"},{"content":"Tratamento de interrupção empilha o contador de programa atual carrega o novo contador de programa procedimento em assembly salva os registradores procedimento em assembly configura uma nova pilha executa serviço de interrupção escrito em C (lê e armazena a entrada) procedimento em C volta para o procedimento em asm procedimento em assembly inicia o novo processo Classificação de processos CPU Bound I/O Bound Sabendo o tipo do processo, é possível implementar rotinas no escalonador para otimizar o tempo ocioso Para otimizar é possível utilizar: buffer, paralelismo real, etc. CPU Bound utiliza muita CPU tempo de execução é dado por ciclos da CPU que foram(serão) usados tem sensibilidade ao escalonador (performance depende dele, já que ele dirá quando o processo pode usar a CPU) I/O Bound realiza muito I/O tempo de execução dado pela operação de Entrada e saída é menos afetado pelo escalonador tempo de espera da entrada ou saída é o limitante Banco de dados, web server, etc. Escalonador sua função é não deixar a CPU ociosa mudança de contexto (processo) → tarefa custosa o escalonamento é necessário quando → um processo é criado, bloqueado e terminou a execução. quando há um bloqueio, o escalonador pode decidir continuar esperando pelo I/O ou seguir para outro processo mais rápido Tipos de algoritmos do Escalonador Preemptivo → suspende o processo que está sendo executado Não preemptivo → executa tudo até o programa acabar ou houver um bloqueio Preemptivo muita troca de contexto suporta melhor a responsividade processos com prioridade são executados na hora fila prioritária bom para sistemas em tempo real Não preemptivo era usado em sistemas uni-core há menos tempo desperdiçado devido a menor troca de contexto mais previsível o tempo de execução Características para um Escalonador justiça → cada processo tem uma parcela de tempo justa para usar a CPU balanceamento → diminuir a ociosidade do sistema cumprimento da política do sistema → uso da prioridade, etc. deve ser encaixar ao tipo de ambiente (batch, interativo, etc.) Sistemas BATCH vários dados ao mesmo tempo para processar sem muito I/O necessário maximizar o uso da CPU não precisa de respostas rápidas pouca troca de contexto escalonador vai para aquele com menor tempo de execução ou menor uso de memória escalonador também pode seguir a ordem do user ou através da pilha de tarefas Sistemas Interativos alta interação com o user alta troca de contexto responsividade para o user escalonador precisa se adaptar a carga de trabalho e manter equilíbrio entre responsividade e uso de CPU escalonador deve ter baixo tempo de resposta (fatias de tempo menor pra cada um), preempção (dar chance para outro processo executar), prioridade para processos interativos, aumentar a prioridade para processo a muito tempo na fila Sistemas de tempo real tarefas precisam ser executadas dentro do deadline maior tempo para cada processo Jitter variação entre o tempo de resposta e o tempo ideal Overhead tempo não utilizado troca de contexto Algoritmos de escalonador para sistemas BATCH three level FIFO Shortest job first shortest remaining time next Three Level 3 escalonadores (CPU, memória e admissão) admissão → processos menores primeiro; leva em consideração menor acesso a CPU e maior uso de I/O memória → verifica quanto tempo está esperando, tempo de CPU, tamanho, importância CPU → executa o próximo FIFO segue a ordem de requisição dos processos não preemptivo vai empilhando os processos Shortest Job First menor é executado primeiro não preemptivo menor turnaround médio Turnaround médio é o tempo médio de execução de todos os processos. Nesse método, vê-se a combinação de processos que minimizam o tempo.\nex:\njob 1\u0026ndash;10t\njob 2\u0026ndash;20t\njob 3\u0026ndash;5t\njob 4\u0026ndash;2t\nA:\nJob1 → job2 → job3 → job4\n10 + (20 + 10) + (20 + 10 + 5) + (20 + 10 + 5 + 2) →112/4 →28\nB:\njob4 → job3 → job1 → job2\n2 + (2+5) + (2+5+10) + (2+5+10+20) → 63/4 → 15.75\nDessa forma, colocando os jobs em ordem crescente de tempo, temos o melhor turnaround médio\nShortest remaining time next preemptivo da prioridade para processos com menor tempo de execução restante processos longos vão demorar muito para serem escolhidos para usar a CPU ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-261-15hf7fg9g77a/","summary":"\u003ch4 id=\"tratamento-de-interrupção\"\u003eTratamento de interrupção\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003eempilha o contador de programa atual\u003c/li\u003e\n\u003cli\u003ecarrega o novo contador de programa\u003c/li\u003e\n\u003cli\u003eprocedimento em assembly salva os registradores\u003c/li\u003e\n\u003cli\u003eprocedimento em assembly configura uma nova pilha\u003c/li\u003e\n\u003cli\u003eexecuta serviço de interrupção escrito em C (lê e armazena a\nentrada)\u003c/li\u003e\n\u003cli\u003eprocedimento em C volta para o procedimento em asm\u003c/li\u003e\n\u003cli\u003eprocedimento em assembly inicia o novo processo\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"classificação-de-processos\"\u003eClassificação de processos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eCPU Bound\u003c/li\u003e\n\u003cli\u003eI/O Bound\u003c/li\u003e\n\u003cli\u003eSabendo o tipo do processo, é possível implementar rotinas no\nescalonador para otimizar o tempo ocioso\u003c/li\u003e\n\u003cli\u003ePara otimizar é possível utilizar: buffer, paralelismo real, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"cpu-bound\"\u003eCPU Bound\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eutiliza muita CPU\u003c/li\u003e\n\u003cli\u003etempo de execução é dado por ciclos da CPU que foram(serão) usados\u003c/li\u003e\n\u003cli\u003etem sensibilidade ao escalonador (performance depende dele, já que\nele dirá quando o processo pode usar a CPU)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"io-bound\"\u003eI/O Bound\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003erealiza muito I/O\u003c/li\u003e\n\u003cli\u003etempo de execução dado pela operação de Entrada e saída\u003c/li\u003e\n\u003cli\u003eé menos afetado pelo escalonador\u003c/li\u003e\n\u003cli\u003etempo de espera da entrada ou saída é o limitante\u003c/li\u003e\n\u003cli\u003eBanco de dados, web server, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"escalonador\"\u003eEscalonador\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esua função é não deixar a CPU ociosa\u003c/li\u003e\n\u003cli\u003emudança de contexto (processo) → tarefa custosa\u003c/li\u003e\n\u003cli\u003eo escalonamento é necessário quando → um processo é criado,\nbloqueado e terminou a execução.\u003c/li\u003e\n\u003cli\u003equando há um bloqueio, o escalonador pode decidir continuar\nesperando pelo I/O ou seguir para outro processo mais rápido\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"tipos-de-algoritmos-do-escalonador\"\u003eTipos de algoritmos do Escalonador\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreemptivo → suspende o processo que está sendo executado\u003c/li\u003e\n\u003cli\u003eNão preemptivo → executa tudo até o programa acabar ou houver um\nbloqueio\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"preemptivo\"\u003ePreemptivo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emuita troca de contexto\u003c/li\u003e\n\u003cli\u003esuporta melhor a responsividade\u003c/li\u003e\n\u003cli\u003eprocessos com prioridade são executados na hora\u003c/li\u003e\n\u003cli\u003efila prioritária\u003c/li\u003e\n\u003cli\u003ebom para sistemas em tempo real\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"não-preemptivo\"\u003eNão preemptivo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eera usado em sistemas uni-core\u003c/li\u003e\n\u003cli\u003ehá menos tempo desperdiçado devido a menor troca de contexto\u003c/li\u003e\n\u003cli\u003emais previsível o tempo de execução\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"características-para-um-escalonador\"\u003eCaracterísticas para um Escalonador\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ejustiça → cada processo tem uma parcela de tempo justa para usar a\nCPU\u003c/li\u003e\n\u003cli\u003ebalanceamento → diminuir a ociosidade do sistema\u003c/li\u003e\n\u003cli\u003ecumprimento da política do sistema → uso da prioridade, etc.\u003c/li\u003e\n\u003cli\u003edeve ser encaixar ao tipo de ambiente (batch, interativo, etc.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sistemas-batch\"\u003eSistemas BATCH\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evários dados ao mesmo tempo para processar\u003c/li\u003e\n\u003cli\u003esem muito I/O\u003c/li\u003e\n\u003cli\u003enecessário maximizar o uso da CPU\u003c/li\u003e\n\u003cli\u003enão precisa de respostas rápidas\u003c/li\u003e\n\u003cli\u003epouca troca de contexto\u003c/li\u003e\n\u003cli\u003eescalonador vai para aquele com menor tempo de execução ou menor uso\nde memória\u003c/li\u003e\n\u003cli\u003eescalonador também pode seguir a ordem do user ou através da pilha\nde tarefas\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sistemas-interativos\"\u003eSistemas Interativos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ealta interação com o user\u003c/li\u003e\n\u003cli\u003ealta troca de contexto\u003c/li\u003e\n\u003cli\u003eresponsividade para o user\u003c/li\u003e\n\u003cli\u003eescalonador precisa se adaptar a carga de trabalho e manter\nequilíbrio entre responsividade e uso de CPU\u003c/li\u003e\n\u003cli\u003eescalonador deve ter baixo tempo de resposta (fatias de tempo menor\npra cada um), preempção (dar chance para outro processo executar),\nprioridade para processos interativos, aumentar a prioridade para\nprocesso a muito tempo na fila\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sistemas-de-temporeal\"\u003eSistemas de tempo real\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etarefas precisam ser executadas dentro do deadline\u003c/li\u003e\n\u003cli\u003emaior tempo para cada processo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"jitter\"\u003eJitter\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evariação entre o tempo de resposta e o tempo ideal\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"overhead\"\u003eOverhead\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etempo não utilizado\u003c/li\u003e\n\u003cli\u003etroca de contexto\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"algoritmos-de-escalonador-para-sistemasbatch\"\u003eAlgoritmos de escalonador para sistemas BATCH\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ethree level\u003c/li\u003e\n\u003cli\u003eFIFO\u003c/li\u003e\n\u003cli\u003eShortest job first\u003c/li\u003e\n\u003cli\u003eshortest remaining time next\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"three-level\"\u003eThree Level\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e3 escalonadores (CPU, memória e admissão)\u003c/li\u003e\n\u003cli\u003eadmissão → processos menores primeiro; leva em consideração menor\nacesso a CPU e maior uso de I/O\u003c/li\u003e\n\u003cli\u003ememória → verifica quanto tempo está esperando, tempo de CPU,\ntamanho, importância\u003c/li\u003e\n\u003cli\u003eCPU → executa o próximo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"fifo\"\u003eFIFO\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esegue a ordem de requisição dos processos\u003c/li\u003e\n\u003cli\u003enão preemptivo\u003c/li\u003e\n\u003cli\u003evai empilhando os processos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"shortest-jobfirst\"\u003eShortest Job First\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emenor é executado primeiro\u003c/li\u003e\n\u003cli\u003enão preemptivo\u003c/li\u003e\n\u003cli\u003emenor turnaround médio\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTurnaround médio é o tempo médio de execução de todos os processos.\nNesse método, vê-se a combinação de processos que minimizam o tempo.\u003c/p\u003e","title":"Ciências da computação dia 261"},{"content":"Grafos Conjunto de elementos de um grafo são as vertices (V = A, B, C, D) e o conjunto de suas relações (E = A,C, B, D, C,B) //dot program graph{ beautify=true layout=\u0026#34;sfdp\u0026#34; A [color=green] B [color=red] C [color=blue] D [color=purple] A -- C B -- D C -- B } Tipos de grafos dígrafo → grafo direcionado (com seta) (A,B é diferente de B,A, sendo assim colocarei apenas aquele que será usado no conjunto), não possui self loop (um vértice vai para ele mesmo) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-262-67b42b81h8eh/","summary":"\u003ch4 id=\"grafos\"\u003eGrafos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eConjunto de elementos de um grafo são as vertices (V = A, B, C, D)\ne o conjunto de suas relações (E = A,C, B, D, C,B)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-262-67b42b81h8eh/image_421.png\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e//dot program\ngraph{\n  beautify=true\n  layout=\u0026#34;sfdp\u0026#34;\n\n  A [color=green]\n  B [color=red]\n  C [color=blue]\n  D [color=purple]\n\n  A -- C\n  B -- D \n  C -- B\n}\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"tipos-degrafos\"\u003eTipos de grafos\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edígrafo → grafo direcionado (com seta) (A,B é diferente de B,A,\nsendo assim colocarei apenas aquele que será usado no conjunto), não\npossui self loop (um vértice vai para ele mesmo)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://en.wikipedia.org/wiki/Directed_graph\\\"\u003ewikipedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-262-67b42b81h8eh/image_422.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 262"},{"content":"Linguagem C pode ser considerada de médio nível. Já que consegue conversar com o hardware e ainda ser fácil de ler.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-263-03cahed62e9f/","summary":"\u003cp\u003eLinguagem C pode ser considerada de médio nível. Já que consegue\nconversar com o hardware e ainda ser fácil de ler.\u003c/p\u003e","title":"Ciências da computação dia 263"},{"content":"Média (sem intervalos de classe) Mediana(sem intervalos de classe) essa mesma fórmula é usada para quantidade ímpar e par. a classe que possui o valor mediano é chamada de classe mediana. Moda (sem intervalos de classe) o valor com a maior frequência (fi) → nesse caso 8.5 a classe com o valor da moda é chamada de classe modal Média (com intervalos de classe) é feito da mesma forma que a sem intervalos de classe é feito Mediana (com intervalos de classe) nesse caso, é necessário utilizar a fórmula dada anteriormente para encontrar a classe mediana. Após isso, é usada a segunda fórmula. Nessa, lmd representa o limite inferior da classe modal, facant é a frequência absoluta acumulada anterior a classe modal, h é a amplitude, e fmd a frequência da classe modal. Moda (com intervalos de classe) para a moda, podemos fazer de duas formas. A primeira é a moda bruta, da qual leva em consideração apenas os limites do intervalo de maior frequência, e retorna o valor médio, dessa forma podemos, dessa forma o intervalo de maior frequência representa a classe modal. Há também a fórmula de Czuber, que retorna os valores um tanto mais precisos. a classe modal, preliminarmente, é tida como a classe de maior frequência. Sendo assim, a moda bruta, é normalmente o valor xi Nessa fórmulas lmin é o limite mínimo do conjunto, Lmax o limite máximo do conjunto, lmo é o limite inferior da classe modal, e h a amplitude. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-264-2j69b526e0f3/","summary":"\u003ch4 id=\"média-sem-intervalos-declasse\"\u003eMédia (sem intervalos de classe)\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-264-2j69b526e0f3/image_425.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-264-2j69b526e0f3/image_426.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"medianasem-intervalos-declasse\"\u003eMediana(sem intervalos de classe)\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-264-2j69b526e0f3/image_427.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eessa mesma fórmula é usada para quantidade ímpar e par.\u003c/li\u003e\n\u003cli\u003ea classe que possui o valor mediano é chamada de classe mediana.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"moda-sem-intervalos-declasse\"\u003eModa (sem intervalos de classe)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eo valor com a maior frequência (fi) → nesse caso 8.5\u003c/li\u003e\n\u003cli\u003ea classe com o valor da moda é chamada de classe modal\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"média-com-intervalos-declasse\"\u003eMédia (com intervalos de classe)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eé feito da mesma forma que a sem intervalos de classe é feito\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"mediana-com-intervalos-declasse\"\u003eMediana (com intervalos de classe)\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-264-2j69b526e0f3/image_428.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 264"},{"content":"Escalonadores para sistemas I/O Bound Round Robin execução de processos de maneira justa e eficiente tempo compartilhado preemptivo dá uma fatia de tempo para cada processo fila de prontos é cíclica → após o processo terminar de usar sua fatia, ele vai para o final, caso não tenha terminado de executar tudo tempo de resposta rápido, já que os processos recebem CPU frequentemente Overhead de comutação (troca de contexto) desempenho variável → processos longos são prejudicados quando fatias de tempo (quantum) pequenos são usados utilizar quantum muito grande, faz ele se tornar uma FIFO quantum muito pequeno faz aumentar o overhead Para encontrar o melhor quantum (Q) é interessante manter o equilibrio entre o overhead e um tempo razoavel de execução chaveamento = 1ms Q = 4ms total = 4ms + 1ms = 5ms nesse caso, 20% do tempo é perdido para o overhead com o chaveamento de processos Q = 99ms total = 99ms + 1ms = 100ms nesse segundo caso, só 1% do tempo é perdido com a troca de contexto, mas há muito tempo de espera para a troca de procesos Levando em consideração esses exemplos, escolher um quantum Q intermediario, como 20ms seria uma opção viavel Baseado em prioridade varias filas para cada nível de prioridade processos de prioridade maior irão antes pode utilizar o round-robin para gerenciar a fila executa primeiro toda a fila de maior prioridade e depois vai descendo os níveis pode ser tanto preemptivo como não preemptivo, dependendo do algoritmo escolhido pode ajustar a prioridade dinamicamente, para evitar inanição (starvation, processos que nunca seriam executados devido a sua baixa prioridade) Múltiplas filas cada fila pode ter características distintas (processos para processamento em lote, processos interativos, processos com prioridade, etc.) cada fila pode ter um algoritmo diferente para gerenciamento cada fila terá uma prioridade diferente pode ser preemptivo quando processos de maior prioridade entram pode dar-se um tempo de execução limitado para cada fila pode mover processos entre filas possui overhead no gerenciamento das filas pode sofrer de starvation Loteria cada processo recebe um ticket a cada troca de processo um ticket é sorteado, assim o processo sorteado por ocupar a CPU pode dar mais tickets para um processo para aumentar a chance dele ser sorteado(prioridade) é mais justo não é preemptivo possui variabilidade no tempo de resposta Fair-Share leva em consideração quem é o dono do processo (user, sistema, etc.) cada dono possui uma fração de tempo para usar a CPU, escalonando os processos a partir dai se um user possui mais processos ele terá mais tempo Escalonadores para sistemas de tempo real hard real time → não pode atrasar (critico) soft real time → alguns atrasados são tolerados eventos (periódicos ou aperiódicos) causam execução de processos algoritmos preemptivos algoritmos usados podem ser: estáticos (define a ordem de execução antes) ou dinâmicos (avalia qual será executado em tempo de execução) Earliest deadline first preemptivo e dinâmico tarefa com menor deadline tem prioridade se chegar um com menor deadline ele chaveia para este com menor possui overhead Rate monotonic scheduling preemptivo e estático prioridade é dada pela frequência de execução ótimo para sistemas periódicos e com processos independentes Least laxity first (last stack time first) escalona com base na folga (tempo restante até o deadline \u0026mdash; tempo restante para completar a tarefa ) processo com menor folga vai primeiro pode ter bastante overhead ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-265-418j1ceifd3e/","summary":"\u003ch3 id=\"escalonadores-para-sistemas-iobound\"\u003eEscalonadores para sistemas I/O Bound\u003c/h3\u003e\n\u003ch4 id=\"round-robin\"\u003eRound Robin\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eexecução de processos de maneira justa e eficiente\u003c/li\u003e\n\u003cli\u003etempo compartilhado\u003c/li\u003e\n\u003cli\u003epreemptivo\u003c/li\u003e\n\u003cli\u003edá uma fatia de tempo para cada processo\u003c/li\u003e\n\u003cli\u003efila de prontos é cíclica → após o processo terminar de usar sua\nfatia, ele vai para o final, caso não tenha terminado de executar\ntudo\u003c/li\u003e\n\u003cli\u003etempo de resposta rápido, já que os processos recebem CPU\nfrequentemente\u003c/li\u003e\n\u003cli\u003eOverhead de comutação (troca de contexto)\u003c/li\u003e\n\u003cli\u003edesempenho variável → processos longos são prejudicados quando\nfatias de tempo (quantum) pequenos são usados\u003c/li\u003e\n\u003cli\u003eutilizar quantum muito grande, faz ele se tornar uma FIFO\u003c/li\u003e\n\u003cli\u003equantum muito pequeno faz aumentar o overhead\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ePara encontrar o melhor quantum (Q) é interessante manter o equilibrio entre o \noverhead e um tempo razoavel de execução\n\n\nchaveamento = 1ms\n\nQ = 4ms\ntotal = 4ms + 1ms = 5ms\n\nnesse caso, 20% do tempo é perdido para o overhead com o chaveamento \nde processos\n\n\n\nQ = 99ms\ntotal = 99ms + 1ms = 100ms\n\nnesse segundo caso, só 1% do tempo é perdido com a troca de contexto, \nmas há muito tempo de espera para a troca de procesos\n\n\nLevando em consideração esses exemplos, escolher um quantum Q intermediario, \ncomo 20ms seria uma opção viavel\n\u003c/code\u003e\u003c/pre\u003e\u003ch4 id=\"baseado-em-prioridade\"\u003eBaseado em prioridade\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evarias filas para cada nível de prioridade\u003c/li\u003e\n\u003cli\u003eprocessos de prioridade maior irão antes\u003c/li\u003e\n\u003cli\u003epode utilizar o round-robin para gerenciar a fila\u003c/li\u003e\n\u003cli\u003eexecuta primeiro toda a fila de maior prioridade e depois vai\ndescendo os níveis\u003c/li\u003e\n\u003cli\u003epode ser tanto preemptivo como não preemptivo, dependendo do\nalgoritmo escolhido\u003c/li\u003e\n\u003cli\u003epode ajustar a prioridade dinamicamente, para evitar inanição\n(starvation, processos que nunca seriam executados devido a sua\nbaixa prioridade)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"múltiplas-filas\"\u003eMúltiplas filas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecada fila pode ter características distintas (processos para\nprocessamento em lote, processos interativos, processos com\nprioridade, etc.)\u003c/li\u003e\n\u003cli\u003ecada fila pode ter um algoritmo diferente para gerenciamento\u003c/li\u003e\n\u003cli\u003ecada fila terá uma prioridade diferente\u003c/li\u003e\n\u003cli\u003epode ser preemptivo quando processos de maior prioridade entram\u003c/li\u003e\n\u003cli\u003epode dar-se um tempo de execução limitado para cada fila\u003c/li\u003e\n\u003cli\u003epode mover processos entre filas\u003c/li\u003e\n\u003cli\u003epossui overhead no gerenciamento das filas\u003c/li\u003e\n\u003cli\u003epode sofrer de starvation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"loteria\"\u003eLoteria\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecada processo recebe um ticket\u003c/li\u003e\n\u003cli\u003ea cada troca de processo um ticket é sorteado, assim o processo\nsorteado por ocupar a CPU\u003c/li\u003e\n\u003cli\u003epode dar mais tickets para um processo para aumentar a chance dele\nser sorteado(prioridade)\u003c/li\u003e\n\u003cli\u003eé mais justo\u003c/li\u003e\n\u003cli\u003enão é preemptivo\u003c/li\u003e\n\u003cli\u003epossui variabilidade no tempo de resposta\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"fair-share\"\u003eFair-Share\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eleva em consideração quem é o dono do processo (user, sistema, etc.)\u003c/li\u003e\n\u003cli\u003ecada dono possui uma fração de tempo para usar a CPU, escalonando os\nprocessos a partir dai\u003c/li\u003e\n\u003cli\u003ese um user possui mais processos ele terá mais tempo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"escalonadores-para-sistemas-de-temporeal\"\u003eEscalonadores para sistemas de tempo real\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ehard real time → não pode atrasar (critico)\u003c/li\u003e\n\u003cli\u003esoft real time → alguns atrasados são tolerados\u003c/li\u003e\n\u003cli\u003eeventos (periódicos ou aperiódicos) causam execução de processos\u003c/li\u003e\n\u003cli\u003ealgoritmos preemptivos\u003c/li\u003e\n\u003cli\u003ealgoritmos usados podem ser: estáticos (define a ordem de execução\nantes) ou dinâmicos (avalia qual será executado em tempo de\nexecução)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"earliest-deadlinefirst\"\u003eEarliest deadline first\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epreemptivo e dinâmico\u003c/li\u003e\n\u003cli\u003etarefa com menor deadline tem prioridade\u003c/li\u003e\n\u003cli\u003ese chegar um com menor deadline ele chaveia para este com menor\u003c/li\u003e\n\u003cli\u003epossui overhead\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"rate-monotonic-scheduling\"\u003eRate monotonic scheduling\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epreemptivo e estático\u003c/li\u003e\n\u003cli\u003eprioridade é dada pela frequência de execução\u003c/li\u003e\n\u003cli\u003eótimo para sistemas periódicos e com processos independentes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"least-laxity-first-last-stack-timefirst\"\u003eLeast laxity first (last stack time first)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eescalona com base na folga (tempo restante até o deadline \u0026mdash; tempo\nrestante para completar a tarefa )\u003c/li\u003e\n\u003cli\u003eprocesso com menor folga vai primeiro\u003c/li\u003e\n\u003cli\u003epode ter bastante overhead\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 265"},{"content":"Graus (d) grau de um vértice → número de arestas incidentes a ele grau do grafo(grau máximo) → maior grau dos vertices grau de vertices isolados é 0 (também chamado só de isolado) d(v) = 1 → chamado de pendente, folha ou terminal menor grau do grafo é chamado de grau mínimo e é representado por δ(G) maior grau de um grafo é chamado de grau máximo e é representado por Δ(G) nesse exemplo, Δ(G) = 3 e δ(G)=1\npara grafos direcionados, temos graus de entrada e saída graus de entrada(din)→ quantas arestas estão entrando no vértice graus de saía(dout) → quantas arestas saem do vértice nesse caso, din(B) = 2 e dout(B) = 0\nProblema de Königsberg ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-266-j4c6dab6520c/","summary":"\u003ch4 id=\"graus-d\"\u003eGraus (d)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egrau de um vértice → número de arestas incidentes a ele\u003c/li\u003e\n\u003cli\u003egrau do grafo(grau máximo) → maior grau dos vertices\u003c/li\u003e\n\u003cli\u003egrau de vertices isolados é 0 (também chamado só de isolado)\u003c/li\u003e\n\u003cli\u003ed(v) = 1 → chamado de pendente, folha ou terminal\u003c/li\u003e\n\u003cli\u003emenor grau do grafo é chamado de grau mínimo e é representado por\nδ(G)\u003c/li\u003e\n\u003cli\u003emaior grau de um grafo é chamado de grau máximo e é representado por\nΔ(G)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-266-j4c6dab6520c/image_433.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 266"},{"content":"WWAMS para telefones 2g → cdma x gsm 3g → cdma2000 x umts/hspa 4g → (baseado em IP) wimax x LTE 5g → agora tem outras tecnologias como beamforming, massive MIMO, etc. LTE advanced(4g+ ou 4.5g) → mantém 4g em diversas frequências e depois junta em uma única Camadas redes são organizadas em camadas (pilha de camadas) O numero, nome, conteúdo e função de cada camada deferência uma rede de outra camada N de A se comunica com a N de B (comunicação lógica) → isso quer dizer q os protocolos para essas camadas são as mesmas regras e convenções de cada camada são conhecidas como o protocolo da camada n comunicação física ocorre entre as camadas de um mesmo host (pra cima ou para baixo) dados de um host é passado de uma camada mais alta até chegar ao meio físico e depois sobe do mais baixo ao mais alto no host alvo conjunto de camadas e protocolos definem a arquitetura de uma rede lista de protocolos é chamada de pilha de protocolos ao passar por cada camada (de cima para baixo) mais dados são adicionados. Ao fazer o caminho inverso os dados são removidos e a mensagem cru começa a aparecer novamente toda camada precisa identificar receptor e emissor (endereçamento) camadas precisam controlar error, pedindo reenvio caso necessário (no modelo TCP) necessário possuir controle de fluxo, já que o emissor pode enviar mais pacotes do que um receptor mais lento pode processar necessário traçar o roteamento. algumas vezes isso é feito por mais de duas camadas ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-267-b46086aeg599/","summary":"\u003ch4 id=\"wwams\"\u003eWWAMS\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epara telefones\u003c/li\u003e\n\u003cli\u003e2g → cdma x gsm\u003c/li\u003e\n\u003cli\u003e3g → cdma2000 x umts/hspa\u003c/li\u003e\n\u003cli\u003e4g → (baseado em IP) wimax x LTE\u003c/li\u003e\n\u003cli\u003e5g → agora tem outras tecnologias como beamforming, massive MIMO,\netc.\u003c/li\u003e\n\u003cli\u003eLTE advanced(4g+ ou 4.5g) → mantém 4g em diversas frequências e\ndepois junta em uma única\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camadas\"\u003eCamadas\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eredes são organizadas em camadas (pilha de camadas)\u003c/li\u003e\n\u003cli\u003eO numero, nome, conteúdo e função de cada camada deferência uma rede\nde outra\u003c/li\u003e\n\u003cli\u003ecamada N de A se comunica com a N de B (comunicação lógica) → isso\nquer dizer q os protocolos para essas camadas são as mesmas\u003c/li\u003e\n\u003cli\u003eregras e convenções de cada camada são conhecidas como o protocolo\nda camada n\u003c/li\u003e\n\u003cli\u003ecomunicação física ocorre entre as camadas de um mesmo host (pra\ncima ou para baixo)\u003c/li\u003e\n\u003cli\u003edados de um host é passado de uma camada mais alta até chegar ao\nmeio físico e depois sobe do mais baixo ao mais alto no host alvo\u003c/li\u003e\n\u003cli\u003econjunto de camadas e protocolos definem a arquitetura de uma rede\u003c/li\u003e\n\u003cli\u003elista de protocolos é chamada de pilha de protocolos\u003c/li\u003e\n\u003cli\u003eao passar por cada camada (de cima para baixo) mais dados são\nadicionados. Ao fazer o caminho inverso os dados são removidos e a\nmensagem cru começa a aparecer novamente\u003c/li\u003e\n\u003cli\u003etoda camada precisa identificar receptor e emissor (endereçamento)\u003c/li\u003e\n\u003cli\u003ecamadas precisam controlar error, pedindo reenvio caso necessário\n(no modelo TCP)\u003c/li\u003e\n\u003cli\u003enecessário possuir controle de fluxo, já que o emissor pode enviar\nmais pacotes do que um receptor mais lento pode processar\u003c/li\u003e\n\u003cli\u003enecessário traçar o roteamento. algumas vezes isso é feito por mais\nde duas camadas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://en.wikipedia.org/wiki/OSI_model\\\"\u003ewikipedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-267-b46086aeg599/image_438.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 267"},{"content":"Threads fluxo de controle dentro de um processo (linha de execução) possui um inicio e um fim, como um programa em sequência permite paralelismo → permite utilizar vários cores permite que o programa seja responsivo → faz com que outras tarefas continuem em execução Pode ajudar a simplificar o código, dividindo-o em partes menores e independentes pode usar memória compartilhada para trocada de informações e etc pode haver conexão inter-threads (usando memória compartilhada e mecanismos de sincronia) representa a execução de um programa também menor unidade agendavel de um processo todos os threads dentro de um processo compartilham dos mesmo recursos do processo executado a partir de um processo mais leve e eficiente que processos, já que compartilha recursos ao invés de pedir novos contexto é menor, já que utiliza apenas parte do contexto do processo em si Troca de contexto é mais rápida e eficiente criação é mais rápida contexto é composto por → conjunto de registradores, pilha, PC, ponteiro para tabela de processos, ponteiro para arquivos, etc. Apenas o especifico para cada tarefa de cada thread Estados de um thread new → criado, mas não iniciado runnable → pronto para ser executado running → está em execução waiting → aguardando recurso externo terminated → acabou a execução Transições de estados de um thread execução para aguardando aguardando para pronto execução para terminated execução para pronto → foi interrompido ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-268-0a370bbhdcb0a/","summary":"\u003ch4 id=\"threads\"\u003eThreads\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003efluxo de controle dentro de um processo (linha de execução)\u003c/li\u003e\n\u003cli\u003epossui um inicio e um fim, como um programa em sequência\u003c/li\u003e\n\u003cli\u003epermite paralelismo → permite utilizar vários cores\u003c/li\u003e\n\u003cli\u003epermite que o programa seja responsivo → faz com que outras tarefas\ncontinuem em execução\u003c/li\u003e\n\u003cli\u003ePode ajudar a simplificar o código, dividindo-o em partes menores e\nindependentes\u003c/li\u003e\n\u003cli\u003epode usar memória compartilhada para trocada de informações e etc\u003c/li\u003e\n\u003cli\u003epode haver conexão inter-threads (usando memória compartilhada e\nmecanismos de sincronia)\u003c/li\u003e\n\u003cli\u003erepresenta a execução de um programa também\u003c/li\u003e\n\u003cli\u003emenor unidade agendavel de um processo\u003c/li\u003e\n\u003cli\u003etodos os threads dentro de um processo compartilham dos mesmo\nrecursos do processo\u003c/li\u003e\n\u003cli\u003eexecutado a partir de um processo\u003c/li\u003e\n\u003cli\u003emais leve e eficiente que processos, já que compartilha recursos ao\ninvés de pedir novos\u003c/li\u003e\n\u003cli\u003econtexto é menor, já que utiliza apenas parte do contexto do\nprocesso em si\u003c/li\u003e\n\u003cli\u003eTroca de contexto é mais rápida e eficiente\u003c/li\u003e\n\u003cli\u003ecriação é mais rápida\u003c/li\u003e\n\u003cli\u003econtexto é composto por → conjunto de registradores, pilha, PC,\nponteiro para tabela de processos, ponteiro para arquivos, etc.\nApenas o especifico para cada tarefa de cada thread\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"estados-de-umthread\"\u003eEstados de um thread\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enew → criado, mas não iniciado\u003c/li\u003e\n\u003cli\u003erunnable → pronto para ser executado\u003c/li\u003e\n\u003cli\u003erunning → está em execução\u003c/li\u003e\n\u003cli\u003ewaiting → aguardando recurso externo\u003c/li\u003e\n\u003cli\u003eterminated → acabou a execução\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"transições-de-estados-de-umthread\"\u003eTransições de estados de um thread\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eexecução para aguardando\u003c/li\u003e\n\u003cli\u003eaguardando para pronto\u003c/li\u003e\n\u003cli\u003eexecução para terminated\u003c/li\u003e\n\u003cli\u003eexecução para pronto → foi interrompido\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://www.geeksforgeeks.org/lifecycle-and-states-of-a-thread-in-java/\\\"\u003egeeksforgeeks\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-268-0a370bbhdcb0a/image_445.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 268"},{"content":"Medidas separatórias divide a sequência ordenada em partes iguais mediana também é uma medida dessas (divide em 2 parte de 50%) Quartis (Q) divide em 4 partes de 25% cada Decis (D) divide em 10 partes de 10% cada Percentis (P) divide em 100 partes de um 1% cada Quintil (K) divide em 5 partes de 20% cada Relações podemos relacionar cada um deles com outros ex: Q1 = P25, D1 = P10, K2 = D4, etc. QK, DK, PK, KK essas fórmulas nos dizem qual o elemento K dentro das separações em dados com intervalos de classe caso o dataset não esteja divido em intervalos de classe, é possível utilizar as técnicas ditas anteriormente e um pouco de lógica para encontrar tal elemento formula derivada da formula da mediana para dados com intervalos de classe agora, para saber qual posição o valor k está (dentro das classes) você utiliza as formulas: ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-268-ed5262bggbfg/","summary":"\u003ch4 id=\"medidas-separatórias\"\u003eMedidas separatórias\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide a sequência ordenada em partes iguais\u003c/li\u003e\n\u003cli\u003emediana também é uma medida dessas (divide em 2 parte de 50%)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"quartis-q\"\u003eQuartis (Q)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide em 4 partes de 25% cada\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-268-ed5262bggbfg/image_442.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"decis-d\"\u003eDecis (D)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide em 10 partes de 10% cada\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"percentis-p\"\u003ePercentis (P)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide em 100 partes de um 1% cada\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"quintil-k\"\u003eQuintil (K)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide em 5 partes de 20% cada\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"relações\"\u003eRelações\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003epodemos relacionar cada um deles com outros\u003c/li\u003e\n\u003cli\u003eex: Q1 = P25, D1 = P10, K2 = D4, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"qk-dk-pkkk\"\u003eQK, DK, PK, KK\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eessas fórmulas nos dizem qual o elemento K dentro das separações em\ndados com intervalos de classe\u003c/li\u003e\n\u003cli\u003ecaso o dataset não esteja divido em intervalos de classe, é possível\nutilizar as técnicas ditas anteriormente e um pouco de lógica para\nencontrar tal elemento\u003c/li\u003e\n\u003cli\u003eformula derivada da formula da mediana para dados com intervalos de\nclasse\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-268-ed5262bggbfg/image_443.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 268"},{"content":"Para esta aula você precisará lembrar da aula 25\nUm circuito simplificado é feito para diminuir a quantidade de componentes, que, por consequência, diminui o tempo de execução, custo para ser construido (tanto em mão de obra, como em dinheiro) e também economiza espaço em um chip.\nUm fator importante a se saber,é que nem sempre o circuito que tem menos componentes ele é necessariamente melhor\nveja esses dois circuitos.\nMuitos dirão que o circuito 1 é o melhor (lembrando que estou pensando em tempo de execução, e não em espaço ou custo)\nMas na realidade os dois possuem o mesmo desempenho\nanalisando o primeiro, podemos ver que temos apenas duas portas, uma que será executada depois da outra, já que a porta OR que está no final depende da execução da porta AND que está no começo, sendo assim pensando em 10ns de execução para cada temos 20ns para a execução do circuito 1 no total.\njá no circuito 2, temos uma porta a mais, no entanto, repare que as duas portas OR serão executadas simultaneamente, uma vez que elas não possuem nenhuma dependência e estão ligadas diretamente a entrada de corrente elétrica, sendo assim, designamos 10ns para essas duas portas e mais 10ns para a AND que está no final.\nsendo assim, os dois circuitos possuem o mesmo desempenho, ou seja você não poderá pensar em tempo de execução na hora de escolher o circuito que você vai usar (apenas nesse caso)\npara diminuir um circuito, você primeiro precisará ter a equação que o descreve\nexemplo:\nf(a, b, c) = (a + b) * (a + c)\ndepois você precisará lembrar dos axiomas e suas duais (disponível aqui → aula 25)\nresolvendo o circuito acima\nf(a, b, c) = (a + b) * (a + c)\naxioma 7' \u0026mdash; distributiva\naxioma 7 → x * (y + z) = x * y + x * z\naxioma 7' → x +(y * z) = (x + y) * (x + z)\nsendo assim\nf(a,b,c) = a + (b * c)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-27-3i0c68jjig3g/","summary":"\u003cp\u003e\u003cstrong\u003ePara esta aula você precisará lembrar da\u003c/strong\u003e \u003ca href=\"https://dpbm.medium.com/ci%C3%AAncias-da-computa%C3%A7%C3%A3o-dia-25-c8b4a9a1ae47\"\u003e\u003cstrong\u003eaula\n25\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUm circuito simplificado é feito para diminuir a quantidade de\ncomponentes, que, por consequência, diminui o tempo de execução, custo\npara ser construido (tanto em mão de obra, como em dinheiro) e também\neconomiza espaço em um chip.\u003c/p\u003e\n\u003cp\u003eUm fator importante a se saber,é que nem sempre o circuito que tem menos\ncomponentes ele é necessariamente melhor\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"circuito 1\" loading=\"lazy\" src=\"/image/image_34.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"circuito 2\" loading=\"lazy\" src=\"/image/image_35.png\"\u003e\u003c/p\u003e\n\u003cp\u003eveja esses dois circuitos.\u003c/p\u003e","title":"Ciências da computação dia 27"},{"content":"Grafo completo (Kn) todas as vertices são interligadas entre si Subgrafo grafo gerado a partir de um subset do grafo original é dito que o grafo H é um subconjunto de G ( H ⊆ G) só é um subgrafo se: V(H)⊆V(G) e E(H) ⊆ E(G) Passeio sequência de arestas no formato → (V0, V1), (V1, V2), (V2, V3), \u0026hellip;, (Vs-1, Vs) sendo s o tamanho do passeio(no caso, grafo)→ total de arestas que foram usadas ((L,M), (M, L), (L,R) → s=3) é permitido repetir arestas → (C, M), (M, L), (L, C), (C, M) Trilha passeio com todas as arestas distintas Trilha fechada trilha do qual Vs = V0 Caminho trilha que não repete vertices (apenas V0 e Vs podem ser iguais) Ciclo caminho do qual V0 = Vs ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-270-j9320hi22i5/","summary":"\u003ch4 id=\"grafo-completokn\"\u003eGrafo completo (Kn)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etodas as vertices são interligadas entre si\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-270-j9320hi22i5/image_446.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"subgrafo\"\u003eSubgrafo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egrafo gerado a partir de um subset do grafo original\u003c/li\u003e\n\u003cli\u003eé dito que o grafo H é um subconjunto de G ( H ⊆ G)\u003c/li\u003e\n\u003cli\u003esó é um subgrafo se: V(H)⊆V(G) e E(H) ⊆ E(G)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"grafo (G)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-270-j9320hi22i5/image_447.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"subgrafo (H)\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-270-j9320hi22i5/image_448.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"passeio\"\u003ePasseio\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esequência de arestas no formato → (V0, V1), (V1, V2), (V2, V3), \u0026hellip;,\n(Vs-1, Vs)\u003c/li\u003e\n\u003cli\u003esendo s o tamanho do passeio(no caso, grafo)→ total de arestas que\nforam usadas ((L,M), (M, L), (L,R) → s=3)\u003c/li\u003e\n\u003cli\u003eé permitido repetir arestas → (C, M), (M, L), (L, C), (C, M)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-270-j9320hi22i5/image_449.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 270"},{"content":"ISO/OSI comunicação feita com 7 camadas PDU → protocol data unit cada camada N de um host se comunica com a N do outro host virtualmente protocolo de sub-rede interna faz a parte da comunicação e tratamento entre as camadas físicas dos dois hosts não necessariamente todas as camadas são usadas em um padrão de rede, isso é apenas uma referência cada camada deve ter uma função bem definida camadas são usadas para criar abstrações quantidade de camadas não pode ser muito grande nem muito pequeno para assim ter camadas com características distintas e ainda ser fácil de gerir limite das camadas deve minimizar o fluxo Camadas Camada Física (1) bit a bit tensão representa os bits intervalos de nano segundos dividem um bit de outro dita a direção da comunicação interfaces mecânicas, elétricas e de sincronização garantia do envio e recebimento do dado Camada de Enlace (2) Transformação dos dados brutos (bits) verifica erros não detectados na camada de rede divide dados em quadros(frames) que serão transmitidos sequencialmente rede de difusão controla a colisão aqui Camada de Rede (3) usa pacotes IP como os pacotes são roteados (estático ou dinâmico) controla a sub-rede trata da a qualidade do serviço, tempo em transito, instabilidade, etc trata da qualidade usando retardo → ao enviar dados, o buffer de um dos lados pode encher, assim essa camada da um delay para esperar esvaziar para enviar novamente Camada de Transporte (4) aceita dados de uma camada acima e divide em partes menores, caso necessário. Então, repassa para a camada de rede garante que chegarão corretamente uso de TPDU Camada de Sessão(5) usa SPDU oferece serviços serviço de controle de dialogo → controla quem vai transmitir serviço de gerenciamento de token → impede que as partes façam a mesma função critica ao mesmo tempo serviço de sincronização → caso ocorra uma falha, ele volta do ponto que estava, usando tokens para realizar isso (muito utilizado para resumir downloads, por exemplo) Camada de apresentação(6) usa PPDU sintaxe e semântica das informações Camada de Aplicação(7) usa APDU uso de protocolos pelo user DNS, SMTP, FTP, HTTP (protocolos da camada de aplicação) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-271-05199a0h4bfc/","summary":"\u003ch4 id=\"isoosi\"\u003eISO/OSI\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecomunicação feita com 7 camadas\u003c/li\u003e\n\u003cli\u003ePDU → protocol data unit\u003c/li\u003e\n\u003cli\u003ecada camada N de um host se comunica com a N do outro host\nvirtualmente\u003c/li\u003e\n\u003cli\u003eprotocolo de sub-rede interna faz a parte da comunicação e\ntratamento entre as camadas físicas dos dois hosts\u003c/li\u003e\n\u003cli\u003enão necessariamente todas as camadas são usadas em um padrão de\nrede, isso é apenas uma referência\u003c/li\u003e\n\u003cli\u003ecada camada deve ter uma função bem definida\u003c/li\u003e\n\u003cli\u003ecamadas são usadas para criar abstrações\u003c/li\u003e\n\u003cli\u003equantidade de camadas não pode ser muito grande nem muito pequeno\npara assim ter camadas com características distintas e ainda ser\nfácil de gerir\u003c/li\u003e\n\u003cli\u003elimite das camadas deve minimizar o fluxo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"camadas\"\u003eCamadas\u003c/h3\u003e\n\u003ch4 id=\"camada-física1\"\u003eCamada Física (1)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebit a bit\u003c/li\u003e\n\u003cli\u003etensão representa os bits\u003c/li\u003e\n\u003cli\u003eintervalos de nano segundos dividem um bit de outro\u003c/li\u003e\n\u003cli\u003edita a direção da comunicação\u003c/li\u003e\n\u003cli\u003einterfaces mecânicas, elétricas e de sincronização\u003c/li\u003e\n\u003cli\u003egarantia do envio e recebimento do dado\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-enlace2\"\u003eCamada de Enlace (2)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTransformação dos dados brutos (bits)\u003c/li\u003e\n\u003cli\u003everifica erros não detectados na camada de rede\u003c/li\u003e\n\u003cli\u003edivide dados em quadros(frames) que serão transmitidos\nsequencialmente\u003c/li\u003e\n\u003cli\u003erede de difusão controla a colisão aqui\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-rede3\"\u003eCamada de Rede (3)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa pacotes\u003c/li\u003e\n\u003cli\u003eIP\u003c/li\u003e\n\u003cli\u003ecomo os pacotes são roteados (estático ou dinâmico)\u003c/li\u003e\n\u003cli\u003econtrola a sub-rede\u003c/li\u003e\n\u003cli\u003etrata da a qualidade do serviço, tempo em transito, instabilidade,\netc\u003c/li\u003e\n\u003cli\u003etrata da qualidade usando retardo → ao enviar dados, o buffer de um\ndos lados pode encher, assim essa camada da um delay para esperar\nesvaziar para enviar novamente\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-transporte-4\"\u003eCamada de Transporte (4)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eaceita dados de uma camada acima e divide em partes menores, caso\nnecessário. Então, repassa para a camada de rede garante que\nchegarão corretamente\u003c/li\u003e\n\u003cli\u003euso de TPDU\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-sessão5\"\u003eCamada de Sessão(5)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa SPDU\u003c/li\u003e\n\u003cli\u003eoferece serviços\u003c/li\u003e\n\u003cli\u003eserviço de controle de dialogo → controla quem vai transmitir\u003c/li\u003e\n\u003cli\u003eserviço de gerenciamento de token → impede que as partes façam a\nmesma função critica ao mesmo tempo\u003c/li\u003e\n\u003cli\u003eserviço de sincronização → caso ocorra uma falha, ele volta do ponto\nque estava, usando tokens para realizar isso (muito utilizado para\nresumir downloads, por exemplo)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-apresentação6\"\u003eCamada de apresentação(6)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa PPDU\u003c/li\u003e\n\u003cli\u003esintaxe e semântica das informações\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"camada-de-aplicação7\"\u003eCamada de Aplicação(7)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa APDU\u003c/li\u003e\n\u003cli\u003euso de protocolos pelo user\u003c/li\u003e\n\u003cli\u003eDNS, SMTP, FTP, HTTP (protocolos da camada de aplicação)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://www.alura.com.br/artigos/conhecendo-o-modelo-osi\\\"\u003ealura\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-271-05199a0h4bfc/image_454.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 271"},{"content":"Threads em JAVA gerenciado pela JVM modo user pode ser criado estendendo Threads ou implementando um Runnable todo app java possui no mínimo 1 thread (main thread) main pode criar novas threads cada thread é uma instância da classe Thread classe precisa ter o método run .start() → inicia o thread .sleep() → pausa o thread por um certo tempo .join() → espera o thread acabar para rodar o resto do fluxo principal .interrup() → para o thread .interrupted() → checa se o thread foi interrompido ao usar memória compartilhada, é interessante o primeiro que utilizar bloquear o recurso, para não haver sobreescrita JVM JVM suporta um único processo (programa) JVM possui → loader, verifier e o runtime interpreter ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-272-jjbe5beh27h5/","summary":"\u003ch4 id=\"threads-emjava\"\u003eThreads em JAVA\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egerenciado pela JVM\u003c/li\u003e\n\u003cli\u003emodo user\u003c/li\u003e\n\u003cli\u003epode ser criado estendendo Threads ou implementando um Runnable\u003c/li\u003e\n\u003cli\u003etodo app java possui no mínimo 1 thread (main thread)\u003c/li\u003e\n\u003cli\u003emain pode criar novas threads\u003c/li\u003e\n\u003cli\u003ecada thread é uma instância da classe Thread\u003c/li\u003e\n\u003cli\u003eclasse precisa ter o método run\u003c/li\u003e\n\u003cli\u003e.start() → inicia o thread\u003c/li\u003e\n\u003cli\u003e.sleep() → pausa o thread por um certo tempo\u003c/li\u003e\n\u003cli\u003e.join() → espera o thread acabar para rodar o resto do fluxo\nprincipal\u003c/li\u003e\n\u003cli\u003e.interrup() → para o thread\u003c/li\u003e\n\u003cli\u003e.interrupted() → checa se o thread foi interrompido\u003c/li\u003e\n\u003cli\u003eao usar memória compartilhada, é interessante o primeiro que\nutilizar bloquear o recurso, para não haver sobreescrita\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"jvm\"\u003eJVM\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eJVM suporta um único processo (programa)\u003c/li\u003e\n\u003cli\u003eJVM possui → loader, verifier e o runtime interpreter\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 272"},{"content":"IPs uma parte do IP identifica o host e a outra a rede endereço de rede serve para identificar a rede endereço de broadcast é usado quando é necessário mandar algo para todos os endereços IP da rede máscara de sub-rede ajuda a determinar a parte que representa o host e a classe dos IPs cada classe há um limite de Hosts e Redes endereços frios → IPs locais, não roteáveis Classes de IPs Classe A bit mais a direita é sempre 0 (valores vão de 1 ate 126/127) 127 é um número reservado para referenciar o próprio computador (localhost \u0026mdash; 127.0.0.1) máscara → 255.0.0.0 (8 bits para a rede e 24 para a máquina/host) 128 redes possíveis (2⁷ \u0026mdash; 2) 16777214 hosts (2²⁴- 2) ← total de hosts que serão atingidos no broadcast endereços frios são → 10.0.0.0 à 10.255.255.255 Classe B dois primeiros bits são 10 (primeiro octeto vai de 128 ate 191) máscara → 255.255.0.0 16382 redes possíveis (2¹⁴-2) 65534 hosts (2¹⁶ \u0026mdash; 2) endereços frios são → 172.16.0.0 à 172.31.255.255 Classe C primeiros bits são 110 (primeiro octeto vai de 192 até 223) máscara → 255.255.255.0 2097150 redes possíveis (2²¹-2) 254 hosts (2⁸-2) endereços frios são → 192.168.0.0 à 192.168.255.255 Classe D primeiros bits 1110 usados para endereços multicast Classe E primeiros bits 1111 reservado para o futuro Esses IPs são conhecidos como IPs roteáveis\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-273-8dfgehe5dii/","summary":"\u003ch4 id=\"ips\"\u003eIPs\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003euma parte do IP identifica o host e a outra a rede\u003c/li\u003e\n\u003cli\u003eendereço de rede serve para identificar a rede\u003c/li\u003e\n\u003cli\u003eendereço de broadcast é usado quando é necessário mandar algo para\ntodos os endereços IP da rede\u003c/li\u003e\n\u003cli\u003emáscara de sub-rede ajuda a determinar a parte que representa o host\ne a classe dos IPs\u003c/li\u003e\n\u003cli\u003ecada classe há um limite de Hosts e Redes\u003c/li\u003e\n\u003cli\u003eendereços frios → IPs locais, não roteáveis\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"classes-deips\"\u003eClasses de IPs\u003c/h3\u003e\n\u003ch4 id=\"classe-a\"\u003eClasse A\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebit mais a direita é sempre 0 (valores vão de 1 ate 126/127)\u003c/li\u003e\n\u003cli\u003e127 é um número reservado para referenciar o próprio computador\n(localhost \u0026mdash; 127.0.0.1)\u003c/li\u003e\n\u003cli\u003emáscara → 255.0.0.0 (8 bits para a rede e 24 para a máquina/host)\u003c/li\u003e\n\u003cli\u003e128 redes possíveis (2⁷ \u0026mdash; 2)\u003c/li\u003e\n\u003cli\u003e16777214 hosts (2²⁴- 2) ← total de hosts que serão atingidos no\nbroadcast\u003c/li\u003e\n\u003cli\u003eendereços frios são → 10.0.0.0 à 10.255.255.255\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"classe-b\"\u003eClasse B\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edois primeiros bits são 10 (primeiro octeto vai de 128 ate 191)\u003c/li\u003e\n\u003cli\u003emáscara → 255.255.0.0\u003c/li\u003e\n\u003cli\u003e16382 redes possíveis (2¹⁴-2)\u003c/li\u003e\n\u003cli\u003e65534 hosts (2¹⁶ \u0026mdash; 2)\u003c/li\u003e\n\u003cli\u003eendereços frios são → 172.16.0.0 à 172.31.255.255\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"classe-c\"\u003eClasse C\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprimeiros bits são 110 (primeiro octeto vai de 192 até 223)\u003c/li\u003e\n\u003cli\u003emáscara → 255.255.255.0\u003c/li\u003e\n\u003cli\u003e2097150 redes possíveis (2²¹-2)\u003c/li\u003e\n\u003cli\u003e254 hosts (2⁸-2)\u003c/li\u003e\n\u003cli\u003eendereços frios são → 192.168.0.0 à 192.168.255.255\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"classe-d\"\u003eClasse D\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprimeiros bits 1110\u003c/li\u003e\n\u003cli\u003eusados para endereços multicast\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"classe-e\"\u003eClasse E\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprimeiros bits 1111\u003c/li\u003e\n\u003cli\u003ereservado para o futuro\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEsses IPs são conhecidos como IPs roteáveis\u003c/p\u003e","title":"Ciências da computação dia 273"},{"content":"Medidas de dispersão às vezes, medidas de tendência central não representam corretamente os dados. Então precisamos utilizar esses tipos de medidas para entender como os dados estão dispersos entre si Desvio médio distância entre os dados (sempre positivo) desvio em relação a média da sequência pouca precisão Variância utiliza-se o quadrado do valor ao invés do modulo σ² ou S² ao utilizar todos os valores, isso é chamado de variância populacional, caso contrário é chamado de variância amostral para dados agrupados faça: Desvio padrão chamado de medida de dispersão absoluta S ou √S² quando for do conjunto, é dito desvio padrão populacional senão, desvio padrão amostral é aberto para interpretação, podendo ser comparado com os dados Coeficiente de variação verifica se a dispersão é grande em relação a média Curva normal ao utilizar a curva normal, partindo da média e indo para ambos os lados por um S, temos 68% dos dados ali se adicionarmos 2S para cada lado a partir da média, temos 95% dos dados se adicionarmos 3S para cada lado a partir da média, temos 99% dos dados ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-274-05503ad1cca5/","summary":"\u003ch4 id=\"medidas-de-dispersão\"\u003eMedidas de dispersão\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eàs vezes, medidas de tendência central não representam corretamente\nos dados. Então precisamos utilizar esses tipos de medidas para\nentender como os dados estão dispersos entre si\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"desvio-médio\"\u003eDesvio médio\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edistância entre os dados (sempre positivo)\u003c/li\u003e\n\u003cli\u003edesvio em relação a média da sequência\u003c/li\u003e\n\u003cli\u003epouca precisão\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-274-05503ad1cca5/image_456.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"variância\"\u003eVariância\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eutiliza-se o quadrado do valor ao invés do modulo\u003c/li\u003e\n\u003cli\u003eσ² ou S²\u003c/li\u003e\n\u003cli\u003eao utilizar todos os valores, isso é chamado de variância\npopulacional, caso contrário é chamado de variância amostral\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-274-05503ad1cca5/image_457.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 274"},{"content":"IPs número de hosts segue a formula 2^n-2, sendo n o numero de bits (o menos dois remove os dois números reservados .0 e .255) IP do roteador geralmente é o primeiro, mas pode ser qualquer outro na prática Roteadores também são chamados de gateway ao acessar um IP fora da rede ele vai para o roteador e vai pulando de roteador em roteador até chegar no ponto que tenha o que você procura LAN é sempre por difusão, mesmo usando switch (o switch ainda usa difusão, mas ele também consegue enviar diretamente dependendo do seu tempo de uso) Sub-redes você pode pegar um IP especifico e dividi-lo em sub-redes, basta configurar a máscara de sub-rede ao dividir um IP em sub-redes, cada sub-rede terá seu IP de broadcast e de rede. Por exemplo, se tivermos 192.168.0.0 até 192.168.0.31, os IPs usáveis vão d e 192.168.0.1 até 192.168.0.30 na máscara você começa a adicionar bits da esquerda para direita no ultimo octeto disponível (você não conta em binário, vai apenas mudando o bit menos significativo para 1) ex: 255.255.255.0 → 255.255.255.128 não há mudanças na classe de IP nḿero de sub redes é 2^n sendo n o numero de bits adicionados não pode haver máscara 255.255.255.255, já que essa rede teria apenas número de broadcast quantidade de IPs de cada sub rede também segue o padrão 2^n-2, sendo n o número de bits do host ao adicionar bits na sub rede, a máscara também aumenta ex: 192.168.0.0/24 → 192.168.0.0/26 (adicionando mais 2 bits) computadores com mascaras diferentes não pertencem a mesma rede(não conseguem se comunicar entre si) Para saber se dois IPs estão na mesma rede faça: transforme os IPs e mascaras de cada um em binário, depois faça uma operação AND entre o IP e sua respectiva máscara. Se ao final eles forem iguais, eles pertencem a mesma rede ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-275-j70cbah71ege/","summary":"\u003ch4 id=\"ips\"\u003eIPs\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enúmero de hosts segue a formula 2^n-2, sendo \u003cem\u003en\u003c/em\u003e o numero de bits\n(o menos dois remove os dois números reservados .0 e .255)\u003c/li\u003e\n\u003cli\u003eIP do roteador geralmente é o primeiro, mas pode ser qualquer outro\nna prática\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"roteadores\"\u003eRoteadores\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etambém são chamados de gateway\u003c/li\u003e\n\u003cli\u003eao acessar um IP fora da rede ele vai para o roteador e vai pulando\nde roteador em roteador até chegar no ponto que tenha o que você\nprocura\u003c/li\u003e\n\u003cli\u003eLAN é sempre por difusão, mesmo usando switch (o switch ainda usa\ndifusão, mas ele também consegue enviar diretamente dependendo do\nseu tempo de uso)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"sub-redes\"\u003eSub-redes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003evocê pode pegar um IP especifico e dividi-lo em sub-redes, basta\nconfigurar a máscara de sub-rede\u003c/li\u003e\n\u003cli\u003eao dividir um IP em sub-redes, cada sub-rede terá seu IP de\nbroadcast e de rede. Por exemplo, se tivermos 192.168.0.0 até\n192.168.0.31, os IPs usáveis vão d e 192.168.0.1 até 192.168.0.30\u003c/li\u003e\n\u003cli\u003ena máscara você começa a adicionar bits da esquerda para direita no\nultimo octeto disponível (você não conta em binário, vai apenas\nmudando o bit menos significativo para 1) ex: 255.255.255.0 →\n255.255.255.128\u003c/li\u003e\n\u003cli\u003enão há mudanças na classe de IP\u003c/li\u003e\n\u003cli\u003enḿero de sub redes é 2^n sendo n o numero de bits adicionados\u003c/li\u003e\n\u003cli\u003enão pode haver máscara 255.255.255.255, já que essa rede teria\napenas número de broadcast\u003c/li\u003e\n\u003cli\u003equantidade de IPs de cada sub rede também segue o padrão 2^n-2,\nsendo n o número de bits do host\u003c/li\u003e\n\u003cli\u003eao adicionar bits na sub rede, a máscara também aumenta ex:\n192.168.0.0/24 → 192.168.0.0/26 (adicionando mais 2 bits)\u003c/li\u003e\n\u003cli\u003ecomputadores com mascaras diferentes não pertencem a mesma rede(não\nconseguem se comunicar entre si)\u003c/li\u003e\n\u003cli\u003ePara saber se dois IPs estão na mesma rede faça: transforme os IPs e\nmascaras de cada um em binário, depois faça uma operação AND entre o\nIP e sua respectiva máscara. Se ao final eles forem iguais, eles\npertencem a mesma rede\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 275"},{"content":"Interrupção evento externo que faz com que a execução pare para executar uma rotina de interrupção após o tratamento ela volta quando menos, melhor Maneiras de fazer processos Paralelos co-routines semelhante a sub rotinas (métodos) marca vários pontos intermediários de entrada e saída da rotina endereçamento especifico do tipo TRANSFER não possui retorno ao chamar uma co rotina ela vai seguindo até encontrar um TRANSFER executa um pequeno código e depois volta não bloqueante async/await FORK/JOIN cria-se um novo processo (FORK) 2. segue executando o pai\n3. quando necessário executa-se um JOIN para aguardar a resposta do filho\n4. após o termino o pai volta a ser executado(sincronizado)\nCOBEGIN/COEND estrutura de declaração concorrente declaração interior ao block COBEGIN/COEND são concorrentes possui vários blocos desse dentro do código principal BEGIN/END, todos concorrentes entre si mais antigo Processo concorrente cada trecho é concorrente poderia utilizar qualquer um dos métodos acima deixa claro que as partes são concorrentes Comunicação entre processos processos precisam estar sincronizados variáveis compartilhadas na memória ou troca de mensagem condição de corrida dois ou mais processos estão lendo/escrevendo na memória compartilhada ao mesmo tempo duvida de quem deve usar essa memória primeiro Região critica(RC) → parte do código que manipula um recurso compartilhado para evitar problemas com a memória compartilhada, um dos processos deve executar sua região critica por completo, antes de chavear para outro exclusão mutua → proibir que mais de um processo manipule dados compartilhados ao mesmo tempo dois processos não podem estar em suas RC ao mesmo tempo um processo não deve esperar ou bloquear outro em sua RC métodos para resolver isso → esperada ocupada (busy waiting), sleep/wake up, semáforo, monitor, passagem de mensagem Busy Waiting checa constantemente por um valor não bloqueante possui desperdício de CPU pode causar espera perpetua (deadlock) Desabilitar interrupções desabilita interrupções ao chegar na RC, depois que sair ele libera não é seguro, já que não é garantido que ele vai habilitar novamente, podendo não ser finalizado Lock variável compartilhada é usada para marcar se um processo esta ou não na RC não é tão bom, uma vez que utiliza mais memória compartilhada, podendo o scheduler mudar para outra parte antes de mudar a variável Alternância estrita variável de controle é compartilhada entre processo, dizendo qual pode entrar na RC se ele não pode ele fica num loop até conseguir usar Para apenas 2 processos Possui baixo desempenho devido ao loop não lida com erros → se der algum erro o outro processo fica num loop eterno Solução de Peterson para 2 processo também mantém uma lista de processos interessados ao entrar na RC, ele atualiza o número do próximo processo a ser executado lista de interessados marca cada processo e diz se cada um está rodando ou não laço fica aguardando o processo poder acessar a RC Possui muito consumo de CPU TSL comando em assembly mesmo principio da solução de Peterson test and set lock utiliza registradores do hardware operação individual (vai executar de uma vez) lock é compartilhado ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-276-2i3ff1e20d58/","summary":"\u003ch4 id=\"interrupção\"\u003eInterrupção\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eevento externo que faz com que a execução pare para executar uma\nrotina de interrupção\u003c/li\u003e\n\u003cli\u003eapós o tratamento ela volta\u003c/li\u003e\n\u003cli\u003equando menos, melhor\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"maneiras-de-fazer-processos-paralelos\"\u003eManeiras de fazer processos Paralelos\u003c/h3\u003e\n\u003ch4 id=\"co-routines\"\u003eco-routines\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003esemelhante a sub rotinas (métodos)\u003c/li\u003e\n\u003cli\u003emarca vários pontos intermediários de entrada e saída da rotina\u003c/li\u003e\n\u003cli\u003eendereçamento especifico do tipo TRANSFER\u003c/li\u003e\n\u003cli\u003enão possui retorno\u003c/li\u003e\n\u003cli\u003eao chamar uma co rotina ela vai seguindo até encontrar um TRANSFER\u003c/li\u003e\n\u003cli\u003eexecuta um pequeno código e depois volta\u003c/li\u003e\n\u003cli\u003enão bloqueante\u003c/li\u003e\n\u003cli\u003easync/await\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"forkjoin\"\u003eFORK/JOIN\u003c/h4\u003e\n\u003col\u003e\n\u003cli\u003ecria-se um novo processo (FORK)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e2. segue executando o pai\u003c/p\u003e","title":"Ciências da computação dia 276"},{"content":"Endereço de rede é usado para saber se dois IPs estão na mesma rede, se não, então é necessário usar um router\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-277-5650idfc069/","summary":"\u003cp\u003eEndereço de rede é usado para saber se dois IPs estão na mesma rede, se\nnão, então é necessário usar um router\u003c/p\u003e","title":"Ciências da computação dia 277"},{"content":"Análise combinatória fatorial não funciona para números negativos n! = n*(n-1)*(n-2)*\u0026hellip;*1\n0! = 1! = 1\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-278-13hh3g7580gi/","summary":"\u003ch3 id=\"análise-combinatória\"\u003eAnálise combinatória\u003c/h3\u003e\n\u003ch4 id=\"fatorial\"\u003efatorial\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enão funciona para números negativos\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003en! = n*(n-1)*(n-2)*\u0026hellip;*1\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0! = 1! = 1\u003c/p\u003e\n\u003c/blockquote\u003e","title":"Ciências da computação dia 278"},{"content":"Sleep/Wake Up bloqueante para problemas bounded buffer(limitado pelo buffer) problema do produtor/consumidor (produtor adiciona no buffer, consumidor tira do buffer) o problema do produtor/consumidor acontece quando o produtor quer adicionar no buffer, mas ele está cheio, ou o consumidor quer tirar do buffer, mas ele está vazio para resolver isso, o sleep/wake up coloca o processo para dormir dois processos acessam o buffer ao mesmo tempo buffer age como uma fila circular exclusão mutua deve ser aplicada há a possibilidade de usar uma variável para dizer se um pode consumir e se o outro pode adicionar, contudo, o scheduler pode interromper antes da variável ser modificada, podendo então causar a dissincronia e consequentemente um deadlock um processo pode colocar outro para dormir (sleep) ou acordar (wake up) Semáforo armazena o numero de wake ups enviados, começando em 1 se o número for 0, o recurso está sendo usado, se não ele está livre operação down executa sempre que um processo quer utilizar o recurso e up para liberar o recurso operações são atômicas aplica a exclusão mutua bloqueante quando um processo acessa a região crítica, ele da um comando down, se o valor for 0 ele entra numa fila e fica bloqueado até chegar a vez dele de usar, se não ele executa Semáforo full → conta no buffer quantos espaços estão sendo usados (começa com o numero de elementos) Semáforo empty → conta o numero de espaços vazios no buffer (começa com 0) soluciona o mesmo problema do produtor/consumidor Monitor há somente um processo ativo dentro do monitor o restante é bloqueado semelhante ao semáforo, só que mais fácil de controlar bloco programático compilador que garante a exclusão mutua dentro de um bloco monitor há procedimentos a serem executados, antes de executar ele vê se não há nada que estava sendo executado antes Mensagem processos podem estar em diferentes máquinas envia e recebe mensagens ao invés de usar memória compartilhada pode usar as primitivas SEND e RECIEVE para sincronia pode ser bloqueante ou não (usando outra THREAD por exemplo) por usar rede, há diversos problemas que podem acontecer para resolver a perda de mensagens, é usado ACK para dizer que a info chegou corretamente para resolver a perda do ACK, as mensagens são todas numeradas, assim, caso um envie a mesma mensagem 2 vezes, entende-se que ele não recebeu o ACK então, você descarta a mensagem e envia o ACK de novo pode haver combinação de bloqueante e não bloqueante (emissor x receptor) emissor bloqueante e receptor bloqueante = síncrono\nemissor não bloqueante e receptor não bloqueante = assíncrono\no restante = semi síncrono\nRPC → comanda a execução de um método em outra CPU, seguindo modelo Cliente x servidor. Nesse caso, como a memória é diferente, não é possível a passagem de parâmetros por referencia, então deve-se sempre retornar algo desse método remoto Notes em JAVA wait() bloqueia o processo synchronized em JAVA diz que o método será executado de forma atômica, sem ser interrompido no meio. Útil para quando estamos usando recurso compartilhado ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-279-dj1640d255d/","summary":"\u003ch4 id=\"sleepwake-up\"\u003eSleep/Wake Up\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebloqueante\u003c/li\u003e\n\u003cli\u003epara problemas bounded buffer(limitado pelo buffer)\u003c/li\u003e\n\u003cli\u003eproblema do produtor/consumidor (produtor adiciona no buffer,\nconsumidor tira do buffer)\u003c/li\u003e\n\u003cli\u003eo problema do produtor/consumidor acontece quando o produtor quer\nadicionar no buffer, mas ele está cheio, ou o consumidor quer tirar\ndo buffer, mas ele está vazio\u003c/li\u003e\n\u003cli\u003epara resolver isso, o sleep/wake up coloca o processo para dormir\u003c/li\u003e\n\u003cli\u003edois processos acessam o buffer ao mesmo tempo\u003c/li\u003e\n\u003cli\u003ebuffer age como uma fila circular\u003c/li\u003e\n\u003cli\u003eexclusão mutua deve ser aplicada\u003c/li\u003e\n\u003cli\u003ehá a possibilidade de usar uma variável para dizer se um pode\nconsumir e se o outro pode adicionar, contudo, o scheduler pode\ninterromper antes da variável ser modificada, podendo então causar a\ndissincronia e consequentemente um deadlock\u003c/li\u003e\n\u003cli\u003eum processo pode colocar outro para dormir (sleep) ou acordar (wake\nup)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"semáforo\"\u003eSemáforo\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003earmazena o numero de wake ups enviados, começando em 1\u003c/li\u003e\n\u003cli\u003ese o número for 0, o recurso está sendo usado, se não ele está livre\u003c/li\u003e\n\u003cli\u003eoperação down executa sempre que um processo quer utilizar o recurso\ne up para liberar o recurso\u003c/li\u003e\n\u003cli\u003eoperações são atômicas\u003c/li\u003e\n\u003cli\u003eaplica a exclusão mutua\u003c/li\u003e\n\u003cli\u003ebloqueante\u003c/li\u003e\n\u003cli\u003equando um processo acessa a região crítica, ele da um comando down,\nse o valor for 0 ele entra numa fila e fica bloqueado até chegar a\nvez dele de usar, se não ele executa\u003c/li\u003e\n\u003cli\u003eSemáforo full → conta no buffer quantos espaços estão sendo usados\n(começa com o numero de elementos)\u003c/li\u003e\n\u003cli\u003eSemáforo empty → conta o numero de espaços vazios no buffer (começa\ncom 0)\u003c/li\u003e\n\u003cli\u003esoluciona o mesmo problema do produtor/consumidor\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"monitor\"\u003eMonitor\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ehá somente um processo ativo dentro do monitor o restante é\nbloqueado\u003c/li\u003e\n\u003cli\u003esemelhante ao semáforo, só que mais fácil de controlar\u003c/li\u003e\n\u003cli\u003ebloco programático\u003c/li\u003e\n\u003cli\u003ecompilador que garante a exclusão mutua\u003c/li\u003e\n\u003cli\u003edentro de um bloco monitor há procedimentos a serem executados,\nantes de executar ele vê se não há nada que estava sendo executado\nantes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"mensagem\"\u003eMensagem\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprocessos podem estar em diferentes máquinas\u003c/li\u003e\n\u003cli\u003eenvia e recebe mensagens ao invés de usar memória compartilhada\u003c/li\u003e\n\u003cli\u003epode usar as primitivas SEND e RECIEVE para sincronia\u003c/li\u003e\n\u003cli\u003epode ser bloqueante ou não (usando outra THREAD por exemplo)\u003c/li\u003e\n\u003cli\u003epor usar rede, há diversos problemas que podem acontecer\u003c/li\u003e\n\u003cli\u003epara resolver a perda de mensagens, é usado ACK para dizer que a\ninfo chegou corretamente\u003c/li\u003e\n\u003cli\u003epara resolver a perda do ACK, as mensagens são todas numeradas,\nassim, caso um envie a mesma mensagem 2 vezes, entende-se que ele\nnão recebeu o ACK então, você descarta a mensagem e envia o ACK de\nnovo\u003c/li\u003e\n\u003cli\u003epode haver combinação de bloqueante e não bloqueante (emissor x\nreceptor)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eemissor bloqueante e receptor bloqueante = síncrono\u003c/p\u003e","title":"Ciências da computação dia 279"},{"content":"Lógica simples\nprobabilidade usada apenas para um caso único P = n de casos satisfatórios / n de todos os casos (conjunto U)\nTeorema do OU\nsoma de probabilidades deixa mais fácil o evento desejado P(1) + P(2) +P(3) \u0026hellip;. + P(n)\nTeorema do E\nmultiplicação de probabilidades deixa mais difícil o evento desejado P(1) * P(2) * P(3) \u0026hellip; * P(n)\nAlém disso, em alguns tipos de eventos você pode ter devolução ou não (dependendo do caso, claro), com devolução você manterá a mesma probabilidade para todos os eventos\n4/52 * 4/52 * 4/52\nagora sem devolução sua fração deverá ir diminuindo em cima e em baixo (vai ficando mais difícil do evento acontecer, já que a gente considera que os eventos vão acontecer)\n4/52 * 3/51 * 2/50\nobs: lembre-se que na probabilidade você está lidando com eventos únicos, ou seja se você for usar o E ou o OU, repare se não há elementos duplicados, se houver lembre de somar tudo depois subtrair esses elementos\nexemplo:\n1 carta 8 ou 1 copas\n1 carta 8 → P¹ = 4/52\n1 copas → p² = 13/52\n4/52 + 13/52 = 17/52\nmas tem 1 oito de copas então\n17/52\u0026ndash;1/52 = 16/52 → 4/13\nCombinações\nQuando você precisa achar uma quantidade de combinações pensando que a ordem não importa C x,y = x! / y! (x-y)!\nexemplo:\ngrupos de 3 pessoas no total de 15 alunos\nC 15, 3 = 15! / 3! 12!\nC 15, 3 = 15 * 14 * 13 * 12! / 3! 12!\nC 15, 3 = 15 * 14 * 13 / 3 * 2\nC 15, 3 = 5 * 7 * 13 = 455 combinações possíveis\nPermutação\nquando a ordem importa quando dizer você e eu e eu e você tem diferença para isso você pode usar a notação posicional\nexemplo:\ngrupos de 3 pessoas no total de 15 alunos, mas queremos um diretor, 1 vice e 1 tesoureiro\n15 (direto) * 14 (vice) * 13 (tesoureiro) = 2730\nmuito mais combinações, já que no anterior a gente descartava aqueles que tinham as mesmas pessoas mas em posições diferentes (1, 2, 3; 3, 2, 1; 1, 3, 2; \u0026hellip;), nesse caso cada posição é diferente, mesmo que tenhamos as mesmas pessoas no grupo\nBinômio de Newton\nquando você precisa achar a probabilidade de acontecer dois eventos diferentes exemplo:\nlançamentos de 3 moedas, probabilidade de sair, 2 caras e 1 coroa\nnormalmente faríamos\n1/2 * 1/2 * 1/2 → 1/8\nno entanto não está correto, pois dessa forma estamos pensando na primeira moeda, segunda moeda e terceira moeda, como se sempre a primeira e a segunda fosse cara e a ultima coroa, mas a ordem aqui não importa, queremos que caiam duas caras e 1 coroa. Para isso, vamos utilizar um fator de ajuste\npara achar esse fator devemos fazer um binômio de Newton\n(p + q)³ → p e a probabilidade de caras e q a de coroas, o 3 e o tanto de moedas nesse caso\n(p + q)³ = (3 0) p³q⁰ + (3 1)p² q¹ + (3 2)p¹ q² + (3 3) p⁰q³\nagora vemos o que segue aquele padrão de 2 caras(p²) e 1 coroa(q¹)\n(3 1)p² q¹ sendo esse o que satisfaz\nagora faça\n(3 1) C 3, 1 = 3!/1! 2! = 3 ← fator de ajuste\np² = (probabilidade de apenas um evento)² = (1/2)² = 1/4\nq¹ = (probabilidade de apenas um evento)¹ = 1/2 = 1/2\nagora faça aquela conta anterior e multiplique pelo fator de ajuste\n3 * 1/2 * 1/4 → 3/8\nCuriosidades\npor causa da peste bubônica que assolava a Inglaterra no século 14, Newton não podia ir para a universidade estudar, já que todos estavam de quarentena, então devido a isso, ele ficou recluso e começou a criar teorias e varias ferramentas que usamos hoje, inclusive o binômio de Newton\nas cartas do baralho no total são 52, onde temos 4 naipes e 13 cartas de cada naipe\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-28-4358h92d47e3/","summary":"\u003cp\u003e\u003cstrong\u003eLógica simples\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eprobabilidade usada apenas para um caso único\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eP = n de casos satisfatórios / n de todos os casos (conjunto U)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eTeorema do OU\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esoma de probabilidades\u003c/li\u003e\n\u003cli\u003edeixa mais fácil o evento desejado\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eP(1) + P(2) +P(3) \u0026hellip;. + P(n)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eTeorema do E\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emultiplicação de probabilidades\u003c/li\u003e\n\u003cli\u003edeixa mais difícil o evento desejado\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eP(1) * P(2) * P(3) \u0026hellip; * P(n)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eAlém disso, em alguns tipos de eventos você pode ter devolução ou não\n(dependendo do caso, claro), com devolução você manterá a mesma\nprobabilidade para todos os eventos\u003c/p\u003e","title":"Ciências da computação dia 28"},{"content":"Matriz de adjacência cada vértice é representada por um element na linha i e coluna j elemento aij representa a quantidade de ligações que um vértice tem cada intersecção entre linha e coluna diz se eles possuem ligações Podem ocorrer espelhos na matriz, formando dois triângulos. Dessa forma é possível armazenar só um dos triângulos e economizar memória matriz densa = poucos zeros; matriz dispersa = muitos zeros (poucas arestas) ótimo para dígrafos e grafos densos no geral no grafo não direcionado, cada elemento aij pode ser maior do que 1, sendo assim, cada vértice pode ter mais de uma ligação no dígrafo, cada elemento vai de 0 até 1, contando a aresta que sai de um nó. Nesse caso é necessário manter todos os elementos. Aqui pode não haver os espelhos. matriz booleana = diagonal principal é 0. Não há arestas múltiplas(loops, etc). tudo é 0 ou 1. possui os dois triângulos espelhados Lista de adjacência linked list um nó base e suas ligações ótimo para grafos não direcionados e grafos dispersos ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-280-h85a38g06d3h/","summary":"\u003ch4 id=\"matriz-de-adjacência\"\u003eMatriz de adjacência\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ecada vértice é representada por um element na linha i e coluna j\u003c/li\u003e\n\u003cli\u003eelemento aij representa a quantidade de ligações que um vértice tem\u003c/li\u003e\n\u003cli\u003ecada intersecção entre linha e coluna diz se eles possuem ligações\u003c/li\u003e\n\u003cli\u003ePodem ocorrer espelhos na matriz, formando dois triângulos. Dessa\nforma é possível armazenar só um dos triângulos e economizar memória\u003c/li\u003e\n\u003cli\u003ematriz densa = poucos zeros; matriz dispersa = muitos zeros (poucas\narestas)\u003c/li\u003e\n\u003cli\u003eótimo para dígrafos e grafos densos no geral\u003c/li\u003e\n\u003cli\u003eno grafo não direcionado, cada elemento aij pode ser maior do que 1,\nsendo assim, cada vértice pode ter mais de uma ligação\u003c/li\u003e\n\u003cli\u003eno dígrafo, cada elemento vai de 0 até 1, contando a aresta que sai\nde um nó. Nesse caso é necessário manter todos os elementos. Aqui\npode não haver os espelhos.\u003c/li\u003e\n\u003cli\u003ematriz booleana = diagonal principal é 0. Não há arestas\nmúltiplas(loops, etc). tudo é 0 ou 1. possui os dois triângulos\nespelhados\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-280-h85a38g06d3h/image_461.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 280"},{"content":"Portas tanto TCP como UDP utilizam portas para passar informações para camadas superiores são usadas para manter diferentes conversações ao mesmo tempo IANA → órgão que define portas padrão para serviços FTP → 20 é para dados, 21 é para controle Aplicações especificas recebem portas padrão abaixo de 1024 Aplicações genéricas recebem portas randômicas acima de 1023 Domínio conjunto de máquinas (hosts) que agrupam um conjunto de serviços DNS tipo A → aponta para um IP tipo CNAME → aponta para um nome tipo MX → usado para email tipo TXT → usado para texto puro é um banco de dados distribuído usa a porta 53 de primeiro nível (.br, .it, .io, .uk, \u0026hellip;) de segundo nível (.edu, .gov, .com, \u0026hellip;) para aumentar os níveis, é necessário mais de DNS para dizer quem vai apontar para cada domínio ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-281-fbj00bajgfce/","summary":"\u003ch3 id=\"portas\"\u003ePortas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etanto TCP como UDP utilizam portas para passar informações para\ncamadas superiores\u003c/li\u003e\n\u003cli\u003esão usadas para manter diferentes conversações ao mesmo tempo\u003c/li\u003e\n\u003cli\u003eIANA → órgão que define portas padrão para serviços\u003c/li\u003e\n\u003cli\u003eFTP → 20 é para dados, 21 é para controle\u003c/li\u003e\n\u003cli\u003eAplicações especificas recebem portas padrão abaixo de 1024\u003c/li\u003e\n\u003cli\u003eAplicações genéricas recebem portas randômicas acima de 1023\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"domínio\"\u003eDomínio\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econjunto de máquinas (hosts) que agrupam um conjunto de serviços\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dns\"\u003eDNS\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003etipo A → aponta para um IP\u003c/li\u003e\n\u003cli\u003etipo CNAME → aponta para um nome\u003c/li\u003e\n\u003cli\u003etipo MX → usado para email\u003c/li\u003e\n\u003cli\u003etipo TXT → usado para texto puro\u003c/li\u003e\n\u003cli\u003eé um banco de dados distribuído\u003c/li\u003e\n\u003cli\u003eusa a porta 53\u003c/li\u003e\n\u003cli\u003ede primeiro nível (.br, .it, .io, .uk, \u0026hellip;)\u003c/li\u003e\n\u003cli\u003ede segundo nível (.edu, .gov, .com, \u0026hellip;)\u003c/li\u003e\n\u003cli\u003epara aumentar os níveis, é necessário mais de DNS para dizer quem\nvai apontar para cada domínio\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://pt.wikipedia.org/wiki/Sistema_de_Nomes_de_Dom%C3%ADnio\\\"\u003ewikipedia\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-281-fbj00bajgfce/image_465.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 281"},{"content":"Socket comunicação usando TCP/UDP troca de dados em tempo real escalável multi-usuário mais difícil de implantar mais vulnerável resposta rápida modelo cliente servidor ocorre um three-way handshake no começo ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-282-j06dfba12bb6a/","summary":"\u003ch3 id=\"socket\"\u003eSocket\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecomunicação usando TCP/UDP\u003c/li\u003e\n\u003cli\u003etroca de dados em tempo real\u003c/li\u003e\n\u003cli\u003eescalável\u003c/li\u003e\n\u003cli\u003emulti-usuário\u003c/li\u003e\n\u003cli\u003emais difícil de implantar\u003c/li\u003e\n\u003cli\u003emais vulnerável\u003c/li\u003e\n\u003cli\u003eresposta rápida\u003c/li\u003e\n\u003cli\u003emodelo cliente servidor\u003c/li\u003e\n\u003cli\u003eocorre um three-way handshake no começo\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://www.geeksforgeeks.org/socket-in-computer-network/\\\"\u003egeeksforgeeks\u003c/a\u003e\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-282-j06dfba12bb6a/image_467.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003efluxo é bidirecional, ambos os lados podem tanto enviar como receber\nao mesmo tempo, basta escolher qual operação realizar\u003c/li\u003e\n\u003cli\u003eServer espera por múltiplas conexões, cada uma é um novo socket\u003c/li\u003e\n\u003cli\u003eserver usa várias threads para os sockets\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 282"},{"content":"Principio fundamental da contagem Para saber as combinações do conjunto podemos fazer: 4*3*2*1 = 4!\nArranjo Simples Agrupamento sem repetição em que um grupo é diferente de outro por ordem ou por natureza dos elementos\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-283-21hcb6364e3a/","summary":"\u003ch4 id=\"principio-fundamental-dacontagem\"\u003ePrincipio fundamental da contagem\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-283-21hcb6364e3a/image_468.png\"\u003e\u003c/p\u003e\n\u003cp\u003ePara saber as combinações do conjunto podemos fazer: 4*3*2*1 = 4!\u003c/p\u003e\n\u003ch4 id=\"arranjo-simples\"\u003eArranjo Simples\u003c/h4\u003e\n\u003cp\u003eAgrupamento sem repetição em que um grupo é diferente de outro por ordem\nou por natureza dos elementos\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-283-21hcb6364e3a/image_469.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 283"},{"content":"AWS Na AWS tudo parte de uma VPC(rede virtual) cada VPC pode estar associada a uma região e cada região a uma subrede toda VPC pode ser publica, sendo disponibilizada para todo mundo, ou privada, um IP interno usado para coisas internas da aplicação, como banco de dados etc 0.0.0.0/0 é o default gateway tabela de rotas interligam subredes ao derrubar um server da cloud, o DNA ainda funciona TTL é o tempo em que um pacote vai ficar vivo(usado para DNS, CDN, etc.) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-284-3fb84cfii26h/","summary":"\u003ch4 id=\"aws\"\u003eAWS\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eNa AWS tudo parte de uma VPC(rede virtual)\u003c/li\u003e\n\u003cli\u003ecada VPC pode estar associada a uma região e cada região a uma\nsubrede\u003c/li\u003e\n\u003cli\u003etoda VPC pode ser publica, sendo disponibilizada para todo mundo, ou\nprivada, um IP interno usado para coisas internas da aplicação, como\nbanco de dados etc\u003c/li\u003e\n\u003cli\u003e0.0.0.0/0 é o default gateway\u003c/li\u003e\n\u003cli\u003etabela de rotas interligam subredes\u003c/li\u003e\n\u003cli\u003eao derrubar um server da cloud, o DNA ainda funciona\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"ttl\"\u003eTTL\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eé o tempo em que um pacote vai ficar vivo(usado para DNS, CDN, etc.)\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 284"},{"content":"Permutação Simples Quantidade de combinações\nArranjo Simples A cada arranjo cria-se um grupo distinto dos outros\nCombinação Simples Este não cria novos grupos Tanto faz a ordem (AB=BA) Permutação com elementos repetidos Usado para anagramas\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-285-94fe7fc8hfha/","summary":"\u003ch4 id=\"permutação-simples\"\u003ePermutação Simples\u003c/h4\u003e\n\u003cp\u003eQuantidade de combinações\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-285-94fe7fc8hfha/image_470.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"arranjo-simples\"\u003eArranjo Simples\u003c/h4\u003e\n\u003cp\u003eA cada arranjo cria-se um grupo distinto dos outros\u003c/p\u003e\n\u003ch4 id=\"combinação-simples\"\u003eCombinação Simples\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eEste não cria novos grupos\u003c/li\u003e\n\u003cli\u003eTanto faz a ordem (AB=BA)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-285-94fe7fc8hfha/image_471.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"permutação-com-elementos-repetidos\"\u003ePermutação com elementos repetidos\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-285-94fe7fc8hfha/image_472.png\"\u003e\u003c/p\u003e\n\u003cp\u003eUsado para anagramas\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-285-94fe7fc8hfha/image_473.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 285"},{"content":"Gerenciamento de Memória Lei de Parkinson \u0026mdash; Programa sempre se expande para preencher a memória disponível para ele gerencia da hierarquia de memória SWAP alocação e liberação de espaço localização de dados Classes de gerenciamento de memória Mono tarefa toda memória é alocada para o próximo programa inclui área para o OS erros de execução podem prejudicar o OS que está na memória Multiprogramação Divide a memória em varias partições de tamanhos diferentes Ao adicionar um job ele entra na fila para pegar um espaço da memória Diminui o tempo ocioso da CPU, já que você pode fazer várias coisas ao mesmo tempo Para resolver problemas de limites das partições, o processador vem equipado com uma MMU MMU (memory management unit) Hardware presente no processador transforma endereço virtual em físico user nunca acessa endereços físicos aponta um espaço virtual para um físico software não pode ser compilado com endereços absolutos, por isso usa-se offsets de endereços. Com isso, endereços de limite são colocados para auxiliar commandos JMP o endereço base e limite superior são usados para não fazer com o que programa saia dos limites, além do endereço base ser usado para o calculo do offset Tipos de partição Estática tamanho e número de partições fixa suscetível a fragmentação mais fácil de gerenciar espaços podem não ser usados totalmente (fragmentação interna) pode usar filas múltiplas para adicionar processos nas partições (cada fila é designada para um tamanho especifico, mas pode acarretar em filas não balanceadas) pode usar fila única para adicionar processos nas partições, assim cada processo pega a melhor partição livre, mas seria mais lento pode haver fragmentação externa (se juntar duas partições livres elas dariam o tamanho para caber um processo maior que precisa ser executado). Esse problema é menor no caso da estática Variável menor fragmentação interna alocado dinamicamente problema de fragmentação externa, uma vez que conforme o espaço vai sendo liberado, buracos ficarão no meio. Para resolver esse problema pode ser usado a compactação da memória (OS mantêm uma lista dos espaços vazios, mas é custoso para a CPU) Técnicas de alocação Bitmap divide a memória em pequenos pedaços (em Kb por exemplo) cada pedaço recebe o valor 1, se estiver ocupado, e 0 se estiver livre unidades não podem ser nem muito grandes nem pequenas demais Linked lists Lista encadeada marca se é um espaço vazio ou não, a onde começa e o tamanho da partição pode ser usada mais de uma lista, para dizer por exemplo o que está vazio e o que esta sendo usado Algoritmos de alocação First Fit o primeiro segmento livre é usado (dessa forma os espaços vazios vão para o final) + rápido pode levar a fragmentação Next Fit usa o primeiro segmento livre, guarda essa informação e para o próximo ele continua da onde parou desempenho inferior ao First Fit Best Fit procura na lista toda o melhor espaço para o processo mais lento menor fragmentação após um bom tempo ele pode deixar vários espaços pequenos inúteis (fragmentação) Worst Fit aloca o maior espaço disponível para evitar os espaços pequenos inúteis tende a espalhar porções não utilizadas para áreas não contíguas, sendo difícil de alocar jobs grandes depois Quick Fit mantém listas para tamanhos mais usados e pega o que se encaixa para o processo tenta encontrar os espaços vazios vizinhos ao dealocar para fazer a união entre eles Dispositivos de memória massive tape storage \u0026mdash; fitas para backup ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-286-4c2582ea9f3c/","summary":"\u003ch4 id=\"gerenciamento-dememória\"\u003eGerenciamento de Memória\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLei de Parkinson \u0026mdash; Programa sempre se expande para preencher a\nmemória disponível para ele\u003c/li\u003e\n\u003cli\u003egerencia da hierarquia de memória\u003c/li\u003e\n\u003cli\u003eSWAP\u003c/li\u003e\n\u003cli\u003ealocação e liberação de espaço\u003c/li\u003e\n\u003cli\u003elocalização de dados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"classes-de-gerenciamento-dememória\"\u003eClasses de gerenciamento de memória\u003c/h3\u003e\n\u003ch4 id=\"mono-tarefa\"\u003eMono tarefa\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etoda memória é alocada para o próximo programa\u003c/li\u003e\n\u003cli\u003einclui área para o OS\u003c/li\u003e\n\u003cli\u003eerros de execução podem prejudicar o OS que está na memória\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"esquemas de organização mono\\u00a0tarefa\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-286-4c2582ea9f3c/image_474.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"multiprogramação\"\u003eMultiprogramação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eDivide a memória em varias partições de tamanhos diferentes\u003c/li\u003e\n\u003cli\u003eAo adicionar um job ele entra na fila para pegar um espaço da\nmemória\u003c/li\u003e\n\u003cli\u003eDiminui o tempo ocioso da CPU, já que você pode fazer várias coisas\nao mesmo tempo\u003c/li\u003e\n\u003cli\u003ePara resolver problemas de limites das partições, o processador vem\nequipado com uma MMU\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"mmu-memory-management-unit\"\u003eMMU (memory management unit)\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHardware presente no processador\u003c/li\u003e\n\u003cli\u003etransforma endereço virtual em físico\u003c/li\u003e\n\u003cli\u003euser nunca acessa endereços físicos\u003c/li\u003e\n\u003cli\u003eaponta um espaço virtual para um físico\u003c/li\u003e\n\u003cli\u003esoftware não pode ser compilado com endereços absolutos, por isso\nusa-se offsets de endereços. Com isso, endereços de limite são\ncolocados para auxiliar commandos JMP\u003c/li\u003e\n\u003cli\u003eo endereço base e limite superior são usados para não fazer com o\nque programa saia dos limites, além do endereço base ser usado para\no calculo do offset\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"tipos-departição\"\u003eTipos de partição\u003c/h3\u003e\n\u003ch4 id=\"estática\"\u003eEstática\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003etamanho e número de partições fixa\u003c/li\u003e\n\u003cli\u003esuscetível a fragmentação\u003c/li\u003e\n\u003cli\u003emais fácil de gerenciar\u003c/li\u003e\n\u003cli\u003eespaços podem não ser usados totalmente (fragmentação interna)\u003c/li\u003e\n\u003cli\u003epode usar filas múltiplas para adicionar processos nas partições\n(cada fila é designada para um tamanho especifico, mas pode\nacarretar em filas não balanceadas)\u003c/li\u003e\n\u003cli\u003epode usar fila única para adicionar processos nas partições, assim\ncada processo pega a melhor partição livre, mas seria mais lento\u003c/li\u003e\n\u003cli\u003epode haver fragmentação externa (se juntar duas partições livres\nelas dariam o tamanho para caber um processo maior que precisa ser\nexecutado). Esse problema é menor no caso da estática\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"variável\"\u003eVariável\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emenor fragmentação interna\u003c/li\u003e\n\u003cli\u003ealocado dinamicamente\u003c/li\u003e\n\u003cli\u003eproblema de fragmentação externa, uma vez que conforme o espaço vai\nsendo liberado, buracos ficarão no meio. Para resolver esse problema\npode ser usado a compactação da memória (OS mantêm uma lista dos\nespaços vazios, mas é custoso para a CPU)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"técnicas-dealocação\"\u003eTécnicas de alocação\u003c/h3\u003e\n\u003ch4 id=\"bitmap\"\u003eBitmap\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide a memória em pequenos pedaços (em Kb por exemplo)\u003c/li\u003e\n\u003cli\u003ecada pedaço recebe o valor 1, se estiver ocupado, e 0 se estiver\nlivre\u003c/li\u003e\n\u003cli\u003eunidades não podem ser nem muito grandes nem pequenas demais\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"linked-lists\"\u003eLinked lists\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eLista encadeada marca se é um espaço vazio ou não, a onde começa e o\ntamanho da partição\u003c/li\u003e\n\u003cli\u003epode ser usada mais de uma lista, para dizer por exemplo o que está\nvazio e o que esta sendo usado\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"algoritmos-dealocação\"\u003eAlgoritmos de alocação\u003c/h3\u003e\n\u003ch4 id=\"first-fit\"\u003eFirst Fit\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eo primeiro segmento livre é usado (dessa forma os espaços vazios vão\npara o final)\u003c/li\u003e\n\u003cli\u003e+ rápido\u003c/li\u003e\n\u003cli\u003epode levar a fragmentação\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"next-fit\"\u003eNext Fit\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa o primeiro segmento livre, guarda essa informação e para o\npróximo ele continua da onde parou\u003c/li\u003e\n\u003cli\u003edesempenho inferior ao First Fit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"best-fit\"\u003eBest Fit\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eprocura na lista toda o melhor espaço para o processo\u003c/li\u003e\n\u003cli\u003emais lento\u003c/li\u003e\n\u003cli\u003emenor fragmentação\u003c/li\u003e\n\u003cli\u003eapós um bom tempo ele pode deixar vários espaços pequenos inúteis\n(fragmentação)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"worst-fit\"\u003eWorst Fit\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ealoca o maior espaço disponível para evitar os espaços pequenos\ninúteis\u003c/li\u003e\n\u003cli\u003etende a espalhar porções não utilizadas para áreas não contíguas,\nsendo difícil de alocar jobs grandes depois\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"quick-fit\"\u003eQuick Fit\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emantém listas para tamanhos mais usados e pega o que se encaixa para\no processo\u003c/li\u003e\n\u003cli\u003etenta encontrar os espaços vazios vizinhos ao dealocar para fazer a\nunião entre eles\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"dispositivos-dememória\"\u003eDispositivos de memória\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emassive tape storage \u0026mdash; fitas para backup\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 286"},{"content":"Roteamento estático configuração manual das rotas entre roteadores para redes menores e mais simples definição dos IPs de destino, mascará de rede e próximos saltos mais seguros (não depende de protocolos) requer muita manutenção não é escalável Roteamento Dinâmico utiliza protocolos como OSPF, EIGRP e BGP protocolos monitoram mudanças na topologia roteamento se baseia em algoritmos para travessia de grafos (como Dijkstra) levando em consideração coisas como banda, número de saltos, latência, etc. Protocolo RIP baseado em vetor de distância antigo suporta até 15 saltos verifica atualização na rota a cada 30s para redes simples leva em consideração o número de saltos para definir a melhor rota pode gerar loops em redes grandes convergência lenta (para trocar de rota) EIGRP da CISCO baseado no algoritmo DUAL híbrido entre vetor de distância e estado de enlace (vê se a conexão está boa) rápida convergência, suporta vários protocolos, tolerância a falhas, utiliza várias métricas capaz de entregar as informações na ordem certa envia por outras rotas caso uma falhe balanceamento de carga escalável OSPF Open Shortest Path First protocolo com estado de enlace (link-state) suporta sub-redes e área entrega na ordem balanceamento de carga atualiza rapidamente a rota em resposta a mudanças na topologia (caso algum cabo rompa, ou algum aparelho quebre, etc.) usa o algoritmo de Dijkstra BGP Border Gateway Protocol (interno) EBGP para externo roteamento para sistemas autônomos para políticas de roteamento complexos suporta propagação de rotas entre diferentes domínios métricas: número de saltos, confiabilidade e preferência local (roteadores locais) ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-287-353fgd87caa5/","summary":"\u003ch4 id=\"roteamento-estático\"\u003eRoteamento estático\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003econfiguração manual das rotas entre roteadores\u003c/li\u003e\n\u003cli\u003epara redes menores e mais simples\u003c/li\u003e\n\u003cli\u003edefinição dos IPs de destino, mascará de rede e próximos saltos\u003c/li\u003e\n\u003cli\u003emais seguros (não depende de protocolos)\u003c/li\u003e\n\u003cli\u003erequer muita manutenção\u003c/li\u003e\n\u003cli\u003enão é escalável\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-287-353fgd87caa5/image_475.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-287-353fgd87caa5/image_476.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"roteamento-dinâmico\"\u003eRoteamento Dinâmico\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eutiliza protocolos como OSPF, EIGRP e BGP\u003c/li\u003e\n\u003cli\u003eprotocolos monitoram mudanças na topologia\u003c/li\u003e\n\u003cli\u003eroteamento se baseia em algoritmos para travessia de grafos (como\nDijkstra) levando em consideração coisas como banda, número de\nsaltos, latência, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"protocolo-rip\"\u003eProtocolo RIP\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ebaseado em vetor de distância\u003c/li\u003e\n\u003cli\u003eantigo\u003c/li\u003e\n\u003cli\u003esuporta até 15 saltos\u003c/li\u003e\n\u003cli\u003everifica atualização na rota a cada 30s\u003c/li\u003e\n\u003cli\u003epara redes simples\u003c/li\u003e\n\u003cli\u003eleva em consideração o número de saltos para definir a melhor rota\u003c/li\u003e\n\u003cli\u003epode gerar loops em redes grandes\u003c/li\u003e\n\u003cli\u003econvergência lenta (para trocar de rota)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"eigrp\"\u003eEIGRP\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eda CISCO\u003c/li\u003e\n\u003cli\u003ebaseado no algoritmo DUAL\u003c/li\u003e\n\u003cli\u003ehíbrido entre vetor de distância e estado de enlace (vê se a conexão\nestá boa)\u003c/li\u003e\n\u003cli\u003erápida convergência, suporta vários protocolos, tolerância a falhas,\nutiliza várias métricas\u003c/li\u003e\n\u003cli\u003ecapaz de entregar as informações na ordem certa\u003c/li\u003e\n\u003cli\u003eenvia por outras rotas caso uma falhe\u003c/li\u003e\n\u003cli\u003ebalanceamento de carga\u003c/li\u003e\n\u003cli\u003eescalável\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"ospf\"\u003eOSPF\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eOpen Shortest Path First\u003c/li\u003e\n\u003cli\u003eprotocolo com estado de enlace (link-state)\u003c/li\u003e\n\u003cli\u003esuporta sub-redes e área\u003c/li\u003e\n\u003cli\u003eentrega na ordem\u003c/li\u003e\n\u003cli\u003ebalanceamento de carga\u003c/li\u003e\n\u003cli\u003eatualiza rapidamente a rota em resposta a mudanças na topologia\n(caso algum cabo rompa, ou algum aparelho quebre, etc.)\u003c/li\u003e\n\u003cli\u003eusa o algoritmo de Dijkstra\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"bgp\"\u003eBGP\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBorder Gateway Protocol (interno)\u003c/li\u003e\n\u003cli\u003eEBGP para externo\u003c/li\u003e\n\u003cli\u003eroteamento para sistemas autônomos\u003c/li\u003e\n\u003cli\u003epara políticas de roteamento complexos\u003c/li\u003e\n\u003cli\u003esuporta propagação de rotas entre diferentes domínios\u003c/li\u003e\n\u003cli\u003emétricas: número de saltos, confiabilidade e preferência local\n(roteadores locais)\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 287"},{"content":"Overlays divide o processo em partes menores swap chaveia essas partes antigamente o programador era obrigado a quebrar manualmente o programa em overlays hoje em dia é usado memória virtual, sendo o OS responsável por gerenciar as overlays SWAP chaveamento de processos entre MP e disco pode usar partições fixas ou variáveis swap-out → da MP para o disco swap-in → do disco para a MP Endereçamento espaço de endereçamento virtual (EEV) → todos os endereços virtuais que um processo pode gerar espaço de endereçamento real → todos os endereços de um processo que a MP aceita um endereço virtual é traduzido em um real (mapeamento) MMU aplica técnicas de paginação e segmentação para fazer o mapeamento Segmentação blocos de tamanho arbitrário EEV é dividido em segmentos virtuais Paginação blocos de tamanho fixo espaço de endereçamento real é dividido em páginas MP e MS (memória secundária) são dividias em blocos de tamanhos iguais página é a unidade básica de transferência de dados tabela de páginas → armazena as informações sobre elas page frame → memória física utilizada pela página MMU define o tamanho das páginas pode gerar fragmentação interna página grande → leitura eficiente, tabela menor, maior fragmentação página pequena → leitura ineficiente, tabela maior, menor fragmentação pode usar técnicas como bitmap e linked lists também os bits de entrada para a tabela de páginas, parte indicam o index para o endereço q ele mapeia, e a outra parte é q o será concatenado com a saída (offset) tabela de páginas podem ser armazenadas em: registradores, MP, CACHE da MMU page table base register → endereço físico onde esta a tabela na RAM page table link register → número da página Algoritmo de substituição de páginas quando há um page fault, deve-se escolher uma página para fazer swap ou ser removida se a página foi alterada (bit modified) salva-se em disco, se não é sobreescrita ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-288-aci7g55hi70i/","summary":"\u003ch4 id=\"overlays\"\u003eOverlays\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003edivide o processo em partes menores\u003c/li\u003e\n\u003cli\u003eswap chaveia essas partes\u003c/li\u003e\n\u003cli\u003eantigamente o programador era obrigado a quebrar manualmente o\nprograma em overlays\u003c/li\u003e\n\u003cli\u003ehoje em dia é usado memória virtual, sendo o OS responsável por\ngerenciar as overlays\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"swap\"\u003eSWAP\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003echaveamento de processos entre MP e disco\u003c/li\u003e\n\u003cli\u003epode usar partições fixas ou variáveis\u003c/li\u003e\n\u003cli\u003eswap-out → da MP para o disco\u003c/li\u003e\n\u003cli\u003eswap-in → do disco para a MP\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"endereçamento\"\u003eEndereçamento\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eespaço de endereçamento virtual (EEV) → todos os endereços virtuais\nque um processo pode gerar\u003c/li\u003e\n\u003cli\u003eespaço de endereçamento real → todos os endereços de um processo que\na MP aceita\u003c/li\u003e\n\u003cli\u003eum endereço virtual é traduzido em um real (mapeamento)\u003c/li\u003e\n\u003cli\u003eMMU aplica técnicas de paginação e segmentação para fazer o\nmapeamento\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"segmentação\"\u003eSegmentação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eblocos de tamanho arbitrário\u003c/li\u003e\n\u003cli\u003eEEV é dividido em segmentos virtuais\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"paginação\"\u003ePaginação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eblocos de tamanho fixo\u003c/li\u003e\n\u003cli\u003eespaço de endereçamento real é dividido em páginas\u003c/li\u003e\n\u003cli\u003eMP e MS (memória secundária) são dividias em blocos de tamanhos\niguais\u003c/li\u003e\n\u003cli\u003epágina é a unidade básica de transferência de dados\u003c/li\u003e\n\u003cli\u003etabela de páginas → armazena as informações sobre elas\u003c/li\u003e\n\u003cli\u003epage frame → memória física utilizada pela página\u003c/li\u003e\n\u003cli\u003eMMU define o tamanho das páginas\u003c/li\u003e\n\u003cli\u003epode gerar fragmentação interna\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-288-aci7g55hi70i/image_477.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 288"},{"content":"Memória virtual há a sensação de ter mais memória disponível muitas vezes é implementado em hardware Paginação Como os endereços virtuais de estão paginados, ao usar algo de dentro da EEV de A, a tabela de páginas dirá o endereço da MP em que aquela parte especifica está\nTabela de páginas bit presente/ausente diz se a página está mapeada para um endereço físico cache da MMU é chamado de TLB page fault → quando tenta-se acessar dados que não estão na RAM devido ao SWAP ou coisa do gênero Algoritmos para a substituição de páginas para performance é melhor não remover uma página usada com frequência Algoritmo NRU usa os bits de status Reference e modified ao receber um page fault ele classifica as paginas em: classe 0 → R=0, M=0\nclasse 1 → R=0, M=1\nclasse 2 → R=1, M=0\nclasse 3 → R=1, M=1\nremove aleatoriamente da classe mais baixa possível FIFO fila de páginas remove a primeira (mais antiga) não é usado já que pode remover uma página usada frequentemente Second Chance baseado na FIFO e bit Reference antes de remover verifica se o bit R é 1, se for ele vai para o fim e R vira 0 se todas estiverem com R=1, haverá uma volta completa Relógio baseado no Second Chance com uma implementação melhor para a fila (fila circular) ponteiro aponta para a pagina mais antiga se a página possui R=0 então substitui esse e o ponteiro vai para o próximo se a página possui R=1, seta R=0 e roda até achar um página com R=0 LRU/MRU substitui páginas a mais tempo sem uso mantém uma lista de paginas na memória usadas recentemente vão para o começo lista é reordenada a cada referencia substitui a ultima da lista pode ser lidada usando um contador C na tabela que conta cada acesso a certa página. Assim, no page fault basta pegar o que tem menor C outra maneira é usar uma matriz que conta o acesso as páginas dentro de uma moldura (frame). Assim, a linha com menor valor binário é a que foi usada menos recentemente Aging bit R indicam as páginas acessadas durante uma interrupção cada bit R é relativo a uma página cada página tem um contador associado bit do contador deslocam a direita somando um quando seu bit R for 1 no page fault a página com menor contador é substituída ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-289-6def6gg5j6fc/","summary":"\u003ch4 id=\"memória-virtual\"\u003eMemória virtual\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ehá a sensação de ter mais memória disponível\u003c/li\u003e\n\u003cli\u003emuitas vezes é implementado em hardware\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-289-6def6gg5j6fc/image_478.png\"\u003e\u003c/p\u003e\n\u003ch4 id=\"paginação\"\u003ePaginação\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-289-6def6gg5j6fc/image_479.png\"\u003e\u003c/p\u003e\n\u003cp\u003eComo os endereços virtuais de estão paginados, ao usar algo de dentro da\nEEV de A, a tabela de páginas dirá o endereço da MP em que aquela parte\nespecifica está\u003c/p\u003e\n\u003ch4 id=\"tabela-depáginas\"\u003eTabela de páginas\u003c/h4\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-289-6def6gg5j6fc/image_480.png\"\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebit presente/ausente diz se a página está mapeada para um endereço\nfísico\u003c/li\u003e\n\u003cli\u003ecache da MMU é chamado de TLB\u003c/li\u003e\n\u003cli\u003epage fault → quando tenta-se acessar dados que não estão na RAM\ndevido ao SWAP ou coisa do gênero\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"algoritmos-para-a-substituição-depáginas\"\u003eAlgoritmos para a substituição de páginas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epara performance é melhor não remover uma página usada com\nfrequência\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"algoritmo-nru\"\u003eAlgoritmo NRU\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eusa os bits de status Reference e modified\u003c/li\u003e\n\u003cli\u003eao receber um page fault ele classifica as paginas em:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eclasse 0 → R=0, M=0\u003c/p\u003e","title":"Ciências da computação dia 289"},{"content":" Algoritmos melhores são aqueles que resolvem um problema com uma quantidade menor de instruções e com uma menor gasto computacional\nVariáveis compostas\nvariáveis que armazenam mais de um valor ela é homogênea quando todos os seus valores são do mesmo tipo listas em Python é um exemplo de variável composta Observações\no penúltimo divisor de um número é sempre sua metade, o último é sempre ele mesmo\na = [0] * 10 ← cria-se uma lista com 10 valores 0 (em python)\no insert em python coloca um valor em um local desejado de uma lista, caso esse local não exista ele coloca sempre no final como no comando append\nlista.insert(index, value)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-29-0a3a142190bg/","summary":"\u003cblockquote\u003e\n\u003cp\u003eAlgoritmos melhores são aqueles que resolvem um problema com uma\nquantidade menor de instruções e com uma menor gasto computacional\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003eVariáveis compostas\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003evariáveis que armazenam mais de um valor\u003c/li\u003e\n\u003cli\u003eela é homogênea quando todos os seus valores são do mesmo tipo\u003c/li\u003e\n\u003cli\u003elistas em Python é um exemplo de variável composta\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eObservações\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eo penúltimo divisor de um número é sempre sua metade, o último é sempre\nele mesmo\u003c/p\u003e\n\u003cp\u003ea = [0] * 10 ← cria-se uma lista com 10 valores 0 (em python)\u003c/p\u003e","title":"Ciências da computação dia 29"},{"content":" Topologia Token Ring → proprietário da IBM cabos vão de 17 a 100m, nem mais nem menos, pela norma passou de 100m o cabo de par trançado pode perder suas propriedades IPV4 → 32 bits IPV6 → 128 bits ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-290-51ehj683j59ca/","summary":"\u003cul\u003e\n\u003cli\u003eTopologia Token Ring → proprietário da IBM\u003c/li\u003e\n\u003cli\u003ecabos vão de 17 a 100m, nem mais nem menos, pela norma\u003c/li\u003e\n\u003cli\u003epassou de 100m o cabo de par trançado pode perder suas propriedades\u003c/li\u003e\n\u003cli\u003eIPV4 → 32 bits\u003c/li\u003e\n\u003cli\u003eIPV6 → 128 bits\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 290"},{"content":"Árvores grafo conexo acíclico com um nó especial (root) cresce para baixo sem voltar árvores com n nós possuem n-1 arestas e 2n-2 extremidades (2 para cada aresta) Árvore livre grafo conexo acíclico sem uma raiz especificada Floresta conjunto de árvores Ancestralidade ancestral → nó y anterior em algum nível de z descendente → nó z que tem y como ancestral filho → x é um ancestral direto de y pai → y é descendente direto de x folha → nó sem filhos nó interno → qualquer nó não folha Altura/profundidade da árvore maior profundidade dentre os nós Altura de um nó Raiz = 0\nfilhos da raiz = 1\nfilhos dos filhos da raiz = 2\n\u0026hellip;\nGrau número de filhos de um nó Árvore binária cada nó tem no máximo 2 filhos cada nó pode ter no mínimo 0 filhos Árvore binária cheia todas as folhas possuem mesma profundidade e os nós internos tem grau 2 total de vertices é 2^(h+1) \u0026mdash; 1, onde h é a altura da árvore Árvore binária completa toda folha tem profundidade h ou h-1 Representação em tabela somente para árvores binárias Ordenação na árvore binária Pré-ordem (infixa/convencional) → nó, esquerda, direita Ordem/Simétrica (prefixa/polonesa) → esquerda, nó, direita Pós-ordem (posfixa/polonesa inversa) → esquerda, direita, nó notações podem ser usadas para aritmética em compiladores, já que serão vistos como uma AST Busca busca padrão = O(n) → passa por cada elemento busca binária = O(log(n)) Árvore de busca binária elemento da esquerda menor que o da direita é uma boa para ordenação. Basta usar a trajetória Ordem em uma lista de elementos (para montar a árvore) o primeiro é o root e depois basta seguir colocando menor a esquerda do root e maior a direita ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-291-ddb1e10806ba/","summary":"\u003ch4 id=\"árvores\"\u003eÁrvores\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egrafo conexo acíclico com um nó especial (root)\u003c/li\u003e\n\u003cli\u003ecresce para baixo sem voltar\u003c/li\u003e\n\u003cli\u003eárvores com n nós possuem n-1 arestas e 2n-2 extremidades (2 para\ncada aresta)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"árvore-livre\"\u003eÁrvore livre\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003egrafo conexo acíclico sem uma raiz especificada\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"floresta\"\u003eFloresta\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003econjunto de árvores\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"ancestralidade\"\u003eAncestralidade\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eancestral → nó y anterior em algum nível de z\u003c/li\u003e\n\u003cli\u003edescendente → nó z que tem y como ancestral\u003c/li\u003e\n\u003cli\u003efilho → x é um ancestral direto de y\u003c/li\u003e\n\u003cli\u003epai → y é descendente direto de x\u003c/li\u003e\n\u003cli\u003efolha → nó sem filhos\u003c/li\u003e\n\u003cli\u003enó interno → qualquer nó não folha\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"alturaprofundidade-daárvore\"\u003eAltura/profundidade da árvore\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003emaior profundidade dentre os nós\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"altura-de-umnó\"\u003eAltura de um nó\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cp\u003eRaiz = 0\u003c/p\u003e","title":"Ciências da computação dia 291"},{"content":"coisas sobre matemática e alguns truques para fazer algumas contas mais rápido\nUm pouco de história matemática era no principio considerada uma religião, já que o conhecimento era escasso e caro A partir do ano de 1500/1600 começaram a aparecer as primeiras gráficas que ajudaram a popularizar e baratear o conhecimento com livros e afins Truques de matemática multiplicação por 11 com 2 dígitos\n25 * 11 = (primeiro numero)(primeiro + segundo numero)(segundo numero)\n25 * 11 = 275\nmultiplicação de dois números iguais que terminam em 5\n55 * 55 = (primeiro numero * sucessor)25\n55 * 55 = 3025\nMultiplicação decimais muito grandes\n0.003 * 0.0004 * 0.0002 = x\nmultiplique os números 3 * 4 * 2\nconte o numero de casas dps da vírgula somando de cada numero (3 casas no primeiro, 4 casas no segundo e 4 casas no terceiro, então 11 casas no total)\nmonte o numero\n0, (numero d casas \u0026mdash; as ocupadas pelo numero do final)(numero multiplicado no começo)\n0,00000000024\nraiz quadradas gigantes\n√400000000\nquando o numero sem ser 0 for um quadrado perfeito e o numero de zeros for par então\n(raiz do primeiro)(numero de zeros /2)\n20000\nCuriosidades Academus → herói grego que ajudava as pessoas em grandes negociações e grande negócios no geral, e toda vez que perguntavam o que devia ser feito para ele, ele dizia para ter algumas noites de sono para pensar\ntomo → divisão\nDr. Helmont → Grande médico de 1660, médico do qual, fez uma receita de como germinar ratos, claramente essa receita não era algo real, pois apenas o que acontecia era uma mistura muito grande de coisas podres em um local úmido, do qual era propicio para ratos aparecerem e se aproveitarem dessa situação imunda. Não dizendo que ele era alguém burro ou algo do tipo, já que para a época era o conhecimento que eles tinham, tanto que até Newton acredito que era verdade a receita.\ncada numero possui um numero de ângulos condizente com seu valor\no Z dos inteiros vem do matemático alemão Zahl que propôs esse conjunto\npi = circunferência de um cilindro / diâmetro da circunferência\nphi\nnúmero de ouro, número da beleza, número de Deus → 1,6261\u0026hellip; Descoberto por Leonardo da Vinci (cara que fez a Monalisa e a primeira ideia sobre o helicóptero) 1550 altura / dividido pela altura do umbigo ao chão = phi envergadura / distancia entre cotovelo e mão = phi Conjuntos numéricos Naturais →0, 1, 2, 3, 4, \u0026hellip;\nInteiros → \u0026hellip;, -2, -1, 0, 1, 2, \u0026hellip;\nRacionais → \u0026hellip;, -0.5, -0.1232323, 0, 1, 1/2, 5, \u0026hellip; (frações e dizimas entram aqui)\nIrracionais → pi, 1.32313\u0026hellip;, phi, \u0026hellip; (números que você desconhece seu comportamento após a vírgula)\nDizimas periódicas 1,6262626262\u0026hellip; → dizima simples (pois, após a vírgula o período já aparece)\n1,654343434343\u0026hellip; → dizima periódica composta (pois antes do período temos um numero diferente chamado de anti período)\nresolver dizimas\ndo primeiro numero até o primeiro período \u0026mdash; primeiro numero antes do período / um nove para cada numero do período e um zero para cada anti período\nex:\n1,262626\u0026hellip;\n126\u0026ndash;1 / 99 → 125/99\n1,25434343\u0026hellip;\n12345\u0026ndash;125 / 9900 → 12220/9900\nFração geratriz frações que geram dizimas e decimais\n0.5 → 1/2 ou 5/10\n1,2626\u0026hellip; → 125/99\n0.3 → 3/10\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-3-2h49gg41jibj/","summary":"\u003cp\u003ecoisas sobre matemática e alguns truques para fazer algumas contas mais\nrápido\u003c/p\u003e\n\u003ch3 id=\"um-pouco-dehistória\"\u003eUm pouco de história\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ematemática era no principio considerada uma religião, já que o\nconhecimento era escasso e caro\u003c/li\u003e\n\u003cli\u003eA partir do ano de 1500/1600 começaram a aparecer as primeiras\ngráficas que ajudaram a popularizar e baratear o conhecimento com\nlivros e afins\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"truques-de-matemática\"\u003eTruques de matemática\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003emultiplicação por 11 com 2 dígitos\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e25 * 11 = (primeiro numero)(primeiro + segundo numero)(segundo numero)\u003c/p\u003e","title":"Ciências da computação dia 3"},{"content":"Representação de funções lógicas\naté agora representamos uma função lógica com tabela verdade, expressões matemáticas e circuitos lógicos, vamos agora ver mais algumas maneiras de se representar uma função lógica.\nformas canônicas\nsoma de produtos produto de somas nessas duas representações temos os conceitos de maxtermos e mintermos\nmaxtermos → linhas de uma tabela verdade das quais o resultado é 0\nmintermos → linhas de uma tabela verdade das quais o resultado é 1\nsoma de produtos\nadicione uma AND (*) entre as variáveis para todos os mintermos, depois faça adicione negado onde for necessário para o resultado desse AND ser 1\nexemplo tabela da porta OR\nx y\n0 0 → 0\n0 1 → 1 → x * y → x\u0026rsquo; * y\n1 0 →1 → x * y → x * y'\n1 1 → 1 → x * y → x * y\nagora pegue as expressões que resultaram e junte-as com uma operação or\nf(x,y) = (x\u0026rsquo; * y) + (x * y\u0026rsquo;) + (x * y)\nessa é a expressão final\nlembrando que você também pode usar os axiomas para reduzi-la\nproduto de somas\nadicione uma OR (+) entre as variáveis para todos os maxtermos, depois faça adicione negado onde for necessário para o resultado desse OR ser 0\nexemplo tabela da porta AND\nx y\n0 0 → 0 → x + y → x + y\n0 1 → 0 → x + y → x + y'\n1 0 →0 → x + y → x\u0026rsquo; + y\n1 1 → 1\nagora pegue essas expressões e junte-as com uma porta AND\nf(x, y) = (x + y) * (x + y\u0026rsquo;) *(x\u0026rsquo; + y)\nessa é a expressão resultante e você também pode reduzi-la usando os axiomas\nSomatório\no somatório é uma técnica da qual você armazena a informação de quais linhas possuem maxtermos\nexemplo tabela AND\ni | x y\n0 | 0 0 → 0\n1 | 0 1 → 0\n2 | 1 0 →0\n3 | 1 1 → 1\nobs: o i nesse caso está representando o numero da linha\nsendo assim o somatório dessa função é:\nf(x, y) = Σ(0, 1, 2)\ndessa forma quando você for montar a tabela verdade, você preenche tudo usando aquela técnica de numero de linhas / 2, numero de linhas /2\u0026hellip;. e na hora de adicionar os resultados com o somatório você já sabe quais os resultados serão 0\nProdutório\nO produtório tem uma ideia semelhante a do somatório, mas nesse caso você fará para os mintermos\nexemplo tabela OR\ni | x y\n0 | 0 0 → 0\n1 | 0 1 → 1\n2 | 1 0 →1\n3 | 1 1 → 1\nsendo assim o produtório disso é:\nf(x, y) = π(1, 2, 3)\no mesmo pode ser usado para saber quais linhas vão ter o valor 1 na hora de montar a tabela verdade\nMapas de Karnaugh\nforma de simplificar um circuito simplificação de um circuito a partir de uma tabela verdade Vamos imaginar que temos uma tabela verdade com 3 variáveis a, b, c\na b c | f(a,b,c)\n0 0 0 | 0\n0 0 1 | 0\n0 1 0 | 0\n0 1 1 | 0\n1 0 0 | 0\n1 0 1 | 1\n1 1 0 | 1\n1 1 1 | 1\npara começar adicionaremos um código cíclico na parte de cima com dois bits\ndepois o valor 0 e 1 para o lado esquerdo\nagora juntaremos a parte de cima com a do lado, lembrando que a de cima vem sempre primeiro, então, dessa forma, teremos:\nagora associaremos como região \u0026lsquo;a\u0026rsquo; tudo aquilo que possui 1 no primeiro valor, como região b tudo aquilo que tem 1 no \u0026lsquo;b\u0026rsquo; e região \u0026lsquo;c\u0026rsquo; tudo que tem 1 no c\nantes de continuar devemos saber o que significa vizinhança no mapa de karnaugh\nvizinhança nada mais é do que os valores que estão em volta de uma certa célula\nexemplo:\nveja que tudo que está em rosa é vizinho de 111\nrepare também que a distância entre o valor 111 para os demais é sempre 1\ndistancia 111\u0026ndash;110 → 1\ndistancia 111\u0026ndash;011 → 1\ndistancia 111\u0026ndash;101 → 1\nsendo assim, no mapa de karnaugh todos os 3 vizinhos de um número possuem distância para ele de 1 e estarão sempre a sua volta, até mesmo do outro lado como no exemplo abaixo\nisso acontece pois, alem de seguir o padrão da distância 1, o mapa é pensando em 3 dimensões\ncontinuando com a montagem\ncoloque nas células os valores correspondentes aos binários que cada célula continha com o valor da tabela verdade\nagora você deve utilizar a regra do implicante primo\nessa regra consiste em você pegar um fator de 2\nnesse caso como temos os seguintes fatores de 2\n2⁰ → 1\n2¹ → 2\n2² → 4\n2³ → 8\nou seja podemos pegar até oito células de uma vez, já que temos 3 variáveis\ne juntar células que possuem valores iguais sempre em quantidades desses fatores\nobs: nesse caso pegaremos os valores 1\nagora pegue esses dois implicantes e lembre de cada posição da tabela\nobs: ignore os \u0026rsquo; que estão ali em a b c\nagora temos algo dessa forma\n(6, 7) = a * b * c\n(5,7) = a * b * c\nobs: como pegamos apenas o valor 1 usamos a soma de produtos, caso contrário usaríamos o produto de somas\nagora eliminaremos dessas expressões as variáveis em que sua região não contem o implicante inteiro\nficando dessa forma:\n(6,7) = a * b\n(5,7) = a * c\npor fim, fazemos a soma dos produtos\nf(a,b,c) = (a * b) + (a * c)\ne caso você queira, você pode usar de novo os axiomas e simplificar\nficando:\nf(a,b,c) = a(b * c)\nrepare que este foi o mesmo resultado que teríamos se fizéssemos com os axiomas\nobservações\nas simplificações além de ajudarem a diminuir circuitos e expressões, também podem ser usadas na programação para diminuir expressões lógicas usadas em if e similares\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-30-6hc60i60f86g/","summary":"\u003cp\u003e\u003cstrong\u003eRepresentação de funções lógicas\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eaté agora representamos uma função lógica com tabela verdade, expressões\nmatemáticas e circuitos lógicos, vamos agora ver mais algumas maneiras\nde se representar uma função lógica.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eformas canônicas\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003esoma de produtos\u003c/li\u003e\n\u003cli\u003eproduto de somas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003enessas duas representações temos os conceitos de maxtermos e mintermos\u003c/p\u003e\n\u003cp\u003emaxtermos → linhas de uma tabela verdade das quais o resultado é 0\u003c/p\u003e\n\u003cp\u003emintermos → linhas de uma tabela verdade das quais o resultado é 1\u003c/p\u003e","title":"Ciências da computação dia 30"},{"content":"quando você usa print(*L) para uma lista L em Python, por causa desse * ele remove os \u0026ldquo;[]\u0026rdquo; e as \u0026ldquo;,\u0026rdquo; da tela\nalgoritmos com programação dinâmica → quando você usa os valores para gerarem os próximos valores\nex: a[i] = a[i-1] * 5\nproduto escalar → soma entre os produtos de cada valor de mesma posição, sendo assim pe = A[0]*B[0] + A[1]*B[1] + A[2]*B[2] + \u0026hellip;. + A[n]*B[n]\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-31-9e1je1i5h35g/","summary":"\u003cp\u003equando você usa print(*L) para uma lista L em Python, por causa desse\n* ele remove os \u0026ldquo;[]\u0026rdquo; e as \u0026ldquo;,\u0026rdquo; da tela\u003c/p\u003e\n\u003cp\u003ealgoritmos com programação dinâmica → quando você usa os valores para\ngerarem os próximos valores\u003c/p\u003e\n\u003cp\u003eex: a[i] = a[i-1] * 5\u003c/p\u003e\n\u003cp\u003eproduto escalar → soma entre os produtos de cada valor de mesma posição,\nsendo assim pe = A[0]*B[0] + A[1]*B[1] + A[2]*B[2]\n+ \u0026hellip;. + A[n]*B[n]\u003c/p\u003e","title":"Ciências da computação dia 31"},{"content":"Bom, no último artigo que fiz sobre simplificação de expressões e circuitos, disse sobre o mapa de karnaugh, mas tem um detalhe que nos foi explicado só na ultima aula que foi: quando nós barramos (negamos, complementamos) uma variável na expressão final?\npara isso devemos entender algumas coisas:\nquando um implicante primo esta totalmente em uma região → a variável referente a essa região ficará em sua forma padrão na expressão final\nquando um implicante primo tem uma parte dentro e uma parte fora → essa variável será removida da expressão\nquando um implicante está totalmente fora de uma região → essa variável será negada\nUtilizando produto de somas\nnos mapas de Karnaugh utilizar soma de produtos não é uma regra\ncaso você queira pegar o produto de somas, basta pegar os 0 ao invés dos 1 e usar no final + ao invés de *\nsendo assim a equação final será → f(a,b,c) = a+c\u0026rsquo; * a\u0026rsquo; + c que é a mesma coisa que f(a,b,c) = a\u0026rsquo;.c\u0026rsquo; + a.c\nMapas com implicantes maiores\nNos mapas de Karnaugh devemos sempre pegar os maiores implicantes possíveis, pois isso ajuda a diminuir o circuito. Isso não é uma regra, mas como queremos diminuir nosso circuito/expressão caso isso não seja feito, resultará em um circuito maior\nsendo assim o resultado é f(a,b,c) = b+c\nlembrando que o maximo de implicantes que você pode pegar de uma vez são dados através de potências de dois sendo assim nesse caso como temos apenas 3 variaveis o maximo que conseguimos pegar é 2³ = 8\nmas também poderiamos pegar\n2⁰ = 1\n2¹ = 2\n2² = 4\n2³ =8\nImplicantes Essenciais\naté agora vimos implicantes em diversos exemplos, e todos eles possuem uma mesma característica\ntodos eles são implicantes essenciais, ou seja só conseguimos montar de uma maneira os implicantes de forma que todos os números 1 apareçam\nnesse mapa, por exemplo, não há como juntarmos os 1 de maneiras diferentes, ou seja todos os implicantes que conseguimos juntar são essenciais\nObservações\no maxtermo é associado ao + pois a operação OR só se tornará 0 quando todos os elementos forem 0, e o mesmo acontece com os mintermos, são associados ao * pois a operação AND só será 1 quando todas as variáveis forem 1.\nos implicantes primos também podem ser chamados de cobertura(s),sendo assim, nenhum valor pode ser ficado para traz (nesse caso os números 1), desde um único numero sozinho ou com mais vizinhos, ou seja devemos cobrir (fazer uma cobertura) em todos os números que nos interessam\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-32-1e200234g03b/","summary":"\u003cp\u003eBom, no \u003ca href=\"https://dpbm.medium.com/ci%C3%AAncias-da-computa%C3%A7%C3%A3o-dia-30-b23df9168493\"\u003eúltimo artigo que fiz sobre\nsimplificação\u003c/a\u003e\nde expressões e circuitos, disse sobre o mapa de karnaugh, mas tem um\ndetalhe que nos foi explicado só na ultima aula que foi: \u003cem\u003equando nós\nbarramos (negamos, complementamos) uma variável na expressão final?\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003epara isso devemos entender algumas coisas:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003equando um implicante primo esta totalmente em uma região → a variável\nreferente a essa região ficará em sua forma padrão na expressão final\u003c/p\u003e","title":"Ciências da computação dia 32"},{"content":"bubble sort → você compara valores de dois em dois, deixando a esquerda os menores e a direita os maiores, você deve rodar esse algoritmo até que não exista nenhuma troca a ser feita em toda a lista.\nselect sort → percorre o array uma vez, pega o menor e joga no começo, depois faz o menos com o próximo menor e joga em segundo lugar, e assim sucessivamente\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-33-28j41ha58f46/","summary":"\u003cp\u003ebubble sort → você compara valores de dois em dois, deixando a esquerda\nos menores e a direita os maiores, você deve rodar esse algoritmo até\nque não exista nenhuma troca a ser feita em toda a lista.\u003c/p\u003e\n\u003cp\u003eselect sort → percorre o array uma vez, pega o menor e joga no começo,\ndepois faz o menos com o próximo menor e joga em segundo lugar, e assim\nsucessivamente\u003c/p\u003e","title":"Ciências da computação dia 33"},{"content":"Implicantes não essenciais\nno artigo passado sobre esse mesmo tema, dei uma breve explicação do que serião implicantes não essenciais, mas agora vamos um pouco mais a fundo neles\nos implicantes nãos essenciais, são implicantes que todos os 1 são cobertos por outros implicantes\nImplicantes essenciais\no implicante essencial é aquele em que pelo uma célula pertence a apenas esse implicante\nobs: quando falo que pertence a um implicante, lembre-se sempre de que pensamos em pegar os maiores implicantes possíveis, já que se fôssemos pegar de 1 em 1 todos serão essenciais\ncomo achar implicantes essenciais e não essenciais\n1 \u0026mdash; encontre todos os implicantes possíveis\n2 \u0026mdash; vemos quais são essenciais e não essenciais\nEssenciais\nNenhum\nNão essenciais\nTodos\n(0, 1) = a\u0026rsquo;.b\u0026rsquo;.c → a\u0026rsquo;.b'\n(1, 5) = a.b\u0026rsquo;.c → b.c'\n(0,2) = a\u0026rsquo;.b.c\u0026rsquo; → a\u0026rsquo;.c'\n(2,6) = a.b.c\u0026rsquo; → b.c'\n(6,7) = a.b.c → a.b\n(5,7) = a.b.c → a.c\n3 \u0026mdash; Veja quais são as expressões que podemos usar para cobrir todos os 1\nobs: se tivesse algum implicante essencial ele sempre apareceria nas expressões (de preferência sempre no começo); Além disso, poderíamos ter colocado também todos os não essenciais, o resultado seria o mesmo, mas o circuito ficaria inviável por isso pegamos apenas aqueles que são de fato necessários\nPossíveis expressões úteis\nf1(a,b,c) = a\u0026rsquo;.b\u0026rsquo; + b.c\u0026rsquo; + a.c\nf2(a,b,c) = b\u0026rsquo;.c + a\u0026rsquo;.c\u0026rsquo; + a.b\nobs: claramente existem vários outros possíveis resultados, mas aqui estamos sempre pensando em os menores circuitos, então esses satisfazem nosso requerimento\nExemplo com implicante essencial junto\ntemos aqui, dois implicantes essenciais em vermelho\ne dois implicantes não essenciais em azul\nsendo assim temos:\nEssenciais\n(2,3) = a\u0026rsquo;.b.c →a\u0026rsquo;.b\n(4,5) = a.b\u0026rsquo;.c →a.b'\nNão essenciais\n(2,6) = a.b.c\u0026rsquo; →b.c'\n(4,6) = a.b.c\u0026rsquo; →a.c'\nagora pegaremos todos os essenciais, e os não essenciais que podem participar para tapar todos os 1\nf1(a,b,c) = a\u0026rsquo;.b + a.b\u0026rsquo; + b.c'\nf2(a,b,c) = a\u0026rsquo;.b + a.b\u0026rsquo; + a.c'\nObservações\nΣ → sigma e o nome do símbolo → ele representa o somatório antes explicado\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-34-02f5i462714e/","summary":"\u003cp\u003e\u003cstrong\u003eImplicantes não essenciais\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eno artigo passado sobre esse mesmo tema, dei uma breve explicação do que\nserião implicantes não essenciais, mas agora vamos um pouco mais a fundo\nneles\u003c/p\u003e\n\u003cp\u003eos implicantes nãos essenciais, são implicantes que todos os 1 são\ncobertos por outros implicantes\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImplicantes essenciais\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eo implicante essencial é aquele em que pelo uma célula pertence a apenas\nesse implicante\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eobs: quando falo que pertence a um implicante, lembre-se sempre de que\npensamos em pegar os maiores implicantes possíveis, já que se fôssemos\npegar de 1 em 1 todos serão essenciais\u003c/p\u003e","title":"Ciências da computação dia 34"},{"content":"algoritmos lineares →algoritmos que mexem com arrays(listas)\nmatrizes → uma lista com várias listas dentro\ncaso você crie uma matriz ainda assim na memória do computador serão dados lineares\nem Python quando você trabalha com listas, uma lista nada mais é do que um ponteiro na memória, como se você usa-se um malloc em c\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-35-h60cbg881c18/","summary":"\u003cp\u003ealgoritmos lineares →algoritmos que mexem com arrays(listas)\u003c/p\u003e\n\u003cp\u003ematrizes → uma lista com várias listas dentro\u003c/p\u003e\n\u003cp\u003ecaso você crie uma matriz ainda assim na memória do computador serão\ndados lineares\u003c/p\u003e\n\u003cp\u003eem Python quando você trabalha com listas, uma lista nada mais é do que\num ponteiro na memória, como se você usa-se um malloc em c\u003c/p\u003e","title":"Ciências da computação dia 35"},{"content":"Para criarmos um somador de binário com portas lógicas precisaremos de dois circuitos, um para a soma em si e outro para o carry bit(também chamado de vai 1)\npara isso, faremos uma tabela verdade com todas as possibilidades de carry bit e de somas\nrepare que o actualCarry é o valor que será somado junto com A e B, e o carry é quando na ultima soma o resultado excede a base e seria necessário mais um bit para colocar o valor na frente\nex:\nobserve que, quando não é excedida a base o valor do vem é 0, e quando na ultima soma, (A + B + actualCarry) nesse caso o valor excede a base, resultando em 10, ou seja o 0 fica em baixo e sobe 1, no entanto estávamos somando 3 bits, e agora com esse carry precisaremos de mais 1, sendo assim o circuito do carry será responsavel por esse ultimo digito\nno entanto note uma coisa\nA e B esta duplicado\nagora observe que o actualCarry ele sempre segue essa ordem, sendo assim, temos todas as combinações possíveis com 2 bits, levando em conta tbm o carry bit\nagora, para conseguirmos o circuito podemos fazer o mapa de karnaugh para a coluna sum e carry, no entanto, o sum não é necessário já que existe uma porta lógica que já faz a soma em binário, denominada de XOR(exclusive or), então para essa vamos apenas associar portas XOR entre as entradas A, B e actualCarry\nficando algo assim:\nAgora pegando o circuito do carry com o mapa de karnaugh, temos\npegando os três implicantes e fazendo a soma de produtos temos:\nf(a,b,c) = b.c +a.b + a.c\nobs:o \u0026lsquo;c\u0026rsquo; nesse caso é o actualCarry\nagora temos nosso somador completo de 2 bits\ncomo observação deixo aqui que é possível interligarmos vários desses para termos somas maiores, basta você ligar o carry resultante de um no actualCarry no seguinte\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-36-cd6f69ie68a2/","summary":"\u003cp\u003ePara criarmos um somador de binário com portas lógicas precisaremos de\ndois circuitos, um para a soma em si e outro para o carry bit(também\nchamado de vai 1)\u003c/p\u003e\n\u003cp\u003epara isso, faremos uma tabela verdade com todas as possibilidades de\ncarry bit e de somas\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"tabela verdade para a\\u00a0soma\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-36-cd6f69ie68a2/image_74.png\"\u003e\u003c/p\u003e\n\u003cp\u003erepare que o actualCarry é o valor que será somado junto com A e B, e o\ncarry é quando na ultima soma o resultado excede a base e seria\nnecessário mais um bit para colocar o valor na frente\u003c/p\u003e","title":"Ciências da computação dia 36"},{"content":"combinação\nquando for para quebrar algo em conjuntos em que a ordem não importa, ou seja A e B é a mesma coisa que B e A\nformula → C total, conjuntos = total! / conjuntos! * (total \u0026mdash; conjuntos)!\nArranjo sem repetição\nArranjo é usado quando a ordem importa\nA total, posições = total! / (total \u0026mdash;posições)!\nArranjo com repetição\nAr total, posições = total^(posições)\nMolde Binômio de Newton\nProgressão fatorial\nobs: quando tem corta em cima e embaixo o que resta em cima é 1 e não 0. Além disso, quando digo qual é o valor ao quadrado que dá 81é +-9, agora quando digo quanto é a raiz de 81 ai é 9\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-37-hgj5fg33b821/","summary":"\u003cp\u003e\u003cstrong\u003ecombinação\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003equando for para quebrar algo em conjuntos em que a ordem não importa, ou\nseja A e B é a mesma coisa que B e A\u003c/p\u003e\n\u003cp\u003eformula → C total, conjuntos = total! / conjuntos! *\n(total \u0026mdash; conjuntos)!\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eArranjo sem repetição\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eArranjo é usado quando a ordem importa\u003c/p\u003e\n\u003cp\u003eA total, posições = total! / (total \u0026mdash;posições)!\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eArranjo com repetição\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAr total, posições = total^(posições)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMolde Binômio de Newton\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-37-hgj5fg33b821/image_82.png\"\u003e\u003c/p\u003e","title":"Ciências da computação dia 37"},{"content":"e quando uma cresce a outra cresce\ngrandezas inversamente proporcionais → quando uma diminui a outra aumenta\npara regras de 3, quando você tem grandezas inversas, você deve inverter a segunda fração\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-38-50ba5eeedfa4/","summary":"\u003cp\u003ee quando uma cresce a outra cresce\u003c/p\u003e\n\u003cp\u003egrandezas inversamente proporcionais → quando uma diminui a outra\naumenta\u003c/p\u003e\n\u003cp\u003epara regras de 3, quando você tem grandezas inversas, você deve inverter\na segunda fração\u003c/p\u003e","title":"Ciências da computação dia 38"},{"content":"","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-39-4639d7e5a9i5/","summary":"","title":"Ciências da computação dia 39"},{"content":" ensina como pensar\u0026quot; -Steve Jobs\nNo quarto dia de ciências da computação tivemos uma aula pratica usando Python. Nessa aula aprendemos o básico da linguagem como print, input, operadores aritméticos, formatação dos prints, etc.\nAntes de entrar para a parte pratica da aula, vimos alguns problemas de lógica, e o que mais gostei foi um denominado de missionários e canibais (disponível no site rachacuca). Nesse game você deve passar todos os canibais e todos os missionários de uma margem para a outra de um rio, no entanto você deve prestar a atenção nas regras:\nVocê não pode mover a jangada sem ninguém em cima. Se de um lado o numero de canibais for maior do que o de missionários, você perde. lógica de programação → sequência de passos lógicos para resolver um problema\nlinguagem de programação → linguagem feita para escrever esse passos\ninterpretador → verifica se a sintaxe que você escreveu está correta e traduz de acordo com a necessidade ele gera um executável para a máquina de cada linha\ncompilador → passa por todo o programa e gera um relatório de erros, caso não tenha erro ele gera um executável de todo o programa\nPython\ncriada em 1989 por Guido Van Rossum nome veio do seriado Monty Python, mas devido a um livro da O\u0026rsquo;Reilly que continha uma capa com uma píton o Python ganhou esse símbolo ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-4-7917efffd3d8/","summary":"\u003cblockquote\u003e\n\u003cp\u003eensina como pensar\u0026quot; -Steve Jobs\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eNo quarto dia de ciências da computação tivemos uma aula pratica usando\nPython. Nessa aula aprendemos o básico da linguagem como print, input,\noperadores aritméticos, formatação dos prints, etc.\u003c/p\u003e\n\u003cp\u003eAntes de entrar para a parte pratica da aula, vimos alguns problemas de\nlógica, e o que mais gostei foi um denominado de missionários e canibais\n(disponível no site rachacuca). Nesse game você deve passar todos os\ncanibais e todos os missionários de uma margem para a outra de um rio,\nno entanto você deve prestar a atenção nas regras:\u003c/p\u003e","title":"Ciências da computação dia 4"},{"content":"em circuitos lógicos ou seja, vale quando apenas um ou todos forem verdadeiros\nvocê usa o binômio de Newton, quando a ordem não importa\nquando você estiver fazendo um exercício de probabilidade, e tiver que pensar em duas pessoas juntas, pense como se fossem apenas uma pessoa\n0! = 1! = 1\nO nome Rh do sange, vem do nome de um macaco chamado Rhesus que tinha essa proteina\nRh- é quando a pessoa não tem a proteína Rh\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-40-jhe7c3j17i539/","summary":"\u003cp\u003eem circuitos lógicos ou seja, vale quando apenas um ou todos forem\nverdadeiros\u003c/p\u003e\n\u003cp\u003evocê usa o binômio de Newton, quando a ordem não importa\u003c/p\u003e\n\u003cp\u003equando você estiver fazendo um exercício de probabilidade, e tiver que\npensar em duas pessoas juntas, pense como se fossem apenas uma pessoa\u003c/p\u003e\n\u003cp\u003e0! = 1! = 1\u003c/p\u003e\n\u003cp\u003eO nome Rh do sange, vem do nome de um macaco chamado Rhesus que tinha\nessa proteina\u003c/p\u003e\n\u003cp\u003eRh- é quando a pessoa não tem a proteína Rh\u003c/p\u003e","title":"Ciências da computação dia 40"},{"content":"Triângulo de Pascal\nA Triângulo de pascal, nada mais é do que um triangulo infinito, formado em uma matriz (n x n).\npara a criação do triângulo é uma boa ideia ver sua representação matricial\nrepare que o primeiro valor é 1, o segundo valor é 1 pois 1 que é o valor anterior mais o anterior que é 0 é 1, o próximo é 1 também, pois 1 mais 0 é igual a 1, o próximo também é 1 pelo mesmo motivo e o seguinte é 2, e assim vai.\nNão entendeu?\nveja de outra forma:\nprimeiro vamos colocar zero para todo os espaços vazios\nagora vamos ver valor por valor\ncomo não há nada antes dessa valor, o valor por padrão é 1\nagora o segundo valor é a soma dos dois valores anteriores, no entanto só temos 1 (valor em vermelho), então esse próximo também será 1\no terceiro valor segue a mesma ideia, como na linha anterior só temos 1 valor para a soma, então o terceiro valor do triângulo também é 1\no mesmo se segue para o quarto valor\nagora no nosso quinto valor temos o valor dois, pois a soma dos dois valores acima dele são 1+1 = 2\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-41-cdccc8f5f253/","summary":"\u003cp\u003e\u003cstrong\u003eTriângulo de Pascal\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eA Triângulo de pascal, nada mais é do que um triangulo infinito, formado\nem uma matriz (n x n).\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003epara a criação do triângulo é uma boa ideia ver sua representação\nmatricial\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003erepare que o primeiro valor é 1, o segundo valor é 1 pois 1 que é o\nvalor anterior mais o anterior que é 0 é 1, o próximo é 1 também, pois 1\nmais 0 é igual a 1, o próximo também é 1 pelo mesmo motivo e o seguinte\né 2, e assim vai.\u003c/p\u003e","title":"Ciências da computação dia 41"},{"content":"O padrão se repete, o que mudará agora é a quantidade de células vizinhas e a quantidade de regiões\nErrata\nAlgum tempo atrás disse sobre maneiras de representar uma expressão booleana, e nisso disse sobre somatório e produtório, no entanto acabei me confundindo e invertendo as coisas\no somatório é a representação de todos os mintermos ou seja você colocará no somatório todos os valores que o resultado será 1\ne o produtório o inverso, todos os maxtermos serão representados lá(todos os 0)\nprodutório → π → π(0, 1, 2, 3, 4) ← exemplo, todas essas células serão 0\nsomatório → Σ → Σ(0, 1, 2, 3, 4) ← exemplo todas essas células serão 1\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-42-a76f1hffaida/","summary":"\u003cp\u003eO padrão se repete, o que mudará agora é a quantidade de células\nvizinhas e a quantidade de regiões\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003cstrong\u003eErrata\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAlgum tempo atrás disse sobre maneiras de representar uma expressão\nbooleana, e nisso disse sobre somatório e produtório, no entanto acabei\nme confundindo e invertendo as coisas\u003c/p\u003e\n\u003cp\u003eo somatório é a representação de todos os mintermos ou seja você\ncolocará no somatório todos os valores que o resultado será 1\u003c/p\u003e","title":"Ciências da computação dia 42"},{"content":"","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-43-e7cj58f33704/","summary":"\u003cp\u003e\u003cimg alt=\"Créditos:\\n\u003ca href=\\\"https://unsplash.com/@cdr6934\\\"\u003eChris\\u00a0Ried\u003c/a\u003e\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*fsbuVzuMEL3-nn1K\"\u003e\u003c/p\u003e\n\u003cp\u003estrings\u003c/p\u003e\n\u003cp\u003esubstring → um pedaço de uma string (texto)\u003c/p\u003e\n\u003cp\u003eslicing → fatiar uma string em substrings\u003c/p\u003e\n\u003cp\u003efuncão list (em Python), transforma uma string em uma lista de\ncaracteres\u003c/p\u003e\n\u003cp\u003efunção join (também em Python), pega uma lista de caracteres e junta\ntudo em uma string separando cada letra pelo caractere que você passou\npara a função join\u003c/p\u003e\n\u003cp\u003eex:\u003c/p\u003e\n\u003cp\u003ec = [\u0026ldquo;b\u0026rdquo;, \u0026ldquo;o\u0026rdquo;, \u0026ldquo;m\u0026rdquo;, \u0026quot; \u0026ldquo;, \u0026ldquo;d\u0026rdquo;, \u0026ldquo;i\u0026rdquo;, \u0026ldquo;a\u0026rdquo;]\u003c/p\u003e\n\u003cp\u003e\u0026ldquo;\u0026quot;.join(c) → \u0026lsquo;bom dia\u0026rsquo;\u003c/p\u003e","title":"Ciências da computação dia 43"},{"content":"Na ultima aula dessa matéria, começamos a ver um pouco sobre mapas de Karnaugh de quatro variáveis, que de maneira geral, é a mesma coisa do que o mapa com 3 variáveis, com apenas uma região a mais. No entanto, na aula seguinte, aprendemos um conceito novo, do qual se denomina, termo irrelevante Termo irrelevante\nO termo irrelevante, é, como o nome já supõe, um termo em que seu valor não importa, sendo assim, podemos utiliza-lo como bem entendermos, adicionando 0 ou 1 como seu valor para deixar mais fácil nossa vida.\nGeralmente, seu essa posição no mapa é representada pelo valor X, já que o valor que será atribuído será uma incógnita que nós devemos preencher da melhor maneira.\nNo exemplo que fiz acima, estou considerando todos os X como o valor 1 mas, caso você prefira, você pode considerar 0, use sempre aquilo que lhe fará chegar no circuito mínimo.\nAgora, vamos encontrar os implicantes mas, antes disso, note uma coisa:\nEsses quatro cantos também são um implicante, uma vez que podemos fazer o seguinte:\nFazendo isso, podemos juntar as colunas que estão em cima com as de baixo e fazer um implicante maior com quatro células.\nA partir disso, podemos ver todos os implicantes que estão nesse mapa, contudo há mais duas regras para os termos irrelevantes.\n1 \u0026mdash; Não pode haver um implicante composto apenas por termos irrelevantes, ou seja:\nEsse implicante acima não é válido!\n2 \u0026mdash; Um implicante em que as células que o fariam ser um implicante essencial (célula em que nenhum outro implicante sobrepõe) são termos irrelevantes, o transformam em um implicante não essencial. Ou seja:\nO implicante em azul, possui uma célula que não está sendo tomada por outro implicante (o implicante vermelho pega os dois valores 1, célula 0 e 4). No entanto, o valor desta célula é X, sendo assim esse implicante será não essencial.\nApós entender essas regras, o resto é completamente igual ao que já foi feito anteriormente, basta pegar todos os implicantes, separa-los entre essenciais e não essenciais, fazer as expressões lógicas e pronto.\nPor fim, você pode acabar encontrando expressões lógicas que lhe passam as células que possuem valores irrelevantes como neste exemplo:\nf(a,b,c,d) = Π(1,3,6,7,9,11,12) * Πx(2,5,8,13)\nNesse exemplo, estamos usando o produtório (símbolo Π ou ainda π), ou seja, todas essas linhas terão o valor 0, mas note que há um termo multiplicado Πx(2,5,8,13) , esse termo representa os valores irrelevantes, sendo assim nas células 1,3,6,7,9,11,12 você colocará o valor 0, e em 2,5,8,13 a letra X.\nObservações\nGeralmente implicantes primos possuem no máximo 2⁴ células, ou seja 16 valores, há a possibilidade de maiores, mas dificilmente será necessário, pois o mapa se tornaria muito grande e difícil de trabalhar.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-44-48h93bfa8a3i/","summary":"\u003ch4 id=\"na-ultima-aula-dessa-matéria-começamos-a-ver-um-pouco-sobre-mapas-de-karnaugh-de-quatro-variáveis-que-de-maneira-geral-é-a-mesma-coisa-do-que-o-mapa-com-3-variáveis-com-apenas-uma-região-amais\"\u003eNa \u003ca href=\"https://dpbm.medium.com/ci%C3%AAncias-da-computa%C3%A7%C3%A3o-dia-42-1938109eeca\"\u003eultima aula dessa matéria\u003c/a\u003e, começamos a ver um pouco sobre mapas de Karnaugh de quatro variáveis, que de maneira geral, é a mesma coisa do que o mapa com 3 variáveis, com apenas uma região a mais.\u003c/h4\u003e\n\u003ch4 id=\"no-entanto-na-aula-seguinte-aprendemos-um-conceito-novo-do-qual-se-denomina-termo-irrelevante\"\u003eNo entanto, na aula seguinte, aprendemos um conceito novo, do qual se denomina, \u003cem\u003e\u003cstrong\u003etermo irrelevante\u003c/strong\u003e\u003c/em\u003e\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003eTermo irrelevante\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eO termo irrelevante, é, como o nome já supõe, um termo em que seu valor\nnão importa, sendo assim, podemos utiliza-lo como bem entendermos,\nadicionando 0 ou 1 como seu valor para deixar mais fácil nossa vida.\u003c/p\u003e","title":"Ciências da computação dia 44"},{"content":" créditos: andre zibetti\nDistribuição normal\nNesta aula, começamos a ver sobre distribuição normal, do qual é um método utilizado para descrever probabilidades em conjuntos de espaços contínuos.\nAntes de começar vamos ver alguns símbolos e termos que serão usados:\nAlgo não pontual → Algo que pode ser descrito de diversas maneiras para que seja verdade, exemplo: P(produzir mais de 100 quilos de farinha de trigo em uma hora), esse mais de 100 quilos, pode ser 100.01, 100.00000001, 101, etc. existem diversos valores que satisfazem esse requerimento;\nClasses → Intervalos de valores/categorias que há em um conjunto de dados. Esses são dados que estão em um intervalo, ou seja seus valores não se repetem;\nFrequência (fi) → Quantidade de vezes que algo aparece. No caso com classes a quantidade de vezes que os valores estão em certo intervalo;\nMediana (xi) → Valor do meio de um conjunto de dados. Como iremos usar Classes que possuem valores em um certo intervalo, não precisamos ver todos os valores pegar o do meio ou se o conjunto for par pegar os dois do meio e dividir por dois, por serem dados que não se repetem podemos usar a seguinte fórmula (primeiro valor+último valor) / 2;\nTotal de frequências (n) → Soma de todos os valores das frequências;\nSomatório (∑) → Ferramenta matemática para representar que algo deverá ser somado, usado em conjuntos. Exemplo\nx =1, 2, 3, 4, 5\n∑x = 1 + 2 + 3 + 4 + 5\nMédia (x̅) → Demonstra a onde os dados estão concentrados. No nosso caso iremos usar a média ponderada que se dá pela seguinte equação\nx̅ = (∑ xi.fi)/n\nDesvio (di) → Distância que a média está da mediana. Por ser uma distância, não há a possibilidade de ser um valor negativo, por isso essa equação está contida entre um módulo(||), sendo assim a equação será: di = |xi \u0026mdash; x̅ |;\nDesvio médio(Dm) → Média dos desvios. Como na média, o Desvio médio também é calculado usando a média ponderada da seguinte forma:\nDm = (∑ di.fi)/n\nVariância(S²) → Indica o quão longe seus valores estão da média. Sua formula é a seguinte: S² = (∑ di².fi)/n \u0026mdash; 1.\nObs: note que S²é o símbolo da variância, ou seja, você não deverá utilizar a raiz do resultado;\nDesvio Padrão(S) → Indica o quão uniforme seus dados são. Sua equação é:\nS = √(S²) ← S² é a variância;\nCoeficiente de Variação(Cv) →Descreve o quanto nossa média é verdadeira, ou seja se nossa média foi resultado de varias vezes o mesmo número aparecer, ou se por algum acaso outros números acabaram se juntando e dando essa média. Esse valor nunca passa de 1, e quanto menor ele for, mais verdadeira é sua média. Sua formula é:\nCv = S / x̅\nvalores de Cv\n0 → todos os valores são os mesmos, por isso sua média foi essa\n≤ 0.5 → seus valores variam, mas no geral ficam na média\n\u0026gt; 0.5 → valores variam muito, dados completamente dispersos e oscilantes\nAgora, depois desse mini resumo do que será usado para entender melhor dados, vamos ver um exemplo:\nImagine que você tenha uma tabela com os seguintes dados:\nSeu objetivo aqui é encontrar o valor de Cv, sendo assim para isso iremos usar todas aquelas equações que passei anteriormente.\n1 \u0026mdash; Encontrar os valores de xi\n(2+6 )/ 2 = 4\n(8+12)/2 = 10\nxi = 4, 10\n2 \u0026mdash; Fazer a média\nx̅ = (∑ xi.fi)/n\nvalores de xi.fi →16, 60\n∑ xi.fi = 76\nn = 4 + 6 = 10\nx̅ = 76 / 10\nx̅ = 7.6\n3 \u0026mdash; Fazer o desvio\ndi = |xi \u0026mdash; x̅ |\ndi = |4\u0026ndash;7.6| → 3.6\ndi = |10\u0026ndash;7.6| → 2.4\ndi = 3.6, 2.4\n4 \u0026mdash; Fazer desvio o desvio médio\nDm = (∑ di.fi)/n\nvalores de di.fi →14.4, 14.4\n∑di.fi = 28.8\nDm = 28.8 / 10\nDm = 2.88\n5 \u0026mdash; Fazer a variância\nS² = (∑ di².fi)/n \u0026mdash; 1.\nvalores di² →12.96, 5.76\nvalores de di².fi →51.84, 34.56\nobs: aqui ao invés de você fazer primeiro os valores de di² para depois multiplicar com fi, você poderia pegar os valores de di.fi e multiplicar cada um deles pelo seu di de novo\n∑ di².fi = 86.4\nS² = 86.4/9\nS² = 9.6\n6 \u0026mdash; Fazendo o desvio padrão\nS = √(S²)\nS = *√*9.6\nS = 3.09\n7 \u0026mdash; Fazendo o coeficiente de variação\nCv = S / x̅\nCv = 3.09 / 7.6\nCv = 0.4\nPronto conseguimos encontrar o valor de Cv, mas agora você pode estar pensando, para que eu usaria isso?\nBem, você pode usar para diversas coisas que possuam dados em intervalos,e caso você queira entender melhor como todos eles se comportam, podendo ser usado por exemplo, para vendas, te mostrando como suas vendas vão indo (possuem uma certa regularidade, vende a mesma quantidade todo mês, geralmente certo mês vende mais do que outro, etc.), com avaliações, saber se todos estão te dando notas altas ou você possui tantas notas que no geral sua media fica boa, etc. Com essa ferramentas, você pode utilizar para casos como esses e ter alguns insights de como você pode agir no seu dia a dia.\nNo entanto, existe mais um caso que você pode acabar se deparando.\nExemplo:\nA média de emails é de 80/dia, o desvio padrão é de 20, qual a probabilidade da quantidade de e-mails enviados em um dia ser \u0026gt;70\npara isso você precisará de três coisas\n1 . z = (x \u0026mdash; x̅ )/S\ncom essa formula você encontrará em qual posição do eixo X da curva de Gauss seus dados estão\nfazendo com os dados acima\nx = 70\nx̅ = 80\nS = 20\n(70\u0026ndash;80̅ )/20 → -0.5\n2. Colocar z na curva de Gauss\nA curva de gauss(distribuição normal)é um modelo matemático que tenta mostrar graficamente a distribuição de dados de forma que é possível notar um certo padrão em seus comportamento a partir do crescimento desses dados.\nAgora faça um modelo da curva de Gauss parecido com esse:\nA partir disso, vamos pegar o valor que achamos para z e vamos colocar no gráfico.\n2. Encontrar a área do gráfico\nAgora, com o gráfico podemos pensar algumas coisas,como queremos os valores maiores que 70, podemos pensar no símbolo do \u0026gt; como uma seta que aponta para a direita, sendo assim iremos pintar tudo que está adiante do ponto -0.5 do gráfico, caso fosse valores menores é só fazer o inverso\nAgora podemos pensar. Se o gráfico está dividido no meio, e tudo depois do meio está pintado, então temos 50% + o valor de 0 até -0.5 em porcentagem, para encontrar esse valor é necessário uma tabela\nUsando essa tabela iremos até a linha do 0.5 e como a segunda casa decimal de 0.50 é 0, então pegaremos o primeiro valor (coluna 0), valor 0.1915\nAgora multiplicaremos por 100 e teremos 19.15%, somando com os outros 50%, temos 69.15% de chance de a média de e-mails enviados em um dia ser \u0026gt;70\nObservações\nC6,5 = C 6,1\nou seja a combinação sempre será a mesma quando, C x,x-y = Cx, y\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-45-he4f8bdcicb1/","summary":"\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\ncréditos: \u003c!-- raw HTML omitted --\u003eandre zibetti\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003cp\u003eDistribuição normal\u003c/p\u003e\n\u003cp\u003eNesta aula, começamos a ver sobre distribuição normal, do qual é um\nmétodo utilizado para descrever probabilidades em conjuntos de espaços\ncontínuos.\u003c/p\u003e\n\u003cp\u003eAntes de começar vamos ver alguns símbolos e termos que serão usados:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eAlgo não pontual\u003c/strong\u003e → Algo que pode ser descrito de diversas maneiras\npara que seja verdade, exemplo: P(produzir mais de 100 quilos de farinha\nde trigo em uma hora), esse mais de 100 quilos, pode ser 100.01,\n100.00000001, 101, etc. existem diversos valores que satisfazem esse\nrequerimento;\u003c/p\u003e","title":"Ciências da computação dia 45"},{"content":"\nCalculo de ângulos\nNa escola geralmente aprendemos sobre o triângulo retângulo e junto com o teorema de Pitágoras começamos a ver sobre funções trigonométricas (seno, cosseno, tangente).\nsendo assim as funções que estamos acostumados a ver são:\nSen(α) = cateto oposto / hipotenusa\nCos(α) = cateto adjacente / hipotenusa\nTg(α) = cateto oposto / cateto adjacente\nNo entanto, caso quiséssemos encontrar o inverso, ou seja qual ângulo possui certo valor como Tg, Sen ou Cos, teríamos que usar tabelas como as seguintes:\nE ainda lembrar ângulos como 0, 90, 180, 270, 360, que para isso é bom se relembrar do circulo trigonométrico\nLembrando que a tangente de 90 e 270 não existem pois esses ângulos formam retas paralelas com a reta da tangente por isso não existem. Podemos pensar nisso também se usarmos a formula tg = sen/cos, veremos também que 1/0 e -1/0 não existem\nobs: essa fórmula funciona pois, a tg = cateto oposto / cateto adjacente, e a reta do seno e a reta vertical que por sua vez também representa o cateto oposto do ângulo teta, e o mesmo vale para o cosseno, a reta do cosseno e a horizontal que por sua vez também é o cateto adjacente à teta.\nNo entanto, para acharmos esses ângulos não precisamos usar essas tabelas, apenas usar a inversa de cada uma dessas funções (também chamado de arco dessas funções)\nentão se sen(30) = 1/2\nentão arcsen(1/2) = 30\nse cos(60) = 1/2\nentao arccos(1/2) = 60\nse tg(45) = 1\nentao arctg(1) =45\nobs: essa função inversa também pode ser representada como: sen⁻¹, cos⁻¹ e tg⁻¹\nEliminação de Gauss\nComo aprendemos antes, em sistemas lineares geralmente usamos o método da soma, do qual pegamos os sistemas e queremos transformar uma das incógnitas em 0, e depois terminar usando uma equação simples para achar a outra incógnita. Isso funciona perfeitamente para duas variáveis.\nJá para três, esse método é mais complexo de ser feito, sendo assim é usada a regra de Cramer para resolver o sistema.\nContudo, conforme o número de variáveis vão aumentando, vai ficando cada vez mais difícil de resolver a regra de Cramer então, utilizamos a eliminação de Gauss para sistemas lineares com mais de 3 variáveis, isso não é uma regra, mas é o que geralmente é feito.\nO sistema linear que estarei usando aqui é o seguinte:\nx + 2y =5\n2x \u0026mdash; 2y + 3z = 9\n3x + 3y \u0026mdash; 2y = 3\nantes de começarmos com a eliminação de Gauss, será necessário fazer a regra de Cramer para saber se o sistema terá solução. Então, para isso, faça:\npegando os valores que acompanham as variáveis, transferindo-os para uma matriz e duplicando as primeiras duas colunas temos o esqueleto do que precisamos para resolver a regra de cramer. Com isso montado podemos pegar as diagonais principais, multiplicar os valores e somar com os outros. Após isso, fazemos o mesmo para as diagonais secundárias e por fim subtraimos o valor obtido na soma das diagonais principais pelas secundárias e obtemos o determinante (D).\nCom esse valor em mãos podemos saber quantas soluções o sistema terá, como o valor foi diferente de 0, terá 1 solução e poderemos continuar com a eliminação de Gauss.\nFazendo agora a eliminação de Gauss, pegamos todos os valores do sistema e colocamos em uma matriz da seguinte forma:\nA partir de agora, devemos escolher um pivot,esse número não importará muito, mas ele será usado aqui para termos um norte. Geralmente esse número é o primeiro da matriz nesse caso o 1.\nCom isso devemos analisar que equação podemos usar para fazer com que o número abaixo do pivot se transforme em zero usando apenas as operações (+,-,*)\nobservando um pouco podemos chegar na ideia da equação: (valor da linha 2) \u0026mdash; 2 * (valor da linha 1)\nIsso pois ao colocar o 2 como o valor da linha 2 e como o valor da linha 1 e realizar a equação chegamos ao valor 0.\nEntão realizamos essa operação para todos os valores da linha dois\nCom esses valores substituimos a linha 2\ne escolhemos o novo pivot que deve ser o valor da linha + 1 e coluna + 1, nesse caso o valor -6\nE novamente escolhemos uma equação que faça os valores abaixo e antes do pivot se tornem 0, nesse caso (L3\u0026ndash;3*L1)\nPegamos esses valores colocamos na terceira linha e novamente vamos procurar uma equação que faça o valor em baixo do pivot se tornar zero, já que a equação feita anteriormente foi para fazer o valor antes do pivot se tornar 0. Nesse caso a equação que satisfaz é a 2 * L3 \u0026mdash; L2\nEssa é a matriz final, veja que no canto inferior esquerdo temos uma espécie de triângulo com 3 zeros, esse é o momento para parar (quando seu triângulo de zeros tiver o mesmo número de linhas).\nCom essa matriz vamos encotrar os resultados.\nRepare que cada coluna é relativa a uma variável do sistema linear. Então podemos pegar esses valores e montar um novo sistema da seguinte forma:\nCom isso agora é so resolver!\nResolvendo as equações temos que:\nx = 29/21\ny = 38/21\nz = 23/7\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-46-046bcjbb0fdc/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*xSVYVIZpbty6_I97\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eCalculo de ângulos\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eNa escola geralmente aprendemos sobre o triângulo retângulo e junto com\no teorema de Pitágoras começamos a ver sobre funções trigonométricas\n(seno, cosseno, tangente).\u003c/p\u003e\n\u003cp\u003esendo assim as funções que estamos acostumados a ver são:\u003c/p\u003e\n\u003cp\u003eSen(α) = cateto oposto / hipotenusa\u003c/p\u003e\n\u003cp\u003eCos(α) = cateto adjacente / hipotenusa\u003c/p\u003e\n\u003cp\u003eTg(α) = cateto oposto / cateto adjacente\u003c/p\u003e\n\u003cp\u003eNo entanto, caso quiséssemos encontrar o inverso, ou seja qual ângulo\npossui certo valor como Tg, Sen ou Cos, teríamos que usar tabelas como\nas seguintes:\u003c/p\u003e","title":"Ciências da computação dia 46"},{"content":"\nalgoritmos gulosos\nOs algoritmos gulosos, são algoritmos usados para escolher sempre o melhor valor, seja este o maior/menor, mais rápido, etc (tudo dependendo do seu objetivo).\nMesmo parecendo muito bom, temos um problema, o algoritmo ele não pensa no futuro e muito menos volta passos para trás (não possui backtracking), ou seja, a cada vez que o programa iterar o algoritmo vai enxergar apenas os dados disponíveis naquele momento e pegar aquele que parece mais apetitoso (melhor para o objetivo dele).\nCom isso, ele pode acabar não alcançando a melhor solução (global optimal).\nSendo assim a duas coisas que você deve pensar antes de usar esse algoritmo:\nA cada iteração do programa, se eu escolher o valor mais apetitoso eu alcançarei a melhor solução? A cada pequeno problema (bloco de código ou mesmo iteração) há o valor (local optimal) que me levará ao global optimal? se esses dois fatores forem verdadeiros você poderá utilizar tranquilamente o algoritmo guloso.\nExistem alguns algoritmos famosos que usam essa tatica, como o algoritmo Dijkstra\u0026rsquo;s, que tenta encontrar o menor caminho para um local e o algoritmo de Huffman que tenta encodar mensagens baseadas em frequencias e probabilidades de um caractere aparecer.\nAlém de alguns problemas como o do caixeiro viajante que também podem ser resolvidos usando algoritmos gulosos.\nMuito usado também em alguns algoritmos de inteligencia artifical como A* e o prórpio algoritmo de Dijkstra.\nUm exemplo simples que podemos pensar para algoritmos gulosos é o problema do trco do mercado.\nImagine que você tenha que dar troco para uma pessoa usando moedas, e você quer encontrar a maneira mais fácil de fazer isso.\nA maneira como o algoritmo guloso agiria seria, pegando primeiro os valores maiores como, R$1,00 e R$0,50, e depois partindo de forma descrecente para os valores menores como R$0,10 e R$0,05.\nReferências:\nGreedy Algorithms | Brilliant Math \u0026amp; Science Wiki\n*A greedy algorithm is a simple, intuitive algorithm that is used in optimization problems. The algorithm makes the\u0026hellip;*brilliant.org\nMétodo guloso\n*A greedy algorithm starts with a solution to a very small subproblem and augments it successively to a solution for the\u0026hellip;*www.ime.usp.br\nA* Search | Brilliant Math \u0026amp; Science Wiki\n*A* (pronounced as \u0026quot;A star\u0026quot;) is a computer algorithm that is widely used in pathfinding and graph traversal. The\u0026hellip;*brilliant.org\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-47-a5a808chdj02/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*zlKa5GMb08o7yokz\"\u003e\u003c/p\u003e\n\u003cp\u003ealgoritmos gulosos\u003c/p\u003e\n\u003cp\u003eOs algoritmos gulosos, são algoritmos usados para escolher sempre o\nmelhor valor, seja este o maior/menor, mais rápido, etc (tudo dependendo\ndo seu objetivo).\u003c/p\u003e\n\u003cp\u003eMesmo parecendo muito bom, temos um problema, o algoritmo ele não pensa\nno futuro e muito menos volta passos para trás (não possui\nbacktracking), ou seja, a cada vez que o programa iterar o algoritmo vai\nenxergar apenas os dados disponíveis naquele momento e pegar aquele que\nparece mais apetitoso (melhor para o objetivo dele).\u003c/p\u003e","title":"Ciências da computação dia 47"},{"content":"Bem, no artigo do dia 45 comecei a falar sobre distribuição normal. No entanto ainda faltaram alguns detalhes.\nDigamos que você queira calcular a área que está na beira do gráfico, para isso faça 50-x dessa forma:\nLembrando que a formula de z antes descrita calcula do zero até o resultado, então x sempre será do zero para frente/trás.\nAgora digamos que você queira calcular o valor que está entre outros dois valores, digamos P(7 \u0026lt; x \u0026lt; 10)\npara você fazer isso faça\ncalcule um z para cada um dos dois valores (7 e 10) 2. coloque eles no grafico\n3. veja como esses dados esta no grafico\na. Se eles estiverem do mesmo lado faça (área do maior valor \u0026mdash; área do menor valor):\nb. Se eles estiverem cada um de um lado basta somar os valores das áreas:\nPor fim, digamos que você tenha um problema que quer o inverso, ele quer por exemplo saber 75% do grafico representa quanto do nosso problema. Nesse caso faça o seguinte:\nPrimeiramente entenda que para esses casos as porcentagens vão da esquerda para a direita de ordem crescente, com isso pintaremos os 75% da seguinte forma:\nagora você pega os 25% e encontra naquela tabela a probabilidade mais proxima de 25% (ou 0,25) que não ultrapasse esse valor, após isso pegue o valor de Z correspondente.\nEsses valores são:\nprobabilidade mais próxima: 0,2486\nZ = 0,67\ncom esses valores você irá colocar na formula de Z:\nz = (x \u0026mdash; x̅ ) / S\nsendo que para esse exemplo:\nx̅ = 8, S = 2 e Z = 0,67\nentão:\n0,67 = (x \u0026mdash; 8) / 2\n2*0,67 = x \u0026mdash; 8\n1,34 = x \u0026mdash; 8\nx = 1,34 + 8\nx = 9,34 (valor que 75% representa)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-48-238jb4e9h3j7/","summary":"\u003cp\u003eBem, no artigo do \u003ca href=\"https://dpbm.medium.com/ci%C3%AAncias-da-computa%C3%A7%C3%A3o-dia-45-fd92587002a6\"\u003edia\n45\u003c/a\u003e\ncomecei a falar sobre distribuição normal. No entanto ainda faltaram\nalguns detalhes.\u003c/p\u003e\n\u003cp\u003eDigamos que você queira calcular a área que está na beira do gráfico,\npara isso faça 50-x dessa forma:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eLembrando que a formula de z antes descrita calcula do zero até o\nresultado, então x sempre será do zero para frente/trás.\u003c/p\u003e\n\u003cp\u003eAgora digamos que você queira calcular o valor que está entre outros\ndois valores, digamos P(7 \u0026lt; x \u0026lt; 10)\u003c/p\u003e","title":"Ciências da computação dia 48"},{"content":"\nIniciando uma nova matéria\nNo quadragésimo nono dia de ciências da computação começamos a ver um pouco sobre o que seria a matéria de sistemas digitais e já começamos a ver os subsistemas que estão presentes nos computadores.\nAntes de tudo, vamos pensar em como os sistemas que antes aqui apresentei eram formados.\nEm sua totalidade, os sistemas que aqui mostrei eram todos combinacionais, ou seja a saída de cada circuito dependia exclusivamente de suas entradas.\nNesse exemplo de um circuito somador, o resultado do SUM e do CARRY dependem de quais valores foram colocados em A e B, sendo assim para cada valor que colocarmos no começo teremos saídas diferentes.\nContudo, em circuitos sequenciais isso é um pouco diferente, claramente as entradas importam para o resultado, mas aqui um outro circuito é incorporado ao principal, sendo este novo um circuito de memória, agora o resultado anterior é armazenado e pode ser usado para entregar o resultado.\nAqui temos o mesmo circuito de antes, desta vez com dois flip-flops do tipo D nas saídas de cada porta lógica, esses componentes adicionados são usados para armazenar os resultados, para caso seja necessário usá-los mais tarde basta pegar a saída Q (ou dependendo da aplicação ~Q) e pronto, temos um valor armazenado e um circuito sequencial.\nOutro tema que foi abordado no começo da aula mas de uma maneira superficial foram os autômatos. Para quem é entusiasta na área de computação, provavelmente já ouviu essa palavra em algum lugar, e para explicar isso de uma maneira bem resumida, um autômato \u0026quot;é um grafo dirigido que representa todos os estados e as possíveis transições entre eles\u0026quot;.\nEsse exemplo de autômato possui dois estados (S1 e S2), e as flechas mostram as transições de estados.\nPrincipais subsistemas de um computador Os computadores são compostos por diversos sistemas e subsistemas, aqui listarei alguns que foram passados em aula.\nMemória principal (memória RAM)\nArmazena e lê dados de forma rápida, por ser de acesso randômico que permite acessar os dados diretamente pelo seu endereço, sem a necessidade da leitura das áreas da memória; Volátil \u0026mdash; quando não há energia todos os dados são deletados permanentemente; Tudo que está sendo executado possui uma instância nela (uma cópia); Local onde os comandos dos programas são armazenados em tempo de execução. UES (unidade de entrada e saída I/O)\nUnidade responsável por controlar dispositivos de entrada e saída (mouse, teclado, monitor, etc.). UCP (unidade central de processamento CPU)\nLocal onde tudo é executado e processado. Barramentos (BUS)\nPartes responsáveis por interligar os sistemas e transportar informações para eles. Barramento de Dados\nBarramento responsável por carregar os dados (valores de variáveis e semelhantes) para os sistemas; Seu tamanho dirá a quantidade de bits que serão processados de uma vez, isso se ele estiver dentro do máximo que a arquitetura da UCP aguenta, em uma UCP de 64bits podemos ter um bus de dados de até 64bits por exemplo. Barramento de endereços\nLeva os endereços de funções e afins para os sistemas e subsistemas do computador. Barramento de Controle\nControla os instantes em que cada função deve ser executada. Subsistemas da UCP Além de todos os sistemas que um computador possui, dentro de cada um deles podemos listar diversos subsistemas que os compõem, e como a UCP é a parte principal, listarei aqui alguns de seus subsistemas.\nRegistradores gerais\nGuardam dados de entrada de programas. ULA (unidade lógica aritmética)\nRealiza cálculos e operações; Possui duas entradas e uma saída. Registrador Acumulador\nArmazena os resultados obtidos pela ULA, temporariamente. Comparador de magnitude\nResponsável por executar funções de comparação, retornando verdadeiro ou falso para elas; Usado para comandos IF e verificações em loops. Contador UP-DOWN\nIncrementa ou decrementa 1 do valor de entrada; Usado para controle de interrupções de iterações e semelhantes. Multiplex\nComponente usado para encaminhar os bits para uma certa área da máquina dependendo de seu valor de entrada. Registrador de instrução\nGuarda o último comando executado pela UCP (a palavra desse comando, que seu tamanho depende exclusivamente do tamanho do barramento de dados) Contador de programa\nParte responsável por dizer qual o endereço da próxima função a ser executada; Possui em seu interior um registrador contador com uma entrada e uma saída; O tamanho do endereço armazenado depende totalmente do tamanho do BUS de endereços. Registrador de Status\nResponsável por dizer qual o status de todas as atividades que podem ser realizadas pela máquina; Contém flags da arquitetura como: Underflow, Overflow, Division by zero, etc; Seu tamanho depende da quantidade de flags da arquitetura usada. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-49-d2ff00a9jjf/","summary":"\u003cp\u003e\u003cimg alt=\"MARK I\\u200a\u0026mdash;\\u200acomputerhistory.org\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-49-d2ff00a9jjf/image_126.png\"\u003e\u003c/p\u003e\n\u003cp\u003eIniciando uma nova matéria\u003c/p\u003e\n\u003cp\u003eNo quadragésimo nono dia de ciências da computação começamos a ver um\npouco sobre o que seria a matéria de \u003cstrong\u003esistemas digitais\u003c/strong\u003e e já\ncomeçamos a ver os subsistemas que estão presentes nos computadores.\u003c/p\u003e\n\u003cp\u003eAntes de tudo, vamos pensar em como os sistemas que antes aqui\napresentei eram formados.\u003c/p\u003e\n\u003cp\u003eEm sua totalidade, os sistemas que aqui mostrei eram todos\n\u003cstrong\u003ecombinacionais\u003c/strong\u003e, ou seja a saída de cada circuito dependia\n\u003cstrong\u003eexclusivamente\u003c/strong\u003e de suas entradas.\u003c/p\u003e","title":"Ciências da computação dia 49"},{"content":"usando algoritmos e pensamos levemente sobre como escrever um código bom.\nMelhorando o código Toda vez que você invoca alguma variável isso consome 1 pulso de clock, sendo assim, sempre que possível tente reduzir seu código exemplo:\nperimetro = 2 * comprimento + 2 * largura\nesse exemplo a cima consome 5 pulsos de clock sendo 2 para invocar cada variável e 3 para cada operação aritmética\nperimetro = 2 *(comprimento + largura)\njá neste você consumirá 4 pulsos de clock, 2 para cada variável e 2 para cada operação aritmética\nOutro fator importante é usar constantes já que elas não consomem processamento nem memória\nentão ao invés de fazer isso:\na = 10 / 100\nJá que consumirá um pulso de clock, faça:\na = 0.1\nJá que não consumirá nada\n\\n → caractere usado para pular um linha\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-5-9g1j91cgc4ic/","summary":"\u003cp\u003eusando algoritmos e pensamos levemente sobre como escrever um código\nbom.\u003c/p\u003e\n\u003ch3 id=\"melhorando-ocódigo\"\u003eMelhorando o código\u003c/h3\u003e\n\u003cp\u003eToda vez que você invoca alguma variável isso consome 1 pulso de clock,\nsendo assim, sempre que possível tente reduzir seu código exemplo:\u003c/p\u003e\n\u003cp\u003eperimetro = 2 * comprimento + 2 * largura\u003c/p\u003e\n\u003cp\u003eesse exemplo a cima consome 5 pulsos de clock sendo 2 para invocar cada\nvariável e 3 para cada operação aritmética\u003c/p\u003e\n\u003cp\u003eperimetro = 2 *(comprimento + largura)\u003c/p\u003e","title":"Ciências da computação dia 5"},{"content":"No quinquagésimo dia de ciências da computação relembramos algumas conceitos matemáticos, dos quais listarei abaixo.\nSoma e subtração dentro de um radical Sempre que houver uma soma ou subtração dentro de uma raiz, sempre calcule primeiro o que está dentro e depois faça a raiz desse valor.\nexemplo: √3+1 = √4 = 2\nMultiplicação e divisão dentro de um radical Quando você tiver uma multiplicação ou uma divisão dentro de um radical, você pode separar os elementos.\nexemplos:\n√25 * 4 = √25 * √4 = 5 * 2 = 10\n√25/4 = √25 / √4 = 5/2\nMultiplicação de radicais Da mesma maneira em que você pode separar elementos quando dentro de um radical há uma multiplicação, quando você encontra uma multiplicação de radicais você pode fazer o caminho inverso.\nexemplo: √25 * √4 = √25 * 4 = √100 = 10\nNúmeros elevados à zero Nós, aprendemos na escola que todo número elevado à 0 é igual a 1, mas nem sempre, tome cuidado. Todos os números diferentes de zero resultarão em 1, no entanto quando elevar 0⁰ o resultado será 0 ou você dizer que isso é uma indefinição matemática, uma vez que os conceitos de \u0026ldquo;todo número elevado a 0 é 1\u0026rdquo; e \u0026ldquo;zero elevado à qualquer valor é zero\u0026rdquo; se chocam.\nRacionalização Com apenas um radical no denominador Sempre que houver um radical o denominador de uma fração, faça o seguinte:\nexemplo: 1/√3 = 1 * √3 / √3 * √3 = √3/√9 = √3/3\nRacionalização Com uma multiplicação no denominador Quando houver uma multiplicação no denominador faça:\nexemplo: 1/2√5 = 1*√5 / 2√5 * √5 = √5/2√25 = √5/2*5 = √5/10\nRacionalização Com soma ou subtração no denominador Quando houver uma soma ou subtração no denominador multiplique em cima e em baixo pelo conjugado da expressão.\nexemplo:\n1/2+√5\n1 * 2 \u0026mdash; √5 / 2 + √5 * 2 \u0026mdash; √5\n2-√5 /2² \u0026mdash; (√5)²\n2-√5 / 4\u0026ndash;5\n2-√5(*-1)/-1(*-1)\n√5\u0026ndash;2\nObs: Na racionalização você não precisa necessariamente multiplicar em cima e em baixo pelo radical que está no denominador, aqui usei apenas os que estavam no denominador por ser raízes quadradas e com números extremamente pequenos, use o que for necessário para chegar ao resultado correto.\nMultiplicação da soma pela diferença quando você tiver que fazer uma conta como essa: (x-1)*(x+1), você tem duas saídas:\n1 \u0026mdash; fazer distributiva\nx * x + x * 1 \u0026mdash; 1*x \u0026mdash; 1 * 1\nx² + x \u0026mdash; x -1\nx² \u0026mdash; 1\n2 \u0026mdash; fazer o macete\nchame o primeiro termo que aparece nos parênteses de a(no caso o x) e o segundo de b(no caso o 1)\ne siga essa regra\na² \u0026mdash; b²\nou seja\nx²-1²\nx²-1\nQuadrado da soma Quando você se deparar com uma equação desse tipo: (x+1)² ou (x+1)*(x+1), você também possui duas saídas:\n1 \u0026mdash; fazer distributiva\nx * x + x * 1+1*x +1 * 1\nx² + x+x +1\nx²+2x+1\n2 \u0026mdash; fazer o macete\nchame o primeiro termo que aparece nos parênteses de a(no caso o x) e o segundo de b(no caso o 1)\ne siga essa regra\na²+2ab+b²\nou seja\nx² + 2*x*1 + 1²\nx² + 2x + 1\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-50-dc2j7cbej85e/","summary":"\u003cp\u003eNo quinquagésimo dia de ciências da computação relembramos algumas\nconceitos matemáticos, dos quais listarei abaixo.\u003c/p\u003e\n\u003ch3 id=\"soma-e-subtração-dentro-de-umradical\"\u003eSoma e subtração dentro de um radical\u003c/h3\u003e\n\u003cp\u003eSempre que houver uma soma ou subtração dentro de uma raiz, sempre\ncalcule primeiro o que está dentro e depois faça a raiz desse valor.\u003c/p\u003e\n\u003cp\u003eexemplo: √3+1 = √4 = 2\u003c/p\u003e\n\u003ch3 id=\"multiplicação-e-divisão-dentro-de-umradical\"\u003eMultiplicação e divisão dentro de um radical\u003c/h3\u003e\n\u003cp\u003eQuando você tiver uma multiplicação ou uma divisão dentro de um radical,\nvocê pode separar os elementos.\u003c/p\u003e","title":"Ciências da computação dia 50"},{"content":"\nEm meio ao quinquagésimo primeiro dia de ciências da computação, foi iniciada uma nova matéria, comunicação e pensamento crítico, por ser uma matéria um pouco mais reflexiva acabei não fazendo muitas anotações, mas aquilo que achei importante listarei abaixo, aproveite :)\nCerca de 70% das pessoas que pediram demissão de seus empregos são por questões de relacionamento no trabalho\nAlguns termos Senso comum \u0026mdash; fazer algo que foi muito difundido pela sociedade mesmo sem saber o porque.\nDireitos humanos e o multiculturalismo \u0026mdash;existem coisas que para uma cultura é certo, mas para outra não.\nOrganização jurídica \u0026mdash; empresas, corporações, fundações, escolas, etc.\nElementos da comunicação Pessoas \u0026mdash; aqueles que utilizaram da comunicação para transmitir uma mensagem.\nRelação \u0026mdash; capacidade de pessoas se comunicarem e transmitirem mensagens entre si.\nSímbolos \u0026mdash; tudo que é usado para montar a mensagem (texto, palavras, símbolos gráficos, etc.).\nComunicação nas Organizações A comunicação sempre é um ponto chave para a relação entre pessoas, e dentro de organizações isso não é diferente. Para o sucesso de projetos, é necessário que todos os envolvidos estejam totalmente cientes de tudo que está acontecendo e os devidos passos a serem tomados.\nPor isso, ao se comunicar em uma corporação é sempre necessário entender como. Ao se comunicar em uma corporação é sempre bom saber seus objetivos, que no geral me organizações são:\ninformar normas e protocolos apresentar novos projetos ensino de tarefas à contribuidores Com esses pontos em mente fica fácil entender o que é necessário para uma boa comunicação nesses ambiente. Se trata de uma junção entre linguagem correta e objetividade.\nQuando se comunicar preste bem atenção com quem você está falando, nem sempre a pessoa possui o mesmo nível de conhecimento que você tem em algum assunto, por tanto seja atento e se comunique o mais claro possível.\nAlém disso a objetividade pode ser um ponto chave em determinados momentos, não só por, geralmente, ser mais rápido de transmitir, mas também por quebrar alguns empecilhos que podem acontecer durante a transmissão, devido a abstração da mensagem para termos que podem ser difundidos de forma mais fácil e com uma clareza em seu tema principal.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-51-546443448j2f/","summary":"\u003cp\u003e\u003cimg alt=\"image\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*gQmtBwdT9ruw4CF5\"\u003e\u003c/p\u003e\n\u003cp\u003eEm meio ao quinquagésimo primeiro dia de ciências da computação, foi\niniciada uma nova matéria, \u003cstrong\u003ecomunicação e pensamento crítico\u003c/strong\u003e, por ser\numa matéria um pouco mais reflexiva acabei não fazendo muitas anotações,\nmas aquilo que achei importante listarei abaixo, aproveite :)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eCerca de 70% das pessoas que pediram demissão de seus empregos são\npor questões de relacionamento no trabalho\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"alguns-termos\"\u003eAlguns termos\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eSenso comum\u003c/strong\u003e \u0026mdash; fazer algo que foi muito difundido pela sociedade\nmesmo sem saber o porque.\u003c/p\u003e","title":"Ciências da computação dia 51"},{"content":"","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-52-a65998jdbb46/","summary":"\u003cp\u003e\u003cimg alt=\"foto por \u003ca href=\\\"https://unsplash.com/@hansjurgen007\\\"\u003eHans-Jurgen\\nMager\u003c/a\u003e\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*jvlgR4FjoUiFK4yy\"\u003e\u003c/p\u003e\n\u003cp\u003eSeguindo na aula de sistemas digitais, continuamos a ver sobre a UCP, no\nentanto com um pouco mais de detalhes.\u003c/p\u003e\n\u003ch3 id=\"trafego-dosdados\"\u003eTrafego dos dados\u003c/h3\u003e\n\u003cp\u003ePrimeiramente é necessário entender como os dados trafegam até serem\nprocessador pela ULA. Bom, antes de tudo, um programa deve estar rodando\nna memória principal, a partir daí a UCP fará o trabalho pesado. Em seu\n\u003cstrong\u003eregistrador de instrução\u003c/strong\u003e a primeira instrução deste programa estará\narmazenado, assim como em seu \u003cstrong\u003econtador de programa\u003c/strong\u003e estará a\nreferência para a próxima instrução a ser executada(o endereço da\nmemória). Com isso, a cada pulso do \u003cstrong\u003eclock\u003c/strong\u003e uma ação será executada\npela UCP. Quando a instrução for de salvar algo no acumulador para a\nrealização de um cálculo, os operandos trafegaram pelo barramento de\ndados até chegarem aos \u003cstrong\u003eregistradores gerais\u003c/strong\u003e e o operador chegará\npelo barramento de controle, dessa forma ao passar pela ULA ela terá as\ninformações de o que operar e como.\u003c/p\u003e","title":"Ciências da computação dia 52"},{"content":"","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-53-3cidi9d67a069/","summary":"\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://unsplash.com/@vlado\\\"\u003eVlado\\nPaunovic\u003c/a\u003e\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*A1_rrmX0knE05S69\"\u003e\u003c/p\u003e\n\u003cp\u003eNo quinquagésimo terceiro dia de ciências da computação, entramos\nnovamente em matemática, mas dessa vez vimos matrizes e algumas\noperações que podemos fazer com elas.\u003c/p\u003e\n\u003cp\u003eUma matriz é representada por uma tabela de \u003cem\u003e\u003cstrong\u003em\u003c/strong\u003e\u003c/em\u003e linhas por \u003cem\u003e\u003cstrong\u003en\u003c/strong\u003e\u003c/em\u003e\ncolunas, possuindo um total de elementos dado por \u003cem\u003e\u003cstrong\u003em*n.\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eSua representação gráfica pode ser dada por uma tabela de elementos\nenvolvidos por [], () ou ainda || || (note que são dois |, se\nfosse apenas um você estaria calculando o determinante do que está\ndentro deles).\u003c/p\u003e","title":"Ciências da computação dia 53"},{"content":"Durante a aula do dia 54 de ciências da computação, voltamos a pensar na comunicação dentro de corporações, desta vez, pensando também em alguns fatores que podem ajudar em uma boa comunicação e o que pode acontecer quando há uma má comunicação.\nA comunicação é a parte crucial para uma boa convivência no meio de trabalho, sem ela os projetos não andam, as pessoas não confiarão umas nas outras e a empresa pode desabar se uma má comunicação se estabelecer. Contudo, quando pensamos em comunicação, sempre vem em nossa mente a escrita e a fala, mas ela é muito mais do que isso. A comunicação se estabelece de N maneiras, seja com simples gesto, com um simples olhar, um certo posicionamento do seu corpo, toques, etc.\nO primeiro fator que deve ser prestado a atenção durante um processo de comunicação é a maneira como você se comunica. Tudo que está ao seu redor está te comunicando algo, basta você prestar atenção e tentar entender as mensagens. No entanto, nem sempre essas mensagens transmitidas são entendidas da maneira como deveriam.\nUm dos problemas que podem decorrer disso, é a transmissão de mensagens através de terceiros. Imagine que você é um chefe e deve passar uma mensagem para todos os seus funcionários, mas ao invés de você ir presencialmente no local, você chama um funcionário e manda ele repassar. Isso não parece, mas pode ser um problemão para sua corporação. Isso pois, este funcionário repassará a mensagem de uma forma sentimental, ele irá colocar aquilo que sentiu quando for se expressar, o que é péssimo, e pode alarmar os outros colaboradores por algo que nunca existiu ou por algo que não era um problema tão grande.\nAlém disso, neste exemplo a cima, outro problema é chamar um funcionário especifico. Dessa forma, os outros podem achar que você prefere unicamente esse funcionário, o que pode causar fofocas e desentendimentos no meio do trabalho.\nPara contornar isso, esse chefe deve ter uma boa comunicação, passar as informações de forma igualitária, para que todos os colaboradores entendam o que está acontecendo, sem mais alarmes. Além disso, o chefe deve saber que tipo de comunicação usar para cada funcionário, saber que alguns possuem um nível mais técnico, já outros não, uns entendem uma brincadeira, outros entendem como uma ameaça. Um bom chefe deve sempre ser direto ao ponto, deve manter sua palavra e por fim, saber que criticas e sugestões individuais devem ser passadas no privado, de forma que o funcionário não se sinta coagido nem humilhado.\nNeste exemplo, usei como referência um chefe de uma empresa, mas não se limite a apenas esse exemplo, use essas dicas para sua vida.\nAlguns termos Comunicação defensiva → ao invés de assumir o erro, a pessoa vai brigando dizendo que o problema não é dela.\nLinguagem → modos de se comunicar (verbal e não verbal).\nLíngua → maneira que uma cultura se comunica (línguas como: inglês, português, espanhol, etc.).\nFala (discurso) → uso da língua.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-54-g2869i3153h9/","summary":"\u003cp\u003eDurante a aula do dia 54 de ciências da computação, voltamos a pensar na\ncomunicação dentro de corporações, desta vez, pensando também em alguns\nfatores que podem ajudar em uma boa comunicação e o que pode acontecer\nquando há uma má comunicação.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eA comunicação é a parte crucial para uma boa convivência no meio de\ntrabalho, sem ela os projetos não andam, as pessoas não confiarão umas\nnas outras e a empresa pode desabar se uma má comunicação se\nestabelecer. Contudo, quando pensamos em comunicação, sempre vem em\nnossa mente a escrita e a fala, mas ela é muito mais do que isso. A\ncomunicação se estabelece de N maneiras, seja com simples gesto, com\num simples olhar, um certo posicionamento do seu corpo, toques, etc.\u003c/p\u003e","title":"Ciências da computação dia 54"},{"content":"O contador de programa guarda apenas o endereço do próximo comando;\nQuando você declara uma variável, o sistema reserva um espaço na memória (cada um desses espaços são registradores);\nA memória principal possui áreas: a primeira é a do sistema operacional, onde tudo que o sistema precisa deixar rodando de segundo plano estará lá, o segundo é a área de APPS, onde os programas em execução ficam guardados e por fim a área de dados, onde os dados de input e output de programas ficam guardados.\nCiclo de busca de instruções:\nA unidade de controle pega o endereço que está no contador de programa e manda ele ir para o registrador de endereços da memória principal; endereço é encontrado na memória pelo decodificador de endereços; valor é pego na memória e colocado no registrador de saída de dados da memória principal; valor é colocado no registrador de função. Ciclo de execução de instruções:\nO comando que está no registrador de instruções é decodificado; é feita uma busca dos operando na memória; esses dados são passados para a ULA que processa e gera um resultado; o resultado é guardado na memória; após isso será colocado no contador de programa o endereço do próximo comando a ser executado. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-55-37b49a0a230a/","summary":"\u003cp\u003eO contador de programa guarda apenas o endereço do próximo comando;\u003c/p\u003e\n\u003cp\u003eQuando você declara uma variável, o sistema reserva um espaço na memória\n(cada um desses espaços são registradores);\u003c/p\u003e\n\u003cp\u003eA memória principal possui áreas: a primeira é a do sistema operacional,\nonde tudo que o sistema precisa deixar rodando de segundo plano estará\nlá, o segundo é a área de APPS, onde os programas em execução ficam\nguardados e por fim a área de dados, onde os dados de input e output de\nprogramas ficam guardados.\u003c/p\u003e","title":"Ciências da computação dia 55"},{"content":"Nesta aula, entramos em algumas operações que podem ser feitas com matrizes (como soma e subtração), veja a seguir.\nSoma de matrizes uma soma de matrizes pode ser presentado da seguinte forma:\nA m*n + B m*n = C m*n\nou seja\ncij = aij + bij\nQue traduzindo quer dizer que, para somar duas matrizes basta criar uma terceira onde cada posição é resultado da soma dos elementos das mesmas posições das outras duas matrizes.\nsendo assim:\n[ 1 2 3 4 5] + [ 2 3 4 5 6] = [ 3 5 7 9 11 ]\nLembrando que para isso ser feito, as duas matrizes precisam ter o mesmo tamanho (grau).\nSubtração de matrizes Para a subtração de matrizes, basta fazer o mesmo que a adição, mas dessa vez com o sinal negativo.\n[ 1 2 3 4 5] -[ 2 3 4 5 6] = [ -1 -1 -1 -1 -1]\noutra maneira de fazer isso é transformar a subtração em uma soma da matriz pela oposta da segunda matriz.\nUma matriz oposta nada mais é do que uma matriz onde seus elementos possuem os sinais invertidos da matriz original, sendo assim A m*x + (-A) m*n = 0 m*n.\nlembrando que neste caso, oposto e inverso são coisas diferentes. Quando dizemos oposto, neste caso, queremos o valor com seu sinal invertido, já no caso de inverso estaríamos invertendo seu expoente (inverso de 2 é 1/2).\nSendo assim poderíamos fazer da seguinte maneira:\n[ 1 2 3 4 5] + [ -2 -3 -4 -5 -6] = [ -1 -1 -1 -1 -1]\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-56-43jajbjb174e9/","summary":"\u003cp\u003eNesta aula, entramos em algumas operações que podem ser feitas com\nmatrizes (como soma e subtração), veja a seguir.\u003c/p\u003e\n\u003ch3 id=\"soma-dematrizes\"\u003eSoma de matrizes\u003c/h3\u003e\n\u003cp\u003euma soma de matrizes pode ser presentado da seguinte forma:\u003c/p\u003e\n\u003cp\u003eA \u003cem\u003em*n\u003c/em\u003e + B \u003cem\u003em*n =\u003c/em\u003e C \u003cem\u003em*n\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eou seja\u003c/p\u003e\n\u003cp\u003ecij = aij + bij\u003c/p\u003e\n\u003cp\u003eQue traduzindo quer dizer que, para somar duas matrizes basta criar uma\nterceira onde cada posição é resultado da soma dos elementos das mesmas\nposições das outras duas matrizes.\u003c/p\u003e","title":"Ciências da computação dia 56"},{"content":"Na aula 57, vimos alguns fatores da comunicação e seus significados. Veja a seguir.\nSegundo o diagrama feito por Kotler e Keller, um emissor gera uma mensagem e a transmite usando algum meio. Ao chegar no receptor ele decodifica e gera uma resposta que também é transmitida para a outra pessoa, mas ainda assim no caminho ela é prejudicada pelos ruídos que podem estar presentes.\nEsse diagrama mostra, de forma simples, como a comunicação entre pessoas funciona. A partir dele, é possível ver como o ruído é algo que está muito presente em nossa comunicação, e, infelizmente, por causa dela acontecem desentendimentos e problemas entre nossas relações.\nAo pensar em ruído temos algumas maneiras como eles podem se apresentar:\nMecânica: Barulho, ambiente, etc. Fisiológica: problemas de fala, surdez, cegueira, etc. Semântica: uso de outras línguas, termos específicos, gírias, etc. Psicológica: preconceito, estereótipos, etc. Organizacional: maneira como as ideias estão. A partir desses fatores, uma comunicação pode ser quebrada e uma mensagem pode ser entendida de forma errada.\nAlguns termos canal → aquilo que passa para a mensagem(rede social, telefone, etc.).\ncomunicação → vem de tornar comum, ou seja, transmitir conhecimento, ideias, etc.\ncomunicação horizontal → quando a comunicação é feita de igual para igual, por exemplo, quando um chefe fala com um funcionário, mas sem ser autoritário, apenas uma troca de ideias onde os dois podem dizer o que pensam sem problemas.\ncomunicação vertical → comunicação de níveis diferentes, por exemplo um chefe para um funcionário de forma autoritária. Nesse tipo de comunicação quando ela acontece de um nível maior para um menor, não há feedback, já que são ordens dadas e não pode ser modificadas, e no caso inverso sempre há um feedback, já que, nesse caso, o chefe precisa dizer se o trabalho esta como deveria, se há melhorias a serem feitas, etc., sendo assim, nesses casos a comunicação é mais assertiva.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-57-391239g9b6dg/","summary":"\u003cp\u003eNa aula 57, vimos alguns fatores da comunicação e seus significados.\nVeja a seguir.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"kotler e keller diagrama da\\ncomunicação\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*eKI_Zx7-HTGxqosn\"\u003e\u003c/p\u003e\n\u003cp\u003eSegundo o diagrama feito por \u003cem\u003eKotler e Keller\u003c/em\u003e, um emissor gera uma\nmensagem e a transmite usando algum meio. Ao chegar no receptor ele\ndecodifica e gera uma resposta que também é transmitida para a outra\npessoa, mas ainda assim no caminho ela é prejudicada pelos ruídos que\npodem estar presentes.\u003c/p\u003e","title":"Ciências da computação dia 57"},{"content":"Na última aula de sistemas digitais, começamos a ver como os circuitos de memórias são construidos.\nDe maneira básica, os circuitos de memória são constituídos por flip-flops. Esses circuitos em sua forma mais padrão e básica são construídos com duas portas NAND com uma saída interligada em uma das entradas do outro.\nNeste modelo de flip-flop temos duas entradas, set e reset, ao adicionar 1 no set, o valor 1 será salvo no Q e o valor 0 no ~Q e ao adicionar 0 o inverso acontece. Contudo ao adicionar 1 ao reset, a saída Q se transformará automaticamente em 0, resetando/limpando a saída.\nEste é o modelo de flip-flop mais simples, mas existem outros com diversas peculiaridades e outros usos, como o JK, D, T, RS com clock, etc.\nOs flip-flops são usados amplamente em nossos computadores. Na memória principal, por exemplo, cada registrador possui uma certa quantidade de flip-flops condizente com a arquitetura que você está utilizando. Sendo assim, se seu computador for de 64bits cada registrador possui 64 flip-flops, cada um armazenando 1 bit.\nNeste exemplo simples que mostrei,o circuito continha apenas duas entradas, no entanto o convencional é pelo menos 3 entradas, das quais uma delas é a entrada para o clock. O clock diz para o flip-flop em que momento ele pode executar um set ou reset, agindo com uma espécie de trava ou ainda um agente de controle. Com o clock o circuito apenas fará a operação nas mudanças de 0 para 1 e de 1 para 0, conhecidos como borda de subida e borda de descida respectivamente, sendo assim no momento em que o clock estiver indo de 0V para 5V, por exemplo, o flip-flop executará a operação, o inverso também pode acontecer.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-58-9i12bdd64f4e/","summary":"\u003cp\u003eNa última aula de sistemas digitais, começamos a ver como os circuitos\nde memórias são construidos.\u003c/p\u003e\n\u003cp\u003eDe maneira básica, os circuitos de memória são constituídos por\nflip-flops. Esses circuitos em sua forma mais padrão e básica são\nconstruídos com duas portas NAND com uma saída interligada em uma das\nentradas do outro.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eNeste modelo de flip-flop temos duas entradas, set e reset, ao adicionar\n1 no set, o valor 1 será salvo no Q e o valor 0 no ~Q e ao adicionar 0\no inverso acontece. Contudo ao adicionar 1 ao reset, a saída Q se\ntransformará automaticamente em 0, resetando/limpando a saída.\u003c/p\u003e","title":"Ciências da computação dia 58"},{"content":"Multiplicação Matrix x número real Multiplique todos os números da matriz pelo número real. 2 * [1 2 3] = [2 4 6]\nMultiplicação Matrix x Matrix faça a soma da multiplicação de uma linha por uma coluna. com essas duas matrizes em mãos podemos descobrir duas coisas:\nSe elas podem ser multiplicadas; A dimensão da matriz final. Para descobrir se uma matrix é multiplicável por outra, basta ver se o número de linhas de uma é igual ao de colunas da outra.\nE para descobrir a dimensão final, basta pegar o número de linhas da primeira e o de colunas da segunda. Nesse caso teremos uma matrix 2x3.\nAgora basta realizar as operações. Primeiro vamos pegar a primeira linha da primeira matrix com a primeira coluna da segunda matrix.\nC11 = 3 * 6 + 2 * 0 = 18\nC12 = 3 * 4 + 2 * 7 = 26\nC13 = 3 * (-2) + 2 * 1 = -4\nC21 = 5 * 6 + (-1) * 0 = 30\nC22 = 5 * 4 + (-1) * 7 = 13\nC23 = 5 * (-2) + (-1) * 1 = -11\nResultando em um matrix assim\nMatrix Inversa Matrix inversa é aquela que quando multiplicada pela sua original resulta em uma matrix identidade de mesma ordem.\nSendo assim:\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-59-f7d72e0dd05da/","summary":"\u003ch3 id=\"multiplicação-matrix-x-númeroreal\"\u003eMultiplicação Matrix x número real\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMultiplique todos os números da matriz pelo número real.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e2 * [1 2 3] = [2 4 6]\u003c/p\u003e\n\u003ch3 id=\"multiplicação-matrix-xmatrix\"\u003eMultiplicação Matrix x Matrix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efaça a soma da multiplicação de uma linha por uma coluna.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003ecom essas duas matrizes em mãos podemos descobrir duas coisas:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eSe elas podem ser multiplicadas;\u003c/li\u003e\n\u003cli\u003eA dimensão da matriz final.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003ePara descobrir se uma matrix é multiplicável por outra, basta ver se o\nnúmero de linhas de uma é igual ao de colunas da outra.\u003c/p\u003e","title":"Ciências da computação dia 59"},{"content":"vez com algumas coisas a mais.\nbase numérica → toda vez que você conta até certo número e volta depois dele para o zero exemplo: horas em um dia → base 24\nCada numero em um base possui um peso exemplo\n1001 → 1(2³) 0(2²) 0(2¹) 1(2⁰) → 2^n é um peso\no mesmo vale para outras bases numéricas\n712(base 10) → 7(10²) 1(10¹) 2(10⁰)\nesses pesos são representados por → base^n\nbit mais significativo(msb) → digito sempre mais a esquerda\nbit menos significativo(lsb) → sempre o mais a direita\n1001\n1(msb) 0 0 1(lsb)\ndecimal para binário (BCD) faça divisões sucessivas por 2 ex:\n8(10)\n8 / 2 → resto 0\n4 / 2 → resto 0\n2 / 2 → resto 0 resultado 1 (aqui onde para a conta)\nagora pegue do ultima para o primeiro\nficando → 1 0 0 0(base 2) = 8(base 10)\nBinário para decimal\noperação inversa da anterior\n1 0 0 0\n1 * 2 + 0 =2\n2 * 2 + 0 = 4\n4 * 2 + 0 = 8\ndigito parcial (numero que foi resultado do anterior ou o primeiro numero no caso 1) * numero da base(no caso 2) + próximo numero binário\nnúmeros fracionados Decimal para binário\n45,25(base 10)\npego a parte fracionada (0, 25)\ne faço multiplicações sucessivas por 2\n0,25 * 2 = 0, 50\n0,50 * 2 = 1,00\nobs: aqui você só multiplica os valores fracionados então caso de 1,30, por exemplo, você não vai fazer 1 * 2 o resultado dessa multiplicação será 0,60\ndepois disso você pega os inteiros que lhe deram de resultado de cima para baixo no caso → 0,01\nnote que aqui seu ultimo número foi 1,00, isso significa que o numero transformado deu exato, mas nem sempre isso acontecerá, podem ocorrer casos de dizima ou número irracionais. No caso das dizimas você pode parar a qualquer momento, mas em casos de irracionais você tem de deixar o número o mais próximo possível do original(essa precisão vai depender do projeto que você está fazendo) quando você converte este de binário para decimal novamente (isso é chamado de erro), esse erro é calculado dessa forma:\nmargem de erro = numero original \u0026mdash; conversão do número binário para decimal\nconversão de binário para decimal fracionado\npegue o resultado em binário\n0,01\ne veja seus pesos\nno caso de número depois da vírgula, o expoente de dois é negativo e inicia-se em -1\nsendo assim:\n0, 0 (-1) 1 (-2)\ntransformando isso em fração se torna\n0, 0(1/2¹) 1(1/2²) ou 0,0(1/2) 1(1/4)\nagora faça o mesmo da transformação de binário para decimal\npegue os pesos que possuem 1 e some\nsendo assim\n1/4 neste exemplo ou 0.25\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-6-h00ac7j1gd3a/","summary":"\u003cp\u003evez com algumas coisas a mais.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ebase numérica\u003c/strong\u003e → toda vez que você conta até certo número e volta\ndepois dele para o zero exemplo: horas em um dia → base 24\u003c/p\u003e\n\u003cp\u003eCada numero em um base possui um peso exemplo\u003c/p\u003e\n\u003cp\u003e1001 → 1(2³) 0(2²) 0(2¹) 1(2⁰) → 2^n é um peso\u003c/p\u003e\n\u003cp\u003eo mesmo vale para outras bases numéricas\u003c/p\u003e\n\u003cp\u003e712(base 10) → 7(10²) 1(10¹) 2(10⁰)\u003c/p\u003e\n\u003cp\u003eesses pesos são representados por → base^n\u003c/p\u003e","title":"Ciências da computação dia 6"},{"content":"Um dos fatores que agrega muito para uma má comunicação dentro de empresas é o afastamento entre funcionários e chefe.\nUm chefe para acabar com isso, deve ser uma pessoa mais acessível, deve ser mais humano e se manter mais próximo de seus colaboradores, tentando sempre manter uma relação de igual para igual.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-60-1aj7d0iigf76/","summary":"\u003cp\u003eUm dos fatores que agrega muito para uma má comunicação dentro de\nempresas é o afastamento entre funcionários e chefe.\u003c/p\u003e\n\u003cp\u003eUm chefe para acabar com isso, deve ser uma pessoa mais acessível, deve\nser mais humano e se manter mais próximo de seus colaboradores, tentando\nsempre manter uma relação de igual para igual.\u003c/p\u003e","title":"Ciências da computação dia 60"},{"content":"Flip-flops Como visto anteriormente, a memória principal de um computador possui milhões/bilhões de flip-flops, que ao serem agrupados formam registradores. Vimos também o flip-flop RS, o mais convencional de todos.\nA partir desta aula, vimos um novo modelo de flip-flop, o JK. Este modelo é o mais utilizado em circuitos, devido a suas melhorias perante as entrada proibidas (quando as duas entradas recebem o valor 1, já que se o set e o reset ficar como um, a cada ciclo ele ficará trocando o valor).\nEste flip-flop é extremamente utilizado para a construção de registradores em junção com o modelo do tipo D.\nAutômatos enlaces → transições que iniciam e terminam no mesmo estado;\nse utilizar um autômato para a criação de um circuito com flip-flops, a quantidade de estados lhe dirá a quantidade de flip-flops a serem usados, isso dado pela equação log2 QE ≤ N, onde QE é a quantidade estados de e N é o número de flip-flops.\nObservações os flip-flops também podem possuir entradas negadas, sendo assim ao ver uma simbologia e em sua entrada possuir uma bolinha, significa que aquela entrada será acionada com o valor 0 na entrada.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-61-d3f9f2919gjc/","summary":"\u003ch3 id=\"flip-flops\"\u003eFlip-flops\u003c/h3\u003e\n\u003cp\u003eComo visto anteriormente, a memória principal de um computador possui\nmilhões/bilhões de flip-flops, que ao serem agrupados formam\nregistradores. Vimos também o flip-flop RS, o mais convencional de\ntodos.\u003c/p\u003e\n\u003cp\u003eA partir desta aula, vimos um novo modelo de flip-flop, o JK. Este\nmodelo é o mais utilizado em circuitos, devido a suas melhorias perante\nas entrada proibidas (quando as duas entradas recebem o valor 1, já que\nse o set e o reset ficar como um, a cada ciclo ele ficará trocando o\nvalor).\u003c/p\u003e","title":"Ciências da computação dia 61"},{"content":"Ter um ambiente organizado é a chave para poder começar a escrever de maneira conexa, correta e coesa.\nFases da escrita\n1 \u0026mdash; primeiro você joga as ideias\n2 \u0026mdash; depois você organiza\n3 \u0026mdash; por fim você faz os retoques\nPara você escrever de maneira correta você deve reescrever pelo menos 3 vezes (o mesmo para a leitura)\nProdução acadêmica → tudo que é feito dentro de academias(faculdades, universidades), sempre escrito de maneira impessoal.\nArtigo → um condensado de informações de uma pesquisa.\nMonografia → (geralmente um TCC)documento do qual você descreve o processo para chegar até determinado resultado (o que pode ser feito com uma pesquisa também).\nTese → demonstração de algo novo, exclusivo, que nunca foi visto/demonstrado antes.\nMatemática ∴ → significa portanto.\no traço de uma matriz é a soma dos elementos da diagonal principal.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-62-i16g0je4e083/","summary":"\u003cp\u003eTer um ambiente organizado é a chave para poder começar a escrever de\nmaneira conexa, correta e coesa.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFases da escrita\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e1 \u0026mdash; primeiro você joga as ideias\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; depois você organiza\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; por fim você faz os retoques\u003c/p\u003e\n\u003cp\u003ePara você escrever de maneira correta você deve reescrever pelo menos 3\nvezes (o mesmo para a leitura)\u003c/p\u003e\n\u003cp\u003eProdução acadêmica → tudo que é feito dentro de academias(faculdades,\nuniversidades), sempre escrito de maneira impessoal.\u003c/p\u003e","title":"Ciências da computação dia 62"},{"content":"","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-63-29g56d6d00aj/","summary":"\u003cp\u003e\u003cimg alt=\"\u003ca href=\\\"https://unsplash.com/@harrisonbroadbent\\\"\u003eHarrison\\nBroadbent\u003c/a\u003e\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*EbHGCP_jOdFYfQ4I\"\u003e\u003c/p\u003e\n\u003cp\u003edo autômato ao circuito\u003c/p\u003e\n\u003cp\u003eNas últimas aulas de Sistemas digitais, vimos muito sobre flip-flops e\nautômatos, e hoje finalmente saímos desses conceitos para aplicar em um\ncircuito real. Nesta aula, fizemos uma série de passos para conseguir\ntransformar um grafo dirigido, em um circuito digital.\u003c/p\u003e\n\u003ch3 id=\"criação-do-grafodirigido\"\u003eCriação do grafo dirigido\u003c/h3\u003e\n\u003cp\u003eAntes de tudo, precisamos entender quais são os estados do nosso grafo.\nNo exemplo que mostrarei será feito um grafo dirigido para um contador\nBCD.\u003c/p\u003e","title":"Ciências da computação dia 63"},{"content":"Na programação, recursão é basicamente uma função que chama ela mesma. Fazendo uma analogia com a vida real, podemos pensar em, por exemplo, uma Matrioska, onde dentro da primeira boneca há outra dentro, que há outra dentro, e assim sucessivamente.\nCom essa analogia podemos pensar como isso na programação pode ser aplicado.\nDe maneira geral, a recursão é muito usada quando queremos quebrar um problema grande em pequenos pedaços. Um exemplo muito comum utilizado para o aprendizado de recursão, são os números fatoriais.\nDe maneira simplificada, o fatorial de um número é a multiplicação deste por seus antecessores, sendo assim o fatorial de 4 é 4 * 3 * 2 * 1 = 24. Repare bem que todo fatorial segue um padrão, primeiro fazemos a primeira multiplicação e assim sucessivamente até o número 1\n(((4 * 3) * 2) * 1) De uma maneira mais elaborada, podemos pensar nessa mesma equação como um fatorial de um fatorial\nfatorial(4) fatorial(4 * fatorial(3)) fatorial(4 * fatorial(3 * fatorial(2))) fatorial(4 * fatorial(3 * fatorial(2 * fatorial(1)))) Ao perceber isso, descobrimos que para esse problema, a recursão é muito bem vinda.\nPoderiamos fazer da forma mais padrão usando um for loop, por exemplo\nfatorial = 4 for i in range(fatorial - 1, 1, -1): fatorial *= i print(fatorial) Mas como vimos que a recursão pode fazer um bom trabalho para nós. Podemos sair deste código, para este\ndef fatorial(n): if(n == 1): return 1 return n * fatorial(n - 1) fatorial(4) Os dois códigos produzem o mesmo resultado, mas o exemplo utilizando da recursão é muito mais agradável aos olhos e mais simples de ler, no entanto, para alguns programadores, isso pode parecer um tanto assustador no começo e pode ser um pouco trabalhoso de debugar e entender possíveis problemas, ou simplesmente como a função age.\nVamos olhar o que acontece com nosso valor em cada iteração:\nprimeiro a função é chamada com o valor 4\nfatorial(4) após esse valor ir para a função ele passa direto pelo if(curiosidade: esse if é chamado de condição base e toda função recursiva deve ter uma desa, já que se não houver isso seria um loop eterno), já que o valor de n é diferente de 1 e vai para o nosso return, fazendo algo assim\n4 * fatorial(3) com isso uma nova instância do fatorial é usada, e mais uma vez passará pela condição base e retornará uma nova instância dessa maneira\n3 * fatorial(2) Mais uma vez passará para o return padrão\n2 * fatorial(1) nesse último fatorial, temos que o fatorial de 1 é 1, então ele retornará 1 e assim podemos voltar nossa equação e ir resolvendo, sendo assim\n2 * fatorial(1) = 2 3 * fatorial(2) = 3 * 2 = 6 4 * fatorial(3) = 4 * 6 = 24 Pronto, conseguimos utilizar recursão para resolver este problema :)\nMesmo parecendo mágica, a recursão nem sempre é o melhor caminho, além de levar um tempo a mais para entender a função e ser mais difícil de dar manutenção no código, a recursão pode demorar mais e tomar mais memória para certos problemas. Sendo assim, quando você estiver a procura de um algoritmo, coloque na balança se de fato vale a pena implementar uma recursão ou não.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-64-b600c10hdff/","summary":"\u003cp\u003eNa programação, recursão é basicamente uma função que chama ela mesma.\nFazendo uma analogia com a vida real, podemos pensar em, por exemplo,\numa Matrioska, onde dentro da primeira boneca há outra dentro, que há\noutra dentro, e assim sucessivamente.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eCom essa analogia podemos pensar como isso na programação pode ser\naplicado.\u003c/p\u003e\n\u003cp\u003eDe maneira geral, a recursão é muito usada quando queremos quebrar um\nproblema grande em pequenos pedaços. Um exemplo muito comum utilizado\npara o aprendizado de recursão, são os números fatoriais.\u003c/p\u003e","title":"Ciências da computação dia 64"},{"content":" Um determinante é um número resultante de uma matriz quadrada; Pode ser representado como: |A| ou det(A); Podem também ajudar a resolver sistemas de equações. O determinante de uma matriz 2x2 pode ser calculado da seguinte forma\n|A| = a11 * a22 \u0026mdash; a21 * a12 exemplo:\n| 2 3 |\n| 4 5 |\n|A| = 2 * 5\u0026ndash;4 * 3 = 10\u0026ndash;12 = -2\nem inequações:\n| 2 x |\n| 4 5 |\n| A | ≤ 0\n2*5 \u0026mdash; x*4 ≤ 0\n10\u0026ndash;4x ≤ 0\n-4x ≤ -10\nx ≤ -10/-4\nx ≤ 5\nem inequações de segundo grau:\nA\n| x 2 |\n| 5 x+1|\nB\n| 5 -x |\n| -1 x |\n| A | ≥ | B |\nx(x+1) \u0026mdash; 10 ≥ 5x \u0026mdash; x\nx² + x \u0026mdash; 10 ≥ 4x\nx² \u0026mdash; 3x \u0026mdash; 10 ≥ 0\na = 1; b = -3; c = -10\nΔ = b² \u0026mdash; 4ac\nΔ = (-3)² \u0026mdash; 4 * 1 * (-10)\nΔ = 9 + 40 = 49\n-b +- √Δ / 2a\n3 +- 7 / 2\n3 + 7 / 2 = 5\n3\u0026ndash;7 / 2 = -2\ncomo sabemos que o a da inequação é \u0026gt; 0 então sambem que a concavidade do gráfico ficará para cima.\ncomo sabemos queremos os valores que resultaram em um resultado ≥ 0, então precisamos pegar todos que são positivos e que resultam em zero, sendo assim, podemos pegar todos os elementos até -2 e depois todos os elementos depois de 5\nNotas toda vez que você fizer uma operação entre um elemento e seu inverso, você sempre encontrará o elemento nulo daquela operação, exemplos:\n1 + (-1) = 0\nA * A^-1 = I\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-65-icjb77e1c1ig/","summary":"\u003cul\u003e\n\u003cli\u003eUm determinante é um número resultante de uma matriz quadrada;\u003c/li\u003e\n\u003cli\u003ePode ser representado como: |A| ou det(A);\u003c/li\u003e\n\u003cli\u003ePodem também ajudar a resolver sistemas de equações.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eO determinante de uma matriz 2x2 pode ser calculado da seguinte forma\u003c/p\u003e\n\u003ch3 id=\"a--a11--a22a21-a12\"\u003e|A| = a11 * a22 \u0026mdash; a21 * a12\u003c/h3\u003e\n\u003cp\u003eexemplo:\u003c/p\u003e\n\u003cp\u003e| 2 3 |\u003c/p\u003e\n\u003cp\u003e| 4 5 |\u003c/p\u003e\n\u003cp\u003e|A| = 2 * 5\u0026ndash;4 * 3 = 10\u0026ndash;12 = -2\u003c/p\u003e\n\u003cp\u003eem inequações:\u003c/p\u003e\n\u003cp\u003e| 2 x |\u003c/p\u003e\n\u003cp\u003e| 4 5 |\u003c/p\u003e","title":"Ciências da computação dia 65"},{"content":"Projeto de pesquisa Documento que descreve o que você pesquisou; Descreve como isso funciona; Descreve o que isso pode ajudar na empresa; Descrição detalhada dos resultados da pesquisa. Projeto de negócio Detalhes de tudo que será necessário para a implementação do projeto baseado na pesquisa; Detalhes de tudo, preços, materiais, pessoas, conhecimento, etc. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-66-g87deb8dbh3c/","summary":"\u003ch3 id=\"projeto-depesquisa\"\u003eProjeto de pesquisa\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocumento que descreve o que você pesquisou;\u003c/li\u003e\n\u003cli\u003eDescreve como isso funciona;\u003c/li\u003e\n\u003cli\u003eDescreve o que isso pode ajudar na empresa;\u003c/li\u003e\n\u003cli\u003eDescrição detalhada dos resultados da pesquisa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"projeto-denegócio\"\u003eProjeto de negócio\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetalhes de tudo que será necessário para a implementação do projeto\nbaseado na pesquisa;\u003c/li\u003e\n\u003cli\u003eDetalhes de tudo, preços, materiais, pessoas, conhecimento, etc.\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 66"},{"content":"Na última aula de sistema digitais, vimos como era possível utilizar flip-flops e alguns outros componentes para criar um circuito que seguia uma certa sequência de valores. Agora, vamos ver um pouco sobre circuito que podem reconhecer padrões em cadeias de bits.\nDigamos que você queira reconhecer dentre vários bits, uma sequência de exatamente 3 zeros.\nPodemos pensar nesse problema da seguinte forma.\nImagine que a entrada será essa sequência de bits\n1110010000000000111111010101010100010001000010001 Com a sequência de entrada em mãos podemos começar a encontrar os padrões e adicionar 1 para se a sequência for a que queremos e 0 se não for\n1110010000000000111111010101010100010001000010001 0000000010010010000000000000000000100010001000010 Com essa sequência podemos começar a pensar como o circuito poderá ser montado.\nComo vamos utilizar flip-flops, precisamos pensar como vamos armazenar a contagem. Da maneira mais simples que podemos pensar, podemos contar, em decimal mesmo, quantos zeros achamos, resultando em uma sequência semelhante a esta:\n1110010000000000111111010101010100010001000010001 0000000010010010000000000000000000100010001000010 0001201231231231000000101010101012301230123101230 Criando esta sequência mais amigável, vamos começar a criação do nosso grafo dirigido.\nO grafo dirigido O grafo que está logo acima, possui 4 estados (0\u0026ndash;3), cada um deles representa a quantidade de zeros encontrados. Se começarmos com a sequência e o primeiro valor for 1, ocorrerá um enlace e o valor continuará em 0, caso contrário, será contabilizado um valor zero no próximo estado (1). Estando no valor 1, se o próximo valor for 1, ele voltará para o 0, limpando a contagem, caso contrário será contabilizado mais um valor 0 (estado 2). Estando no estado 2, se o próximo valor for um número 1, a contagem será reiniciada, caso contrário mais um valor 0 será contabilizado (estado 3) e a saída será um número 1, já que encontramos uma sequência de 3 zeros. Estando com 3 zeros contabilizados, se o próximo número for um a contagem se reiniciará, se não será contabilizado 1 valor 0 (estado 1).\nQuantidade de flip-flops necessários com o grafo completo, podemos começar a pensar no circuito, mas antes precisamos pensar quantos flip-flops serão necessários para fazê-lo.\nSeguindo a regra de 2^x ≥ QE (onde x é a quantidade de flip-flops e QE a quantidade de estados do grafo).\nPlugamos os valores\n2^x ≥ 4\n2^x ≥ 4\no menor valor para x que satisfaz a inequação é 2, sendo assim precisamos de 2 flip-flops.\nMontando a tabela de estímulos Diferente da tabela de estímulos que montamos na aula passada, esta vai ter uma peculiaridade a mais. Desta vez precisamos saber qual a entrada que receberemos.\nMapas de Karnaugh Para montarmos os mapas de Karnaugh entramos em um dilema, como colocaremos os valores?\nRepare que na tabela de estímulos, os valores dos estados atuais forma uma sequencia perfeita de 000 até 111 em binário, sendo assim podemos pegar essas sequencias e dizer que a primeira linha dos estados é referente ao 0, a segunda ao 1, e assim por diante.\nCom isso, podemos pegar esses valores referentes a cada linha para achar a localização no mapa de Karnaugh (nesse caso de duas variáveis).\nMontando o Circuito Com tudo pronto, podemos começar a montar o circuito, resultando em algo semelhante a isso:\nRepare que para a saída usamos um flip-flop do tipo D. De maneira resumida, usamos ele pois além de não possuir aquelas saídas inválidas (já que dentro possui um flip-flop JK) ele ainda deixa a saída igual a sua entrada, além de possuir apenas uma entrada e uma saída que para o nosso propósito faz todo sentido.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-67-g1595ij0j128/","summary":"\u003cp\u003eNa última aula de sistema digitais, vimos como era possível utilizar\nflip-flops e alguns outros componentes para criar um circuito que seguia\numa certa sequência de valores. Agora, vamos ver um pouco sobre circuito\nque podem reconhecer padrões em cadeias de bits.\u003c/p\u003e\n\u003cp\u003eDigamos que você queira reconhecer dentre vários bits, uma sequência de\nexatamente 3 zeros.\u003c/p\u003e\n\u003cp\u003ePodemos pensar nesse problema da seguinte forma.\u003c/p\u003e\n\u003cp\u003eImagine que a entrada será essa sequência de bits\u003c/p\u003e","title":"Ciências da computação dia 67"},{"content":"Menor complementar representador por Dij Para cada valor você elimina a linha e a coluna relativos a ele e faz o determinante do restante exemplo:\n1 0 4 9 8 1 7 3 3 D11:\n8 1 3 3 24\u0026ndash;3 → 19\ncofator para cada elemento da matriz você faz (-1)^i+j * Dij representado por Aij exemplo:\n1 0 4 9 8 1 7 3 3 D11:\n8 1 3 3 24\u0026ndash;3 → (-1)² * 19 → 1 * 19 → 19\nTeorema de Laplace Escolha uma linha ou uma coluna: exemplo com a linha 1: det X = a11 * A11 + a12 * A12 + a13 * A13, exemplo com a coluna 2: det X = a12 * A12 + a22 * A22 + a32 * A32 Para ficar mais fácil os cálculos, escolha a linha com os valore mais próximos de zero, uma vez que se for zero você pode eliminar essa parte da equação. Regra de Sarrus usado apenas para matrizes de ordem 3 det X = a11 * a22 * a33 + a12 * a23 * a31 + a13 * a21 * a 32 \u0026mdash; (a31 * a22 * a13 + a32 * a23 * a11 + a33 * a21 * a12) Observações Se você possui uma coluna ou uma linha com todos os valores 0, em uma matriz de ordem três o determinante sempre será 0. Se todos os números de uma matriz são iguais, o determinante é 0. 1 1/2 é um número misto, para encontrar seu relativo como uma fração imprópria faça → 1 * 2 + 1 /2 → 2 + 1 / 2 → 3/2 → 1.5 ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-68-0c0b63995f6g/","summary":"\u003ch3 id=\"menor-complementar\"\u003eMenor complementar\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003erepresentador por Dij\u003c/li\u003e\n\u003cli\u003ePara cada valor você elimina a linha e a coluna relativos a ele e\nfaz o determinante do restante\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eexemplo:\u003c/p\u003e\n\u003ch4 id=\"1-04\"\u003e1 0 4\u003c/h4\u003e\n\u003ch4 id=\"9-81\"\u003e9 8 1\u003c/h4\u003e\n\u003ch4 id=\"7-33\"\u003e7 3 3\u003c/h4\u003e\n\u003cp\u003e\u003cem\u003eD11:\u003c/em\u003e\u003c/p\u003e\n\u003ch4 id=\"8-1\"\u003e8 1\u003c/h4\u003e\n\u003ch4 id=\"3-3\"\u003e3 3\u003c/h4\u003e\n\u003cp\u003e24\u0026ndash;3 → 19\u003c/p\u003e\n\u003ch3 id=\"cofator\"\u003ecofator\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003epara cada elemento da matriz você faz (-1)^i+j * Dij\u003c/li\u003e\n\u003cli\u003erepresentado por Aij\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eexemplo:\u003c/p\u003e\n\u003ch4 id=\"1-04-1\"\u003e1 0 4\u003c/h4\u003e\n\u003ch4 id=\"9-81-1\"\u003e9 8 1\u003c/h4\u003e\n\u003ch4 id=\"7-33-1\"\u003e7 3 3\u003c/h4\u003e\n\u003cp\u003e\u003cem\u003eD11:\u003c/em\u003e\u003c/p\u003e\n\u003ch4 id=\"8-1-1\"\u003e8 1\u003c/h4\u003e\n\u003ch4 id=\"3-3-1\"\u003e3 3\u003c/h4\u003e\n\u003cp\u003e24\u0026ndash;3 → (-1)² * 19 → 1 * 19 → 19\u003c/p\u003e","title":"Ciências da computação dia 68"},{"content":"Bem, na última aula sobre circuitos digitais, vimos como montar desde um grafo dirigido até um circuito com flip-flop e portas lógicas. Contudo, falta ainda um detalhe.\nNo último que montamos, utilizamos flip-flops do tipo JK e um flip-flop do tipo D para montarmos a saída. No entanto, podemos substituir todos os flip-flops JK por flip-flops do tipo D, teremos menos trabalho ao montar os mapas de Karnaugh (já que cada flip-flop D possui apenas uma entrada), mas possivelmente teremos que usar mais portas lógicas.\nUtilizando aquele mesmo exemplo, podemos passar disso:\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-69-5g0623a62519/","summary":"\u003cp\u003eBem, na última aula sobre circuitos digitais, vimos como montar desde um\ngrafo dirigido até um circuito com flip-flop e portas lógicas. Contudo,\nfalta ainda um detalhe.\u003c/p\u003e\n\u003cp\u003eNo último que montamos, utilizamos flip-flops do tipo JK e um flip-flop\ndo tipo D para montarmos a saída. No entanto, podemos substituir todos\nos flip-flops JK por flip-flops do tipo D, teremos menos trabalho ao\nmontar os mapas de Karnaugh (já que cada flip-flop D possui apenas uma\nentrada), mas possivelmente teremos que usar mais portas lógicas.\u003c/p\u003e","title":"Ciências da computação dia 69"},{"content":"precisará gastar mais também para conseguir produzir mais.\nFunção é uma regra / fórmula para algo.\na imagem nada mais é do que os elementos que você pode possuem um correspondente no contradomínio(B), apenas um correspondente, caso contrário não é um função.\nFunção quadrática sempre que seu a de uma função quadrática for \u0026lt; 0, sua parábola ficará para baixo (a boca dela)\nos pontos em que x é igual a zero são seus pontos encontrados ao utilizar Bhaskara\nFunções compostas diversas funções consecutivas para chegar a um certo resultado\npara reduzir todas essas funções em uma única faça:\nPegue a primeira função e coloque ele no x da próxima, resolva e pegue o resultado e coloque na próxima, assim sucessivamente, até que por fim você terá uma única função que faz o mesmo que as anteriores.\nFunção inversa função que encontra a imagem indo do contradomínio (B) para o domínio (A), ou seja, fazendo o caminho inverso da função convencional.\npara encontrar a função inversa faça:\npegue a função troque x por y e y por x, e por fim, isole y, a função que resultar será a função inversa de f(x).\nlembrando que uma função pode ser chamada de f(x), g(x), h(x), \u0026hellip; ou ainda de y.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-7-a56382j5hc01/","summary":"\u003cp\u003eprecisará gastar mais também para conseguir produzir mais.\u003c/p\u003e\n\u003ch3 id=\"função\"\u003eFunção\u003c/h3\u003e\n\u003cp\u003eé uma regra / fórmula para algo.\u003c/p\u003e\n\u003cp\u003ea imagem nada mais é do que os elementos que você pode possuem um\ncorrespondente no contradomínio(B), apenas um correspondente, caso\ncontrário não é um função.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"fonte: mundoeducacao\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-7-a56382j5hc01/image_2.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"função-quadrática\"\u003eFunção quadrática\u003c/h3\u003e\n\u003cp\u003esempre que seu a de uma função quadrática for \u0026lt; 0, sua parábola ficará\npara baixo (a boca dela)\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"fonte:\\ntodamateria\" loading=\"lazy\" src=\"https://cdn-images-1.medium.com/max/800/0*qnMwtJWGhvtq7TxJ\"\u003e\u003c/p\u003e\n\u003cp\u003eos pontos em que x é igual a zero são seus pontos encontrados ao\nutilizar Bhaskara\u003c/p\u003e","title":"Ciências da computação dia 7"},{"content":"determinantes de matrizes n\u0026gt;3\nNa ultima vez que falamos sobre determinantes, vimos o teorema de Sarrus e de La Place. No entanto, os exemplos que mostrei eram apenas com matrizes quadradas de ordem 3, e você pode estar pensando, o que faço com matrizes maiores?\nBem, o teorema de La Place não se limita a matrizes de ordem 3, ele pode ser utilizado em qualquer tamanho de matriz, sendo necessário apenas acrescentar mais termos na equação geral.\nPodemos usar essa ideia a nosso favor, podemos usar o teorema de La Place para encontrar matrizes menores e no momento em que a matriz atual possui ordem ≤ 3 podemos fazer o próprio teorema de La Place ou até mesmo Sarrus (o que você achar mais fácil).\nex:\n| 0 3 1 4 | | 3 1 6 2 | | 9 3 2 1 | | 1 5 3 2 | det(A) = a11 * A11 + a12 * A12 + a13 * A13 + a14 * A14 ex2:\n| 2 0 3 1 4 | | 5 3 1 6 2 | | 0 9 3 2 1 | | 1 1 5 3 2 | | 9 0 3 1 4 | det(A) = a11 * A11 + a12 * A12 + a13 * A13 + a14 * A14 + a15 * A15 B = A11\n| 3 1 6 2 | | 9 3 2 1 | | 1 5 3 2 | | 0 3 1 4 | det (B) = b11 * B11 + b12 * B12 + b13 * B13 + b14 * B14 B11\n| 3 2 1 |\n| 5 3 2 |\n| 3 1 4 |\npronto, encontramos uma matriz de ordem 3, agora basta utilizar seu meio preferido para calcular isso, aqui utilizarei Sarrus\n3*3*4 + 2*2*3 + 1*1*5\u0026ndash;3*3*1\u0026ndash;1*2*3\u0026ndash;4*5*2 = -2\nfazendo para todos os outros temos:\n3 * (-2) + 83 + 6 * 117 + 2 * (-6) = -6 + 83 + 702\u0026ndash;12 = 767\nAgora temos que\ndet(A) = 2 * 767 + a12 * A12 + a13 * A13 + a14 * A14 + a15 * A15 det(A) = 1534 + a12 * A12 + a13 * A13 + a14 * A14 + a15 * A15 Agora é só repetir o mesmo processo até encontrar todos os valores\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-70-g5b9c3fdhji9/","summary":"\u003cp\u003edeterminantes de matrizes n\u0026gt;3\u003c/p\u003e\n\u003cp\u003eNa ultima vez que falamos sobre determinantes, vimos o teorema de Sarrus\ne de La Place. No entanto, os exemplos que mostrei eram apenas com\nmatrizes quadradas de ordem 3, e você pode estar pensando, o que faço\ncom matrizes maiores?\u003c/p\u003e\n\u003cp\u003eBem, o teorema de La Place não se limita a matrizes de ordem 3, ele pode\nser utilizado em qualquer tamanho de matriz, sendo necessário apenas\nacrescentar mais termos na equação geral.\u003c/p\u003e","title":"Ciências da computação dia 70"},{"content":"Equação Linear Uma equação linear, é qualquer equação de grau 1. exemplo: 10x + 3y \u0026mdash; 5z = 12\nEquação Linear Homogênea Uma Equação linear Homogênea é a equação que tem como resultado o valor 0, sendo assim uma das soluções possíveis para essa equação é todos as incógnitas como 0. exemplo: 2x + 3y = 0 (um dos resultados será, (0, 0))\nManeiras de resolver uma Equação Linear 1 incógnita como 1 incógnita você pode usar a lógica e um pouco de matemática básica para resolver, como no exemplo a seguir\n3x = 3\nx = 3/3 = 1\n2 incógnitas A partir de duas incógnitas, você já tem a possibilidade de usar sistemas lineares, mas dependendo da equação você também pode usar um pouco de lógica ou ainda teste de valores\nPodemos, então, utilizar o método de estimativas(teste de valores). Digamos que temos a equação linear → 2x \u0026mdash; y = 4\npodemos então pensar em alguns valores que podemos colocar em x, por exemplo 1 e 2\nquando 1\n2 * 1 \u0026mdash; y = 4\n2 \u0026mdash; y = 4\nagora podemos fazer da mesma maneira que era com apenas uma incógnita\n-y = 4\u0026ndash;2\n-y = 2\ny = -2\nagora para o valor 2\n2 * 2 \u0026mdash; y = 4\n4-y = 4\n-y = 0\ny = 0\nsendo assim alguns dos resultados são (1, -2) e (2, 0)\nSistema linear é um conjunto de m equações lineares como n incógnitas; se em uma equação uma incógnita é inexistente, significa que o valor daquela posição é 0; é usado para encontrar as incógnitas das equações de uma só vez. exemplo:\n2x + 3y \u0026mdash; z = 0\nx \u0026mdash; y + z = 5\nx + y + z = -2\nSistema linear homogêneo Quando todas as equações tem como resultado 0 Método da adição Uma das maneiras mais comuns de resolver um sistema linear, é utilizando o método da adição, do qual consiste em somar as partes das equações, com o objetivo de remover pelo menos uma das incógnitas\nexemplo:\n2x \u0026mdash; y = 5\nx + y = 7\n3x + 0 = 12\nx = 12/3 = 4\n4 + y = 7\ny = 7\u0026ndash;4 = 3\nNo exemplo que utilizei, as equações estavam favoráveis para uma adição por padrão, mas caso não estivesse, você poderia multiplicar uma das equações por um número que consiga anular uma das incógnitas, ou ainda multiplicar as duas equações, uma por um número positivo e a outra um negativo, de forma que seja possível fazer o mesmo.\nexemplo:\n-x + 5y = 11 (3)\n3x \u0026mdash; y = 9\n-3x + 15y = 33\n3x \u0026mdash; y = 9\n0x + 14y = 42\ny = 42/14 = 3\n3x \u0026mdash; 3 = 9\n3x = 12\nx = 12/3 = 4\nExpressão matricial de um sistema linear podemos, por fim, representar um sistema linear em formato de matriz separando os fatores, as incógnitas e os termos independentes.\nexemplo:\n-x + 5y = 11\n3x \u0026mdash; y = 9\na representação matricial seria algo como isso\n[ -1 5 ] * [ x ] = [ 11 ] [ 3 -1 ] [ y ] [ 9 ] repare que se multiplicarmos as matrizes temos\n[ -1*x + 5*y ] = [ 11 ] [ 3*x + -1*y ] = [ 9 ] que é o mesmo que\n-x + 5y = 11\n3x \u0026mdash; y = 9\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-71-1a53diabgecj/","summary":"\u003ch3 id=\"equação-linear\"\u003eEquação Linear\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUma equação linear, é qualquer equação de grau 1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eexemplo: 10x + 3y \u0026mdash; 5z = 12\u003c/p\u003e\n\u003ch3 id=\"equação-linear-homogênea\"\u003eEquação Linear Homogênea\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUma Equação linear Homogênea é a equação que tem como resultado o\nvalor 0, sendo assim uma das soluções possíveis para essa equação é\ntodos as incógnitas como 0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eexemplo: 2x + 3y = 0 (um dos resultados será, (0, 0))\u003c/p\u003e\n\u003ch3 id=\"maneiras-de-resolver-uma-equaçãolinear\"\u003eManeiras de resolver uma Equação Linear\u003c/h3\u003e\n\u003ch4 id=\"1-incógnita\"\u003e1 incógnita\u003c/h4\u003e\n\u003cp\u003ecomo 1 incógnita você pode usar a lógica e um pouco de matemática básica\npara resolver, como no exemplo a seguir\u003c/p\u003e","title":"Ciências da computação dia 71"},{"content":"Para terminar a matéria de Sistemas digitias, nos foi passado alguns circuitos de registradores e suas devidas nomenclaturas.\nNomenclatura Nosso professor passou para nós uma nomenclatura, não sei se é algo \u0026ldquo;oficial\u0026rdquo;/padrão, mas ela funciona da seguinte maneira:\nR (indicando que é um registrador)\ne (indicando entrada)\nS e ou P ( S para entrada serial e P para entrada paralela, podendo ser uma combinação das duas)\ns (indicando saída)\nS e ou P ( S para saída serial e P para saída paralela, podendo ser uma combinação das duas)\nD ou E ou B (D para descolamento à direita, E para deslocamento à esquerda e B indicando para ambos os lados)\nA (indicando se há a opção de saída em anel)\nB (indicando que o anel também é bidirecional)\nSendo assim, se quisermos dar um nome à um registrador paralelo com saída serial em anel, a sigla ficaria RePsSA.\nMontando os circuitos Registrador com entrada serial, saída serial com deslocamento à direita em um registrador com deslocamento a direita basta interligar a saída de um flip-flop com a entrada do próximo\nRegistrador com entrada paralela e saída paralela aqui todas as entradas e saídas são independentes dos outros flip-flops\nRegistrador com entrada serial, saída serial com deslocamento à esquerda Registrador com entrada serial, saída serial com anel aqui antes de todos os flip-flops, há um multiplexador, do qual dependendo de sua entrada a saída do circuito pode ser reutilizada, como uma forma de não perder informações do circuito.\nNeste caso estamos utilizando o anel do tipo reto, ou seja a saída padrão do flip-flop que está voltando para o circuito, caso a saída negada que estivesse entrando no circuito novamente esse seria do tipo trançado\nRegistrador com entrada serial, saída paralela, bidirecional nesse caso, utilizamos vários multiplexadores para controlar a direção das informações.\nPara construir registradores mais complexos, você pode combinar esses circuitos mostrados acima. Além disso, não se prenda só aos circuitos que mostrei, você pode encontrar N maneiras de fazer esses circuitos, aqui eu quis mostrar apenas algumas opções que você pode ter ao construir um registrador síncrono(ou seja, todos os componentes compartilham o mesmo clock).\nSe você acredita que isso é inútil, lembre-se da aula sobre arquiteturas, e como os registradores estão presentes nas partes mais cruciais do computador, como memória principal e UCP.\nse não se recorda, a ULA possui um circuito chamado registrador geral, do qual armazenas os inputs de uma certa função lógica, o circuito desse registrador é o seguinte:\nNotas os registradores, além de serem usados para armazenar informações, também podem ser utilizados para algumas operações, como multiplicação e divisão por 2.\nPara a multiplicação basta usar um registrador com deslocamento para a esquerda, e para a divisão basta deslocar à direita.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-72-8dia14e91ba9/","summary":"\u003cp\u003ePara terminar a matéria de Sistemas digitias, nos foi passado alguns\ncircuitos de registradores e suas devidas nomenclaturas.\u003c/p\u003e\n\u003ch3 id=\"nomenclatura\"\u003eNomenclatura\u003c/h3\u003e\n\u003cp\u003eNosso professor passou para nós uma nomenclatura, não sei se é algo\n\u0026ldquo;oficial\u0026rdquo;/padrão, mas ela funciona da seguinte maneira:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eR (indicando que é um registrador)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ee (indicando entrada)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eS e ou P ( S para entrada serial e P para entrada paralela, podendo\nser uma combinação das duas)\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003es (indicando saída)\u003c/strong\u003e\u003c/p\u003e","title":"Ciências da computação dia 72"},{"content":"No último dia da matéria de geometria analítica e algebra linear, vimos algumas técnicas para resolver sistemas.\nA primeira mostrada foi a regra de escalonamento, usando esse nome pode parecer algo muito diferente, mas na verdade isso já foi visto no começo do curso em pré-calculo com o nome de eliminação de gauss. Como esse tema já foi abordado, não vou repeti-lo aqui, caso você tenha vontade de aprender sobre ele clique aqui.\nRegra de Crammer A Regra de Crammer é aplicável para sistemas com no máximo duas incógnitas.\nPara utiliza-lo faça o seguinte:\nx+2y = 5\n2x \u0026mdash; 3y = -4\nfaça o determinante de A, tal que seus elementos sejam os termos que acompanham as incógnitas\nA = | 1 2 | = -7 | 2 -3 | depois, para encontrar Ax troque a primeira coluna pelos termos independentes (os resultados das equações)\nAx = | 5 2 | = -7 | -4 -3 | e por fim, para Ay, troque a segunda coluna pelos termos independentes\nAy = | 1 5 | = -14 | 2 -4 | agora, para encontrar o valor de X faça\nx = Ax / A = 1\ne para encontrar Y faça\ny = Ay / A = 2\npronto, encontramos os valores de X e Y que satisfazem o sistema linear\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-73-8ff99544604d/","summary":"\u003cp\u003eNo último dia da matéria de geometria analítica e algebra linear, vimos\nalgumas técnicas para resolver sistemas.\u003c/p\u003e\n\u003cp\u003eA primeira mostrada foi a regra de escalonamento, usando esse nome pode\nparecer algo muito diferente, mas na verdade isso já foi visto no começo\ndo curso em pré-calculo com o nome de eliminação de gauss. Como esse\ntema já foi abordado, não vou repeti-lo aqui, caso você tenha vontade de\naprender sobre ele clique\n\u003ca href=\"https://medium.com/@dpbm/ci%C3%AAncias-da-computa%C3%A7%C3%A3o-dia-46-4b8254ad510b\"\u003eaqui\u003c/a\u003e.\u003c/p\u003e","title":"Ciências da computação dia 73"},{"content":"Após um longo período de férias, voltamos a programação normal. Agora no terceiro semestre, abrimos com chave de ouro, Engenharia de Software I. Aqui vão alguns termos que anotei.\nLinked Data → a capacidade de interconectar dados de uma forma que uma máquina consiga entender\nOntologia → grafo que explica o que cada coisa é\nUML → linguagem de modelagem\nciclo em cascata → pega-se todos os requisitos para um projeto, implementa tudo e entrega tudo\nciclo iterativo → pega-se parte dos requisitos, implementa, entrega, e continua fazendo isso até todos os requisitos serem feitos\nengenheiro de software → projeta e se preciso implementa, além disso acompanha a implementação e implantação\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-74-32cj257233d1/","summary":"\u003cp\u003eApós um longo período de férias, voltamos a programação normal. Agora no\nterceiro semestre, abrimos com chave de ouro, Engenharia de Software I.\nAqui vão alguns termos que anotei.\u003c/p\u003e\n\u003cp\u003eLinked Data → a capacidade de interconectar dados de uma forma que uma\nmáquina consiga entender\u003c/p\u003e\n\u003cp\u003eOntologia → grafo que explica o que cada coisa é\u003c/p\u003e\n\u003cp\u003eUML → linguagem de modelagem\u003c/p\u003e\n\u003cp\u003eciclo em cascata → pega-se todos os requisitos para um projeto,\nimplementa tudo e entrega tudo\u003c/p\u003e","title":"Ciências da computação dia 74"},{"content":"Nessa aula, começamos a ver maneiras melhores de manipular e organizar a memória do computador.\nQuando usamos o computador, raramente paramos para pensar como algo funciona, como é possível rodar diversos apps em um mesmo computador ao mesmo tempo.\nEssa capacidade se dá, pela maneira como a RAM é estruturada e pela a alocação dinâmica desta.\nSe pensarmos na RAM como um bloco único, dificilmente conseguiríamos rodar mais de uma aplicação.\nIsso pois, tudo ficaria bagunçado, e difícil de gerenciar.\nContudo, a RAM possui uma estrutura em blocos, do qual, cada programa pega dois blocos de um tamanho padrão, por exemplo, e um deles é designado ao armazenamento de dados e o outro o programa em si.\nMas e se o programa ou os dados excedem esse tamanho fixo?\nGraças aos ponteiros de memória, podemos fazer com que nosso programa aloque mais memória caso seja necessário. Fazendo o alocamento dinâmico, dessa forma, podemos pedir para o Sistema operacional alocar mais dois blocos, por exemplo.\nNotas: int em C possui 4 bytes, em Python possui apenas um e caso necessário ele pega mais\nponteiro → variável que armazena endereços de memória\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-75-3fj7heccfbii/","summary":"\u003cp\u003eNessa aula, começamos a ver maneiras melhores de manipular e organizar a\nmemória do computador.\u003c/p\u003e\n\u003cp\u003eQuando usamos o computador, raramente paramos para pensar como algo\nfunciona, como é possível rodar diversos apps em um mesmo computador ao\nmesmo tempo.\u003c/p\u003e\n\u003cp\u003eEssa capacidade se dá, pela maneira como a RAM é estruturada e pela a\nalocação dinâmica desta.\u003c/p\u003e\n\u003cp\u003eSe pensarmos na RAM como um bloco único, dificilmente conseguiríamos\nrodar mais de uma aplicação.\u003c/p\u003e","title":"Ciências da computação dia 75"},{"content":"No dia 76 de ciências da computação, começamos mais uma matéria, modelagem de banco de dados.\nNessa matéria, veremos como estruturar bancos, criar relações entre entidades e como tudo isso deve ser padronizado.\nNessa primeira aula, entendemos que a modelagem de um banco, se dá, em partes, na limitação dos tipos de dados e em seus valores que podem ser inseridos no banco.\nDigamos que em uma aplicação queremos criar um cadastro de usuários e precisamos das informações de cidade e estado.\nNesse exemplo teremos, a principio, duas entidades (tabelas), estado e cidade.\nEssas entidades estarão interligadas através de uma chave (ID, a chave primária dessas tabelas) chamada UF, e uma relação de one-to-many, ou seja há muitas cidades dentro de um estado.\nA partir disso, poderíamos, por exemplo, listar todas as cidades a partir de um estado escolhido pelo usuário, apenas utilizando a chave primária UF. Dessa forma, poderíamos remover possíveis erros na inserção de dados, limitando o escopo do usuário.\nEsse exemplo dado, é bem simples, mas para fins didáticos é excelente para demonstrar o processo de modelagem.\npodemos seguir dessa forma a modelagem de um banco:\npense nas entidades(tabelas) necessárias, nesse caso cidades e estados pense nos atributos de cada entidade, todas as informações que precisamos de cada entidade pense nas relações que essas entidades possuem Notas: RPAS → sistema de aeronave remotamente pilotadas\nDDL → data definition language\nDML → data manipulation language\nDQL → data query language\ntodos esses DXX estão dentro do SQL\nHTTP → porta 80\nHTTPS → porta 443\nalguns tipos de relações: one-to-one, one-to-many, many-to-many\nentidades são as tabelas e atributos as colunas\natributo composto → quando você possui diversas informações diferentes em um mesmo atributo, isso deve ser evitado ao máximo (exemplo, endereço escrito por extenso)\natributo simple → coluna que apresenta apenas um tipo de informação (exemplo, nome, id, cidade, número da rua, etc.)\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-76-89883ff8j7j1/","summary":"\u003cp\u003eNo dia 76 de ciências da computação, começamos mais uma matéria,\nmodelagem de banco de dados.\u003c/p\u003e\n\u003cp\u003eNessa matéria, veremos como estruturar bancos, criar relações entre\nentidades e como tudo isso deve ser padronizado.\u003c/p\u003e\n\u003cp\u003eNessa primeira aula, entendemos que a modelagem de um banco, se dá, em\npartes, na limitação dos tipos de dados e em seus valores que podem ser\ninseridos no banco.\u003c/p\u003e\n\u003cp\u003eDigamos que em uma aplicação queremos criar um cadastro de usuários e\nprecisamos das informações de cidade e estado.\u003c/p\u003e","title":"Ciências da computação dia 76"},{"content":"competência é ter:\nC \u0026mdash; conhecimento(saber)\nH \u0026mdash; habilidade (saber fazer)\nA \u0026mdash; atitude(querer fazer)\nV \u0026mdash; valor(moral,ética)\nE \u0026mdash; inteligência emocional\nética normas universais de convivência acordos preestabelecidos pela sociedade moral individual definição interna de o que é certo e o que é errado amor para Plantão é o desejo por aquilo que você não possui\namor para Aristóteles é amar aquilo que está ao seu redor, seus parentes, seus amigos, etc.\nMoral para Kant é o amor, e o amor para Kant é o Amor de Jesus Cristo, o amor pelo próximo, se doar pelo próximo independente de quem seja. Uma sociedade Utópica seguiria essa ideia.\nNuma empresa a moral requerida é a de Kant.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-77-dia1529a2783/","summary":"\u003cp\u003ecompetência é ter:\u003c/p\u003e\n\u003cp\u003eC \u0026mdash; conhecimento(saber)\u003c/p\u003e\n\u003cp\u003eH \u0026mdash; habilidade (saber fazer)\u003c/p\u003e\n\u003cp\u003eA \u0026mdash; atitude(querer fazer)\u003c/p\u003e\n\u003cp\u003eV \u0026mdash; valor(moral,ética)\u003c/p\u003e\n\u003cp\u003eE \u0026mdash; inteligência emocional\u003c/p\u003e\n\u003ch4 id=\"ética\"\u003eética\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003enormas universais de convivência\u003c/li\u003e\n\u003cli\u003eacordos preestabelecidos pela sociedade\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"moral\"\u003emoral\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eindividual\u003c/li\u003e\n\u003cli\u003edefinição interna de o que é certo e o que é errado\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eamor para Plantão é o desejo por aquilo que você não possui\u003c/p\u003e\n\u003cp\u003eamor para Aristóteles é amar aquilo que está ao seu redor, seus\nparentes, seus amigos, etc.\u003c/p\u003e","title":"Ciências da computação dia 77"},{"content":"linguagem procedural → tem uma parte principal (como a função main) que vai chamando as outras funções, pensamos geralmente quais são as funções de um programa;\nPOO → enxerga-se quais objetos compõem um problema;\nJAVA A linguagem Java foi desenvolvida para substituir o C++ no desenvolvimento de sistemas embarcados, já que o o mesmo apresentou problemas dentro da sun microsystems.\nEsse projeto que eles estavam trabalham se chamava *7(star 7). Esse projeto era basicamente um tablet que você poderia controlar sua casa através dele. em 1993 a Sun viu que o Java poderia ser usado também para a Web\nA linguagem Java é uma linguagem compilada/interpretada. Isso pois ao fazer um arquivo .java, vc usa o javac para compilar esse arquivo para um .class, e após isso você utiliza a jvm que interpreta os comandos e executa um comando relativo daquela plataforma.\nDevido a jvm, o java é multiplataforma, basta você ter uma jvm em um certo dispositivo e pronto, um programa que você compilou em um local você pode executar em outro, claramente desde que possuam as apis que você utilizou.\nContudo, também devido à essa \u0026ldquo;tradução\u0026rdquo; feita pela jvm, o desempenho também diminui um pouco.\nEm Java quando você utiliza um número decimal (ex: 10.5) por padrão ele é do tipo double, para usar como float coloque um f no final (ex: 10.5f).\nOutras Notas internet → infraestrutura que interliga computadores em rede\nDelphi → é a versão POO de Pascal, na verdade o nome da linguagem mesmo é Object Pascal Delphi é o nome da IDE\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-78-gg732hfeg9h2/","summary":"\u003cp\u003elinguagem procedural → tem uma parte principal (como a função main) que\nvai chamando as outras funções, pensamos geralmente quais são as funções\nde um programa;\u003c/p\u003e\n\u003cp\u003ePOO → enxerga-se quais objetos compõem um problema;\u003c/p\u003e\n\u003ch3 id=\"java\"\u003eJAVA\u003c/h3\u003e\n\u003cp\u003eA linguagem Java foi desenvolvida para substituir o C++ no\ndesenvolvimento de sistemas embarcados, já que o o mesmo apresentou\nproblemas dentro da sun microsystems.\u003c/p\u003e\n\u003cp\u003eEsse projeto que eles estavam trabalham se chamava *7(star 7). Esse\nprojeto era basicamente um tablet que você poderia controlar sua casa\natravés dele.\nem 1993 a Sun viu que o Java poderia ser usado também para a Web\u003c/p\u003e","title":"Ciências da computação dia 78"},{"content":"Para um engenheiro de software, é muito melhor que um cliente de um problema, do que diga como deve ser a solução, uma vez que o cliente nem sempre sabe o que ele quer de fato, muito menos como resolver de fato o problema dele.\nO principal esforço do engenheiro é entender bem o problema.\nSegundo a IEEE, engenharia de software é uma área de estudos e também a aplicação de técnicas e metodologias.\ncamadas da engenharia de software\n1 \u0026mdash; Qualidade \u0026mdash; QA por exemplo\n2 \u0026mdash; Processos \u0026mdash; Sequência de passos para uma atividade\n3 \u0026mdash; Métodos\n4 \u0026mdash; Ferramentas\nobs: esse sequência é do mais importante para o menos importante. Isso presume que a maior preocupação de um engenheiro de software é com a qualidade\n5 principais processos para o desenvolvimento de software 1 \u0026mdash; Comunicação \u0026mdash; isso começa na hora de entender o real problema\n2 \u0026mdash; Planejamento \u0026mdash; saber como tudo vai ser feito, passo a passo\n3 \u0026mdash; Modelagem \u0026mdash; esboço do projeto\n4 \u0026mdash; construção \u0026mdash; desenvolvimento do projeto\n5 \u0026mdash; Emprego \u0026mdash; o uso do software, implementação e feedback\nEsse processo não muda de software para software, apenas o volume e a complexidade\nQuanto mais tempo você demora para encontrar e resolver um problema/bug, mais caro e difícil é para corrigir.\n7 princípios da engenharia de software 1 \u0026mdash; razão de existir \u0026mdash; um software é feito para ajudar os usuários\n2 \u0026mdash; kiss(keep it simple, stupid!) \u0026mdash;software precisa ser fácil e intuitivo de manter e usar\n3 \u0026mdash; mantenha a visão \u0026mdash; visão clara da arquitetura do projeto\n4 \u0026mdash; o que um produz os outros consomem \u0026mdash; todos devem entender o que o software é, como funciona, para que foi feito, etc. Documentação e clara implementação ajuda nisso\n5 \u0026mdash; Esteja aberto para o futuro \u0026mdash; o sistema deve estar pronto para receber mudanças e adaptações\n6 \u0026mdash; Planeje pensando na reutilização \u0026mdash;pensar em componentes genéricos o suficiente para serem reutilizados\n7 \u0026mdash; pense \u0026mdash; pense bem antes antes de fazer qualquer coisa\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-79-i90329jd794c/","summary":"\u003cp\u003ePara um engenheiro de software, é muito melhor que um cliente de um\nproblema, do que diga como deve ser a solução, uma vez que o cliente nem\nsempre sabe o que ele quer de fato, muito menos como resolver de fato o\nproblema dele.\u003c/p\u003e\n\u003cp\u003eO principal esforço do engenheiro é entender bem o problema.\u003c/p\u003e\n\u003cp\u003eSegundo a IEEE, engenharia de software é uma área de estudos e também a\naplicação de técnicas e metodologias.\u003c/p\u003e","title":"Ciências da computação dia 79"},{"content":"algoritmos, dessa vez estruturas de controle.\nobs: Python trabalha com endereços físicos da memória, então quando você precisa trocar variáveis de lugar você pode fazer a,b=b,a pois ele apenas vai apontar \u0026ldquo;a\u0026rdquo; para o endereço de \u0026ldquo;b\u0026rdquo; e vice versa.\nprogramas de estrutura sequencial → programas que executam de cima para baixo\nestrutura de controle (seleção)(comando if)\nusado para escolher qual bloco será executado executa algo caso a instrução for verdadeira caso a condição seja falsa ele ignora e continua com que está de baixo do bloco do if o que está dentro é dependente da condição seleção composta (comando, if, elif e else)\ntodo else possui um if correspondente else é a negação da condição do if caso o if for executado, o else será ignorado e o programa partirá para o que está abaixo sempre é executado apenas 1 ou o if ou o else ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-8-7c12a2d2ig63/","summary":"\u003cp\u003ealgoritmos, dessa vez estruturas de controle.\u003c/p\u003e\n\u003cp\u003eobs: Python trabalha com endereços físicos da memória, então quando você\nprecisa trocar variáveis de lugar você pode fazer a,b=b,a pois ele\napenas vai apontar \u0026ldquo;a\u0026rdquo; para o endereço de \u0026ldquo;b\u0026rdquo; e vice versa.\u003c/p\u003e\n\u003cp\u003eprogramas de estrutura sequencial → programas que executam de cima para\nbaixo\u003c/p\u003e\n\u003cp\u003eestrutura de controle (seleção)(comando if)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eusado para escolher qual bloco será executado\u003c/li\u003e\n\u003cli\u003eexecuta algo caso a instrução for verdadeira\u003c/li\u003e\n\u003cli\u003ecaso a condição seja falsa ele ignora e continua com que está de\nbaixo do bloco do if\u003c/li\u003e\n\u003cli\u003eo que está dentro é dependente da condição\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eseleção composta (comando, if, elif e else)\u003c/p\u003e","title":"Ciências da computação dia 8"},{"content":"Ao fazer *p++, o resultado não será o esperado. Para fazer isso use (*p)++\ntodo vetor é um endereço de memória do primeiro valor guardado\nsendo assim se usar\nprintf(\u0026quot;%c\u0026quot;, x[0]);\nou\nprintf(\u0026quot;%c\u0026quot;, *x);\nterá o mesmo resultado\nO buffer é uma pequena memória temporária.\nNo momento que você faz um leitura do teclado em C, o buffer dele fica poluído com o valor(es) digitados, para limpa-los use fflush(stdin) e após isso você pode voltar a ler do teclado sem maiores problemas.\nAo declarar um ponteiro, ele não alocará memória até que você adicione um endereço nele. para Pré alocar memória você deve utilizar funções como malloc e calloc presentes na biblioteca stdlib\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-80-fj745fi6fh92/","summary":"\u003cp\u003eAo fazer \u003cem\u003e*p++\u003c/em\u003e, o resultado não será o esperado. Para fazer isso use\n\u003cem\u003e(*p)++\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003etodo vetor é um endereço de memória do primeiro valor guardado\u003c/p\u003e\n\u003cp\u003esendo assim se usar\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eprintf(\u0026quot;%c\u0026quot;, x[0]);\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eou\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eprintf(\u0026quot;%c\u0026quot;, *x);\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eterá o mesmo resultado\u003c/p\u003e\n\u003cp\u003eO buffer é uma pequena memória temporária.\u003c/p\u003e\n\u003cp\u003eNo momento que você faz um leitura do teclado em C, o buffer dele fica\npoluído com o valor(es) digitados, para limpa-los use \u003cem\u003efflush(stdin)\u003c/em\u003e e\napós isso você pode voltar a ler do teclado sem maiores problemas.\u003c/p\u003e","title":"Ciências da computação dia 80"},{"content":"Modelo lógico baseado em objeto → entidade-relacionamento\nModelo lógico baseado em registro → relacional\nEntidade-relacionamento baseia-se na percepção do mundo real coleção de objetos, denominados entidades (tabelas) e seus relacionamentos modelagem utiliza o diagrama de estrutura de dados Símbolos Atributos São as Características das entidades (colunas da tabela)\ntipos simples → dados indivisíveis (atomicos), nome de usuário, cpf, email, etc.\ncompostos → elementos que podem ser divididos, endereço, número do banco, etc.\nmulti-valorados → possuem múltiplos valores em um mesmo campo, como json, jsonb, array, etc. (apresenta um * como símbolo)\ndeterminantes → identifica de forma única cada instância (linha da tabela), username, email, ID, cpf, etc. (campo não nulo) (nome do atributo sublinhado como símbolo)\nRelacionamento Relação entre duas entidades através de um atributo determinante.\ntipos um-para-um → cada linha de A se relaciona somente com uma linha de B\num-para-vários → cada linha de A se relaciona com uma ou mais em B\nvários-para-vários → N linhas de A se relacionam com M linhas de B\nCardinalidade representação da quantidade maxima e minima de elementos das entidades de uma relação\nAlguns relacionamentos Nesse caso a Entidade é uma generalização das Entidades Entidade2 e Entidade3\nNesse uma relação pode se tornar um relação com outro relacionamento\nIsso pode ser traduzido dessa forma:\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-81-g78c3bjfif4da/","summary":"\u003cp\u003eModelo lógico baseado em objeto → entidade-relacionamento\u003c/p\u003e\n\u003cp\u003eModelo lógico baseado em registro → relacional\u003c/p\u003e\n\u003ch3 id=\"entidade-relacionamento\"\u003eEntidade-relacionamento\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebaseia-se na percepção do mundo real\u003c/li\u003e\n\u003cli\u003ecoleção de objetos, denominados entidades (tabelas) e seus\nrelacionamentos\u003c/li\u003e\n\u003cli\u003emodelagem utiliza o diagrama de estrutura de dados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"símbolos\"\u003e\u003cstrong\u003eSímbolos\u003c/strong\u003e\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch3 id=\"atributos\"\u003eAtributos\u003c/h3\u003e\n\u003cp\u003eSão as Características das entidades (colunas da tabela)\u003c/p\u003e\n\u003ch4 id=\"tipos\"\u003etipos\u003c/h4\u003e\n\u003cp\u003esimples → dados indivisíveis (atomicos), nome de usuário, cpf, email,\netc.\u003c/p\u003e","title":"Ciências da computação dia 81"},{"content":"Uma organização possui 3 pilares:\nRecursos → ferramentas, máquinas, tempo, tecnologia, etc.\nProcessos → O que cada um/coisa faz na empresa\nPessoas(o mais importante) → A parte que entra em todas as outras e sem ela a empresa não vive\nEMPRESAS CRESCEM QUANDO PESSOAS CRESCEM\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-82-f3jf835f99hi/","summary":"\u003cp\u003eUma organização possui 3 pilares:\u003c/p\u003e\n\u003cp\u003eRecursos → ferramentas, máquinas, tempo, tecnologia, etc.\u003c/p\u003e\n\u003cp\u003eProcessos → O que cada um/coisa faz na empresa\u003c/p\u003e\n\u003cp\u003ePessoas(o mais importante) → A parte que entra em todas as outras e sem\nela a empresa não vive\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eEMPRESAS CRESCEM QUANDO PESSOAS CRESCEM\u003c/strong\u003e\u003c/p\u003e\n\u003c/blockquote\u003e","title":"Ciências da computação dia 82"},{"content":"cada comando case precisa de um break, se não, todos os comandos case a baixo do que for verdadeiro serão executados.\no comando continue ele termina uma iteração e vai para a próxima, diferente do break, que quebra o loop\nem Java, precisamos pré-alocar espaço para um array\ncomo em\nint[] a = new int[99]; ou\nint[] a = {1, 2, 3}; Além disso, não é possível acessar espaços além do alocado para o array, diferente de C.\nPor fim, essa mesma sintaxe pode ser usada para a criação de matrizes\nint[][] a = new int[9][9]; Strings em Java são classes com vários métodos dentro, como:\n.length() → pega o tamanho da String\n.charAt(posição) → pega um caractere de uma dada posição da String\n.equals(string) → compara uma string com outra\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-83-hb8i02bcdd6c/","summary":"\u003cp\u003ecada comando \u003cem\u003ecase\u003c/em\u003e precisa de um \u003cem\u003ebreak\u003c/em\u003e, se não, todos os comandos\ncase a baixo do que for verdadeiro serão executados.\u003c/p\u003e\n\u003cp\u003eo comando \u003cem\u003econtinue\u003c/em\u003e ele termina uma iteração e vai para a próxima,\ndiferente do \u003cem\u003ebreak\u003c/em\u003e, que quebra o loop\u003c/p\u003e\n\u003cp\u003eem Java, precisamos pré-alocar espaço para um array\u003c/p\u003e\n\u003cp\u003ecomo em\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eint[] a = new int[99];\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eou\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eint[] a = {1, 2, 3};\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAlém disso, não é possível acessar espaços além do alocado para o array,\ndiferente de C.\u003c/p\u003e","title":"Ciências da computação dia 83"},{"content":"escopo → conjunto de features de um software\nproduct vision box → pense no software como um produto que será exposto e vendido na prateleira de uma loja. A frente da caixa precisa ser algo chamativo que mostre o nome e algumas frases marcantes, mostrando o diferencial do produto e seu objetivo. Enquanto isso, atrás você precisa colocar mais informações, como as funções principais.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-84-51i6g9e5ccdf/","summary":"\u003cp\u003eescopo → conjunto de features de um software\u003c/p\u003e\n\u003cp\u003eproduct vision box → pense no software como um produto que será exposto\ne vendido na prateleira de uma loja. A frente da caixa precisa ser algo\nchamativo que mostre o nome e algumas frases marcantes, mostrando o\ndiferencial do produto e seu objetivo. Enquanto isso, atrás você precisa\ncolocar mais informações, como as funções principais.\u003c/p\u003e","title":"Ciências da computação dia 84"},{"content":"constantes em C\nPara criar structs em c você pode fazer:\ntypedef struct { //... } Name; ou ainda\nstruct{ //... } Name; typedef struct Name Name; Após instanciar uma struct você pode acessar os valores usando\nName.atributo\nou se você instanciar usando um pointer\nName-\u0026gt;atributo\nLista contígua Cada elemento tem uma posição especifica. Com isso, tenho acesso direto ao elemento que preciso, uma vez sabendo sua posição Possui tamanho fixo, preestabelecido. Cada elemento é chamado de nó. suscetível à overflow ou desperdício de espaço. Para definir constantes em C faça:\n#define NAME valor ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-85-083e0i4c736da/","summary":"\u003cp\u003econstantes em C\u003c/p\u003e\n\u003cp\u003ePara criar structs em c você pode fazer:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003etypedef struct {\n//...\n} Name;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eou ainda\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003estruct{\n//...\n} Name;\n\ntypedef struct Name Name;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eApós instanciar uma struct você pode acessar os valores usando\u003c/p\u003e\n\u003cp\u003eName.atributo\u003c/p\u003e\n\u003cp\u003eou se você instanciar usando um pointer\u003c/p\u003e\n\u003cp\u003eName-\u0026gt;atributo\u003c/p\u003e\n\u003ch3 id=\"lista-contígua\"\u003eLista contígua\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCada elemento tem uma posição especifica. Com isso, tenho acesso\ndireto ao elemento que preciso, uma vez sabendo sua posição\u003c/li\u003e\n\u003cli\u003ePossui tamanho fixo, preestabelecido.\u003c/li\u003e\n\u003cli\u003eCada elemento é chamado de nó.\u003c/li\u003e\n\u003cli\u003esuscetível à overflow ou desperdício de espaço.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePara definir constantes em C faça:\u003c/p\u003e","title":"Ciências da computação dia 85"},{"content":"Dicionário de dados explicação de todos os campos da tabela, tipo de dados, limites, etc.\nDiagrama de estrutura de dados tradução do modelo entidade-relacionamento para algo semelhante ao que seria usado no realidade\nRegras de formação 1 \u0026mdash; modelo entidade-relacionamento se transforma em diagram de estrutura de dados com os mesmo atributos\n2 \u0026mdash; no relacionamento 1:N, o atributo determinante da entidade 1 passar para o N\n3 \u0026mdash;no relacionamento N:M, a relação se transforma numa estrutura de dados que possui os atributos do relacionamento mais os atributos determinantes de cada tabela\n4 \u0026mdash;o auto-relacionamento cria uma estrutura com dois atributos determinantes da outra entidade\n5 \u0026mdash; uma relação ternária cria uma estrutura com 3 atributos determinantes das entidades\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-86-ecj45i484cc5/","summary":"\u003ch3 id=\"dicionário-dedados\"\u003eDicionário de dados\u003c/h3\u003e\n\u003cp\u003eexplicação de todos os campos da tabela, tipo de dados, limites, etc.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo de dicionário de\\u00a0dados\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-86-ecj45i484cc5/image_185.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"diagrama-de-estrutura-dedados\"\u003eDiagrama de estrutura de dados\u003c/h3\u003e\n\u003cp\u003etradução do modelo entidade-relacionamento para algo semelhante ao que\nseria usado no realidade\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"exemplo diagrama de estrutura de\\u00a0dados\" loading=\"lazy\" src=\"/posts/ciencias-da-computacao-dia-86-ecj45i484cc5/image_186.png\"\u003e\u003c/p\u003e\n\u003ch3 id=\"regras-deformação\"\u003eRegras de formação\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; modelo entidade-relacionamento se transforma em diagram de\nestrutura de dados com os mesmo atributos\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; no relacionamento 1:N, o atributo determinante da entidade 1\npassar para o N\u003c/p\u003e","title":"Ciências da computação dia 86"},{"content":"Se fizermos 5/0 em Java, isso retornará um erro\nSe fizermos 5/0.0, isso retornará Infinity.\nIsso acontece pois 0.0 é um double muito próximo de zero, mas não um zero absoluto, então ele dará um decimal muito pequeno como resultado.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-87-286hcibci89i/","summary":"\u003cp\u003eSe fizermos 5/0 em Java, isso retornará um erro\u003c/p\u003e\n\u003cp\u003eSe fizermos 5/0.0, isso retornará Infinity.\u003c/p\u003e\n\u003cp\u003eIsso acontece pois 0.0 é um double muito próximo de zero, mas não um\nzero absoluto, então ele dará um decimal muito pequeno como resultado.\u003c/p\u003e","title":"Ciências da computação dia 87"},{"content":"A arte da engenharia de software, é entender o problema. Para isso o engenheiro deve saber quais são os interessados (quem está envolvido), quais as incógnitas, etc.\nUma das técnicas utilizadas para entender o problema, é fazer o ambos (cliente e engenheiro) desenhar/anotar, uma vez que, quando anotamos, nosso cérebro assimila e organiza as ideias.\nNo momento do planejamento, busque um modelo. 99% das vezes seu problema já foi resolvido, e você pode reaproveitar algo que alguém já fez.\nDurante a execução, sempre observe se os resultados estão saindo como o planejado.\ndigitalização → transformação do analógico para o digital\ntransformação digital → passa algo do analógico para o digital, de forma que fique mais fácil de utilizar\ninterface simplória → interface que não faz o que o usuário precisa\nUm padrão de desenvolvimento/projeto não resolve todos os problemas, quase sempre é preciso adaptar. Sair colocando mais pessoas no projeto, nem sempre é a melhor saída. Isso pois ao adicionar mais gente, essas novas pessoas precisam entender todos os padrões, o modo com trabalham, precisam entender o projeto, etc. O que leva tempo e pode acabar atrasando mais. Terceirizar nem sempre é a melhor solução, uma vez que será necessário gerenciar/fiscalizar o processo. Os requisitos precisam ser objetivos. Mudar os requisitos, dependendo do momento, pode ser danoso para o projeto, se estiver em etapas muito avançadas. Após a entrega do projeto é que o trabalho começa, é ai que você tem que garantir que o projeto continuará vivo. O sucesso do projeto não está só no código funcionando, mas também nos modelos, documentos, planos, etc. Engenharia de software não cria documentação desnecessária, mas sim tudo aquilo que é necessário para um projeto de qualidade. Processo → sequência de atividades para alcançar um objetivo\nParadigma → diferentes processos que você pode usar em engenharia\nTipos de fluxos para realizar os processos (paradigmas) 1 \u0026mdash; linear → partes do projeto uma depois da outra\n2 \u0026mdash; Iterativo → faz todas as partes e se em determinado momento você precisar voltar em outra etapa, você volta\n3 \u0026mdash; Evolucionário → você passa várias vezes por todas as etapas, fazendo pequenas tarefas até concluir o projeto (o SCRUM, geralmente, usa esse)\n4 \u0026mdash; Paralelo → varias etapas são feitas ao mesmo tempo\nEsses são modelos genéricos, a partir deles as metodologias se apropriam e incrementam-nas para modelos reais\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-88-25604c2g28g7/","summary":"\u003cp\u003eA arte da engenharia de software, é entender o problema. Para isso o\nengenheiro deve saber quais são os interessados (quem está envolvido),\nquais as incógnitas, etc.\u003c/p\u003e\n\u003cp\u003eUma das técnicas utilizadas para entender o problema, é fazer o ambos\n(cliente e engenheiro) desenhar/anotar, uma vez que, quando anotamos,\nnosso cérebro assimila e organiza as ideias.\u003c/p\u003e\n\u003cp\u003eNo momento do planejamento, busque um modelo. 99% das vezes seu problema\njá foi resolvido, e você pode reaproveitar algo que alguém já fez.\u003c/p\u003e","title":"Ciências da computação dia 88"},{"content":"Linked List Não precisa definir o tamanho em sua instância, sendo assim, a memória é alocada dinamicamente; Para fazer inserções, você precisa se deslocar pela lista; Cada elemento da lista (nó), possui dois elementos, o valor e o endereço do próximo nó, no caso do último elemento, como não possui próximo é atribuído NULL; Nesse caso você tem problemas para acessar valores, uma vez que eles não possuem acesso direto aos seus endereços, ou seja, para acessar um certo nó i você precisa passar por todos os que antecedem i ; ** em C Você utiliza ** em C para passar um endereço de um ponteiro\nint *s = malloc(1 * sizeof(int)); func(\u0026amp;s); void func(int **s){//... Isso é útil quando você possui um pointer e você precisa modificar o que está nele, assim você pode chamar sua função usando o \u0026amp;s.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-89-i7bdieibga5d/","summary":"\u003ch3 id=\"linked-list\"\u003eLinked List\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNão precisa definir o tamanho em sua instância, sendo assim, a\nmemória é alocada dinamicamente;\u003c/li\u003e\n\u003cli\u003ePara fazer inserções, você precisa se deslocar pela lista;\u003c/li\u003e\n\u003cli\u003eCada elemento da lista (nó), possui dois elementos, o valor e o\nendereço do próximo nó, no caso do último elemento, como não possui\npróximo é atribuído NULL;\u003c/li\u003e\n\u003cli\u003eNesse caso você tem problemas para acessar valores, uma vez que eles\nnão possuem acesso direto aos seus endereços, ou seja, para acessar\num certo nó \u003cem\u003ei\u003c/em\u003e você precisa passar por todos os que antecedem \u003cem\u003ei\u003c/em\u003e ;\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-emc\"\u003e** em C\u003c/h3\u003e\n\u003cp\u003eVocê utiliza ** em C para passar um endereço de um ponteiro\u003c/p\u003e","title":"Ciências da computação dia 89"},{"content":"Toda vez que você fizer uma soma em alguma base e ela estourar, ou seja passar o maior numero da base(decimal: 10, binário: 10 ou 11) você sobe 1 (carry).\na soma é sempre feita do digito menos significativo (da direita) para o mais significativo(da esquerda).\na soma é feita da mesma forma em binário como em decimal, o que muda é que você vai subir 1 quando a soma for 111 (deixando um em baixo) e 11(deixando 0 em baixo), o mesmo vale para números com vírgula, você faz igual decimal e coloca os números depois da vírgula igual ao original.\nsistemas digitais são mais velozes por vários fatores, mas um deles é porque ele tem que processar apenas dois valores(0, 1).\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-9-39h664fj785d/","summary":"\u003cp\u003eToda vez que você fizer uma soma em alguma base e ela estourar, ou seja\npassar o maior numero da base(decimal: 10, binário: 10 ou 11) você sobe\n1 (carry).\u003c/p\u003e\n\u003cp\u003ea soma é sempre feita do digito menos significativo (da direita) para o\nmais significativo(da esquerda).\u003c/p\u003e\n\u003cp\u003ea soma é feita da mesma forma em binário como em decimal, o que muda é\nque você vai subir 1 quando a soma for 111 (deixando um em baixo) e\n11(deixando 0 em baixo), o mesmo vale para números com vírgula, você faz\nigual decimal e coloca os números depois da vírgula igual ao original.\u003c/p\u003e","title":"Ciências da computação dia 9"},{"content":"Estrutura de dados Na estrutura de dados, quando você tem uma relação N:M, você pode ter uma coluna na tabela da relação que pertence só a relação e não as tabelas que fazem o relacionamento.\nComo escolher qual BD usar? 1 \u0026mdash; A capacidade de dados que o banco aguenta\n2 \u0026mdash; A velocidade do banco\n3 \u0026mdash; Licenças\nCada linha de um banco de dados pode ser chamado de instância da entidade, enquanto cada coluna é um atributo da entidade. Sendo assim cada intersecção entre linha x coluna é um dado.\nPrimary key(atributo determinante) Atributo ou conjunto de atributos que identificam unicamente as tuplas(linhas).\nQuando há múltiplas PK isso é uma chave composta.\nCandidate key Qualquer conjunto de chaves que, pela lógica, poderiam ser chaves primarias, mas por alguma questão, seja por que o atributo aceita nulo, ou algo do tipo, ele não se tornou chave primária.\nForeign key Chave primária de tabelas, que podem ser usadas para criar uma relação entre elas.\nNormalização Regras para criar tabelas (uma forma de deixá-las, mais organizadas e bem estruturadas); Caso não estejam normalizadas, é necessário refazer os modelos E-R e/ou E-D. Regras Normais Primeira regra normal Atributos devem sempre ser simples; Caso haja um atributo composto, você deve decompor ele em vários atributos; Caso haja um atributo multivalorado, você deve criar um tabela só para esse atributo, e criar uma relação entre essa nova tabela e a tabela pai. Segunda regra normal Você precisa estar na primeira regra normal; Todas as outras colunas (as que não são chaves), devem necessitar diretamente da colunas chave; Caso haja colunas que não dependem das chaves, mova-as para tabelas em que elas façam sentido ou senão, simplesmente apague-as. Terceira forma normal Você precisa estar na segunda forma normal; Nenhuma coluna não chave pode depender de outra coluna não chave; Caso haja alguma coluna não chave que depende de outra coluna não chave, delete a coluna que é dependente. Formal normal de Boyce-Codd Versão da terceira forma; Se você tiver descrição e código do produto em uma tabela, você pode tirar a descrição e jogar em outra tabela. Quarta forma normal Você deve estar na terceira forma normal; Se em uma tabela você tiver mais de um valor multivalorado, você deve criar uma tabela para cada um dos atributos multivalorados. Quinta forma normal Você deve estar na quart forma normal; Se você tiver varias tabelas que se relacionam, você não precisa repetir valores entre elas, se há algum valor que você quer mas esta em outra tabela, através do relacionamento você consegue recuperá-lo. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-90-bh20g3c3i5cc/","summary":"\u003ch3 id=\"estrutura-dedados\"\u003eEstrutura de dados\u003c/h3\u003e\n\u003cp\u003eNa estrutura de dados, quando você tem uma relação N:M, você pode ter\numa coluna na tabela da relação que pertence só a relação e não as\ntabelas que fazem o relacionamento.\u003c/p\u003e\n\u003ch3 id=\"como-escolher-qual-bdusar\"\u003eComo escolher qual BD usar?\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; A capacidade de dados que o banco aguenta\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; A velocidade do banco\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; Licenças\u003c/p\u003e\n\u003cp\u003eCada linha de um banco de dados pode ser chamado de instância da\nentidade, enquanto cada coluna é um atributo da entidade. Sendo assim\ncada intersecção entre linha x coluna é um dado.\u003c/p\u003e","title":"Ciências da computação dia 90"},{"content":"Empreendedorismo é Soma das competências (C.H.A.V.E) para fazer algo dar certo; o objeto de estudo é o empreendedor, não a empresa. Dimensões do empreendedorismo Empresas; Autônomos; Intra-empreendedorismo (empregados); Comunitário (ONGs, por exemplo); Políticas públicas (governo, concurso, politico, etc.). Empresário → cara que possui o nome no CNPJ\nEmpreendedor → cara que possui aquelas competências/características para fazer algo acontecer\nJoseph Schumpeter Deu uma definição de empreendedorismo; empreendedor é alguém versátil que possui habilidades para fazer coisas acontecerem. Empreendedor é alguém que sabe como realizar seus objetivos.\nCompetências do empreendedor Firmeza; Coragem; Capacidade de organização e direção; Decisão; Iniciativa; Visão; Atitudes de respeito humano. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-91-gee4ibbhadce/","summary":"\u003ch3 id=\"empreendedorismo-é\"\u003eEmpreendedorismo é\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSoma das competências (C.H.A.V.E) para fazer algo dar certo;\u003c/li\u003e\n\u003cli\u003eo objeto de estudo é o empreendedor, não a empresa.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dimensões-do-empreendedorismo\"\u003eDimensões do empreendedorismo\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEmpresas;\u003c/li\u003e\n\u003cli\u003eAutônomos;\u003c/li\u003e\n\u003cli\u003eIntra-empreendedorismo (empregados);\u003c/li\u003e\n\u003cli\u003eComunitário (ONGs, por exemplo);\u003c/li\u003e\n\u003cli\u003ePolíticas públicas (governo, concurso, politico, etc.).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEmpresário → cara que possui o nome no CNPJ\u003c/p\u003e\n\u003cp\u003eEmpreendedor → cara que possui aquelas competências/características para\nfazer algo acontecer\u003c/p\u003e\n\u003ch3 id=\"joseph-schumpeter\"\u003eJoseph Schumpeter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeu uma definição de empreendedorismo;\u003c/li\u003e\n\u003cli\u003eempreendedor é alguém versátil que possui habilidades para fazer\ncoisas acontecerem.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"empreendedor\"\u003eEmpreendedor\u003c/h3\u003e\n\u003cp\u003eé alguém que sabe como realizar seus objetivos.\u003c/p\u003e","title":"Ciências da computação dia 91"},{"content":" POO possui foco nos dados (objetos) do sistema, não em suas funções!\nClasses Métodos e atributos que o objeto terá; Determina o tipo do objeto; Pode ser instanciado N vezes. Objeto Uma instância de uma classe; Possui os métodos e atributos da classe encapsulado dentro dele; Armazena um endereço de onde ele foi instanciado. Método Funções dentro da classe que manipulam os atributos. Atributos Dados pertencentes à uma classe; Método construtor Função que é executada assim que o objeto é instanciado; Em java essa função tem o mesmo nome da classe, ele também não possui tipo e no geral é public; public class Example{ public Example(){ //construtor Encapsulamento visa esconder detalhes de implementação; objeto deve possui uma parte privada que só pode ser acessado internamente na classe; a parte privada, só pode ser acessada por métodos públicos (interface) que trata a entrada antes; atributos, no geral, devem ser private; fazendo isso o objeto só se comporta de uma certa maneira, já pensada. Sobrecarga de métodos uso de múltiplos métodos com o mesmo nome; isso é possível desde que possuam argumentos diferentes; se uma classe possui tipos diferentes, mesmo nome, mas argumentos diferentes, isso retorna um erro; Você pode ter outras funções com o nome da classe além do método construtor, basta você atribuir um tipo à função que assim ela não será mais considerada método construtor; Se você tiver o constructor e outra função com o nome da classe, isso não se encaixa em sobrecarga de métodos. Quando você não adiciona public, private ou protected, o elemento é considerado \u0026ldquo;default\u0026rdquo; em java.\nO default possui um comportamento um pouco mais restritivo perante o public.\no private é mais restritivo, apenas dentro da classe ele pode ser usado.\no protected faz com que algo seja visto apenas dentro do mesmo package e subclasses.\nprivate e protected, geralmente, não são usados em constructors.\nse você tiver fazendo uma função para sua classe, e o parâmetro possui o mesmo nome de um atributo, se você fizer\npublic void test(int a){ a = a; } a variável que o java se referirá é a \u0026ldquo;mais próxima\u0026rdquo;, ou seja a variável local. Para fazer da maneira correta use o this\npublic void test(int a){ this.a = a; } ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-92-c8g42ih4ddb7/","summary":"\u003cblockquote\u003e\n\u003cp\u003ePOO possui foco nos dados (objetos) do sistema, não em suas funções!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"classes\"\u003eClasses\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMétodos e atributos que o objeto terá;\u003c/li\u003e\n\u003cli\u003eDetermina o tipo do objeto;\u003c/li\u003e\n\u003cli\u003ePode ser instanciado N vezes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"objeto\"\u003eObjeto\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUma instância de uma classe;\u003c/li\u003e\n\u003cli\u003ePossui os métodos e atributos da classe encapsulado dentro dele;\u003c/li\u003e\n\u003cli\u003eArmazena um endereço de onde ele foi instanciado.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"método\"\u003eMétodo\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFunções dentro da classe que manipulam os atributos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"atributos\"\u003eAtributos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDados pertencentes à uma classe;\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"método-construtor\"\u003eMétodo construtor\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFunção que é executada assim que o objeto é instanciado;\u003c/li\u003e\n\u003cli\u003eEm java essa função tem o mesmo nome da classe, ele também não\npossui tipo e no geral é public;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epublic class Example{\n  public Example(){ //construtor\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"encapsulamento\"\u003eEncapsulamento\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003evisa esconder detalhes de implementação;\u003c/li\u003e\n\u003cli\u003eobjeto deve possui uma parte privada que só pode ser acessado\ninternamente na classe;\u003c/li\u003e\n\u003cli\u003ea parte privada, só pode ser acessada por métodos públicos\n(interface) que trata a entrada antes;\u003c/li\u003e\n\u003cli\u003eatributos, no geral, devem ser private;\u003c/li\u003e\n\u003cli\u003efazendo isso o objeto só se comporta de uma certa maneira, já\npensada.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"sobrecarga-demétodos\"\u003eSobrecarga de métodos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euso de múltiplos métodos com o mesmo nome;\u003c/li\u003e\n\u003cli\u003eisso é possível desde que possuam argumentos diferentes;\u003c/li\u003e\n\u003cli\u003ese uma classe possui tipos diferentes, mesmo nome, mas argumentos\ndiferentes, isso retorna um erro;\u003c/li\u003e\n\u003cli\u003eVocê pode ter outras funções com o nome da classe além do método\nconstrutor, basta você atribuir um tipo à função que assim ela não\nserá mais considerada método construtor;\u003c/li\u003e\n\u003cli\u003eSe você tiver o constructor e outra função com o nome da classe,\nisso não se encaixa em sobrecarga de métodos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eQuando você não adiciona public, private ou protected, o elemento é\nconsiderado \u0026ldquo;default\u0026rdquo; em java.\u003c/p\u003e","title":"Ciências da computação dia 92"},{"content":" Uma feature não é uma qualidade software. Ou seja, o software ser rápido não é uma feature!\nRequisito de software Uma funcionalidade/característica que o software tem. Sendo assim um software é um conjunto de requisitos.\nEngenharia de requisitos Vai da primeira ação da engenharia de software até a modelagem; não faça apenas um conversa com o cliente; Estabelece uma base sólida para o projeto; Requisitos de usuário (ou história de usuário) O que o usuário pede do sistema. Requisito de sistema feito a partir do Requisitos de usuário; Descrições mais detalhadas; Aquilo que vai ser implementado; Quebra do requisito do usuário em partes mais detalhadas, que explica o que o sistema vai fazer, fazendo isso de forma que um desenvolvedor consiga entender e implementar no sistema de forma mais fácil. Especificação de requisitos de sistema listagem dos requisitos do sistema. Regras de negócio Regras que o sistema segue; O que o sistema faz e como ele faz; Consigo pegar através do levantamento dos requisitos de usuário e transformação para requisitos de sistema. 7 tarefas da engenharia de software 1 \u0026mdash; concepção onde nasce a ideia/problema. 2 \u0026mdash; levantamento Pega os requisitos de usuário e começa a extrair os requisitos de sistema. 3 \u0026mdash; elaboração Refinamento dos requisitos; Criar diagramas para que sejam entendidos de uma forma mais fácil. 4 \u0026mdash; negociação Ver com o cliente quais requisitos são mais importantes. 5 \u0026mdash; especificação Documentação de requisitos; Uso do SRS por exemplo. 6 \u0026mdash; validação Apresenta à documentação ao cliente para ele verificar se é o que ele quer mesmo; Documentação precisa estar clara. 7 \u0026mdash; gestão Gerenciamento da lista de requisitos, sempre negociada com o cliente. Backlog Lista de requisitos. Se o cliente fala que seria legal ter algo no sistema. É por que você não é tão importante.\nProject Owner(PO) Pessoa que gerencia os requisitos. Stakeholders todos os interessados no projeto. Requisitos funcionais Funcionalidades do software; Completude → Devem ser levantados todos os requisitos muito importantes para o que o software funcione à priori; Consistência → Um requisito não pode anular outro. Requisitos não funcionais Características do sistema (ser rápido e ser web, por exemplo). ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-93-94h69daag98c9/","summary":"\u003cblockquote\u003e\n\u003cp\u003eUma feature não é uma qualidade software. Ou seja, o software ser\nrápido não é uma feature!\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"requisito-desoftware\"\u003eRequisito de software\u003c/h3\u003e\n\u003cp\u003eUma funcionalidade/característica que o software tem. Sendo assim um\nsoftware é um conjunto de requisitos.\u003c/p\u003e\n\u003ch3 id=\"engenharia-de-requisitos\"\u003eEngenharia de requisitos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eVai da primeira ação da engenharia de software até a modelagem;\u003c/li\u003e\n\u003cli\u003enão faça apenas um conversa com o cliente;\u003c/li\u003e\n\u003cli\u003eEstabelece uma base sólida para o projeto;\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"requisitos-de-usuário-ou-história-deusuário\"\u003eRequisitos de usuário (ou história de usuário)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eO que o usuário pede do sistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"requisito-desistema\"\u003eRequisito de sistema\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeito a partir do Requisitos de usuário;\u003c/li\u003e\n\u003cli\u003eDescrições mais detalhadas;\u003c/li\u003e\n\u003cli\u003eAquilo que vai ser implementado;\u003c/li\u003e\n\u003cli\u003eQuebra do requisito do usuário em partes mais detalhadas, que\nexplica o que o sistema vai fazer, fazendo isso de forma que um\ndesenvolvedor consiga entender e implementar no sistema de forma\nmais fácil.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"especificação-de-requisitos-desistema\"\u003eEspecificação de requisitos de sistema\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003elistagem dos requisitos do sistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"regras-denegócio\"\u003eRegras de negócio\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegras que o sistema segue;\u003c/li\u003e\n\u003cli\u003eO que o sistema faz e como ele faz;\u003c/li\u003e\n\u003cli\u003eConsigo pegar através do levantamento dos requisitos de usuário e\ntransformação para requisitos de sistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"7-tarefas-da-engenharia-desoftware\"\u003e7 tarefas da engenharia de software\u003c/h3\u003e\n\u003ch4 id=\"1concepção\"\u003e1 \u0026mdash; concepção\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eonde nasce a ideia/problema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"2levantamento\"\u003e2 \u0026mdash; levantamento\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePega os requisitos de usuário e começa a extrair os requisitos de\nsistema.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"3elaboração\"\u003e3 \u0026mdash; elaboração\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eRefinamento dos requisitos;\u003c/li\u003e\n\u003cli\u003eCriar diagramas para que sejam entendidos de uma forma mais fácil.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"4negociação\"\u003e4 \u0026mdash; negociação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eVer com o cliente quais requisitos são mais importantes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"5especificação\"\u003e5 \u0026mdash; especificação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentação de requisitos;\u003c/li\u003e\n\u003cli\u003eUso do SRS por exemplo.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"6validação\"\u003e6 \u0026mdash; validação\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eApresenta à documentação ao cliente para ele verificar se é o que\nele quer mesmo;\u003c/li\u003e\n\u003cli\u003eDocumentação precisa estar clara.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"7gestão\"\u003e7 \u0026mdash; gestão\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eGerenciamento da lista de requisitos, sempre negociada com o\ncliente.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"backlog\"\u003eBacklog\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLista de requisitos.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003eSe o cliente fala que seria legal ter algo no sistema. É por que você\nnão é tão importante.\u003c/p\u003e","title":"Ciências da computação dia 93"},{"content":"Ao utilizar ponteiros em C, precisamos sempre limpar essa memória quando ela não está sendo mais utilizada. Para isso use a função free presente em stdlib.h.\nNo caso das linked lists, podemos utilizar essa função para remover nodes da lista.\nObs: lembre sempre que ao remover um node, você deve atualizar a referência do next, ou ou do node inicial dos nodes ao redor do que foi removido.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-94-28246ig4548/","summary":"\u003cp\u003eAo utilizar ponteiros em C, precisamos sempre limpar essa memória quando\nela não está sendo mais utilizada. Para isso use a função \u003cem\u003efree\u003c/em\u003e\npresente em \u003cem\u003estdlib.h.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eNo caso das linked lists, podemos utilizar essa função para remover\nnodes da lista.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eObs: lembre sempre que ao remover um node, você deve atualizar a\nreferência do next, ou ou do node inicial dos nodes ao redor do que foi\nremovido.\u003c/em\u003e\u003c/p\u003e","title":"Ciências da computação dia 94"},{"content":"Tipos entre bancos, os formatos (nome, tamanho, etc.) não são padronizados; datetime → hora e data; blob → grande volume de dados, como imagens, etc; nulo → valor inexistente, não vazio; decimal(9, 2) → quantidade total de números é 9, e o total de casas decimais é 2, sendo assim tenho 7 dígitos antes da vírgula (isso em MYSQL). Para um ip ter mais de um serviço rodando, são utilizadas portas.\nRelacionamento identificador Foreign key também é uma primary key Relacionamento não identificador Foreign key não é primária. PK por padrão são not null e seus valores não se repetem.\nRegra de filhos órfãos não posso deletar uma tabela ou coluna pai, sem deletar antes os seus filhos. Relacionamento N:M é sempre identificador e ele cria uma tabela com as PK de cada uma das tabelas envolvidas. Também é possível adicionar colunas extras nessa tabela criada pelo relacionamento.\nTabelas que foram criadas para substituir campos multi-valorados, geralmente, temos o atributo também é PK\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-95-g602170jj7e2/","summary":"\u003ch3 id=\"tipos\"\u003eTipos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eentre bancos, os formatos (nome, tamanho, etc.) não são\npadronizados;\u003c/li\u003e\n\u003cli\u003edatetime → hora e data;\u003c/li\u003e\n\u003cli\u003eblob → grande volume de dados, como imagens, etc;\u003c/li\u003e\n\u003cli\u003enulo → valor inexistente, não vazio;\u003c/li\u003e\n\u003cli\u003edecimal(9, 2) → quantidade total de números é 9, e o total de casas\ndecimais é 2, sendo assim tenho 7 dígitos antes da vírgula (isso em\nMYSQL).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePara um ip ter mais de um serviço rodando, são utilizadas portas.\u003c/p\u003e","title":"Ciências da computação dia 95"},{"content":"Mandamentos do empreendedor 1 \u0026mdash; tenha iniciativa e curiosidade\n2 \u0026mdash; seja persistente nas metas e flexível nas estratégias\n3 \u0026mdash; calcule os riscos\n4 \u0026mdash; persiga sempre a máxima eficiência (fazer o melhor com o que você tem)\n5 \u0026mdash; comprometa-se com seu projeto\n6 \u0026mdash; estude o mercado\n7 \u0026mdash; estabeleça metas(longo prazo ~3anos, médio prazo ~1.5ano, curto prazo ~1ano)\n8 \u0026mdash; faça um plano de negócios\n9 \u0026mdash; desenvolva seu espírito de liderança\n10 \u0026mdash; acredite em você\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-96-i8gbgai3ch33/","summary":"\u003ch3 id=\"mandamentos-do-empreendedor\"\u003eMandamentos do empreendedor\u003c/h3\u003e\n\u003cp\u003e1 \u0026mdash; tenha iniciativa e curiosidade\u003c/p\u003e\n\u003cp\u003e2 \u0026mdash; seja persistente nas metas e flexível nas estratégias\u003c/p\u003e\n\u003cp\u003e3 \u0026mdash; calcule os riscos\u003c/p\u003e\n\u003cp\u003e4 \u0026mdash; persiga sempre a máxima eficiência (fazer o melhor com o que você\ntem)\u003c/p\u003e\n\u003cp\u003e5 \u0026mdash; comprometa-se com seu projeto\u003c/p\u003e\n\u003cp\u003e6 \u0026mdash; estude o mercado\u003c/p\u003e\n\u003cp\u003e7 \u0026mdash; estabeleça metas(longo prazo ~3anos, médio prazo ~1.5ano, curto\nprazo ~1ano)\u003c/p\u003e\n\u003cp\u003e8 \u0026mdash; faça um plano de negócios\u003c/p\u003e\n\u003cp\u003e9 \u0026mdash; desenvolva seu espírito de liderança\u003c/p\u003e","title":"Ciências da computação dia 96"},{"content":"Quando há mais de uma classe em um arquivo .java, apenas 1 delas deve ser public e essa deve ter o mesmo nome do arquivo.\n","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-97-15g2c45ghf8g/","summary":"\u003cp\u003eQuando há mais de uma classe em um arquivo .java, apenas 1 delas deve\nser public e essa deve ter o mesmo nome do arquivo.\u003c/p\u003e","title":"Ciências da computação dia 97"},{"content":"requisitos)\nrequisito de usuário uma primeira escrita de qual vai ser a solução; feito pelo engenheiro de software, de forma que seja fácil de qualquer pessoa entender. requisitos de sistema escritos pelos e para os desenvolvedores. login e senha pode ser um requisito não funcional, uma vez que você descreve-lo como \u0026ldquo;estar protegido por login e senha\u0026rdquo;.\nPara fazer um sistema ser fácil de usar, siga o padrão de outros apps mais usados.\nHistória de usuário praticamente um requisito de usuário, mas com um formato padrão; você sempre possui um ator(quem), o que ele quer(o que) e porque ele quer (para que); usado no SCRUM; Por possuir o quem, ele ajuda a encontrar os stakeholders. exemplo: \u0026ldquo;Como funcionário da biblioteca, eu quero que o sistema envie e-mails de cobrança para os alunos, para que nenhum livro seja perdido\u0026rdquo;.\nCasos de uso diagrama (semelhante com um grafo), que define quem são os atores e suas ações no sistema. ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-98-h3a7j7e7e9j8/","summary":"\u003cp\u003erequisitos)\u003c/p\u003e\n\u003ch3 id=\"requisito-deusuário\"\u003erequisito de usuário\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euma primeira escrita de qual vai ser a solução;\u003c/li\u003e\n\u003cli\u003efeito pelo engenheiro de software, de forma que seja fácil de\nqualquer pessoa entender.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"requisitos-desistema\"\u003erequisitos de sistema\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eescritos pelos e para os desenvolvedores.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003elogin e senha pode ser um requisito não funcional, uma vez que você\ndescreve-lo como \u0026ldquo;estar protegido por login e senha\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003ePara fazer um sistema ser fácil de usar, siga o padrão de outros apps\nmais usados.\u003c/p\u003e","title":"Ciências da computação dia 98"},{"content":"SQL (Structured query language) geralmente usado em bancos relacionais; feito pela IBM para implementar o modelo relacional; SQL é padronizado pela ANSI e ISO, sendo que a versão padrão é chamada de SQL ANSI. DDL linguagem que define a estrutura do banco; comandos: create, alter, drop, comment; os comandos são usados para manipular objetos como: tables, procedures, views, functions, triggers, etc. DML manipulação dos dados; comandos: insert, update, delete, etc. DQL consulta dos dados; comando: select. DCL (data control language) controla acessos; comandos: grant, revoke; isso pode ser usado para deixar um usuário acessar, apenas um table, apenas algumas colunas, etc. DTL (data transaction language) define um escopo de transformações do banco que só seria aplicado quando todas as transações forem feitas com sucesso; comandos: Begin transaction, commit, rollback. Isso garante que todas as transações sejam feitas de forma integra, mesmo que aconteçam problemas, como falta de energia. #cria um banco CREATE DATABASE test; #ou CREATE SCHEMA test; #(a partir da V8 do mysql) # muda para o banco criado USE test; # criando tabelas CREATE TABLE test1 ( id INT UNSIGNED NOT NULL, name VARCHAR(80) NOT NULL, age INT UNSIGNED NULL, sex CHAR(1) NULL \u0026#39;M\u0026#39;, #chaves CONSTRAINT pk_test1_id PRIMARY KEY(id), CONSTRAINT chk_test1_age CHECK(age \u0026gt; 18), #garante que todos sejam 18+ CONSTRAINT fk_test1_test2 FOREIGN KEY(id) #chave estrangeira REFERENCES test2(id) ); CREATE TABLE test2 ( id INT UNSIGNED NOT NULL, card_number CHAR(16) NOT NULL ); #Mostra os tipos das colunas e suas configurações DESCRIBE test1; DESCRIBE test2; #ou DESC test1; DESC test2; UNIQUE constraint semelhante à PK; não aceita valores duplicados; aceita NULL. CHECK constraint; defini uma relação entre uma coluna e um valor (que pode ser o de outra coluna também). Alguns tipos de dados TINYINT → 1 byte; SMALLINT → 2 bytes; MEDIUMINT → 3 bytes; INT → 4 bytes; BIGINT → 8 bytes; DECIMAL → DECIMAL(N, M), N é total de números com default em 10, M é o total de números depois da vírgula com default em 0; FLOAT → possui mesmo formato do DECIMAL; DOUBLE; DATE → formato YYYY-MM-DD; DATETIME → data e hora no formato YYYY-MM-DD HH:MI:SS CHAR → string com tamanho fixo( CHAR(N) ); VARCHAR → string com tamanho variável ( VARCHAR(N) ), apenas os espaços ocupados serão usados; TEXT; BLOB → binários; BIGBLOB; BIGTEXT; ","permalink":"https://dpbm.vercel.app/posts/ciencias-da-computacao-dia-99-ga67eg77c7i5/","summary":"\u003ch3 id=\"sql-structured-query-language\"\u003eSQL (Structured query language)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003egeralmente usado em bancos relacionais;\u003c/li\u003e\n\u003cli\u003efeito pela IBM para implementar o modelo relacional;\u003c/li\u003e\n\u003cli\u003eSQL é padronizado pela ANSI e ISO, sendo que a versão padrão é\nchamada de SQL ANSI.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"ddl\"\u003eDDL\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003elinguagem que define a estrutura do banco;\u003c/li\u003e\n\u003cli\u003ecomandos: create, alter, drop, comment;\u003c/li\u003e\n\u003cli\u003eos comandos são usados para manipular objetos como: tables,\nprocedures, views, functions, triggers, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dml\"\u003eDML\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003emanipulação dos dados;\u003c/li\u003e\n\u003cli\u003ecomandos: insert, update, delete, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dql\"\u003eDQL\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econsulta dos dados;\u003c/li\u003e\n\u003cli\u003ecomando: select.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dcl-data-control-language\"\u003eDCL (data control language)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econtrola acessos;\u003c/li\u003e\n\u003cli\u003ecomandos: grant, revoke;\u003c/li\u003e\n\u003cli\u003eisso pode ser usado para deixar um usuário acessar, apenas um table,\napenas algumas colunas, etc.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"dtl-data-transaction-language\"\u003eDTL (data transaction language)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edefine um escopo de transformações do banco que só seria aplicado\nquando todas as transações forem feitas com sucesso;\u003c/li\u003e\n\u003cli\u003ecomandos: Begin transaction, commit, rollback.\u003c/li\u003e\n\u003cli\u003eIsso garante que todas as transações sejam feitas de forma integra,\nmesmo que aconteçam problemas, como falta de energia.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#cria um banco\n\nCREATE DATABASE test;\n#ou\nCREATE SCHEMA test; #(a partir da V8 do mysql)\n\n\n# muda para o banco criado\nUSE test;\n\n\n# criando tabelas\nCREATE TABLE test1 (\n  id INT UNSIGNED NOT NULL,\n  name VARCHAR(80) NOT NULL,\n  age INT UNSIGNED NULL,\n  sex CHAR(1) NULL \u0026#39;M\u0026#39;,\n  \n  \n  #chaves\n  CONSTRAINT pk_test1_id PRIMARY KEY(id),\n  CONSTRAINT chk_test1_age CHECK(age \u0026gt; 18), #garante que todos sejam 18+\n  CONSTRAINT fk_test1_test2 FOREIGN KEY(id) #chave estrangeira\n    REFERENCES test2(id)\n);\n\n\nCREATE TABLE test2 (\n  id INT UNSIGNED NOT NULL,\n  card_number CHAR(16) NOT NULL\n);\n\n\n#Mostra os tipos das colunas e suas configurações\nDESCRIBE test1;\nDESCRIBE test2;\n#ou\nDESC test1;\nDESC test2;\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"unique\"\u003eUNIQUE\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econstraint semelhante à PK;\u003c/li\u003e\n\u003cli\u003enão aceita valores duplicados;\u003c/li\u003e\n\u003cli\u003eaceita NULL.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"check\"\u003eCHECK\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003econstraint;\u003c/li\u003e\n\u003cli\u003edefini uma relação entre uma coluna e um valor (que pode ser o de\noutra coluna também).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"alguns-tipos-dedados\"\u003eAlguns tipos de dados\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTINYINT → 1 byte;\u003c/li\u003e\n\u003cli\u003eSMALLINT → 2 bytes;\u003c/li\u003e\n\u003cli\u003eMEDIUMINT → 3 bytes;\u003c/li\u003e\n\u003cli\u003eINT → 4 bytes;\u003c/li\u003e\n\u003cli\u003eBIGINT → 8 bytes;\u003c/li\u003e\n\u003cli\u003eDECIMAL → DECIMAL(N, M), N é total de números com default em 10, M é\no total de números depois da vírgula com default em 0;\u003c/li\u003e\n\u003cli\u003eFLOAT → possui mesmo formato do DECIMAL;\u003c/li\u003e\n\u003cli\u003eDOUBLE;\u003c/li\u003e\n\u003cli\u003eDATE → formato YYYY-MM-DD;\u003c/li\u003e\n\u003cli\u003eDATETIME → data e hora no formato YYYY-MM-DD HH:MI:SS\u003c/li\u003e\n\u003cli\u003eCHAR → string com tamanho fixo( CHAR(N) );\u003c/li\u003e\n\u003cli\u003eVARCHAR → string com tamanho variável ( VARCHAR(N) ), apenas os\nespaços ocupados serão usados;\u003c/li\u003e\n\u003cli\u003eTEXT;\u003c/li\u003e\n\u003cli\u003eBLOB → binários;\u003c/li\u003e\n\u003cli\u003eBIGBLOB;\u003c/li\u003e\n\u003cli\u003eBIGTEXT;\u003c/li\u003e\n\u003c/ul\u003e","title":"Ciências da computação dia 99"},{"content":" Características e comportamentos de um objeto Representa algo que seja abstrato, um substantivo (pessoa, lugar, objeto real, etc) Molde de algum objeto, uma representação genérica para coisas de mesmo tipo Características Visibilidade → público, privado, protegido Membros → características e ações Ex:\nMain.java class Main { public static void main(String args[]) { Person Jorge = new Person(); Jorge.name = “Jorge”; Jorge.age = 40; Jorge.weight = 92.30; Jorge.height = 2.0; System.out.println(Jorge.name); Jorge.sayYourName(); } Person.java public class Person { public String name; public int age; public double weight; public double height; public void sayYourName(){ System.out.printf(“hello my name is: %s\\n”, name); } } Objetos Instância de uma classe Todos os atributos estados Atributos Variáveis ou campos de uma classe Características do objeto Métodos Ações que o objeto pode fazer Ações que podem interagir entre objetos e seus atributos Verbos Construtor Função que inicializa os atributos de uma classe ao ser instanciada Ao instanciar você coloca os atributos iniciais _init em python, nome da classe em formato de função em java, constructor() em js Por padrão o compilador cria um construtor com valores nulos, sendo assim quando você usa new ClassName() ← você está usando o construtor padrão Programação Orientada a Objetos em Java\n*Artigos Java Introdução à Programação Orientada a Objetos em Java Nos desenvolvimentos de sistemas, existem alguns\u0026hellip;*www.devmedia.com.br\n","permalink":"https://dpbm.vercel.app/posts/classes-d776e5ig3ed6/","summary":"\u003cul\u003e\n\u003cli\u003eCaracterísticas e comportamentos de um objeto\u003c/li\u003e\n\u003cli\u003eRepresenta algo que seja abstrato, um substantivo (pessoa, lugar,\nobjeto real, etc)\u003c/li\u003e\n\u003cli\u003eMolde de algum objeto, uma representação genérica para coisas de\nmesmo tipo\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"características\"\u003eCaracterísticas\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eVisibilidade → público, privado, protegido\u003c/li\u003e\n\u003cli\u003eMembros → características e ações\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEx:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-java\" data-lang=\"java\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eMain.\u003cspan style=\"color:#a6e22e\"\u003ejava\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eMain\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003estatic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e(String args\u003cspan style=\"color:#f92672\"\u003e[]\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Person Jorge \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003enew\u003c/span\u003e Person();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Jorge.\u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e“\u003c/span\u003eJorge\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e”\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Jorge.\u003cspan style=\"color:#a6e22e\"\u003eage\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 40;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Jorge.\u003cspan style=\"color:#a6e22e\"\u003eweight\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 92.\u003cspan style=\"color:#a6e22e\"\u003e30\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Jorge.\u003cspan style=\"color:#a6e22e\"\u003eheight\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 2.\u003cspan style=\"color:#a6e22e\"\u003e0\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    System.\u003cspan style=\"color:#a6e22e\"\u003eout\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eprintln\u003c/span\u003e(Jorge.\u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    Jorge.\u003cspan style=\"color:#a6e22e\"\u003esayYourName\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ePerson.\u003cspan style=\"color:#a6e22e\"\u003ejava\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eclass\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ePerson\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e String name;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e age;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003edouble\u003c/span\u003e weight;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003edouble\u003c/span\u003e height;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003epublic\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esayYourName\u003c/span\u003e(){\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    System.\u003cspan style=\"color:#a6e22e\"\u003eout\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e“\u003c/span\u003ehello my name is: \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003es\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\\\u003c/span\u003en\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e”\u003c/span\u003e, name);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"objetos\"\u003eObjetos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eInstância de uma classe\u003c/li\u003e\n\u003cli\u003eTodos os atributos estados\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"atributos\"\u003eAtributos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eVariáveis ou campos de uma classe\u003c/li\u003e\n\u003cli\u003eCaracterísticas do objeto\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"métodos\"\u003eMétodos\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAções que o objeto pode fazer\u003c/li\u003e\n\u003cli\u003eAções que podem interagir entre objetos e seus atributos\u003c/li\u003e\n\u003cli\u003eVerbos\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"construtor\"\u003eConstrutor\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFunção que inicializa os atributos de uma classe ao ser instanciada\u003c/li\u003e\n\u003cli\u003eAo instanciar você coloca os atributos iniciais\u003c/li\u003e\n\u003cli\u003e_init em python, nome da classe em formato de função em java,\nconstructor() em js\u003c/li\u003e\n\u003cli\u003ePor padrão o compilador cria um construtor com valores nulos, sendo\nassim quando você usa new ClassName() ← você está usando o\nconstrutor padrão\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://www.devmedia.com.br/introducao-a-programacao-orientada-a-objetos-em-java/26452\"\u003e\u003cstrong\u003eProgramação Orientada a Objetos em Java\u003c/strong\u003e\u003cbr\u003e\n*Artigos Java Introdução à Programação Orientada a Objetos em Java Nos\ndesenvolvimentos de sistemas, existem\nalguns\u0026hellip;*www.devmedia.com.br\u003c/a\u003e\u003c/p\u003e","title":"Classes"},{"content":"https://digital.com/best-software-development-companies/program-your-own-os\nhttps://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf\nhttps://os.phil-opp.com\nhttps://0xc0d1.com/learning/writing-an-os-in-rust\nhttps://jvns.ca/blog/2014/03/12/the-rust-os-story\nhttps://blog.knoldus.com/os-in-rust-custom-target-to-build-kernel-for-a-bare-metal-part-3\nhttps://wiki.osdev.org/Getting_Started\nhttps://dev.to/nsadisha/build-your-own-operating-system-2implementingc-5aa9\nhttps://medium.com/@iam_vinojan/build-your-own-operating-system-os-431e7716a1d1\nhttps://www.freecodecamp.org/news/free-tutorial-mega-list-how-to-build-your-own-cryptocurrency-operating-system-programming-d72593cfa75d\nhttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/screen01.html\nhttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/input01.html\nhttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os\nhttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ok01.html\nhttps://en.wikipedia.org/wiki/Operating_system\nhttps://en.wikipedia.org/wiki/Bring_your_own_operating_system\nhttps://www.linuxfromscratch.org\nhttp://joebergeron.io/posts/post_two.html\nhttp://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html\nhttps://www.youtube.com/watch?v=ZjwvMcP3Nf0\u0026amp;list=PLU94OURih-CiP4WxKSMt3UcwMSDM3aTtX\nhttps://tuhdo.github.io/os01\nhttps://littleosbook.github.io\nhttp://jamesmolloy.co.uk/tutorial_html\nhttps://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel\nhttps://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard\nhttps://github.com/jserv/mini-arm-os\nhttps://github.com/cfenollosa/os-tutorial\nhttps://danluu.com/malloc-tutorial\nhttps://blog.holbertonschool.com/hack-the-virtual-memory-c-strings-proc\nhttps://github.com/s-matyukevich/raspberry-pi-os\nhttps://medium.com/@lduck11007/operating-systems-development-for-dummies-3d4d786e8ac\nhttps://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M\nhttp://3zanders.co.uk/2017/10/13/writing-a-bootloader\nhttp://pacman128.github.io/pcasm\nhttps://cupola.gettysburg.edu/cgi/viewcontent.cgi?article=1001\u0026amp;context=oer\nhttps://chortle.ccsu.edu/assemblytutorial/index.html\nhttps://www.utdallas.edu/~pervin/RPiA/RPiA.pdf\nhttps://rofi.roger-ferrer.org\nhttps://github.com/rofirrim\nhttps://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1\nhttps://www.tutorialspoint.com/operating_system/index.htm\nhttps://www.tutorialspoint.com/assembly_programming/index.htm\nhttp://www.egr.unlv.edu/~ed/x86.html\nhttps://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Intel%20x86%20Assembly.pdf\nhttp://webster.cs.ucr.edu\nhttps://beginners.re\nhttps://cs.lmu.edu/~ray/notes/x86assembly\nhttps://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/asm%20-%20windows%20assembly%20language%20and%20systems%20programming.pdf\nhttp://index-of.co.uk/SISTEMAS-OPERATIVOS/PaulOS%20-%20A%20Real%20Time%20OS%20for%208051%20(part%20I).pdf\nhttp://www.egr.unlv.edu/~ed/mips.html\nhttps://chortle.ccsu.edu/assemblytutorial/index.html\nhttps://www-cs-faculty.stanford.edu/~knuth/taocp.html\nhttps://github.com/jagregory/abrash-black-book\nhttps://www.davidsalomon.name/assem.advertis/AssemAd.html\nhttp://www.z80.info/zip/zaks_book.pdf\nhttps://www-cs-faculty.stanford.edu/~knuth/mmixware.html\nEncontre mais em: Build Your Own X\n*This repo is forked from awesome anistefanovic/build-your-own-x , site is created and maintained by Kalan which\u0026hellip;*build-your-own-x.vercel.app\nFree Computer, Programming, Mathematics, Technical Books, Lecture Notes and Tutorials\n*Links to Free Computer, Mathematics, Technical eBooks and Lecture Notes all over the World, Directory of online free\u0026hellip;*freecomputerbooks.com\n","permalink":"https://dpbm.vercel.app/posts/links-uteis-para-quem-quer-criar-um-sistema-operacional-j3h47faf5g1e/","summary":"\u003cp\u003e\u003ca href=\"https://digital.com/best-software-development-companies/program-your-own-os\"\u003ehttps://digital.com/best-software-development-companies/program-your-own-os\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf\"\u003ehttps://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://os.phil-opp.com\"\u003ehttps://os.phil-opp.com\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://0xc0d1.com/learning/writing-an-os-in-rust\"\u003ehttps://0xc0d1.com/learning/writing-an-os-in-rust\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://jvns.ca/blog/2014/03/12/the-rust-os-story\"\u003ehttps://jvns.ca/blog/2014/03/12/the-rust-os-story\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blog.knoldus.com/os-in-rust-custom-target-to-build-kernel-for-a-bare-metal-part-3\"\u003ehttps://blog.knoldus.com/os-in-rust-custom-target-to-build-kernel-for-a-bare-metal-part-3\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://wiki.osdev.org/Getting_Started\"\u003ehttps://wiki.osdev.org/Getting_Started\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://dev.to/nsadisha/build-your-own-operating-system-2implementingc-5aa9\"\u003ehttps://dev.to/nsadisha/build-your-own-operating-system-2implementingc-5aa9\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://medium.com/@iam_vinojan/build-your-own-operating-system-os-431e7716a1d1\"\u003ehttps://medium.com/@iam_vinojan/build-your-own-operating-system-os-431e7716a1d1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.freecodecamp.org/news/free-tutorial-mega-list-how-to-build-your-own-cryptocurrency-operating-system-programming-d72593cfa75d\"\u003ehttps://www.freecodecamp.org/news/free-tutorial-mega-list-how-to-build-your-own-cryptocurrency-operating-system-programming-d72593cfa75d\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/screen01.html\"\u003ehttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/screen01.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/input01.html\"\u003ehttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/input01.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os\"\u003ehttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ok01.html\"\u003ehttps://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ok01.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Operating_system\"\u003ehttps://en.wikipedia.org/wiki/Operating_system\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://en.wikipedia.org/wiki/Bring_your_own_operating_system\"\u003ehttps://en.wikipedia.org/wiki/Bring_your_own_operating_system\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.linuxfromscratch.org\"\u003ehttps://www.linuxfromscratch.org\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://joebergeron.io/posts/post_two.html\"\u003ehttp://joebergeron.io/posts/post_two.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html\"\u003ehttp://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/watch?v=ZjwvMcP3Nf0\u0026amp;list=PLU94OURih-CiP4WxKSMt3UcwMSDM3aTtX\"\u003ehttps://www.youtube.com/watch?v=ZjwvMcP3Nf0\u0026amp;list=PLU94OURih-CiP4WxKSMt3UcwMSDM3aTtX\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://tuhdo.github.io/os01\"\u003ehttps://tuhdo.github.io/os01\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://littleosbook.github.io\"\u003ehttps://littleosbook.github.io\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://jamesmolloy.co.uk/tutorial_html\"\u003ehttp://jamesmolloy.co.uk/tutorial_html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel\"\u003ehttps://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard\"\u003ehttps://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/jserv/mini-arm-os\"\u003ehttps://github.com/jserv/mini-arm-os\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/cfenollosa/os-tutorial\"\u003ehttps://github.com/cfenollosa/os-tutorial\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://danluu.com/malloc-tutorial\"\u003ehttps://danluu.com/malloc-tutorial\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blog.holbertonschool.com/hack-the-virtual-memory-c-strings-proc\"\u003ehttps://blog.holbertonschool.com/hack-the-virtual-memory-c-strings-proc\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/s-matyukevich/raspberry-pi-os\"\u003ehttps://github.com/s-matyukevich/raspberry-pi-os\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://medium.com/@lduck11007/operating-systems-development-for-dummies-3d4d786e8ac\"\u003ehttps://medium.com/@lduck11007/operating-systems-development-for-dummies-3d4d786e8ac\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M\"\u003ehttps://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://3zanders.co.uk/2017/10/13/writing-a-bootloader\"\u003ehttp://3zanders.co.uk/2017/10/13/writing-a-bootloader\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://pacman128.github.io/pcasm\"\u003ehttp://pacman128.github.io/pcasm\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://cupola.gettysburg.edu/cgi/viewcontent.cgi?article=1001\u0026amp;context=oer\"\u003ehttps://cupola.gettysburg.edu/cgi/viewcontent.cgi?article=1001\u0026amp;context=oer\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://chortle.ccsu.edu/assemblytutorial/index.html\"\u003ehttps://chortle.ccsu.edu/assemblytutorial/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.utdallas.edu/~pervin/RPiA/RPiA.pdf\"\u003ehttps://www.utdallas.edu/~pervin/RPiA/RPiA.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://rofi.roger-ferrer.org\"\u003ehttps://rofi.roger-ferrer.org\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/rofirrim\"\u003ehttps://github.com/rofirrim\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1\"\u003ehttps://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.tutorialspoint.com/operating_system/index.htm\"\u003ehttps://www.tutorialspoint.com/operating_system/index.htm\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.tutorialspoint.com/assembly_programming/index.htm\"\u003ehttps://www.tutorialspoint.com/assembly_programming/index.htm\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.egr.unlv.edu/~ed/x86.html\"\u003ehttp://www.egr.unlv.edu/~ed/x86.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Intel%20x86%20Assembly.pdf\"\u003ehttps://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/Art%20Of%20Intel%20x86%20Assembly.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://webster.cs.ucr.edu\"\u003ehttp://webster.cs.ucr.edu\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://beginners.re\"\u003ehttps://beginners.re\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://cs.lmu.edu/~ray/notes/x86assembly\"\u003ehttps://cs.lmu.edu/~ray/notes/x86assembly\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/asm%20-%20windows%20assembly%20language%20and%20systems%20programming.pdf\"\u003ehttps://www.ic.unicamp.br/~pannain/mc404/aulas/pdfs/asm%20-%20windows%20assembly%20language%20and%20systems%20programming.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://index-of.co.uk/SISTEMAS-OPERATIVOS/PaulOS%20-%20A%20Real%20Time%20OS%20for%208051%20%28part%20I%29.pdf\"\u003ehttp://index-of.co.uk/SISTEMAS-OPERATIVOS/PaulOS%20-%20A%20Real%20Time%20OS%20for%208051%20(part%20I).pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.egr.unlv.edu/~ed/mips.html\"\u003ehttp://www.egr.unlv.edu/~ed/mips.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://chortle.ccsu.edu/assemblytutorial/index.html\"\u003ehttps://chortle.ccsu.edu/assemblytutorial/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www-cs-faculty.stanford.edu/~knuth/taocp.html\"\u003ehttps://www-cs-faculty.stanford.edu/~knuth/taocp.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/jagregory/abrash-black-book\"\u003ehttps://github.com/jagregory/abrash-black-book\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.davidsalomon.name/assem.advertis/AssemAd.html\"\u003ehttps://www.davidsalomon.name/assem.advertis/AssemAd.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.z80.info/zip/zaks_book.pdf\"\u003ehttp://www.z80.info/zip/zaks_book.pdf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www-cs-faculty.stanford.edu/~knuth/mmixware.html\"\u003ehttps://www-cs-faculty.stanford.edu/~knuth/mmixware.html\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"encontre-maisem\"\u003eEncontre mais em:\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://build-your-own-x.vercel.app/\"\u003e\u003cstrong\u003eBuild Your Own X\u003c/strong\u003e\u003cbr\u003e\n*This repo is forked from awesome anistefanovic/build-your-own-x , site\nis created and maintained by Kalan\nwhich\u0026hellip;*build-your-own-x.vercel.app\u003c/a\u003e\u003c/p\u003e","title":"Links uteis para quem quer criar um sistema operacional"}]