George Pashev

Website of George Pashev (Jidai Mirai)

Scientist, Programmer, Data Scientist, Enterpreneur

The Adaptive State: Integrating Blockchain, AI, and Agile Governance Methodologies

The Adaptive State: Integrating Blockchain, AI, and Agile Governance Methodologies

George Pashev1 (Jidai Mirai), Rayna Koleva2

georgepashev@uni-plovdiv.bg1, https://bit.ly/gpashev1

University of Plovdiv “Paisii Hilendarski”

Abstract

The evolving complexities of modern governance demand innovative systems that combine technological advancements with adaptive methodologies. Building on the concept of the Adaptive State, this article explores a governance model that integrates blockchain (via the ARDIAN token), AI-driven decision-making, and Agile methodologies (such as Kanban in Jira). This framework aims to create a responsive, equitable, and dynamic governance system by addressing systemic challenges and harnessing decentralized, meritocratic, and expertise-driven principles.

Keywords: Adaptive Governance, Blockchain Technology, Artificial Intelligence, Decentralized Systems, Sapientocracy

 


 

Introduction

Background and Theoretical Foundations

The convergence of blockchain technology, artificial intelligence (AI), and adaptive governance is redefining modern systems of decision-making and societal organization. Recent works, such as Chaffer and von Goins' (2024) analysis of decentralized AI governance, and Nafiu et al.'s (2025) research on blockchain-based risk management in financial markets, illustrate the transformative potential of these technologies to enhance transparency, efficiency, and inclusivity. Liu's (2024) study on e-governance in project management and Kalluri’s (2025) insights into modular blockchain-AI systems further highlight the adaptability of these approaches in addressing complex societal needs.

The strengths of these systems are evident in their ability to mitigate traditional governance inefficiencies. Blockchain offers unparalleled transparency by immutably recording decisions and transactions, ensuring accountability (Chaffer & von Goins, 2024). AI enhances decision-making by dynamically analyzing risks and optimizing workflows, as demonstrated by Kumar and Jack’s (2024) research on resilient disaster recovery systems. Furthermore, the combination of AI and blockchain facilitates robust trust mechanisms, such as the federated trust frameworks explored by Tuncel and Öztoprak (2025).

Despite their promise, these innovations are accompanied by challenges. The integration of blockchain and AI demands significant computational resources, raising concerns about scalability, energy consumption, and data privacy (Singh & Singh, 2025). Technical complexities and implementation hurdles, highlighted in Holloway's (2025) study on adaptive supply chains, further underscore these difficulties. Additionally, uneven access to advanced technologies risks exacerbating digital divides, while algorithmic bias and over-reliance on automation pose ethical and practical concerns.

Nevertheless, the synergy of blockchain and AI, underpinned by adaptive governance principles, holds immense potential to revolutionize governance systems. By addressing inefficiencies, fostering inclusivity, and promoting resilience, these technologies provide a foundation for equitable and responsive decision-making. This paper builds upon prior research, exploring how blockchain, AI, and adaptive methodologies can integrate into a cohesive framework for a more sustainable and effective governance model.

Modern governance systems, influenced by traditional models, often fail to adapt efficiently to societal complexities and global interconnectedness. The Adaptive State model reimagines governance as a responsive and dynamic system. Its structure, inspired by Swiss direct democracy, combines elements of game theory, adaptive systems theory, and positive-sum games. Unlike static governance, the Adaptive State evolves continuously, with goals and strategies dynamically recalibrated based on real-time feedback and expert input.

Key components of this model include:

· Governance Structure: Citizens (S), legislature (L), judiciary (C), executive (I), and media (Md).

· Feedback and Adaptation: Goals (G) are updated via feedback loops (R), ensuring resilience against societal and environmental changes.

· Merit-Based Participation: Expertise and measurable contributions redefine democratic engagement, moving beyond a one-person-one-vote paradigm.

Modern governance systems, deeply rooted in traditional frameworks, often struggle to address the dynamic and multifaceted challenges posed by societal complexities and the global interconnectedness of the modern world. These systems, while effective in certain contexts, frequently lack the flexibility and responsiveness required to adapt to rapid changes in social, economic, and environmental landscapes. The concept of the Adaptive State seeks to transform this static approach to governance by introducing a model that is inherently dynamic, responsive, and participatory. Unlike traditional governance structures, which operate within fixed frameworks, the Adaptive State is designed to evolve continuously, recalibrating its strategies and goals in response to real-time feedback and expert insights.

Drawing inspiration from the principles of Swiss direct democracy, the Adaptive State integrates elements of game theory, adaptive systems theory, and the concept of positive-sum games. This fusion creates a governance model where collaboration among stakeholders generates outcomes that benefit all participants, rather than perpetuating zero-sum conflicts. The model envisions governance not as a rigid hierarchy but as an interconnected system capable of self-regulation and innovation. This adaptive nature allows it to respond effectively to emerging challenges while maintaining democratic legitimacy and fostering inclusivity.

At the heart of the Adaptive State lies a well-defined governance structure that encompasses multiple interconnected components. Citizens serve as the foundation of this system, actively participating in decision-making processes and contributing their expertise to drive informed policies. The legislature provides a forum for deliberation and lawmaking, while the judiciary ensures that actions align with the rule of law. The executive branch implements policies efficiently, guided by clear objectives and accountability mechanisms. Media and public figures play a crucial role in facilitating transparent communication, fostering public discourse, and ensuring that citizens remain informed and engaged.

One of the distinguishing features of the Adaptive State is its ability to incorporate continuous feedback and adaptation. Goals and strategies within this system are not static but are subject to regular review and adjustment through established feedback loops. These mechanisms allow the governance structure to assess the effectiveness of its actions, identify emerging challenges, and recalibrate its priorities. By embedding resilience and adaptability into its core, the Adaptive State is better equipped to navigate the complexities of modern governance, ensuring its relevance and efficacy over time.

Perhaps the most transformative aspect of the Adaptive State is its emphasis on merit-based participation. Unlike conventional democratic models that operate on a one-person-one-vote principle, the Adaptive State values expertise and measurable contributions. This approach elevates the role of informed decision-making by granting greater influence to individuals who have demonstrated a deep understanding of specific domains. Participation in governance is not merely a right but a responsibility, where individuals are encouraged to contribute meaningfully and are rewarded for their expertise and dedication. This meritocratic principle ensures that governance decisions are informed by knowledge and experience, promoting better outcomes for society as a whole.

In this evolving paradigm, the Adaptive State redefines governance as a collective, dynamic endeavor. By leveraging the principles of collaboration, adaptability, and expertise, it provides a framework capable of addressing the intricate demands of the modern era while fostering inclusivity and innovation. The Adaptive State stands as a visionary model for the future, where governance evolves in harmony with the needs and aspirations of society.

 


 

Introducing Sapientocracy: The Core of Adaptive Governance

As modern governance systems evolve, there is a growing recognition that traditional decision-making structures, including those based on conventional meritocracy, often fall short in addressing the complexities of contemporary society. The Adaptive State introduces sapientocracy, a novel governance paradigm where influence, decision-making power, and participation are rooted in demonstrated knowledge, domain-specific expertise, and wisdom.

Sapientocracy represents a shift from general merit-based governance to a knowledge-centric approach. Unlike meritocracy, which broadly rewards contributions and achievements across various domains, sapientocracy emphasizes the role of informed decision-making. In this model, expertise in specific fields—such as environmental science, healthcare, or economics—grants individuals greater weight in shaping policies within those areas. This ensures that governance is driven by wisdom, data, and evidence rather than uninformed opinion or populist tendencies.

The term sapientocracy is particularly relevant in the context of the Adaptive State, where advanced technologies such as blockchain and AI agents validate and amplify the role of expertise. Blockchain ensures transparency and accountability by immutably recording actions, while AI systems assess the quality and relevance of contributions, ensuring that decision-making processes remain equitable and knowledge-driven. Together, these technologies enable sapientocracy to function as a robust, scalable, and adaptive model of governance.

By embedding sapientocracy into the foundation of the Adaptive State, this approach addresses the limitations of traditional governance systems, such as susceptibility to uninformed decision-making, lobbying, and inequitable representation. It fosters a society where participation and influence are aligned with wisdom and expertise, ensuring that policies are not only effective but also grounded in a deep understanding of the issues they aim to address.

Sapientocracy is more than a theoretical concept—it is a practical framework for governance in a knowledge-driven world, where technology and human expertise collaboratively shape a just and sustainable future.

 


 

Leveraging Technology for Modern Governance

Blockchain and ARDIAN Token: A Revolution in Governance and Economics

The ARDIAN token, a proprietary Layer 3 cryptocurrency built on the Solana blockchain, represents a paradigm shift in governance and economics. Designed for scalability and efficiency, Solana's infrastructure enables the ARDIAN token to process up to 65,000 transactions per second at minimal cost, making it ideal for high-frequency governance interactions. Beyond mere technical superiority, the token embodies the principles of transparency, decentralization, and incentivization, which are essential for fostering a modern, equitable governance model.

Why Central Banking is Obsolete and Undemocratic

The existing system of central banking, while historically foundational to global economic stability, increasingly reveals its limitations in addressing the demands of a rapidly changing and interconnected world. Central banks, controlled by a limited cadre of decision-makers, have disproportionate power to influence economies through monetary policy. This concentration of authority often operates outside the direct control of democratic institutions, creating an inherent disconnect between the broader populace and the financial mechanisms that govern their lives.

Central banks rely on fiat currencies, whose value is tied to trust in centralized institutions rather than intrinsic or decentralized mechanisms. These institutions can arbitrarily manipulate money supply, interest rates, and inflation, often serving the priorities of select groups or geopolitical strategies over broader societal interests. The lack of transparency and limited accountability further exacerbate these issues, undermining trust in the system.

Moreover, central banking systems are ill-equipped to adapt to the pace of technological and economic transformation. Their rigid frameworks struggle to incorporate emerging trends such as digital currencies, decentralized finance, and blockchain technologies. As global economies diversify and technological innovations reshape commerce and trade, centralized monetary policies risk becoming increasingly detached from the realities of a decentralized, digital-first world.

Adaptive State and Crypto-Based Economics

The Adaptive State model addresses the shortcomings of central banking by embracing blockchain-based economics, with the ARDIAN token at its core. This token-based economy moves away from centralized control toward a decentralized, meritocratic framework where citizens actively participate in economic and governance processes.

Technical Implementation

The ARDIAN token is more than just a digital currency; it is an integral component of a decentralized governance ecosystem. By leveraging smart contracts, it ensures that all token allocations and transactions are governed transparently and automatically, eliminating the potential for manipulation. Smart contracts encode rules for expertise verification, vote weight calculations, and contribution evaluation, guaranteeing a fair and consistent process.

Economic Participation through Earning Mechanisms

In the ARDIAN system, citizens earn tokens by contributing valuable insights and expertise to policy discussions and decision-making processes. Contributions are assessed using a sophisticated combination of peer review and AI validation. This dual-layered system ensures that input quality is evaluated with both human judgment and computational efficiency. By linking economic rewards to meaningful participation, the system encourages continuous engagement and learning, fostering a well-informed citizenry.

For example, a professional with expertise in renewable energy can contribute detailed analyses of proposed energy policies. These contributions are assessed for technical accuracy, practical applicability, and alignment with societal goals. Based on the evaluation, the contributor earns tokens that reflect the value of their input.

Dynamic Voting Power

One of the most revolutionary aspects of the ARDIAN token is its dynamic voting system. Unlike traditional democracies where voting power is static and uniform, the ARDIAN system adjusts voting weight based on demonstrated expertise in specific domains. This ensures that individuals with relevant knowledge have a greater influence on decisions within their areas of expertise. For instance, a contributor recognized for their insights into healthcare policy would have increased voting power in healthcare-related decisions, while their influence in unrelated fields, such as economic policy, remains standard.

This specialization prevents uninformed voting from skewing critical decisions and aligns decision-making power with demonstrated knowledge. The system further incorporates decay mechanisms for unused tokens, ensuring that influence is tied to active participation rather than hoarded resources. This approach eliminates the risk of entrenched power structures, encouraging continual contribution and engagement.

Incentive Alignment and Economic Equity

The ARDIAN tokenomics align individual incentives with collective goals. By rewarding expertise and engagement, the system promotes an economy where contributions to governance translate directly into economic empowerment. Citizens are motivated not only to participate in governance but also to deepen their expertise in areas of personal and societal importance. This feedback loop creates a virtuous cycle of knowledge acquisition, civic engagement, and equitable influence.

In contrast to central banking systems, where wealth accumulation is often detached from societal contributions, the ARDIAN model ties economic rewards to tangible, meritocratic participation. This decentralization of economic power reduces inequality and fosters a more equitable distribution of resources.

Collaborative Governance and the Role of Blockchain

The integration of blockchain technology ensures that the ARDIAN token operates within a transparent, decentralized ecosystem. Every transaction and allocation is recorded immutably, allowing citizens to verify processes independently. This transparency builds trust in the system and eliminates the opacity that characterizes traditional financial systems.

Furthermore, the blockchain-based framework enhances the resilience of the economy by reducing reliance on centralized authorities. In an Adaptive State, economic policies are shaped collaboratively, with blockchain serving as the foundational infrastructure for managing resources, validating contributions, and executing decisions.

Toward a Decentralized Future

By adopting crypto-based economics, the Adaptive State addresses the inherent flaws of central banking systems. It shifts power from centralized authorities to citizens, enabling a more inclusive and responsive economic model. The ARDIAN token exemplifies how technology can transform governance, fostering a society where participation, expertise, and fairness define the economic landscape.

This transition is not merely a technological upgrade but a fundamental reimagining of economic and governance systems. It reflects a commitment to decentralization, transparency, and adaptability, ensuring that the Adaptive State can meet the challenges of the modern era while empowering its citizens.

 


 

2. AI Integration

Expanding the Role of AI in the Adaptive State and Designing a Communication Architecture

AI agents in the Adaptive State are pivotal to ensuring responsive and effective governance by leveraging their dual roles as domain-specific experts and overarching coordinators. These agents collectively form an intricate network that fosters collaboration, analyzes complex data, and aligns strategies with the adaptive goals of governance.

Expanding the Roles of AI Agents in the Adaptive State

Domain-Specific Expertise

Specialized AI agents are tailored to address distinct sectors of governance, such as environmental science, healthcare, education, economics, and public infrastructure. These agents are equipped with domain-specific algorithms and datasets that allow them to:

1. Analyze Scenarios: Evaluate policy proposals, model potential outcomes, and predict long-term impacts.

2. Identify Risks: Detect vulnerabilities in existing systems and anticipate emerging threats.

3. Policy Recommendations: Generate actionable insights and policy drafts for decision-makers based on rigorous simulations and data analysis.

For instance, an AI agent focused on environmental science might model the effects of proposed carbon regulations on emissions and biodiversity while factoring in economic and social constraints. Its recommendations would be backed by extensive data simulations, ensuring informed decision-making.

Coordination and Monitoring

Meta-AI agents serve as the backbone of the Adaptive State's AI ecosystem. These agents:

1. System-Wide Operations Oversight: Monitor the performance of domain-specific agents, ensuring alignment with overarching governance goals.

2. Risk and Efficiency Analysis: Identify inefficiencies and highlight bottlenecks in the adaptive system's processes.

3. Dynamic Adjustment: Periodically reconfigure the operations of domain-specific agents to align with real-time feedback, emerging societal priorities, and adaptive goals.

Meta-AI agents analyze media trends, public discourse, and social sentiment to ensure governance remains responsive to societal needs. For example, by detecting rising concerns over healthcare access in public discourse, these agents can prompt healthcare-focused AI to prioritize addressing such issues.

 


 

Proposed Architecture for a Communication Bus Between AI Agents

The complexity of the Adaptive State necessitates a robust, scalable, and secure communication framework to enable seamless interaction between domain-specific AI agents and meta-AI coordinators. Below is a proposed architecture for a communication bus to support this ecosystem.

1. Communication Architecture Overview

The communication bus serves as the central nervous system for all AI agents in the Adaptive State. It facilitates:

· Inter-Agent Communication: Exchange of data and insights between domain-specific agents.

· Coordinator Communication: Transmission of directives and synthesized information between meta-AI agents and domain-specific agents.

· Blockchain Integration: Secure data logging and validation of all interactions using a blockchain layer to ensure transparency and immutability.

2. Core Components of the Communication Bus

a. Message Routing Layer

The message routing layer acts as a mediator between agents, using topic-based or content-based routing protocols. It ensures that:

· Domain-specific agents receive only relevant data or queries.

· Meta-AI agents efficiently collect data from multiple domain agents for system-wide analysis.

b. Data Transformation Layer

This layer standardizes data formats across agents, enabling seamless interaction between agents using diverse algorithms and datasets. For instance, healthcare agents' data must be interoperable with economic models when analyzing public health funding impacts.

c. Blockchain-Based Data Layer

A blockchain serves as a decentralized ledger to:

· Log all communications between agents for auditability.

· Ensure immutability of critical decisions and interactions.

· Validate contributions from each AI agent to ensure accountability.

d. Feedback and Learning Layer

This layer uses reinforcement learning protocols to:

· Enable agents to learn from feedback and refine their outputs over time.

· Facilitate collaborative problem-solving by sharing learned insights among agents.

3. Data Flow in the Communication Bus

1. Input Acquisition: Data from media, public discourse, sensors, and other sources are ingested by the bus.

2. Data Processing: Domain-specific agents analyze the data and share insights with the bus.

3. Coordination: Meta-AI agents synthesize information, identify trends, and send directives back to domain agents.

4. Feedback Loop: Outputs are validated, and necessary adjustments are fed back into the system for continuous learning.

4. Security and Governance

Security is paramount in this architecture. The blockchain layer not only secures data exchanges but also governs agent behavior by:

· Ensuring compliance with predefined protocols.

· Detecting and mitigating malicious or erroneous actions by rogue agents.

5. Real-World Application Scenario

Imagine a pandemic outbreak scenario:

1. Media and healthcare data are ingested by the bus.

2. Healthcare AI agents model the spread of the disease and recommend containment measures.

3. Economic agents analyze the impact of lockdowns on businesses.

4. Meta-AI agents synthesize these inputs to recommend a balanced policy that minimizes both health risks and economic damage.

5. All decisions are recorded on the blockchain, ensuring transparency and public trust.

 


 

Agile Project Management via Kanban (Jira) in the Adaptive State

The Adaptive State employs Agile principles to streamline governance, enabling transparency, adaptability, and efficiency in policy-making and implementation. Among Agile frameworks, Kanban, implemented through tools like Jira, stands out as a highly visual and dynamic approach. By breaking down complex processes into manageable tasks, Kanban ensures that governance workflows remain transparent and responsive to societal needs.

Kanban’s transparency allows stakeholders to see every stage of policy creation and execution. From drafting proposals to analyzing public feedback and implementing decisions, each task is visually represented on a shared board. This openness fosters accountability, ensuring that every action is traceable and aligned with public expectations.

In the Adaptive State, priorities are not static but dynamically adjusted based on emerging societal needs, resource availability, and urgency. Policies derived from citizen referendums are sequenced and addressed iteratively, ensuring that the most pressing issues are tackled first. This dynamic prioritization allows governance to remain fluid and focused on the most impactful areas.

Planning in the Adaptive State is iterative and reflective. Regular retrospective sessions provide opportunities to assess what worked, identify bottlenecks, and recalibrate strategies. For instance, if a policy initiative is delayed due to resource constraints, these sessions might lead to reallocating resources or refining the scope of work. This adaptive approach ensures that governance processes are always evolving to meet changing societal priorities.

 


 

The Role of AI in Enhancing Kanban Workflows

AI agents integrated into the Adaptive State significantly enhance Kanban workflows by acting as proactive monitors and coordinators. These agents analyze workflows in real-time, identifying inefficiencies, predicting potential delays, and suggesting adjustments to optimize processes. For example, if tasks are consistently delayed, AI agents can analyze resource allocation and recommend redistributing workload or adjusting deadlines.

AI’s ability to alter workflows dynamically is particularly impactful. When an AI subsystem detects systemic issues, it can modify workflows autonomously or propose changes for approval. For instance, if public feedback indicates dissatisfaction with a particular policy direction, AI can reprioritize related tasks to address these concerns promptly. Similarly, during emergencies like natural disasters, AI agents can override existing workflows to focus on immediate crisis management, allocating resources and prioritizing tasks accordingly.

 


 

Integrating Kanban and AI in the Adaptive State

The integration of Kanban workflows with an AI-driven framework creates a powerful governance system that combines human oversight with machine precision. Data from multiple sources, including public input, domain-specific analyses, and historical workflow performance, flows into the system to inform decisions. Kanban boards visually represent this information, organizing tasks into categories such as "Backlog," "In Progress," and "Completed." This visualization ensures that all stakeholders, from policymakers to citizens, can monitor progress and understand decision-making processes.

AI agents continuously interact with this workflow. By analyzing task performance and detecting inefficiencies, they suggest changes or implement them directly when authorized. For example, if delays are caused by overlapping responsibilities or insufficient stakeholder input, AI can reassign tasks or prompt earlier involvement of key contributors. These agents also forecast potential disruptions, enabling proactive adjustments that minimize the impact on overall governance goals.

To ensure transparency and accountability, all workflow changes and decisions are logged on a blockchain. This decentralized ledger records every alteration, whether initiated by humans or AI, creating an immutable history of governance activities. Such records build trust and provide a clear audit trail for stakeholders.

 


 

The Adaptive Workflow in Action

Consider a scenario where the Adaptive State is addressing climate change policy. Public concerns about air quality are flagged, and domain-specific AI agents provide projections on pollution trends. Tasks related to policy drafting, expert consultation, and public engagement are created and visualized on a Kanban board. As these tasks progress, AI agents monitor their status, reallocating resources or suggesting alternative experts if bottlenecks arise. If media analysis reveals increased public demand for immediate action, the AI subsystem dynamically reprioritizes tasks to accelerate high-priority measures. After the policy is implemented, retrospective analysis highlights successes and identifies areas for improvement, feeding these insights back into the system for future iterations.

 


 

Integrating the Subsystems: Building a Symbiotic Ecosystem

The infrastructure of the Adaptive State is designed as a tightly integrated and symbiotic ecosystem that merges blockchain technology, AI-driven decision-making, and Agile project management methodologies. This ecosystem operates as a dynamic and interconnected framework where each subsystem plays a distinct yet complementary role in achieving efficient, transparent, and adaptive governance.

Goal Setting: From Citizen Proposals to Incentivized Participation

At the heart of the Adaptive State is the process of goal setting, where citizens and experts collaboratively define the priorities of governance. This begins with individuals or groups proposing goals based on societal needs, emerging challenges, or technological opportunities. These proposals are evaluated through a multi-stage referendum process, ensuring that every proposed goal reflects the collective will and expertise of the community.

The integration of the ARDIAN token as an incentive mechanism transforms the goal-setting process into an inclusive and participatory activity. Citizens earn tokens by contributing meaningful insights or expertise to the discussions around proposed goals. For example, an environmental scientist might propose a set of goals focused on reducing carbon emissions, complete with detailed data and analysis. Their input would not only influence the governance agenda but also be rewarded through ARDIAN tokens, which reflect the value of their contribution.

By gamifying participation and aligning individual incentives with collective goals, the Adaptive State fosters an active and engaged citizenry. This system ensures that governance priorities are not just set by policymakers but are driven by informed, meritocratic participation.

 


 

Policy Execution: Operationalizing Goals Through AI and Agile Frameworks

Once goals are established and prioritized, the next step is policy execution. This process combines the computational power of AI agents with the organizational clarity of Agile frameworks, such as Kanban boards.

AI agents play a critical role in translating high-level goals into actionable tasks. Domain-specific agents analyze the proposed goals and break them down into detailed plans, accounting for factors such as resource constraints, interdependencies, and potential risks. For example, if the goal is to transition a city to renewable energy, AI agents might create tasks for feasibility studies, infrastructure upgrades, and public engagement campaigns.

These tasks are visualized and managed using Kanban boards, which provide a clear representation of workflows. Each task progresses through stages such as "Backlog," "In Progress," and "Completed," allowing stakeholders to monitor progress in real-time. The transparency of this system ensures accountability at every level, from individual contributors to overarching governance bodies.

AI agents also act as coordinators, continuously monitoring the execution process for inefficiencies or delays. If bottlenecks arise, such as a shortage of resources or unforeseen challenges, AI agents can dynamically reallocate tasks, reprioritize goals, or propose alternative strategies. For instance, if a policy rollout is delayed due to a lack of public awareness, AI might suggest accelerating media campaigns or reallocating resources to public education efforts.

 


 

Continuous Feedback: Adapting Strategies Through Real-Time Data

The Adaptive State thrives on continuous feedback, which ensures that governance remains dynamic and aligned with the realities of a changing world. Media analysis, citizen input, and real-world data flow into the system, creating a comprehensive feedback loop that informs and adjusts governance strategies.

AI agents play a central role in processing and interpreting this feedback. By analyzing public sentiment, media trends, and data from various sectors, these agents identify emerging issues, shifting priorities, or potential crises. For example, if public discourse reveals widespread concern about healthcare accessibility, the AI system can flag this as a high-priority issue and recommend reallocating resources to address it.

The blockchain infrastructure further enhances this feedback process by providing a secure and transparent record of all data inputs and governance actions. Citizens can trace how their input is reflected in decision-making, building trust and accountability. Furthermore, this transparency ensures that feedback loops are free from manipulation or bias, maintaining the integrity of the system.

 


 

The Symbiotic Ecosystem in Action

The interplay between these subsystems—goal setting, policy execution, and continuous feedback—creates a governance model that is both resilient and adaptive. Imagine a scenario where a sudden economic downturn occurs. Citizens and experts propose goals to stabilize the economy, such as implementing support programs for small businesses or increasing investments in workforce development. These proposals are evaluated through a referendum, with participants rewarded via ARDIAN tokens.

AI agents take these goals and develop a detailed execution plan, breaking them into actionable tasks managed through a Kanban framework. As the policies are implemented, continuous feedback from media reports, economic indicators, and citizen input allows the system to assess their effectiveness. If the initial policies fail to yield desired outcomes, the AI subsystem recommends adjustments, such as reallocating resources or refining strategies.

This iterative process exemplifies the Adaptive State’s ability to respond to real-time challenges while maintaining transparency and inclusivity. It demonstrates how blockchain, AI, and Agile management work in harmony to create a governance model capable of thriving in an ever-changing world.

 


 

Advantages and Disadvantages of the Adaptive State Model

The Adaptive State model presents a transformative approach to governance, integrating technological innovation, meritocratic principles, and citizen engagement to address the complexities of modern society. While the model offers numerous advantages, it also presents challenges that must be considered to ensure its effectiveness and inclusivity.

 


 

Advantages of the Adaptive State Model

1. Dynamic Responsiveness

The Adaptive State’s ability to make real-time adjustments is one of its most defining characteristics. Traditional governance systems often rely on rigid structures that make it difficult to respond promptly to societal changes or crises. By incorporating AI agents and continuous feedback loops, the Adaptive State can process data from various sources—such as public sentiment, economic trends, and environmental conditions—and adapt strategies accordingly.

For example, during a natural disaster, the system can analyze media reports, citizen feedback, and resource availability to prioritize relief efforts dynamically. This responsiveness ensures that governance remains relevant and effective, even in rapidly changing scenarios.

The downside, however, is the risk of over-reliance on real-time data, which may sometimes reflect transient trends rather than long-term priorities. Balancing immediate responsiveness with strategic foresight is critical to avoiding reactive decision-making.

 


 

2. Meritocratic Engagement

In the Adaptive State, influence is tied to expertise and meaningful contributions rather than arbitrary or uniform voting power. Citizens earn ARDIAN tokens by demonstrating knowledge and contributing insights in specific domains. This approach ensures that policy-making is driven by informed and qualified individuals, reducing the risk of uninformed or populist decisions.

Meritocratic engagement also promotes continuous learning and specialization among citizens, as those seeking greater influence are incentivized to develop expertise in areas of personal or societal importance. For instance, an environmental scientist can have a greater say in policies related to climate change, ensuring that decisions are informed by relevant expertise.

The meritocratic model, however, raises concerns about inclusivity. It risks marginalizing individuals or groups without access to the resources or education necessary to participate meaningfully. Addressing these disparities requires robust systems to democratize access to knowledge and ensure that all citizens have opportunities to contribute.

 


 

3. Decentralized Decision-Making

The integration of blockchain technology ensures that decision-making processes in the Adaptive State are decentralized, transparent, and accountable. Blockchain records every transaction, policy proposal, and vote, creating an immutable ledger that citizens can access to verify the integrity of governance.

Decentralization reduces the risk of corruption and power consolidation, as no single entity or individual has unilateral control over governance processes. It also empowers citizens to participate directly, fostering a sense of ownership and trust in the system.

However, the decentralized nature of blockchain can lead to challenges in scalability and efficiency. Managing large-scale, decentralized systems requires significant computational resources and robust infrastructure, which may be difficult to implement in resource-constrained settings.

 


 

4. Incentivized Participation

The ARDIAN tokenomics system aligns personal and collective interests by rewarding citizens for their contributions to governance. This incentivization encourages active engagement, whether through proposing goals, participating in discussions, or voting in referendums. The token system ensures that contributions are not only recognized but also economically valued, creating a tangible link between participation and personal benefit.

By rewarding meaningful participation, the Adaptive State reduces apathy and encourages citizens to take an active role in shaping governance. For instance, a citizen who provides well-researched feedback on a healthcare policy can earn tokens, which may increase their voting weight in future healthcare-related decisions.

The risk of incentivized participation lies in potential manipulation. Individuals or groups might attempt to game the system to accumulate tokens without making meaningful contributions. Safeguards, such as robust AI validation and periodic token decay mechanisms, are essential to maintaining the integrity of the system.

 


 

5. Efficient Execution

Agile methodologies, such as Kanban, streamline the implementation of policies and governance processes in the Adaptive State. These methodologies provide transparency, prioritize tasks dynamically, and enable iterative planning. AI agents further enhance efficiency by identifying bottlenecks, reallocating resources, and suggesting improvements in real time.

For example, a policy addressing unemployment might be broken down into actionable tasks, such as creating job training programs or incentivizing businesses to hire locally. Kanban boards allow stakeholders to monitor progress, while AI agents ensure that tasks are completed efficiently and that workflows adapt to emerging challenges.

While Agile methodologies are highly effective, they require a culture of collaboration and adaptability among stakeholders. Resistance to change or a lack of technical expertise may hinder the successful implementation of these practices.

 


 

Disadvantages and Challenges of the Adaptive State Model

While the Adaptive State offers significant advantages, it also presents challenges that require careful consideration:

Complexity of Integration: Combining blockchain, AI, and Agile management requires sophisticated infrastructure and technical expertise. Developing and maintaining such a system may be resource-intensive and inaccessible to less technologically advanced societies.

Digital Divide: The reliance on digital tools and technologies risks excluding populations without access to the internet, digital literacy, or modern devices. Bridging this divide is essential to ensuring that the Adaptive State remains inclusive.

Privacy Concerns: Collecting and analyzing data from citizens raises concerns about privacy and data security. Robust safeguards must be in place to protect sensitive information and prevent misuse.

Potential Biases in AI: AI systems, while powerful, are not immune to biases that can arise from flawed algorithms or biased training data. Ensuring fairness and accountability in AI decision-making is a critical challenge.

Cultural Resistance: The transition to an Adaptive State may face resistance from stakeholders accustomed to traditional governance models. Overcoming this resistance requires effective communication, education, and stakeholder engagement.

 


 

Enhanced Mathematical Model of the Adaptive State

The Adaptive State can be formally defined as a structure:

M' = ⟨S, L, C, I, Md, G, R, Ch, O, Res, A, B, K, T⟩

Where:

1. S: The set of citizens in the state

2. L: The legislature, representing the decision-making body responsible for laws and policies

3. C: The judiciary, which ensures adherence to laws and resolves disputes

4. I: The executive, responsible for implementing decisions and managing governance processes

5. Md: Media, individual journalists, commentators, and public figures who facilitate information flow and public discourse

6. G: The set of adaptive governance goals, updated dynamically through participatory mechanisms

7. R: The feedback loops that collect input from citizens, media, and real-world conditions to refine goals and strategies

8. Ch: The chain of updates to the governance goals, ordered by priority and multidimensional impact

9. O: The set of external factors influencing the state (e.g., geopolitical events, natural disasters)

10. Res: The set of available resources (e.g., financial assets, infrastructure, physical resources)

11. A: The set of AI agents, including:

1. A_d ⊂ A: Domain-specific agents specialized in fields like healthcare, economics, and environmental science

2. A_m ⊂ A: Meta-AI agents responsible for coordination, monitoring, and strategic adjustments

12. B: The blockchain infrastructure, which provides transparency, security, and immutability for governance actions and ARDIAN token transactions

13. K: The set of Kanban workflows, represented as directed graphs, where nodes are tasks and edges represent dependencies between them

14. T: The ARDIAN tokenomics system, comprising:

1. T_e: Token earning mechanisms based on contributions to governance

2. T_w: Voting weights derived from token balances in specific domains

3. T_d: Decay mechanisms to ensure active participation

Relationships and Interactions

Goal Setting and Feedback

The goal setting process is represented by the function:

P: S × G × R → Λ

Where Λ = list(G) is the ordered list of governance goals, prioritized based on feedback and multidimensional impact. Goals are proposed by citizens (S) and refined through iterative input from feedback loops (R), which aggregate data from media (Md) and external factors (O).

AI Contributions

AI agents (A) interact with other components through mappings:

1. Policy Recommendation: F_a: G × Res → K Domain-specific AI agents (A_d) generate detailed task workflows (K) based on governance goals and available resources.

2. System Optimization: F_m: K × R → K' Meta-AI agents (A_m) monitor workflows (K), incorporating feedback (R) to optimize task execution and resolve inefficiencies.

Blockchain Integration

The blockchain (B) ensures integrity and accountability across the system. All governance actions, token transactions, and AI recommendations are logged via the function:

L_b: (S ∪ A ∪ T) → B

This function records the actions of citizens, AI agents, and token-related activities, creating an immutable history accessible for audit.

Tokenomics

The ARDIAN token system (T) incentivizes participation and expertise:

1. Earning Tokens: E: S → T_e Citizens earn tokens (T_e) by contributing to governance, with rewards determined by the quality of their input.

2. Voting Power: W: T_e × A_d → T_w Tokens earned in specific domains (A_d) enhance voting weight (T_w), ensuring informed decision-making.

3. Decay Mechanism: D: T_e → T_d Token balances decay over time (T_d) to encourage continuous participation and prevent power accumulation.

Kanban Workflows

Workflows (K) are modeled as directed acyclic graphs (DAGs), where:

· Nodes (k_i ∈ K) represent tasks

· Edges (e_ij ∈ K) represent dependencies between tasks

Workflows are dynamically updated by meta-AI agents (A_m), ensuring alignment with priorities and real-time adjustments.

System Dynamics

1. Real-Time Adaptation: Feedback (R) continuously updates goals (G) and workflows (K), ensuring that governance strategies remain relevant and responsive.

2. Collaborative Policy Execution: AI agents (A), blockchain (B), and citizens (S) work in harmony to execute governance processes, monitored and optimized by Kanban workflows (K).

3. Transparency and Trust: Blockchain (B) guarantees that all actions are transparent and verifiable, while ARDIAN tokenomics (T) incentivize meaningful participation.

 


 

Conclusion: Transforming Governance Through the Adaptive State

The Adaptive State represents a transformative evolution in governance, fundamentally redefining how societies address complexity, foster collaboration, and ensure inclusivity. By integrating blockchain technology, AI-driven decision-making, and Agile methodologies, this model offers a governance framework that is not only scalable and efficient but also equitable and adaptive to the challenges of the modern world.

At its core, the Adaptive State resolves many of the entrenched limitations of traditional governance systems. By embracing the principles of decentralization, transparency, and meritocratic participation, it creates a structure where decision-making is informed by expertise, guided by collective intelligence, and powered by advanced technologies. This synergy between human participation and technological precision ensures that governance remains responsive to evolving societal needs.

One of the most significant advantages of the Adaptive State is its ability to eliminate the negative effects of lobbying, a pervasive issue even in established democracies like Switzerland. While Swiss direct democracy is widely lauded for its participatory mechanisms, it is not immune to the influence of lobbying and special interest groups. These entities often exert disproportionate influence over policy-making, steering decisions in favor of narrow agendas rather than the broader public good.

The Adaptive State fundamentally disrupts this dynamic by leveraging blockchain technology and the ARDIAN token system. Blockchain ensures that all contributions, from policy proposals to votes, are transparently recorded and accessible to the public. This immutable ledger eliminates the opacity that allows lobbyists to operate unchecked, ensuring that all actions are traceable and accountable. Furthermore, the meritocratic engagement model reduces the impact of financial influence, as voting power is tied to demonstrated expertise and meaningful contributions rather than monetary resources or connections.

The introduction of the ARDIAN token further empowers citizens by creating a direct incentive for participation and expertise. Unlike traditional systems where influence is often a function of wealth or access, the token system ensures that influence is distributed based on merit and active contribution. This alignment of personal and collective interests dismantles the transactional nature of lobbying, replacing it with a system that values informed and equitable decision-making.

Additionally, AI-driven governance in the Adaptive State further mitigates the influence of lobbying by acting as an impartial arbiter of information and priorities. AI agents, equipped with domain-specific expertise, evaluate policy proposals and public input based on data and evidence rather than political or financial pressures. This objectivity ensures that governance decisions are guided by what is best for society as a whole, rather than the interests of a select few.

The iterative nature of Agile methodologies also plays a critical role in reinforcing accountability and adaptability. By breaking down policies into manageable tasks and continuously evaluating their progress through retrospectives, the system ensures that governance remains focused on achieving tangible outcomes. This process prevents stagnation and ensures that citizen priorities are consistently reflected in policy execution.

In sum, the Adaptive State not only addresses the shortcomings of traditional governance but also enhances existing models like Swiss direct democracy by eliminating the corrupting influence of lobbying and financial interests. It fosters a society where technology and human collaboration work in harmony, creating a system that is transparent, equitable, and capable of evolving alongside the needs of its citizens.

The vision of the Adaptive State is not just about governance; it is about empowering citizens to take an active role in shaping their futures. By removing barriers to participation, promoting informed decision-making, and ensuring transparency at every level, this model lays the foundation for a more just and resilient world. As societies continue to face unprecedented challenges, the Adaptive State stands as a beacon of what is possible when innovation, inclusivity, and accountability are placed at the heart of governance.

References

Chaffer, T. J., & von Goins, C. (2024). Decentralized governance of AI agents. ResearchGate. Retrieved from https://www.researchgate.net/publication/387350593

Nafiu, A., Balogun, S. O., & Oko-Odion, C. (2025). Risk management strategies: Navigating volatility in complex financial market environments. ResearchGate. Retrieved from https://www.researchgate.net/publication/387824128

Liu, N. M. (2024). e-Governance in project management: Transforming decision-making and addressing implementation risks. CVUT. Retrieved from https://bit.fsv.cvut.cz/issues/02-24/full_02-24_01.pdf

Kalluri, K. (2025). Blockchain augment AI: Securing decision pipelines decentralized in systems. ResearchGate. Retrieved from https://www.researchgate.net/publication/388117247

Kumar, W., & Jack, W. (2024). Fortified disaster recovery: Building resilient IoT systems with adaptive security to address vulnerabilities and maintain business continuity. ResearchGate. Retrieved from https://www.researchgate.net/publication/387502258

Tuncel, Y. K., & Öztoprak, K. (2025). SAFE-CAST: Secure AI-federated enumeration for clustering-based automated surveillance and trust in machine-to-machine communication. PeerJ Computer Science. Retrieved from https://peerj.com/articles/cs-2551.pdf

Singh, Y., & Singh, H. (2025). Secure IoT data dissemination with blockchain and transfer learning techniques. Nature. Retrieved from https://www.nature.com/articles/s41598-024-84837-8.pdf

Holloway, S. (2025). Adapting to disruptions: The role of emerging technologies in supply chain agility. Preprints. Retrieved from https://www.preprints.org/frontend/manuscript/d7657f4d5622f6b162a957c4a797be09/download_pub

Python за Fintech разработка

Нова Избираема дисциплина:

Python за Fintech разработка

Автор

д-р Георги Пашев

Професионален профил | georgepashev@uni-plovdiv.bg

Направление: 4.6 Информатика

Основна информация

  • Хорариум: 20 часа лекции + 20 часа упражнения
  • Кредити: 4 ECTS
  • Семестър: 6-ти семестър (3-та година)
  • Предварителни изисквания: Програмиране с Python (базово ниво), Бази данни, Структури от данни и алгоритми

Анотация

Дисциплината "Python за Fintech разработка" подготвя студентите за работа като Python разработчици във финансово-технологичния сектор. Курсът комбинира задълбочено изучаване на Python екосистемата за анализ на данни с практически умения за back-end разработка и количествени методи за финансови приложения.

Учебно съдържание

Модул 1: Advanced Python и Data Science (8 часа лекции, 8 часа упражнения)

  • Работа с NumPy, Pandas и SciPy за анализ на финансови данни
  • Асинхронно програмиране с asyncio за high-frequency trading
  • Паралелна обработка на данни и оптимизация
  • Python best practices и clean code в контекста на fintech приложения

Модул 2: Бази данни и съхранение (6 часа лекции, 6 часа упражнения)

  • Работа с Oracle Database за финансови транзакции
  • MongoDB и NoSQL решения за big data анализ
  • Оптимизация на заявки и индексиране
  • Интеграция на различни storage решения

Модул 3: Количествени методи и финанси (6 часа лекции, 6 часа упражнения)

  • Анализ на времеви редове и финансово моделиране
  • Risk management и portfolio optimization
  • Machine learning за предсказване на пазарни тенденции
  • Автоматизирана търговия и алгоритмични стратегии

Методи на преподаване

  • Интерактивни лекции с практически примери от реалния финтех сектор
  • Лабораторни упражнения с актуални технологии
  • Работа по проекти, симулиращи реални финтех решения
  • Гост-лектори от водещи fintech компании

Форми на оценяване

Финален проект: 40%
Практически задачи: 30%
Теоретичен тест: 20%
Активност: 10%

Очаквани резултати

  • Професионално ниво на Python програмиране за fintech приложения
  • Практически опит с анализ на финансови данни и количествени методи
  • Умения за работа с различни бази данни и системи за съхранение
  • Разбиране на финансовите концепции и алгоритмична търговия
  • Готовност за работа в международен екип

Литература

  • McKinney, W. (2022). Python for Data Analysis, 3rd Edition. O'Reilly Media
  • Hilpisch, Y. (2021). Python for Algorithmic Trading. O'Reilly Media
  • Yves Hilpisch. (2020). Artificial Intelligence in Finance. O'Reilly Media
  • Hull, J. C. (2020). Machine Learning in Business: An Introduction to the World of Data Science. Cambridge University Press
  • Избрани научни статии и технически документации

Техническо осигуряване

  • Модерна компютърна лаборатория с необходимия софтуер и хардуер
  • Високоскоростна интернет връзка
  • Достъп до специализирани финансови APIs и данни
  • Cloud инфраструктура за обработка на големи обеми данни

Софтуерни инструменти

  • Python 3.x и специализирани библиотеки (NumPy, Pandas, SciPy)
  • Oracle Database Enterprise Edition
  • MongoDB Enterprise
  • Jupyter Notebooks/Lab
  • Git и системи за контрол на версиите
  • PyCharm Professional Edition или Visual Studio Code

Голямото море от крипто валути: Типове крипто валути и примери

Голямото море от крипто валути:
Типове крипто валути и примери

Автор: Георги Пашев

Януари 2025

Съдържание

  1. Въведение
  2. История на криптовалутите
  3. Технически аспекти
    • Блокчейн технология
    • Механизми за консенсус
    • Криптография
  4. Типове криптовалути
    • Платежни криптовалути
    • Платформени токени
    • Utility токени
    • Стейбълкойни
    • DeFi токени
    • NFT токени
    • Governance токени
  5. Икономически аспекти
  6. Трейдинг перспектива
  7. Сравнителен анализ
  8. Бъдещи перспективи

1. Въведение

Криптовалутите представляват революционна форма на дигитални активи, базирани на блокчейн технологията. Те въвеждат нов модел на финансови взаимоотношения, който елиминира необходимостта от централизирани посредници и създава възможности за директни peer-to-peer транзакции. От създаването на Bitcoin през 2009 г., пазарът на криптовалути се е развил експоненциално, като днес включва хиляди различни проекти с разнообразни приложения.

В тази лекция ще разгледаме подробно различните аспекти на криптовалутите, започвайки от техническите основи, преминавайки през различните типове и техните характеристики, и достигайки до икономическите и търговски аспекти на тази нова финансова екосистема.

2. История на криптовалутите

Историята на криптовалутите започва със създаването на Bitcoin от мистериозната личност или група, известна като Сатоши Накамото. Публикуването на Bitcoin whitepaper през 2008 г. и пускането на първия блок (Genesis block) през януари 2009 г. бележи началото на нова ера във финансовия свят.

Ключови моменти в историята на криптовалутите:

Година Събитие Значение
2009 Създаване на Bitcoin Първата децентрализирана криптовалута
2011 Появава се Litecoin Първият успешен алткойн
2015 Създаване на Ethereum Въвеждане на смарт контракти
2017 Първи ICO бум Масова поява на нови токени
2020 DeFi лято Експлозия на децентрализирани финанси
2021 NFT революция Масово навлизане на дигитално изкуство

3. Технически аспекти

3.1 Блокчейн технология

Блокчейнът е разпределена база данни, която съхранява информация в блокове, свързани криптографски помежду си. Всеки блок съдържа:

  • Транзакции
  • Времеви печат
  • Криптографски хеш на предишния блок
  • Nonce (число, използвано в процеса на майнинг)

3.2 Layer архитектура

Блокчейн архитектурата се разделя на различни слоеве (layers), всеки със специфична роля:

Слой Описание Примери Предназначение
Layer 0 Базова инфраструктура Polkadot, Cosmos Осигурява хардуерна и мрежова инфраструктура за блокчейн мрежите
Layer 1 Основен блокчейн Bitcoin, Ethereum, Solana Базов протокол, консенсус механизъм, сигурност на мрежата
Layer 2 Решения за скалируемост Lightning Network, Optimism, Arbitrum Подобрява производителността чрез обработка на транзакции извън основната верига
Layer 3 Приложен слой dApps, DeFi протоколи Потребителски интерфейси и приложения

Особености на различните слоеве:

  • Layer 0: Фокусира се върху интероперабилността между различни блокчейни и осигурява базова инфраструктура.
  • Layer 1: Отговаря за основните функции като валидация на транзакции, сигурност и консенсус. Това е фундаменталният слой на всяка блокчейн мрежа.
  • Layer 2: Решава проблемите със скалируемостта чрез различни подходи:
    • State channels (Lightning Network)
    • Странични вериги (Sidechains)
    • Rollups (Optimistic и Zero-Knowledge)
    • Плазма решения
  • Layer 3: Предоставя интерфейс между крайните потребители и блокчейн технологията, включвайки:
    • Потребителски интерфейси
    • APIs и SDK инструменти
    • Междуплатформена интеграция

3.3 Механизми за консенсус

Механизъм Описание Предимства Недостатъци
Proof of Work (PoW) Изисква изчислителна мощност за решаване на криптографски пъзели Висока сигурност Висока консумация на енергия
Proof of Stake (PoS) Валидаторите залагат криптовалута Енергийна ефективност Риск от централизация
Delegated Proof of Stake (DPoS) Делегиране на права за валидация Висока скалируемост По-малка децентрализация

3.3 Криптография

Криптовалутите използват различни криптографски методи за осигуряване на сигурност и анонимност:

  • Публични и частни ключове
  • Хеш функции (SHA-256, Keccak-256)
  • Цифрови подписи
  • Zero-knowledge proofs

4. Типове криптовалути

4.1 Платежни криптовалути

Това са първите и най-базови форми на криптовалути, създадени за извършване на финансови транзакции.

Валута Особености Предимства Използване
Bitcoin (BTC) Първата криптовалута Висока сигурност, ограничено предлагане Съхранение на стойност, плащания
Litecoin (LTC) По-бърз от Bitcoin Бързи транзакции, ниски такси Ежедневни плащания
Monero (XMR) Фокус върху поверителност Анонимни транзакции Поверителни плащания

4.2 Платформени токени

Тези токени са свързани с блокчейн платформи, които позволяват създаването на децентрализирани приложения (dApps).

Платформа Токен Особености Приложения
Ethereum ETH Смарт контракти, DeFi екосистема dApps, DeFi, NFT
Solana SOL Висока скорост, ниски такси DeFi, NFT пазари
Cardano ADA Научен подход, PoS DeFi, образование

4.3 Utility токени

Utility токените предоставят достъп до специфични услуги или функционалности в рамките на дадена платформа.

Токен Платформа Функционалност
BNB Binance Намаление на такси, участие в IEO
LINK Chainlink Достъп до oracle услуги
FIL Filecoin Децентрализирано съхранение

4.4 Стейбълкойни

Стейбълкойните са криптовалути, чиято стойност е обвързана с традиционни активи.

Стейбълкойн Обезпечение Механизъм Приложение
USDT USD Фиатно обезпечение Търговия, съхранение
DAI Крипто Свръхобезпечение DeFi операции
USDC USD Регулирано обезпечение Институционални плащания

5. Икономически аспекти

5.1 Монетарна политика

Криптовалутите използват различни подходи към паричното предлагане, всеки със свои предимства и недостатъци:

Тип политика Описание Примери Цели и ефекти
Фиксирано предлагане Предварително определен максимален брой монети, който никога няма да бъде надвишен - Bitcoin (21 млн.)
- Litecoin (84 млн.)
- YFI (30,000)
- Защита от инфлация
- Предвидимост на предлагането
- Дефлационен характер
Намаляващо предлагане чрез халвинг Периодично намаляване на наградите за валидаторите/майнърите наполовина - Bitcoin (на всеки 210,000 блока)
- Litecoin (на всеки 840,000 блока)
- Bitcoin Cash
- Постепенно намаляване на инфлацията
- Стимулиране на дългосрочно държане
- Балансиране на предлагането
Инфлационен модел с фиксиран процент Постоянно увеличаване на предлагането с фиксиран процент годишно - Dogecoin (5.256 млрд. годишно)
- Стария Ethereum (преди The Merge)
- Cosmos (7-20% годишно)
- Стимулиране на използването
- Компенсиране на изгубени монети
- Финансиране на валидаторите
Динамично предлагане Автоматично адаптиране на предлагането според различни параметри на мрежата - Новия Ethereum (след The Merge)
- LUNA Classic (преди колапса)
- Algorithmic стейбълкойни
- Ценова стабилност
- Балансиране на стимулите
- Адаптивност към пазарни условия

Допълнителни аспекти на монетарната политика:

  • Burn механизми: Някои криптовалути (BNB, LUNA) използват изгаряне на токени за намаляване на предлагането:
    • Автоматично изгаряне на част от таксите за транзакции
    • Периодично изгаряне на токени от екипа
    • Buy-back и burn програми
  • Vesting периоди: Постепенно освобождаване на токени за:
    • Екипа и съветниците
    • Инвеститори от ранни етапи
    • Развитие на екосистемата
  • Емисионни събития: Специални случаи на създаване на нови токени:
    • Награди за стейкинг
    • Ликвидни стимули
    • Общностни награди

5.2 Икономически модели

Модел Описание Примери
Дефлационен Намаляващо предлагане във времето Bitcoin, BNB
Инфлационен Постоянно увеличаване на предлагането Dogecoin, ETH (преди The Merge)
Хибриден Комбинация от различни механизми Ethereum (след The Merge)

5.3 Икономически индикатори

  • Пазарна капитализация
  • Обем на търговия
  • Ликвидност
  • Съотношение на стейкнати токени
  • Общ обем в DeFi протоколи (TVL)

6. Трейдинг перспектива

6.1 Трейдинг стратегии

Стратегия Описание Предимства Рискове
HODL Дългосрочно държане Минимален риск от тайминг Волатилност на пазара
Скалпинг Множество малки сделки Чести печалби Високи такси
Суинг трейдинг Търговия на по-големи времеви рамки По-добър риск/награда Изисква повече капитал

6.2 Технически анализ

Техническият анализ използва различни индикатори за прогнозиране на пазарните движения. Ето най-важните от тях:

Индикатор Описание Изчисление Приложение
Moving Averages (MA, EMA) Усреднена цена за определен период, помага за определяне на тренда - SMA: средно аритметично за N периода
- EMA: експоненциално претеглена средна с по-голяма тежест на последните данни
- Определяне на тренд
- Подкрепа/съпротива
- MA кръстосвания като сигнали
Relative Strength Index (RSI) Измерва силата на движението на цената и определя свръхкупени/свръхпродадени нива RSI = 100 - [100/(1 + RS)]
RS = средни печалби/средни загуби за N периода
Стандартен период: 14
- Свръхкупено над 70
- Свръхпродадено под 30
- Дивергенции
Fibonacci нива Базирани на числата на Fibonacci (0.236, 0.382, 0.618, etc.) Изчисляват се като процент от вълната:
- От връх до дъно за корекции
- От дъно до връх за екстензии
- Нива на корекция
- Ценови таргети
- Зони на подкрепа/съпротива
Bollinger Bands Три ленти, показващи волатилността и възможни екстремуми - Средна линия: 20-дневна SMA
- Горна лента: SMA + (2 × StdDev)
- Долна лента: SMA - (2 × StdDev)
- Волатилност
- Ценови канали
- Пробиви
MACD Moving Average Convergence Divergence - показва промени в тренда и момента - MACD линия: 12-EMA минус 26-EMA
- Сигнална линия: 9-EMA на MACD
- Хистограма: MACD минус сигнална линия
- Смяна на тренда
- Импулс на движението
- Дивергенции

Допълнителни важни индикатори:

  • Momentum индикатори:
    • Stochastic Oscillator: Сравнява текущата цена със ценовия диапазон за определен период
    • CCI (Commodity Channel Index): Измерва отклонението от средната цена
    • Williams %R: Подобен на Stochastic, но с различна скала
  • Volume индикатори:
    • On-Balance Volume (OBV): Кумулативна сума на обема, показваща натиска на купувачи/продавачи
    • Volume Profile: Показва нивата с най-голяма активност
    • Money Flow Index: Комбинира цена и обем
  • Трендови индикатори:
    • ADX (Average Directional Index): Измерва силата на тренда
    • Parabolic SAR: Определя точки на обрат в тренда
    • Ichimoku Cloud: Комплексен индикатор за тренд и подкрепа/съпротива

Приложение в крипто пазарите:

  • Криптовалутните пазари са по-волатилни от традиционните, което изисква:
    • По-широки стоп-лос нива
    • Адаптиране на периодите на индикаторите
    • Комбиниране на множество времеви рамки
  • Специфични за крипто индикатори:
    • MVRV (Market Value to Realized Value)
    • NVT (Network Value to Transactions)
    • Funding Rate за фючърси

6.3 Фундаментален анализ

Ключови метрики за оценка:

  • Развитие на мрежата
  • Брой активни адреси
  • Транзакционен обем
  • Разработка на протокола
  • Партньорства и интеграции

7. Сравнителен анализ

7.1 Сравнение на основните блокчейн платформи

Платформа TPS Консенсус Смарт контракти Екосистема
Bitcoin 7 PoW Ограничени Платежи
Ethereum 15-30 PoS Пълни Много голяма
Solana 65,000 PoS + PoH Пълни Растяща
Cardano 250 PoS Пълни Развиваща се

7.2 DeFi екосистеми

Показател Ethereum BSC Solana
TVL (млрд. $) 40+ 5+ 2+
Брой протоколи 200+ 100+ 50+
Средни такси Високи Ниски Много ниски

8. Бъдещи перспективи

8.1 Технологични тенденции

Тенденция Текущо състояние Очаквано развитие Водещи проекти
Layer 2 решения - Optimistic Rollups
- ZK Rollups
- Странични вериги
- Повишена скалируемост (100k+ TPS)
- Намалени такси
- По-добра интеграция с L1
- Optimism
- Arbitrum
- zkSync
- Polygon
Интероперабилност - Мостове между блокчейни
- Cross-chain протоколи
- Атомарни суапове
- Универсални стандарти
- Безопасни мостове
- Единна ликвидност
- Polkadot
- Cosmos
- Chainlink CCIP
- LayerZero
Подобрена поверителност - Zero-Knowledge Proofs
- Хомоморфно криптиране
- MPC технологии
- Селективна прозрачност
- Институционално възприемане
- Регулаторен баланс
- Monero
- Zcash
- Aztec Protocol
- Secret Network
Квантова устойчивост - Пост-квантова криптография
- Квантово-устойчиви алгоритми
- Хибридни решения
- Нови криптографски стандарти
- Защита от квантови атаки
- Обновяване на протоколите
- QRL
- IOTA
- Quantum Resistant Ledger

Детайлен анализ на технологичните тенденции:

Layer 2 решения за скалируемост

  • Optimistic Rollups:
    • Обработват транзакции извън основната верига
    • Използват fraud proofs за сигурност
    • По-ниски такси и по-висока пропускателна способност
    • Предизвикателство: период на изчакване за тегления
  • ZK Rollups:
    • Използват математически доказателства за валидност
    • Незабавна финалност на транзакциите
    • По-сложна имплементация
    • По-високи изчислителни изисквания
  • Странични вериги:
    • Независими блокчейни с мостове към основната верига
    • Собствени механизми за консенсус
    • Гъвкавост в дизайна и приложението

Интероперабилност между блокчейни

  • Междуверижни протоколи:
    • Стандартизирани протоколи за комуникация
    • Сигурен обмен на данни и активи
    • Унифицирани стандарти за съобщения
  • Мостове:
    • Централизирани vs. децентрализирани
    • Механизми за защита на активите
    • Автоматизирана ликвидност
  • Междуверижни приложения:
    • DeFi протоколи работещи на множество вериги
    • Обединени ликвидни пулове
    • Оптимизация на газ таксите

Подобрена поверителност

  • Zero-Knowledge технологии:
    • ZK-SNARKs и ZK-STARKs
    • Приватни смарт контракти
    • Верифицируеми изчисления
  • Хомоморфно криптиране:
    • Изчисления върху криптирани данни
    • Защита на чувствителна информация
    • Интеграция с DeFi протоколи
  • MPC (Multi-Party Computation):
    • Разпределено управление на ключове
    • Институционални решения
    • Подобрена сигурност на портфейли

Квантова устойчивост

  • Пост-квантови алгоритми:
    • Решетъчна криптография
    • Хеш-базирани подписи
    • Суперсингуларни изогении
  • Мигриране на съществуващи системи:
    • Постепенно обновяване на протоколите
    • Хибридни криптографски схеми
    • Обратна съвместимост
  • Нови защитни механизми:
    • Квантово-устойчиви хеш функции
    • Адаптивни криптографски схеми
    • Динамично обновяване на сигурността

8.2 Регулаторна среда

Основни аспекти на регулацията:

  • Класификация на криптоактивите
  • AML/KYC изисквания
  • Данъчно третиране
  • Институционално участие

8.3 Потенциални приложения

Област Приложение Очаквано въздействие
Финанси DeFi 2.0, институционални услуги Високо
Игри GameFi, метавселени Средно към високо
Идентичност Децентрализирана идентичност Много високо
IoT M2M плащания, автоматизация Високо

Заключение:

Криптовалутите представляват динамично развиваща се технология с потенциал да трансформира множество индустрии. Разбирането на техническите, икономическите и търговските аспекти е ключово за успешното навигиране в тази нова финансова екосистема. Бъдещето на криптовалутите ще зависи от развитието на технологиите, регулаторната рамка и степента на масово възприемане.

Монте Карло симулация за оценка на проектен бюджет

Монте Карло симулация за оценка на проектен бюджет

1. Въведение и значимост

Монте Карло симулацията е мощен инструмент за оценка на риска и несигурността в проектното управление. При управлението на софтуерни проекти, точното определяне на бюджета е критично за успеха на проекта.

Защо е важна тази задача?

  • Помага за по-точна оценка на необходимия бюджет
  • Позволява количествена оценка на рисковете
  • Дава възможност за определяне на реалистични буфери
  • Подпомага вземането на информирани решения

2. Методология

Монте Карло симулацията за бюджетно планиране се базира на принципа на многократното случайно семплиране. Вместо да разчитаме на единични точкови оценки, които често се оказват неточни, методът генерира хиляди възможни сценарии, вземайки предвид вероятностните разпределения на различните компоненти на бюджета. Това ни позволява да получим не просто една прогнозна стойност, а цяло разпределение на възможните резултати, което много по-добре отразява реалната несигурност в проектното планиране.

Особено важен аспект на методологията е интегрирането на рисковите фактори. За разлика от традиционното бюджетно планиране, където рисковете често се отчитат чрез фиксиран процент буфер, Монте Карло симулацията позволява моделиране на сложни взаимодействия между различните рискове. Всеки рисков фактор се характеризира с вероятност на възникване и потенциално въздействие, като в симулацията тези рискове могат да се материализират независимо един от друг, създавайки множество различни комбинации от сценарии. Това води до много по-реалистична оценка на необходимия буфер, базирана на действителната рискова експозиция на проекта.

2.1. Основни компоненти

  • Идентификация на ключови променливи разходи
  • Определяне на разпределения на вероятностите
  • Интегриране на рискови фактори
  • Многократно симулиране на сценарии
  • Статистически анализ на резултатите

2.2. PERT разпределение

Използваме PERT (Program Evaluation and Review Technique) разпределение със следните оценки:

  • Оптимистична (O): Базова сума
  • Най-вероятна (M): Базова сума + 50% от буфера
  • Песимистична (P): Максимална сума с отчитане на рискове

Formula: Expected Value = (O + 4M + P) / 6

3. Псевдокод на решението

ФУНКЦИЯ monte_carlo_simulation(iterations, activities, risks):
    резултати = празен_масив()
    
    ЗА ВСЯКО i ОТ 1 ДО iterations:
        общ_бюджет = 0
        
        ЗА ВСЯКА дейност В activities:
            // Генериране на случайна стойност по PERT разпределение
            стойност = pert_random(
                дейност.оптимистична,
                дейност.най_вероятна,
                дейност.песимистична
            )
            
            // Прилагане на рискови фактори
            ЗА ВСЕКИ риск В risks:
                АКО random() < риск.вероятност:
                    стойност *= (1 + риск.въздействие)
                    
            общ_бюджет += стойност
        
        // Добавяне на допълнителни разходи
        общ_бюджет *= 1.3  // 30% за технологии и обучения
        
        добави(резултати, общ_бюджет)
    
    ВЪРНИ резултати

ФУНКЦИЯ анализирай_резултати(резултати, планиран_бюджет):
    средна_стойност = изчисли_средно(резултати)
    стандартно_отклонение = изчисли_std(резултати)
    персентил_90 = изчисли_персентил(резултати, 90)
    вероятност_превишаване = изчисли_вероятност_превишаване(резултати, планиран_бюджет)
    
    ВЪРНИ {
        средна_стойност,
        стандартно_отклонение,
        персентил_90,
        вероятност_превишаване
    }
        

Обяснение на псевдокода

Основна функция monte_carlo_simulation

Функцията приема три параметра:

  • iterations - брой повторения на симулацията (обикновено 10000)
  • activities - списък с дейностите и техните оценки
  • risks - списък с рисковите фактори

За всяка итерация функцията:

  1. Инициализира нов общ бюджет за текущата итерация
  2. Преминава през всяка дейност и генерира случайна стойност според PERT разпределението
  3. За всяка генерирана стойност прилага рисковите фактори според техните вероятности
  4. Добавя допълнителните разходи (30% за технологии и обучения)
  5. Запазва крайния резултат за тази итерация

PERT разпределение

Функцията pert_random реализира PERT разпределението чрез:

  • Използване на Beta разпределение за апроксимация
  • Изчисляване на средна стойност по формулата (O + 4M + P) / 6
  • Трансформиране на генерираните стойности в желания интервал

Функция за анализ

Функцията анализирай_резултати извършва статистически анализ чрез:

  • Изчисляване на средната стойност на всички симулации
  • Определяне на стандартното отклонение за оценка на волатилността
  • Изчисляване на 90-ти персентил за определяне на препоръчителния буфер
  • Определяне на вероятността за превишаване на планирания бюджет

Тези метрики дават цялостна картина на риска и необходимия буфер.

Ключови аспекти на имплементацията

  • Използване на вероятностно разпределение вместо фиксирани стойности
  • Независимо прилагане на рискови фактори за по-реалистично моделиране
  • Отчитане на допълнителни разходи като процент от основния бюджет
  • Статистически анализ за извличане на значими заключения

4. Python имплементация

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

# Define project activities and their estimates
activities = {
    'Project Manager': {
        'optimistic': 6460.48,
        'most_likely': 6945.02,
        'pessimistic': 7429.55 * 1.2
    },
    'Senior Dev 1': {
        'optimistic': 26103.69,
        'most_likely': 28061.47,
        'pessimistic': 30019.24 * 1.3
    },
    'Senior Dev 2': {
        'optimistic': 24886.95,
        'most_likely': 26753.47,
        'pessimistic': 28619.99 * 1.3
    },
    'Junior Dev 1': {
        'optimistic': 6797.73,
        'most_likely': 7307.56,
        'pessimistic': 7817.39 * 1.15
    },
    'Junior Dev 2': {
        'optimistic': 6244.19,
        'most_likely': 6712.51,
        'pessimistic': 7180.82 * 1.15
    },
    'QA Engineer': {
        'optimistic': 5532.38,
        'most_likely': 5947.31,
        'pessimistic': 6362.24 * 1.25
    }
}

# Risk factors from risk register
risk_factors = {
    'integration_issues': {'probability': 0.8, 'impact': 0.25},
    'performance_issues': {'probability': 0.8, 'impact': 0.20},
    'requirement_changes': {'probability': 0.8, 'impact': 0.15},
    'technical_challenges': {'probability': 0.6, 'impact': 0.20}
}

def pert_random(opt, likely, pess, size=1):
    """Generate random values using PERT distribution"""
    alpha = 4
    mean = (opt + alpha * likely + pess) / (alpha + 2)
    variance = ((pess - opt) ** 2) / 36
    a = ((mean - opt) * (2 * pess - opt - mean)) / variance
    b = (a * (pess - mean)) / (mean - opt)
    return np.random.beta(a, b, size=size) * (pess - opt) + opt

def run_simulation(n_iterations=10000):
    """Run Monte Carlo simulation"""
    results = []
    
    for _ in range(n_iterations):
        iteration_total = 0
        
        for activity, estimates in activities.items():
            cost = pert_random(
                estimates['optimistic'],
                estimates['most_likely'],
                estimates['pessimistic']
            )[0]
            
            for risk in risk_factors.values():
                if np.random.random() < risk['probability']:
                    cost *= (1 + risk['impact'])
            
            iteration_total += cost
        
        iteration_total *= 1.3
        results.append(iteration_total)
    
    return np.array(results)

def analyze_results(simulation_results):
    """Analyze simulation results"""
    planned_budget = 126772.39
    
    mean_cost = np.mean(simulation_results)
    std_dev = np.std(simulation_results)
    percentile_90 = np.percentile(simulation_results, 90)
    overrun_prob = np.mean(simulation_results > planned_budget)
    recommended_buffer = percentile_90 - planned_budget
    
    print(f"\nSimulation Analysis Results:")
    print(f"Mean Expected Cost: {mean_cost:,.2f} лв.")
    print(f"Standard Deviation: {std_dev:,.2f} лв.")
    print(f"90th Percentile Cost: {percentile_90:,.2f} лв.")
    print(f"Probability of Budget Overrun: {overrun_prob:.1%}")
    print(f"Recommended Additional Buffer: {max(0, recommended_buffer):,.2f} лв.")
    
    plt.figure(figsize=(10, 6))
    plt.hist(simulation_results, bins=50, density=True, alpha=0.7)
    plt.axvline(planned_budget, color='r', linestyle='dashed', label='Planned Budget')
    plt.axvline(mean_cost, color='g', linestyle='dashed', label='Mean Simulated Cost')
    plt.axvline(percentile_90, color='y', linestyle='dashed', label='90th Percentile')
    plt.title('Monte Carlo Simulation Results')
    plt.xlabel('Total Project Cost (лв.)')
    plt.ylabel('Probability Density')
    plt.legend()
    plt.grid(True, alpha=0.3)
    plt.show()

# Run simulation and analyze results
results = run_simulation(10000)
analyze_results(results)
        

5. Заключение

Тази симулация предоставя ценна информация за:

  • Очакваната средна стойност на проектния бюджет
  • Вероятността за превишаване на планирания бюджет
  • Препоръчителния размер на буфера
  • Разпределението на възможните крайни стойности

Важно е да се отбележи, че симулацията е толкова добра, колкото са входните данни. Редовното актуализиране на оценките и рисковите фактори е ключово за поддържане на точността на модела.

Въведение в Блокчейн програмирането и Solidity

Въведение в Блокчейн програмирането и Solidity

гл. ас. д-р Георги Пашев http://gpashev.com

Лекция 1: Основи на Блокчейн технологията

1.1 Какво е блокчейн?

Блокчейн е разпределена база данни, която се споделя между възлите на компютърна мрежа. Като база данни, блокчейнът съхранява информация електронно в цифров формат. Блокчейните са най-известни с тяхната ключова роля в криптовалутните системи като Bitcoin за поддържане на сигурен и децентрализиран запис на транзакциите.

1.2 Основни характеристики

  • Децентрализация: Няма централен орган, който контролира мрежата
  • Прозрачност: Всички транзакции са публично видими
  • Неизменност: Веднъж записани, данните не могат да бъдат променени
  • Сигурност: Използва криптография за защита на транзакциите

1.3 Как работи блокчейн?

  • Транзакциите се групират в блокове
  • Всеки блок съдържа:
    • Транзакции
    • Timestamp
    • Hash на предишния блок
    • Nonce (използва се за mining)

Лекция 2: Въведение в Smart Contracts

2.1 Какво са Smart Contracts?

Smart Contracts са самоизпълняващи се договори, където условията на споразумението между купувач и продавач са директно записани в програмен код. Кодът и споразуменията съществуват в разпределена, децентрализирана блокчейн мрежа.

2.2 Характеристики на Smart Contracts

  • Автоматично изпълнение
  • Прозрачност
  • Неизменност
  • Точност
  • Бързина
  • Сигурност

Лекция 3: Въведение в Solidity

3.1 Какво е Solidity?

Solidity е обектно-ориентиран програмен език за писане на smart contracts. Той е разработен специално за Ethereum платформата и е основният език за разработка на smart contracts.

3.2 Основна структура на Solidity contract

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyFirstContract {
    // Декларация на променливи
    uint public myNumber;
    
    // Конструктор
    constructor() {
        myNumber = 0;
    }
    
    // Функция за промяна на стойността
    function setNumber(uint _newNumber) public {
        myNumber = _newNumber;
    }
    
    // Функция за четене на стойността
    function getNumber() public view returns (uint) {
        return myNumber;
    }
}

3.3 Основи на Solidity

3.3.1 Променливи и типове данни

Стойностни типове (Value Types)
// Булеви
bool isActive = true;

// Цели числа
uint256 maxAmount = 1000;    // Без знак, 256 бита
int8 temperature = -10;      // Със знак, 8 бита
uint8 small = 255;          // 8 бита
uint16 medium = 65535;      // 16 бита

// Адреси
address owner = msg.sender;
address payable recipient;   // Може да получава ETH

// Изброявания
enum Status { Pending, Active, Closed }
Status current = Status.Pending;

// Fixed-point числа
fixed256x18 price = 3.14;   // 256 бита с 18 десетични позиции
Референтни типове (Reference Types)
// Масиви
uint[] numbers;              // Динамичен масив
uint[5] fixedNumbers;        // Фиксиран масив
bytes32 hash;               // Фиксиран bytes масив
bytes data;                 // Динамичен bytes масив

// Структури
struct Person {
    string name;
    uint age;
    address wallet;
}

// Mapping (асоциативни масиви)
mapping(address => uint) public balances;
mapping(uint => mapping(address => bool)) public complexMapping;

3.3.2 Оператори

Аритметични оператори
uint a = 10;
uint b = 5;

uint sum = a + b;        // Събиране
uint diff = a - b;       // Изваждане
uint prod = a * b;       // Умножение
uint quot = a / b;       // Деление
uint rem = a % b;        // Остатък
uint inc = a++;         // Инкрементиране
uint dec = b--;         // Декрементиране
Оператори за сравнение
bool isEqual = a == b;         // Равенство
bool notEqual = a != b;        // Неравенство
bool greater = a > b;          // По-голямо
bool less = a < b;            // По-малко
bool greaterEq = a >= b;      // По-голямо или равно
bool lessEq = a <= b;         // По-малко или равно
Логически оператори
bool result1 = true && false;  // Логическо И
bool result2 = true || false;  // Логическо ИЛИ
bool result3 = !true;          // Логическо НЕ
Побитови оператори
uint c = a & b;    // Побитово И
uint d = a | b;    // Побитово ИЛИ
uint e = a ^ b;    // Побитово изключващо ИЛИ
uint f = ~a;       // Побитово НЕ
uint g = a << 1;   // Побитово изместване наляво
uint h = a >> 1;   // Побитово изместване надясно

3.3.3 Константи и Имутабилни променливи

// Константи - стойността се определя по време на компилация
uint256 constant MAX_UINT = 2**256 - 1;
string constant VERSION = "1.0.0";

// Имутабилни променливи - стойността се определя в конструктора
address immutable owner;
uint256 immutable creationTime;

constructor() {
    owner = msg.sender;
    creationTime = block.timestamp;
}

3.3.4 Специални променливи и функции

Глобални променливи
address sender = msg.sender;          // Адрес на изпращача
uint value = msg.value;               // Изпратени ETH
bytes data = msg.data;                // Данни на съобщението
uint timestamp = block.timestamp;      // Timestamp на блока
uint blockNumber = block.number;       // Номер на блока
address coinbase = block.coinbase;     // Адрес на майнъра
uint difficulty = block.difficulty;    // Трудност на блока
uint gasLimit = block.gaslimit;        // Gas лимит на блока

3.3.5 Видимост на променливите

contract VisibilityExample {
    uint private privateVar;     // Достъпна само в текущия contract
    uint internal internalVar;   // Достъпна в текущия contract и наследниците
    uint public publicVar;       // Достъпна отвсякъде, създава getter
    
    // External не се прилага за променливи
}

3.3.6 Функции

Декларация и видимост
contract FunctionExample {
    // Public функция - достъпна отвсякъде
    function publicFunction() public {
        // код
    }
    
    // Private функция - достъпна само в текущия contract
    function privateFunction() private {
        // код
    }
    
    // Internal функция - достъпна в текущия contract и наследниците
    function internalFunction() internal {
        // код
    }
    
    // External функция - достъпна само отвън
    function externalFunction() external {
        // код
    }
}
Модификатори на функции
contract ModifierExample {
    // View - не променя състоянието
    function viewFunction() public view returns (uint) {
        return someValue;
    }
    
    // Pure - не чете и не променя състоянието
    function pureFunction(uint x) public pure returns (uint) {
        return x * 2;
    }
    
    // Payable - може да получава ETH
    function payableFunction() public payable {
        // код
    }
    
    // Виртуална функция - може да бъде презаписана
    function virtualFunction() public virtual {
        // код
    }
    
    // Презаписана функция
    function overriddenFunction() public override {
        // код
    }
}
Модификатори (Function Modifiers)
contract ModifierPatterns {
    address public owner;
    bool public locked;
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }
    
    modifier noReentrant() {
        require(!locked, "No reentrancy");
        locked = true;
        _;
        locked = false;
    }
    
    // Използване на модификатори
    function sensitiveFunction() 
        public 
        onlyOwner 
        noReentrant 
    {
        // код
    }
}
Events
contract EventExample {
    // Деклариране на event
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    
    function transfer(address to, uint256 amount) public {
        // Емитиране на event
        emit Transfer(msg.sender, to, amount);
    }
}

Лекция 4: Разработка на Smart Contracts

4.1 Развойна среда

  • Remix IDE: Онлайн среда за разработка
  • Truffle: Развойна рамка
  • Hardhat: Модерна развойна среда
  • Web3.js/Ethers.js: Библиотеки за взаимодействие с блокчейн

4.2 Основни концепции

  • Gas: Такса за изпълнение на транзакции
  • State Variables: Променливи, съхранявани в блокчейна
  • Functions: Видове функции (public, private, internal, external)
  • Events: Механизъм за logging
  • Modifiers: За промяна поведението на функции

4.3 Пример за по-сложен Smart Contract

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    
    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
        decimals = 18;
        totalSupply = 1000000 * (10 ** uint256(decimals));
        balanceOf[msg.sender] = totalSupply;
    }
    
    function transfer(address to, uint256 value) public returns (bool success) {
        require(balanceOf[msg.sender] >= value, "Insufficient balance");
        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }
}

Лекция 5: Добри практики и сигурност

5.1 Добри практики

  • Използване на последна версия на Solidity
  • Правилно управление на достъпа
  • Оптимизация на gas
  • Документиране на кода
  • Използване на утвърдени библиотеки (OpenZeppelin)

5.2 Сигурност

  • Reentrancy атаки
  • Integer overflow/underflow
  • Timestamp dependence
  • Front-running
  • Denial of Service (DoS)

5.3 Примери за защита

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SecureContract {
    mapping(address => uint) public balances;
    bool private locked;
    
    modifier noReentrant() {
        require(!locked, "No reentrancy");
        locked = true;
        _;
        locked = false;
    }
    
    function withdraw() public noReentrant {
        uint balance = balances[msg.sender];
        require(balance > 0, "No balance");
        balances[msg.sender] = 0;
        (bool success, ) = msg.sender.call{value: balance}("");
        require(success, "Transfer failed");
    }
}

Заключение

Това въведение в блокчейн програмирането и Solidity покрива основните концепции и практики, необходими за започване на разработка на smart contracts. За да станете успешен блокчейн разработчик, е важно да:

  1. Разбирате основните концепции на блокчейн технологията
  2. Овладеете синтаксиса и особеностите на Solidity
  3. Следвате добрите практики за сигурност
  4. Практикувате чрез създаване на различни проекти
  5. Следите развитието на технологията и новите стандарти

Лекция 6: Интеграция на Python с Smart Contracts

6.1 Настройка на развойната среда

Инсталиране на необходимите инструменти

# Инсталиране на Python пакети
pip install web3
pip install python-dotenv
pip install eth-account

# Инсталиране на Ganache за локална blockchain мрежа
npm install -g ganache-cli

Структура на проекта

my_blockchain_project/
├── contracts/
│   └── MyContract.sol
├── build/
│   └── contracts/
├── scripts/
│   └── deploy.py
│   └── interact.py
├── .env
└── requirements.txt

6.2 Компилиране и деплойване на Smart Contract

Пример за deploy скрипт (deploy.py)

from web3 import Web3
from eth_account import Account
import json
import os
from dotenv import load_dotenv

# Зареждане на environment променливи
load_dotenv()

# Конфигурация
INFURA_URL = os.getenv("INFURA_URL")  # или локален URL за тестване
PRIVATE_KEY = os.getenv("PRIVATE_KEY")

# Свързване към blockchain
w3 = Web3(Web3.HTTPProvider(INFURA_URL))

# Създаване на акаунт от private key
account = Account.from_key(PRIVATE_KEY)

def deploy_contract():
    # Зареждане на компилирания contract
    with open("build/contracts/MyContract.json") as f:
        contract_json = json.load(f)
    
    # Извличане на contract ABI и bytecode
    contract_abi = contract_json['abi']
    contract_bytecode = contract_json['bytecode']
    
    # Създаване на contract обект
    Contract = w3.eth.contract(abi=contract_abi, bytecode=contract_bytecode)
    
    # Изграждане на транзакция
    transaction = Contract.constructor().build_transaction({
        'from': account.address,
        'nonce': w3.eth.get_transaction_count(account.address),
        'gas': 2000000,
        'gasPrice': w3.eth.gas_price
    })
    
    # Подписване на транзакцията
    signed_txn = w3.eth.account.sign_transaction(transaction, PRIVATE_KEY)
    
    # Изпращане на транзакцията
    tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
    
    # Чакане за потвърждение
    tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
    
    return tx_receipt.contractAddress

if __name__ == "__main__":
    contract_address = deploy_contract()
    print(f"Contract deployed at: {contract_address}")

6.3 Взаимодействие със Smart Contract

Пример за interaction скрипт (interact.py)

from web3 import Web3
from eth_account import Account
import json
import os
from dotenv import load_dotenv

load_dotenv()

# Конфигурация
INFURA_URL = os.getenv("INFURA_URL")
PRIVATE_KEY = os.getenv("PRIVATE_KEY")
CONTRACT_ADDRESS = os.getenv("CONTRACT_ADDRESS")

# Свързване към blockchain
w3 = Web3(Web3.HTTPProvider(INFURA_URL))

# Създаване на акаунт
account = Account.from_key(PRIVATE_KEY)

def load_contract():
    # Зареждане на contract ABI
    with open("build/contracts/MyContract.json") as f:
        contract_json = json.load(f)
    contract_abi = contract_json['abi']
    
    # Създаване на contract обект
    contract = w3.eth.contract(
        address=CONTRACT_ADDRESS,
        abi=contract_abi
    )
    return contract

def read_contract_data():
    contract = load_contract()
    
    # Извикване на view функция
    result = contract.functions.getNumber().call()
    return result

def send_transaction():
    contract = load_contract()
    
    # Изграждане на транзакция
    transaction = contract.functions.setNumber(42).build_transaction({
        'from': account.address,
        'nonce': w3.eth.get_transaction_count(account.address),
        'gas': 100000,
        'gasPrice': w3.eth.gas_price
    })
    
    # Подписване и изпращане на транзакцията
    signed_txn = w3.eth.account.sign_transaction(transaction, PRIVATE_KEY)
    tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)
    
    # Чакане за потвърждение
    tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
    return tx_receipt

def handle_event(event):
    print(f"New event: {event}")

def listen_for_events():
    contract = load_contract()
    
    # Дефиниране на event filter
    event_filter = contract.events.MyEvent.create_filter(fromBlock='latest')
    
    # Безкраен цикъл за следене на събития
    while True:
        for event in event_filter.get_new_entries():
            handle_event(event)

if __name__ == "__main__":
    # Пример за използване
    current_value = read_contract_data()
    print(f"Current value: {current_value}")
    
    # Изпращане на транзакция
    tx_receipt = send_transaction()
    print(f"Transaction successful: {tx_receipt.transactionHash.hex()}")

6.4 Конфигурационен файл (.env)

# .env file
INFURA_URL=https://mainnet.infura.io/v3/your-project-id
PRIVATE_KEY=your-private-key
CONTRACT_ADDRESS=deployed-contract-address

6.5 Добри практики при Python интеграция

  1. Управление на грешки
from web3.exceptions import ContractLogicError

def safe_contract_call():
    try:
        result = contract.functions.myFunction().call()
        return result
    except ContractLogicError as e:
        print(f"Contract error: {e}")
        return None
    except Exception as e:
        print(f"Unexpected error: {e}")
        return None
  1. Gas оптимизация
def estimate_gas_and_send():
    # Оценка на gas
    gas_estimate = contract.functions.myFunction().estimate_gas()
    
    # Добавяне на buffer
    gas_limit = int(gas_estimate * 1.2)
    
    # Изграждане на транзакция с оптимизиран gas
    transaction = contract.functions.myFunction().build_transaction({
        'from': account.address,
        'gas': gas_limit,
        'gasPrice': w3.eth.gas_price,
        'nonce': w3.eth.get_transaction_count(account.address)
    })
  1. Async операции
import asyncio
from web3.auto import w3

async def async_contract_interaction():
    async for event in contract.events.MyEvent.create_filter(fromBlock='latest').get_all_entries():
        print(f"New event: {event}")

async def main():
    await async_contract_interaction()

if __name__ == "__main__":
    asyncio.run(main())

6.6 Тестване

Пример за unit test с pytest

import pytest
from web3 import Web3
from eth_tester import EthereumTester
from web3.providers.eth_tester import EthereumTesterProvider

@pytest.fixture
def web3_test():
    return Web3(EthereumTesterProvider(EthereumTester()))

@pytest.fixture
def contract(web3_test):
    with open("build/contracts/MyContract.json") as f:
        contract_json = json.load(f)
    
    contract = web3_test.eth.contract(
        abi=contract_json['abi'],
        bytecode=contract_json['bytecode']
    )
    
    tx_hash = contract.constructor().transact()
    tx_receipt = web3_test.eth.wait_for_transaction_receipt(tx_hash)
    
    return web3_test.eth.contract(
        address=tx_receipt.contractAddress,
        abi=contract_json['abi']
    )

def test_contract_function(contract, web3_test):
    # Arrange
    account = web3_test.eth.accounts[0]
    
    # Act
    tx_hash = contract.functions.setNumber(42).transact({'from': account})
    web3_test.eth.wait_for_transaction_receipt(tx_hash)
    
    # Assert
    result = contract.functions.getNumber().call()
    assert result == 42

Полезни ресурси

  • Официална документация на Solidity
  • Web3.py документация
  • OpenZeppelin документация
  • Ethereum Stack Exchange
  • GitHub repositories с примери
  • Online курсове и туториали

Дисциплина: Компютърна Лингвистика в Областта на Биоинформатиката

Компютърна Лингвистика в Областта на Биоинформатиката

гл. ас. д-р Георги Петров Пашев

http://gpashev.com § georgepashev@uni-plovdiv.bg

Кратко описание на дисциплината:

Този курс се фокусира върху приложението на компютърна лингвистика в областта на биоинформатиката, като се разглеждат техники за обработка на естествен език и машинно обучение, приложими в анализа на биологични данни. Курсът съчетава теоретични знания с практически умения в програмиране на Python и Rust, като изследва интеграцията на тези езици в биоинформатични приложения.

Списък с теми за лекциите (7 седмици):

00001. Въведение в Компютърната Лингвистика и Биоинформатика

· Основни понятия и приложения

· Примерен код: Обработка на текстови данни с Python

00002. Машинно Обучение в Биоинформатиката

· Основи на машинното обучение

· Примерен код: Създаване на базов класификатор в Python

00003. Естествен Езиков Обработка (NLP) и Геномни Данни

· NLP техники за анализ на геномни последователности

· Примерен код: NLP алгоритми в Rust

00004. Биоинформатични Бази Данни и Тяхната Интеграция

· Работа с биологични бази данни

· Примерен код: Интегриране на бази данни в Python

00005. Използване на GPT-4 и LLAMA2 за Анализ на Биологични Данни

· Приложения на модели за естествен език в биоинформатиката

· Примерен код: Интегриране на GPT-4 API в Python

00006. Развитие на Уеб и Десктоп Интерфейси за Биоинформатични Приложения

· Основи на уеб и десктоп програмирането

· Примерен код: Създаване на прост UI в Rust

00007. Проектна Работа и Научно Писане

· Техники и методи за разработване на научни публикации

· Разработване на проектни идеи и начало на проектната работа

Оценяване:

Студентите работят в малки групи, разработвайки проект, който включва създаване на чат бот, използващ GPT-4 API, LLAMA2, или машинно обучение с Python и sklearn. Всеки проект включва научна публикация и разработка на потребителски интерфейс.

Възможно е студентите да изберат да разработват само обзорно-научната част на проекта, без практическата, ако не се чувстват достатъчно силни в областта на разработката на приложения. В такъв случай, максималната оценка, която могат да получат, е Много Добър (5).

Списък с Упражнения за Всяка Седмица

Седмица 1: Въведение в Компютърната Лингвистика и Биоинформатика

· Упражнение: Анализиране и обработка на текстови данни с Python. Студентите трябва да напишат скрипт за извличане на информация от научни публикации, свързани с биоинформатиката.

Седмица 2: Машинно Обучение в Биоинформатиката

· Упражнение: Създаване на базов класификатор в Python за разпознаване на видове ДНК последователности. Студентите използват предоставени данни за трениране на модела.

Седмица 3: Естествен Езиков Обработка (NLP) и Геномни Данни

· Упражнение: Имплементиране на NLP алгоритми в Rust за анализ на геномни последователности. Студентите трябва да адаптират традиционни NLP методи за работа с генетичен код.

Седмица 4: Биоинформатични Бази Данни и Тяхната Интеграция

· Упражнение: Интегриране на биологични бази данни в Python програма. Студентите създават интерфейс за достъп и анализ на данни от биоинформатични бази данни.

Седмица 5: Използване на GPT-4 и LLAMA2 за Анализ на Биологични Данни

· Упражнение: Работа с GPT-4 API или LLAMA2 за генериране на предсказания или анализи въз основа на биологични данни. Студентите разработват прототип на приложение, използващо тези модели.

Седмица 6: Развитие на Уеб и Десктоп Интерфейси за Биоинформатични Приложения

· Упражнение: Създаване на прост уеб или десктоп базиран UI в Rust, който да показва резултати от биоинформатични анализи. Студентите трябва да интегрират своя код в потребителски интерфейс.

Седмица 7: Проектна Работа и Научно Писане

· Упражнение: Начална разработка на проекта и написване на научен обзор за избраната тема. Студентите трябва да определят обхвата на своя проект и да изготвят план за научна публикация.

Тези упражнения са насочени към развитие на практически умения и подготовка за финалния проект, като същевременно се засилва теоретичната основа на дисциплината.

Литература:

1. Mount, D. W. (2004). Bioinformatics: Sequence and Genome Analysis. Cold Spring Harbor Laboratory Press.

2. Pevsner, J. (2015). Bioinformatics and Functional Genomics. Wiley-Blackwell.

3. Bird, S., Klein, E., & Loper, E. (2009). Natural Language Processing with Python. O’Reilly Media.

4. Klabnik, S., & Nichols, C. (2019). The Rust Programming Language. No Starch Press.

5. McKinney, W. (2018). Python for Data Analysis. O’Reilly Media.

6. Géron, A. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. O’Reilly Media.

Сайтът премина на българска кирлица

Георги Пашев се включва в инициативата за разпространяване на типично българското начертание на кирилски шрифтове.

Повече за това какво наричаме българска кирилица можете да прочетете в сайта на инициативата "За Българска Кирилица" или в следната статия от Списание 8.

 

Накратко кирилски шрифтове с типично българско начертание се използват най-масово и са типични за България. Отличават се със по-ръкописен тип начертание на малките букви и някои от големите, за разлика от кирилските шрифтове които са типични за Русия, където малките букви са умалено копие на големите.

Поради по-голямото разнообразие на форми, българската кирилица е по-лесна и приятна за четене.

В последно време, тя става все по-често използвана и предпочитана.

 

Как да включим шрифт с българска кирилица във уеб страница

Вмъкнете следното във секцията <header> на вашата уеб страница:

...
<header>
<style>
@font-face {
font-family: bgcyrillic;
src: url('https://bgkalendar.com/fonts/notoserif-regular.php');
}
* {
font-family: bgcyrillic;
}
</style>
</header>
...

Писмото ми до Слави Трифонов

До Станислав Трифонов,
в качеството му на
идеолог и председател на ПП «Има такъв народ»
Отворено писмо
Привет,
г-н Станислав (Слави) Трифонов,
Правя това обръщение към Вас, защото по едно стечение на обстоятелства, къде случайни, къде неслучайни, вие сте единствения със шанс да направите правителство. Във връзка с това, бих ви посъветвал да направите следното:
  1. Да се извините на хората, че преди години сте станал медиен двигател за популяризирането на Бойко Борисов (Боко), който сега (уж) сте тръгнал да «изчегъртвате»;
  2. Да хвърлите повече светлина върху ваши евентуално минали взаимовръзки с подземния и сенчест свят и приятелски връзки с мафиоти, които вече не са между живите, или такива, които са още живи;
  3. Да хвърлите светлина върху личния ви живот, включително и това коя ви е текущата любовница. Вие отсега нататък сте не просто публична, но и обществена личност с политическо влияние и власт и трябва покрай вас всичко да е публично и осветено и изкоментирано от Вас самия (ако не искате да го коментират недоброжелателите); Също така, споделете с аудиторията дали ползвате услуги на «леки жени» и колко често и дали те биха могли да изкопчат нежелани компромати за Вас, както «Мата Хари» направи с Боко;
  4. Да направите «кръгла маса» с всички партии в парламента и да създадете приоритетен списък от национални цели, които да преследвате и изпълнявате в рамките на следващ мандат и това да стане възможно най-бързо, за да не губите време;
  5. Да направите управленска коалиция с всички партии, които са в парламента и не са ГЕРБ, ДПС;
  6. Да направите работещ Закон за референдумите по Швейцарски модел, ако е необходимо и с конституционни кръпки, за да се даде реална власт в ръцете на хората;
  7. Да уволните всички назначения на ГЕРБ в държавната администрация и да назначите свои след публично предавани конкурси в социалните мрежи и/или във вашата телевизия и/или по БНТ;
  8. Да намалите броя министерства, чрез сливане. Например, социално и здравно могат да се слеят под общо име Министерство на Милосърдието или Министерство на Разходите за хората (сам изберете кое име е по-подходящо, а можете да изберете и друго); Военното и МВР и ДАНС и др. служби могат да се слеят под общо име Министерство на Държавната Репресия или нещо подобно; Идеята е тук да се постигне Швейцарския модел с малко министри и намалена администрация до санитарния минимум;​​​​​​​
  9. Да изпълните нещата от вашия си референдум като де факто успешно проведен референдум и то в условията на закон за референдумите, който реално е репресивен, спрямо тях;
  10. Подобно на Швейцария, да предлагате на референдуми 2 пъти в годината важни въпроси за управлението;
  11. Да създадете най-после Закон за личния фалит и опрощаване на дългове и тяхната наследственост на де факто фалирали физически лица;
  12. Да подложите на референдум евентуално узаконяване на проституцията (бизнес за милиарди, който може да вкара свежи пари в Бюджета и винаги е добра идея да е официално регулиран); както и леката дрога за консумация в лицензирани Кофи шопове (по Холандски модел);
  13. Също така ви представям и други мои идеи, които съм развил още през далечната 2012г. в този онлайн документ, който през 2013 година е привлекъл вниманието на българи в Чикаго и са го препечатали в техен сайт: https://www.eurochicago.com/2013/06/scriptura-voluntatis-nostrae/https://antikomunisti.blogspot.com/2013/03/scriptura-voluntatis-nostrae.html

    Братята британци имат ценна поговорка — «Отчаяните времена изискват отчаяни мерки». Време е за отчаяни мерки и за кардинални реформи. Дано Вие да сте на необходимата висота, за да ги направите.
--
Георги Пашев

Жребий за партия за гласуване

Здравейте,

Предполагам, че много от вас сте се сблъсквали с добре познатия проблем - за кого да гласувате. Ако не можете да изберете, понеже мразите всички участници и не намирате достоен кандидат или тези, които харесвате "нямат реален шанс", според социолозите, можете да приложите стратегия "теглене на жребий чрез отчитане на коефициент на омраза за всеки от кандидатите.

Тук представям имплементация на алгоритъм на Python, която отчита коефициентите на омраза към отделни кандидати в списъка и "стреля" по мишени в "стрелбище", с изтеглени случайни числа. Вероятността за попадане в мишена на дадена партия, е обратно пропорционална на "омразата" към нея.

Можете да си "поиграете" с коефициентите и кода тук: https://onlinegdb.com/HJhDkA3X_

Ето го алгоритъма (коефициентите на омраза отразяват моето мнение). При максимален коефициент на омраза 1000, съответната партия се изключва от избора и не участва изобщо в него. При мен, това е партия ГЕРБ.

import random
import operator
from random import randint
from random import seed
# списък на партиите и коефициентите на омраза на всяка
parties = (
{"name": "BSP", "hate": 95},
{"name": "GERB", "hate": 1000},
{"name": "DPS", "hate": 900},
{"name": "Slavy Trifonov", "hate": 150},
{"name": "DB", "hate": 40},
{"name": "Vazrazhdane", "hate": 40},
{"name": "Volya - NFSB", "hate": 455},
{"name": "VMRO", "hate": 455},
{"name": "ATAKA", "hate": 55},
{"name": "MUTRI VYN", "hate": 43},
{"name": "REPUBLIKANCI", "hate": 570},
{"name": "KOD", "hate": 300},
{"name": "ABV - MANGAROV", "hate": 30},
{"name": "Pryaka demokraciq - Klissarov", "hate": 20},
{"name": "BG LYATO - Cherepa", "hate": 400},
)

# списъците, използвани от алгоритъма за реализиране на "стрелбище"
strelbishte = []
partii_v_strelbishte = []
# речник с ключове - име на партия и стойност - попадения, в който ще се пазят попаденията след приключване на алгоритъма
akumulirani_brojki = {}
seed(a=None, version=2) # правене на псевдослучайния избор "наистина случаен" с избор на seed - текущо системно време
# инициализация на стрелбището и речника
for party in parties:
count = 1000 - party["hate"]
if count == 0:
continue
akumulirani_brojki[party["name"]] = 0
partii_v_strelbishte += [party["name"]] * count
strelbishte += [0] * count
# разбъркване на секторите и фрагментация на партийните зони в стрелбището и инициализация на броя мишени в него
random.shuffle(partii_v_strelbishte)
broj_v_strelbishte = len(partii_v_strelbishte)
# извършване на случайния избор (стрелбата в стрелбището)
seed(a=None, version=2)
for i in range(0, 3000):
izteglenoChislo = randint(0, broj_v_strelbishte)
strelbishte[izteglenoChislo] += 1
akumulirani_brojki[partii_v_strelbishte[izteglenoChislo]] += 1
#сортиране на партиите в речника по брой попадения в низходящ ред
sorted_akumulirani_brojki = sorted(akumulirani_brojki.items(), key=operator.itemgetter(1), reverse=True)

# отпечатване на попаденията за всяка партия, вече сортирано
print(sorted_akumulirani_brojki)

Насоки за провеждане на упражненията по ППМУ за задочни студенти

Насоки за провеждане на упражненията по ППМУ за задочни студенти

Здравейте, колеги,

Онлайн курса за упражненията ви по дисциплината ППМУ е достъпен тук: (https://uroci.online/course/view.php?id=12)


Направих онлайн формуляр, в който ще предавате курсовите си проекти по ППМУ. Линка му е тук (https://uroci.online/mod/url/view.php?id=93)
За да го достъпите, трябва да имате профил в платформата uroci.online и при регистрацията да сте избрали клас "ПУ - 3 курс".
В онлайн курса се намира цялата информация, която ви е необходима: от видеоуроци през програмен код за заданията до примерни теми за задания за КП по ППМУ. Там са указани и минималните изисквания за КП, а именно: 1) поне 2 активитита; 2) работа с локална БД sqlite3.

За Чучхе и разликата с Диалектическия материализъм

Привет,Почти на 100% е ясно, че другарят Ким: вожд и учител на Северна Корея е или пукясал или тежко болен, толкова, че не може да ходи и да стои изправен. Тази новина засили любопитството ми към севернокорейската "демокрация". Посетих сайта на официалното им радио "Гласът на Корея" (http://www.vok.rep.kp/index.php?CHANNEL=6&lang=). Ето тук например с гордост заявяват, че мобилизират хора да им работят за пътища (http://www.vok.rep.kp/index.php?CHANNEL=6&lang=).  Това са техните "бригади". Ееей, няма ги вече при нас тия времена: да те емнат политкомисарите да правиш нещо съвсем различно от професията си в името на вожда и учителя и държавата

Избираема дисциплина "Програмиране с Node.JS"

Избираема дисциплина "Програмиране с Node.JS"

PDF ръководство за упражненията:

Свали

 

Portable версия на програмна среда:

Свали

1. Упражнение: Сървър Express Калкулатор

var express=require('express');
var app=express();
app.get('/', function(req, res){
res.send('Hello World!');


});

app.get('/delete/', function(req, res){
//console.log(result);
res.setHeader('Access-Control-Allow-Origin', '*');

try{
var sqlite3=require("sqlite3").verbose();
var db=new sqlite3.Database("EMSG.db");
db.serialize(function(){
console.log("17");
db.run("DELETE FROM LOG;", function(){
console.log("19");
db.close();
res.send(JSON.stringify({status: "OK"}));

});

});
//db.close();
}catch(error){
console.log({error : error});

}





});

var logResult=function(result, request){
//console.log(result);

try{
var sqlite3=require("sqlite3").verbose();
var db=new sqlite3.Database("EMSG.db");
db.serialize(function(){
db.run("CREATE TABLE "+
" if not exists "+
" LOG("+
"ID INTEGER PRIMARY KEY AUTOINCREMENT, "+
" txt text not null, "+
" request text not null,"+
" time datetime default current_timestamp"+
" );"
);
var stmt=db.prepare("INSERT INTO LOG(txt, request) VALUES(?, ?)");
stmt.run(JSON.stringify(result), JSON.stringify(request));
stmt.finalize();
});
db.close();
}catch(error){
console.log({error : error});

}



}

app.get('/one/', function(req, res){
var result={};
try{
res.setHeader('Content-Type', 'application/json');
res.setHeader('Access-Control-Allow-Origin', '*');

var a=parseInt(req.param("a"));
var b=parseInt(req.param("b"));
console.log(typeof a);
console.log(typeof b);

if(typeof a !=='number' || typeof b !=='number' ){
result={error: "Wrong format"};
res.send(JSON.stringify(result));
return;
}
var dejstvie=req.param("dejstvie");

switch(dejstvie){
case 'add':
result={dejstvie: 'plus', res: a+b};

break;
case 'sub':
result={dejstvie: 'minus', res: a-b};
break;
case 'mul':
result={dejstvie: 'po', res: a*b};
break;
case 'div':
result={dejstvie: 'deleno', res: a/b};
break;
default:
result={error: "No such action."};
break;
}

}catch(e){
result={error: e};
}

logResult(result, {a: a, b: b, dejstvie: dejstvie});
res.send("{\"result\": "+JSON.stringify(result)+"}");





});
app.get('/log/', function(req, res){
//res.setHeader('Content-Type', 'application/json');
res.setHeader('Access-Control-Allow-Origin', '*');
response=[];
try{
var sqlite3=require("sqlite3").verbose();
var db=new sqlite3.Database("EMSG.db");
db.serialize(/*function(){
db.run("CREATE TABLE "+
" if not exists "+
" LOG("+
"ID INTEGER PRIMARY KEY AUTOINCREMENT, "+
" txt text not null, "+
" request text not null,"+
" time datetime default current_timestamp"+
" );"
);



},*/
function(){
console.log("116");
db.each("SELECT * from LOG;",
function(err, row){
console.log(typeof err);
console.log(err);
if(err!= null){
console.log("119");
//console.log("problem: "+err);
response={error: err};
//console.log(res);

//res.send(JSON.stringify(response));
return;
}
//console.log(err);
console.log("131");
response.push(row);

}
,
function(){
console.log("136");
console.log(response);
console.log("before send");
res.send(JSON.stringify(response));
db.close();
}


);
//res.send(JSON.stringify(response));


}

);

}catch(error){
console.log({error : error});
res.send(JSON.stringify({error : error}));
}




});
var server=app.listen(8087, function(){
var host=server.address().address;
var port=server.address().port;
console.log("Listening at http://%s:%s", host, port);
});

 

2. Клиентско приложение.

<html>
<head>
<title>Елка</title>
<meta charset="utf-8">
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<style>
input[type="number"] {
max-width:30%;
min-width:20%;
}
.label-a{
min-width:10%;
max-width:15%;
}
</style>

</head>
<body>
<div class="panel panel-primary">
<div class="panel-heading">
Супер яка елка
</div>
<div class="panel-body">
<table class="table table-hover">
<tr>
<td ><div class="label-a">a</div></td><td><input type="number" class="form-control" id="input_a" name="input_a"></td>
<td ><div class="label-a">b</div></td><td><input type="number" class="form-control" id="input_b" name="input_b"></td>
</tr>
<tr>
<td colspan="2">
<select class="form-control" id="dejstvie" name="dejstvie">
<option value="add">събиране</option>
<option value="sub">изваждане</option>
<option value="div">деление</option>
<option value="mul">умножение</option>
</select>
</td>
<td colspan="2">
<input class="btn btn-primary" type="button" id="buton4e" name="buton4e" value="Калкулирай">
<input class="btn btn-primary" type="button" id="delete" name="delete" value="Изтрий">

</td>



</table>


</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
Лог на действията
</div>
<div class="panel-body" id="logDiv">
</div>
<div class="panel-footer" id="logResult">
</div>
</div>

<script>
function aaaa(){
///console.log("Hello.");
var val_a=$("#input_a").val();
var val_b=$("#input_b").val();

var d=$("#dejstvie").val();

//console.log({a: val_a, b: val_b, d: d});
var url="http://localhost:8087/one/?a="+val_a+"&b="+val_b+"&dejstvie="+d;
//alert(url);
$.ajax({
url: "http://localhost:8087/one/?a="+val_a+"&b="+val_b+"&dejstvie="+d,
dataType: "text",
//jsonpCallback: "logResults",
error: function (request, error) {
alert("AJAX Call Error: " + error);
},
success: function (response) {
var resp = JSON.parse(response);
//alert(response);
//alert(resp.result.res);
$("#logResult").html("Result: "+resp.result.res);


},
});
///log results
$.ajax({
url: "http://localhost:8087/log/",
dataType: "text",
//jsonpCallback: "logResults",
error: function (request, error) {
alert("AJAX Call Error: " + error);
},
success: function (response) {
//$("#logResult").text("");
var resp = JSON.parse(response);
var new_text="";
for(i=0; i<resp.length; i++){
new_text+="<div>";
new_text+="request: "+resp[i].request+"<br/>";
new_text+="time: "+resp[i].time+"<br/>";
new_text+="</div>";
}
$("#logDiv").html(new_text);



//$("#logResult").text($("#logResult").text()+new_text);


},
});
};

function logResults(data){
//console.log(data);
alert(data);

};

$(document).ready(function(){
aaaa();
$("#delete").on('click', function(){
$.ajax({
url: "http://localhost:8087/delete/",
dataType: "text",

error: function (request, error) {
alert("AJAX Call Error: " + error);
},
success: function (response) {
$("#logResult").text("");
var res=JSON.parse(response);
if(typeof res.status == "undefined"){
$("#logDiv").html("Кофти");
}else if(res.status=="OK"){
$("#logDiv").html("OK");
}else{
$("#logDiv").html("Проблеми с базата данни");

}




//$("#logResult").text($("#logResult").text()+new_text);


},
});
});

$("#buton4e").on('click', function(){ aaaa();} );










});






</script>

</body>
</html>

За контакти:

ас. д-р инж. Георги Пашев

e-mail: georgepashev@uni-plovdiv.bg

http://gpashev.com

 

Упражнения СТ2

Материали за упражненията по СТ-2 за спец. СТД - задочни (3.к.) можете да изтеглите от тук:

https://drive.google.com/drive/folders/1p09rzMizh62_6ikYnaN_qP6nnNAVilyB?usp=sharing

Линк за сваляне на Netbeans Portable:

https://www.softpedia.com/get/PORTABLE-SOFTWARE/Programming/NetBeans-IDE-Portable.shtml

 

гл. ас. д-р инж. Г. Пашев

Упражнения по компютърна лингвистика за студенти

Упражнения по Компютърна лингвистика за специалност Информатика 4. курс, задочна и редовна форма на обучение.

при гл. ас. д-р инж. Георги Пашев

e-mail: georgepashev@uni-plovdiv.bg

 

Линк към Google Classroom на дисциплината: ( https://classroom.google.com/c/MTY4OTIzMzU0Njk0?cjc=rwht7yj )

Линк към теми за проекти от упражнения: (https://docs.google.com/document/d/1uEz3dke1fuo55sFK2Dp0hwc-MTDnt5lHjJaoo5ZdFwU/edit?usp=sharing)

Упражнения, теми:

Упражнение 1: Крайни автомати

1. Създайте парсър на удобен за вас програмен език (на упр. ще бъде показан пример с езика PHP), който да имплементира краен автомат, който се подава като параметър на парсващата функция/процедура, заедно с текст за парсване и връща информация дали текстът е парснат успешно (отговаря на крайния автомат), или не.

2. Използвайки 1, създайте краен автомат, който да парсва изречения от този тип:

ab, aabb, abbb, aaaab, .... (променлив брой a...b...)

3. Използвайки 1, създайте парсър на дата във формат "DD.MM.YYг.".

Упражнение 2: Регулярни изрази

1. Като използвате помощния файл за упражненията и др. материали онлайн, запознайте се със синтаксиса на регулярните изрази.

2. Запознайте се с PHP функции preg_match, preg_match_all, preg_replace.

3. Като използвате preg_match_all, напишете PHP скрипт, който намира в текст всички дати във формат DD.MM.YYYY, като отделя дните, месеците и годините в подходящи подмасиви и генерира изходящ текст от рода:

Намерена е дата 15.01.2018г, денят е 15 подред на месец 01 от година 2018г.

4. Като използвате някои от функциите, напишете PHP скрипт, който намира в текст всички дати във формат DD.MM.YYYY, и генерира подобен на този текст, в който датите са в американски формат MM/DD/YYYY.

Например, текста:

На 24.09.2018г. се проведе упражнение по Компютърна лингвистика

да се превежда като

На 09/24/2018г. се проведе упражнение по Компютърна лингвистика

5. Напишете PHP скрипт, който намира в текст всички URL адреси по http/https/ftp адресна схема и ги показва в списък.

Задача: крос транслиране на командни компютърни езици с регулярни изрази. Примерен крос транслатор може да свалите от тук:

https://www.dropbox.com/s/znhxozltwq30kxe/translator.php?dl=0

 

Упражнение 3. Контекстно независими граматики

Използва се инструмента Grammophone, линк към който може да намерите в помощния файл за упражненията по-долу.

1. Решете задачите от темата за Контекстно независими граматики в помощния файл.

2. Допълнителни задачи:

2.1. Напишете контекстно независима граматика, която да парсва успешно програмен текст на "мини програмен език" (който за целта на упражненията ще бъде наречен PeUScript), на който е написан следния пример:

 

def A=0 as Int
def B=12.0 as Float
def I=0 as Int 
while I<100 or not A>7000 do
	print "Stojnostta na I e "+I+"\n"
	A=I+B
	I=I+1
	print "Stojnostta na B e"+B+"\n"
	if B <> 12.0 then
		break
	endif
done

2.2. Напишете с помощта на езици PHP и Javascript (или други удобни за вас) кространслатор и среда на изпълнение на  PeUScript , като първо преведете програмния текст на Javascript и стартирайте така получения JavaScript код в браузъра.

Примерен проект за Bison & Flex (инсталирани в Линукс/Убунту програмна среда): Свали от тук

Виртуална машина за VirtualBox с готови инсталирани пакети за работа свалете от тук:

https://www.dropbox.com/s/ipki0tirv9qn2z1/xubuntu.rar?dl=0

Компилацията се извършва с последователно извикване на командите:

flex -o calc.flex.cc calc.lex
bison calc.yy
 cc -fpermissive calc.tab.cc calc.flex.cc -Wall -lm  -o rpccalc

Еквиваленти на BISON и FLEX за други езици и програмни среди:
1. Parsimonious за Python
За употреба на пакета се изисква Python конзола. Портативен (portable) вариант за Windows на такава с предварително инсталиран пакет на Parsimonious може да изтеглите от тук:
(https://www.dropbox.com/s/v96u1wpgi8q4p3g/Portable%20Python%203.7.0%20x64.rar?dl=0)

Работещ пример на елементарна граматика за инструмента:

 

 

 

from parsimonious.grammar import Grammar
grammar = Grammar(
"""
bold_text = bold_open text bold_close
text = ~"[A-Z 0-9]*"i
bold_open = "(("
bold_close = "))"
""")
print(grammar.parse('((bold stuff))'))

 



Конзолата на Python се стартира от разархивирания архив от папката: App\Python и файла е python.exe

При нужда от инсталация на допълнителен пакет в папката App\Python се стартира Windows конзола и се изпълнява командата:

python -m pip install <package name>

Пример, парсващ елементарен израз:

from parsimonious.grammar import Grammar
grammar = Grammar(
     """
        exps = exp op exp 
exp = num / expparen 
expparen = lparen num rparen
op = ~"[\+\-]"i
        lparen = "("
rparen = ")"
num = ~"[0-9]+"i
     """)
print(grammar.parse('12+23'))

2. PLY за Python (напълно функционален заместител на bison/flex)

2.1. Инсталирайте PLY в конзолата с изпълнение на командата в командната конзола:

python -m pip install ply

2.2. Създайте в директорията App\Python файл calclex.py, със следното съдържание:

# ------------------------------------------------------------
# calclex.py
#
# tokenizer for a simple expression evaluator for
# numbers and +,-,*,/
# ------------------------------------------------------------
import ply.lex as lex
# List of token names.   This is always required
tokens = (
   'NUMBER',
   'PLUS',
   'MINUS',
   'TIMES',
   'DIVIDE',
   'LPAREN',
   'RPAREN',
)
# Regular expression rules for simple tokens
t_PLUS    = r'\+'
t_MINUS   = r'-'
t_TIMES   = r'\*'
t_DIVIDE  = r'/'
t_LPAREN  = r'\('
t_RPAREN  = r'\)'
# A regular expression rule with some action code
def t_NUMBER(t):
    r'\d+'
    t.value = int(t.value)    
    return t
# Define a rule so we can track line numbers
def t_newline(t):
    r'\n+'
    t.lexer.lineno += len(t.value)
# A string containing ignored characters (spaces and tabs)
t_ignore  = ' \t'
# Error handling rule
def t_error(t):
    print("Illegal character '%s'" % t.value[0])
    t.lexer.skip(1)
# Build the lexer
lexer = lex.lex()

 

2.3 Създайте в директорията App\Python файл yacc.py, със следното съдържание:

# Yacc example

 

import ply.yacc as yacc
# Get the token map from the lexer.  This is required.
from calclex import tokens
def p_expression_plus(p):
    'expression : expression PLUS term'
    p[0] = p[1] + p[3]
def p_expression_minus(p):
    'expression : expression MINUS term'
    p[0] = p[1] - p[3]
def p_expression_term(p):
    'expression : term'
    p[0] = p[1]
def p_term_times(p):
    'term : term TIMES factor'
    p[0] = p[1] * p[3]
def p_term_div(p):
    'term : term DIVIDE factor'
    p[0] = p[1] / p[3]
def p_term_factor(p):
    'term : factor'
    p[0] = p[1]
def p_factor_num(p):
    'factor : NUMBER'
    p[0] = p[1]
def p_factor_expr(p):
    'factor : LPAREN expression RPAREN'
    p[0] = p[2]
# Error rule for syntax errors
def p_error(p):
    print("Syntax error in input!")
# Build the parser
parser = yacc.yacc()
while True:
   try:
       s = input('calc > ')
   except EOFError:
       break
   if not s: continue
   result = parser.parse(s)
   print(result)

 

 

2.4. Стартирайте парсъра с изпълнение на Windows конзолната команда:

python yacc.py

4. Търсене на отношение в текст

Да се състави алгоритъм (и да се имплементира на PHP), който автоматизирано намира отношения на пишещия към търсени термини в текста, като се създадат примерни речници:

 

  • речник на основните форми на думите с попълнени съответствия за основни форми за примерния текст, с който се тества;
  • речник на съществителните, за които се търси отношение;
  • речник на думите, носещи информация за положително или отрицателно отношение на пишещия в основните им форми, съдържащ индекс на отношение/емоция за съответната дума.

 

Алгоритъмът да е достатъчно съобразителен, за да открива инвесии (напр. чрез откриване на ключова дума "не").

Примерно решение тук: [https://www.dropbox.com/s/uw5hoaxmepnoztp/analizator_otnoshenie.php?dl=0]

5. Чат ботове

Примерен чат бот, разработван по време на упражненията, който умее да прави изводи спрямо PROLOG базирана база знания:

http://gp.gpashev.com:93/CrossTranslatorWeb/indexPrologBot.php

(Изходния код се предоставя по време на упражненията).


Помощен файл за упражненията свалете от тук

download

 

Save

Подготовка за контролна работа номер 2 по ОС

Задачи за подготовка за Контролна работа № 2

при ас. д-р инж. Георги Пашев

контакти: georgepashev@gmail.com; http://gpashev.com

Зад. 1. Да се напише BASH скрипт, който изписва на потребителя "Моля, въведете 0 за кръг и 1 за елипса" и в зависимост от въведеното от потребителя число стартира подпрограма (функция) съответно за въвеждане на необходимите променливи и изчисляване и извеждане на лицето. С допълнителна команда (напр. php или awk) да се подсигури изчисление на дробни числа (понеже стандартната команда let в BASH поддържа работа само с цели числа).

#!/bin/bash

function calc_circle()
{
    echo "Vyvedete r"
    read r
    echo $( awk "BEGIN {print 3.14*$r*$r}"  )

}

function calc_elipse()
{
    echo "Vyvedete a"; read a; echo "Vyvedete b"; read b;
    echo $( awk "BEGIN {print 3.14*$a*$b}"  )
}



echo "Molya, vyvedete 0 za kryg ili 1 za elipsa"
read Case
case $Case in
0)
    calc_circle
;;
1)
    calc_elipse
;;
*)
    echo "Obyrkal si, brat"; exit 1;
;;
esac

Зад. 2. Да се напише BASH скрипт, който в директорията /etc намира всички *.sh файлове и копира в нова директория shells всички от тях, които са собственост на юзър root.

#!/bin/bash
LIST=$( find /etc -name "*.sh" -type f  )
 
if [ -e shells ]
then
    rm -rf shells
fi
mkdir shells
for i in $LIST
do
    OWNER=$( ls -l $i | awk '{print $3}'  )
    if [ "$OWNER" == "root" ]
    then
        cp $i shells/
    fi
done
 


Зад. 3. Да се напише BASH скрипт, който реализира функция за сумиране на числа, функция за намиране на произведение на числа и от командния ред, в зависимост от входните параметри да извиква едната или другата функция.

#!/bin/bash
 
function sum()
{
    let S=0
    for i in $*
    do
        let S+=i
    done
    echo $S
 
}
function mul()
{
    let S=1
    for i in $*
    do
        let S*=i
    done
    echo $S
}
 
echo "Result: $( $*  )"
 


Зад. 4. Да се напише BASH скрипт, който реализира функция killps, която убива процеси с име name, които са собтвеност на потребител user и се извиква така: killps name user и пише в out.log редове с ID, name на убития процес и дата и час на убиването.

#!/bin/bash
 
function killps()
{
    name=$1
    user=$2
    PSs=$( ps aux | grep $name | grep ^$user | grep -v zad4.sh | grep -v grep | awk '{print $2}'  )
    for i in $PSs
    do
        curPSName=$( ps aux | grep $i | awk '{print $11}'  )
        kill $i
        if [ $? -eq 0  ]
        then
            curDate=$( date  )
            echo "$i $curPSName $curDate" >> out.log
        fi        
    done
}
 
killps $*
 


Литература:

1) Cobault, Paul, Linux Fundamentals

2) Ryans Tutorials, BASH Scripting Tutorial

Учебни материали за Контролна 1 по ОС

 

Учебни материали за Контролна 1 по ОС при ас. д-р инж. Георги Пашев:


  1. Ръководство за работа с Линукс: Linux Fundamentals, Paul Cobbault (до 203 стр. за 1. контролна)
  2. За документация за команди: команда man <команда> или Linux Manual Pages.


Примерни задачи за контролната:

Задача 1:

Да се напише команден ред, който:

  • Създава папка с име one, влиза в нея и;
  • Създава файл 1.txt, който съдържа имената на всички файлове и/или папки в директорията ~, сортирани по азбучен ред.
  • Създава файл 2.txt, който е symlink към 1.txt

Решение:

mkdir one

cd one

ls ~ | sort > 1.txt

ln -s 1.txt 2.txt


Задача 2:

Да се напише команден ред, който:

  1. Създава папка с име two, влиза в нея и;
  2. Създава файл 1.txt, който съдържа пътищата до всички .conf файлове в /etc, сортирани по азбучен ред;
  3. Създава файл 2.txt, който е символичен линк към 1.txt;
  4. Създава папка 1/, която съдържа копия на всички файлове от 1.
  5. За всички файлове от 4. добавя право за изпълнение за user group, която е собственик на файловете.

Решение:

mkdir two

cd two

find /etc -name "*.conf" -type f | sort > 1.txt

ln -s 1.txt 2.txt

mkdir 1

cd 1

find /etc -name "*.conf" -type f -exec cp {} . \;

find . -name "*.conf" -type f -exec chmod g+x {} \;

 


Примерни тестови въпроси:

От така дадения команден ред по-долу определете:

giorgio@giorgio-VirtualBox:~$ ls -l
total 248
drwxr-xr-x 7 giorgio giorgio   4096 мар  6 13:37 Desktop
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Documents
drwxr-xr-x 4 giorgio giorgio   4096 мар 17 14:37 Downloads
-rw-r--r-- 1 giorgio giorgio   8980 дек  7  2015 examples.desktop
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Music
-rw------- 1 root    root    201377 яну 18  2016 nohup.out
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Pictures
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Public
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Templates
drwxr-xr-x 2 giorgio giorgio   4096 дек  7  2015 Videos
giorgio@giorgio-VirtualBox:~$

1. Кои са файловете, които нямат никакви права за изпълнение: examples.desktop; nohup.out;

2. Кои файлове не са от тип директория: examples.desktop; nohup.out;

3. Как се казва потребителят, който е собственик на файла nohup.out: root;

4. Как може да се добавят права за изпълнение за всички юзъри за nohup.out: chmod a+x nohup.out;

5. Напишете команда за изтриване на всички .out файлове в текущата директория: rm -f *.out

 


За въпроси:

д-р инж. Георги Пашев: georgepashev (at) gmail.com; georgepashev (at) uni-plovdiv.bg


 

Дисциплина ППМУ и ДПМУ и МП при Г. Пашев

Бързи връзки: Оценяване

Инсталация и конфигурация

Теми Курсови проекти по ППМУ и МП

Теми Курсови проекти по ДПМУ

За контакти

Съобщения за извънредни занятия

Учебна литература и полезни връзки

 

Достъп до онлайн материали чрез платформата Google Classroom:

2021-2022 ППМУ СТД 3к. зад.
Базов курс (с най-много учебни материали):
ПУ ФМИ 2021 ППМУ упр. - СТД 3к. ред.

 


 

Обща информация по отношение на оценяването:

За специалност СТД (редовни и задочни), оценяването става чрез:

Курсови проекти (отделни) за двете дисциплини ДПМУ, ППМУ. Темите за КП по ППМУ се избират от списък тук. Темите за КП по ДПМУ могат да бъдат избрани от тук.

Минимални изисквания за КП:

1. Работа с БД sqlite3;

2. Минимум 2 activities;

Бонус точки се дават за:

1. Работа с мрежови заявки, многонишкова работа;

2. Работа със специфичен хардуер на мобилното устройство: bluetooth, gsm modem (sms, data call);

3. Работа с asyncTask, Map, ConcurrentMap, List, ArrayList, ConcurrentArrayList, др.

4. GPS и Google Maps компонента;

 

 

Оценките от упражнения се поставят по време на последните часове от триместъра или по време на изпита от ас./гл.ас. Крайните оценки по съответната дисциплина се поставят от титуляра на дисциплината по време на изпита.

За специалност СИ (задочни), оценяването става чрез:

1) Курсови задачи, изпълнени по време на третата част от 5 у.ч. упражнения; ИЛИ

2) Решаване на тест по време на третата част от 5 у. ч. упражнения;

Оценките се поставят по време на третата част от 5 у.ч. упражнения и могат да бъдат коригирани от титуляр на дисциплината.

За специалност СИ (редовни), оценяването става чрез:

Курсови проекти по МП. Темите за КП по МП се избират от списък тук.

Оценките се поставят по време на последната седмица на триместъра и могат да бъдат коригирани от титуляр на дисциплината.

 


 

Списък с теми за курсофи проекти:

Списък: https://1drv.ms/w/s!ArI6oidlkCxomX5L9joU9XloqK1k

 


 

Разработвани курсови проекти по време на упражненията (Примерни курсови проекти):

https://drive.google.com/drive/folders/0B2Sg-oFX9K4NYW9XSUFnSGdRZGM?usp=sharing

 


Подготовка за провеждане на упражненията:

 

1) Андроид студио (Сваляне на архив и разархивиране):

https://drive.google.com/file/d/1QuYudYdE6_D29q779fOU60SArgsajEIj/view?usp=sharing

След сваляне и изтегляне се стартира bin/studio64.exe

2) Андроид SDK (Сваляне на архив и разархивиране в отделна директория):

Конфигурирано SDK може да изтеглите от тук: https://drive.google.com/open?id=1l8v8ADIblCO2xXCtjVofhS9rzYgkVp4r

3) Настройване на Андроид студио за локацията на Android SDK.

File -> Sync Project with Gradle Files

Ако няма настроена папка за локация на Android SDK, ще поиска посочването на пътя до Android SDK. За вече инсталирани среди чрез стандартен инсталатор, най-често SDK се намира в "C:\Users\fmi\AppData\Local\Android\sdk".

Промяна на локацията на SDK става в Tools -> SDK Manager -> Android SDK Location: Edit и новата папка се задава в отворилия се диалогов прозорец.

4) Настройване на виртуално устройство

Tools -> AVD Manager -> + Create Virtual Device. Избира се Phone, Pixel 2XL. При нужда се изтегля API (29, 28 напр.). Емулаторът се инсталира в SDK папката; При изтегляне на SDK от линка по-горе, той вече е в нея и няма нужда от инсталация на емулатор.


Учебна литература и полезни връзки

Най-актуална версия на Android Studio за разработка можете да свалите от тук.

Проекти, работени по време на упражненията, можете да видите тук: https://drive.google.com/drive/folders/0B2Sg-oFX9K4NYW9XSUFnSGdRZGM?usp=sharing

С цел подпомагане на работата за упражненията е създаден базов проект за Android Studio, който можете да свалите от тук.

Книга за самоподготовка: "Практическо програмиране за Android" Денис Колисниченко, второ преработено и допълнено издание, изд. "Асеневци", ISBN 978-954-8898-76-8;

Всеки студент задължително прави Курсов проект.Следва списък с примерни курсови проекти, от които студентите могат да избират, а биха могли да предлагат други теми с подобна трудност и при преценка на преподавателя, да бъдат одобрени.

Теми за проекти по ДПМУ

Разпределен на

Проект

1

 

Да се създаде част от дизайн за мобилно приложение за електронен магазин за оръжия. Да се състои от следните activities: Главно Activity, което реализира главно меню със следните менюта: Категории, Артикули, Склад; като тези подменюта имат следните елементи: Категории -> Преглед, Изтриване, Добавяне; Артикули -> Преглед, Изтриване, Добавяне; Склад -> Доставка, Бракуване, Продажба. Да се създаде Activity, което да дава интерфейс за реализация на Преглед по категории с филтър по написано от потребител име на категория, както и написано от потребител име на артикул. Да има подходящ бутон с 2 състояния с текст “Артикули, които не са на склад“, както и табличен изглед със самите артикули с колони „Номер“, „Име артикул“ „Категория“ „Единична цена“.

2

 

Да се създаде част от дизайн за мобилно приложение за електронен магазин за оръжия. Да се състои от следните activities: Изтриване нa артикул. Да има подходящ бутон с 2 състояния с текст “Артикули, които не са на склад“, както и табличен изглед със самите артикули с колони „Номер“, „Име артикул“ „Категория“ „Единична цена“. На всеки от редовете да има предвиден CheckBox, който ако е избран при натискане на бутон „Изтрий“ да изтрива съответния артикул. Да има и Activity, което да може да се ползва за добавяне/редакция на един артикул, реализиращо форма с подходящи входни widgets за „Номер“, „Име артикул“, „Категория“, „Единична цена“.

3

 

Да се създаде част от дизайн за мобилно приложение за електронен магазин за оръжия. Да се състои от следните activities: Бракуване, в което да има подходящ интерфейс за потребителя да бракува даден артикул в определени количества в склада. Да има вид на форма, в която в TableLayout с възможност за страниране или да могат да се скролват и избират чрез кликване на CheckBox във всеки ред на TableLayout-то артикули (може избраните да са повече от един), както и да може да се задава брой на артикулите, които ще се бракуват. Второто Activity да реализира „Изглед на склад“ , в което да има TableLayout, което да е със следните колони „Име артикул“, „Категория артикули“, „Наличност“. За удобство на потребителя в същото Activity по-долу да има форма за бързо добавяне/премахване на артикули в склада, като има текстово поле, което при избран ред от TableLayout да се попълва с името на избрания артикул, както и текстово поле за въвеждане на числа, както и два бутона, съответно: „Добавяне“ и „Премахване“.

4

 

Да се създаде част от дизайн за мобилно приложение за електронен магазин за оръжия.  Да се състои от следните activities: Главно Activity, което да реализира подходящ интерфейс за потребителско вписване с Username и Password. Да има подходящ бутон с 2 състояния, който ако е кликнат, отдолу да се появяват допълнителни елементи във формата, които да позволяват възстановяване на забравена парола, като e-mail с който е регистриран и името на потребителя, с което е регистриран. Второто Activity да позволява добавяне/редакция на категория, като има форма, подходяща за това. Във формата трябва да има текстово поле с името на категорията, както и изображение отдясно на него, което в последствие ще се показва, ако името на тази категория е вече заето. Над формата да има TableLayout с възможност за страниране, което да показва вече наличните категории.

5

 

Да се създаде част от дизайн за приложение „Активни потребители“, което да има за цел докладване на нередности в търговската мрежа.  Главно Activity, което да реализира подходящ интерфейс за потребителско вписване с Username и Password. Да има подходящ бутон с 2 състояния, който ако е кликнат, отдолу да се появяват допълнителни елементи във формата, които да позволяват възстановяване на забравена парола, като e-mail с който е регистриран и името на потребителя, с което е регистриран. Това Activity да предвижда възможност за вписване през Facebook, Google Account, LinkedIn и др. Второ Activity, което да реализира списък с подадени от текущия потребител сигнали дотук, както и с бутон за подаване на нов сигнал. Списъкът с подадените вече сигнали да се реализира с TableLayout, отдолу да има бутони за страниране на елементите в TableLayout-a или скролер (по избор). Всеки ред от таблицата да има CheckBox, който при избиране и кликване на бутон „Delete”да позволява изтриване на подадения сигнал.

6

 

Да се създаде част от дизайн за приложение „Активни потребители“, което да има за цел докладване на нередности в търговската мрежа.  Да се създаде Activity, в което да има подходяща форма за добавяне на нов сигнал. Един сигнал има Заглавие, Дата и час на добавяне (това поле ще се попълва автоматично и трябва да е забранено за редакция), скрито поле, което да съдържа GPS координатите, където е потребителят в момента на подаването на сигнала, дата в която потребителят е забелязал за първи път нарушение от такъв характер (с DatePicker), SurfaceView, което ще се ползва за показване на заснет от камерата образ на самото нарушение, за което се отнася сигнала, Бутон за изпращане на нарушението и ProgressBar, който ще уведомява потребителя за забавянето при предаване на нарушението към сървиса.

7

 

Да се създаде част от дизайн за приложение „Светците на деня“, което да реализира следните Activities: Главно Activity, което да показва TableLayout с възможност за скролване с наличните светци за текущия ден съгласно църковния календар. При кликване на конкретен светец ще се зарежда Activity с информация за конкретния светец в следния вид: Име, година на раждане, година на смърт, дата на канонизация, икона, кратко житие на светеца. Да има бутони за споделяне на информацията за светеца в социални мрежи (Facebook, Twitter, LinkedIn, Google+ и др.).

8

 

Да се създаде част от дизайн за приложение „Шах“ със следните Activities: Главно Activity, което да реализира меню за работата с игрите на шах, вкл. „Нова игра“, „Продължи стара игра“, „Запази текущата игра“. Да има Activity с TableLayout, който графично да наподобява шахматното поле с белите и черни квадрати. Да има отгоре бутон „Undo”, който ще се използва за връщане играта с един ход назад, както и бутон Menu, който ще връща към главното activity.

9

 

Да се създаде част от дизайн за приложение „Новинарски портал“. В главното Activity да има бутон, показващ меню с категориите новини, бутон „лупичка“, който при кликване да показва Activity „Търсене“, както и бутон „Refresh” за обновяване на текущата страница. Отдолу да има скролируемо TableView с новините в текущо избраната категория. В антетката на таблицата ще има името на категорията. Менюто с категориите ще съдържа следните категории „Начало“, „Новини“, „Региони“. Аналогично да се създаде дизайн за Activity „Региони“, което да съдържа списък с региони, като при кликване на регион да показва новини от там.

10

 

Да се създаде част от дизайн за мобилно приложение „Портал за продажби“. Да реализира с подходящ интерфейс, разпределен по Activities по избор на студента, който да има най-малко следните елементи: бутони с изображения за: „Всички категории“, „Запитване към магазина“, „Най-популярни“, „Най-ново за този месец“, „Продукти в промоция“. В ScrollView да показва първите 3 подкатегории от категории „Мобилни телефони“, „Компютърна техника“, „Аксесоари за мобилни телефони“. Да има TableLayout, показващ най-продавани артикули.

11

 

Да се създаде част от дизайн за мобилно приложение „Месинджър“.  Главното Activity да има отгоре бутони с 2 състояния: Скорошни, Контакти, Заявки за свързване. Ако е натиснат бутон, отдолу в TableLayout, който е скролируем се показват кратки изгледи на съобщенията. Да има Activity за преглед на съобщение. Едно съобщение може да има следните елементи: Заглавие, текст, Прикрепени снимки, прикрепени файлове. Да се създаде и Activity за ново съобщение.

12

 

Да се създаде част от дизайн за приложение „Дама“ със следните Activities: Главно Activity, което да реализира меню за работата с игрите на дама, вкл. „Нова игра“, „Продължи стара игра“, „Запази текущата игра“. Да има Activity с TableLayout, който графично да наподобява игралното поле на „Дама“. Да има отгоре бутон „Undo”, който ще се използва за връщане играта с един ход назад, както и бутон Menu, който ще връща към главното activity.

13

 

Да се създаде дизайн за приложение, подобно на mapstr. Да използва MapFragment. В такова приложение, потребителят може да добавя списък с локации на конкретна позиция в картата. Всяка локация се характеризира с GPS координати, Име на локацията, Категория на локацията. Да се създадат Activities, както и подходящо меню за: Добавяне/редакция/изтриване на локация/категория на локация. Да има бутони за споделяне в социални мрежи на текуща локация.

14

 

Да се създаде дизайн за приложение „Организатор на задачи“. В главното Activity да има отгоре: бутон за преглед на всички незавършени задачи, бутон за добавяне на нова задача, бутон, водещ към Activity, което да позволява закупуване на платена версия на същото приложение, с премахнати реклами. Отдолу да има CalendarView с възможност за избор на ден. При избран ден и при кликване на бутон за добавяне на нова задача да се зарежда Activity за добавяне на задача със следните атрибути: Име, начален час, краен час, приоритет (без приоритет, нисък, среден, висок), Нотификации (да/не) (показва дали да са включени нотификациите за тази задача), Описание на задачата. В главното Activity да има ImageView, което да представлява реклама, с опция да се скрива след 30 секунди след зареждане на Activity-то.

15

 

Да се създаде част от дизайн за приложение „Съвестни шофьори“, което да има за цел докладване на нередности в пътната мрежа.  Да се създаде Activity, в което да има подходяща форма за добавяне на нов сигнал. Един сигнал има Заглавие, Дата и час на добавяне (това поле ще се попълва автоматично и трябва да е забранено за редакция), скрито поле, което да съдържа GPS координатите, където е потребителят в момента на подаването на сигнала, дата в която потребителят е забелязал за първи път нарушение от такъв характер (с DatePicker), SurfaceView, което ще се ползва за показване на заснет от камерата образ на самата пътна нередност (например, дупка, липсваща мантинела, др.), за която се отнася сигнала, Бутон за изпращане на нарушението и ProgressBar, който ще уведомява потребителя за забавянето при предаване на нарушението към сървиса.

16

 

Да се създаде част от дизайн за приложение за провеждане на анкети. Да има Главно Activity, което със скролируемо TableLayout да предлага списък от категории на анкетите и при кликване на конкретна категория по аналогичен начин да се зарежда списък с активните анкети в конкретна категория. При кликване на конкретна анкета, ще се зарежда Activity за отговор на анкетата. Всяка анкета има заглавие, описание, опции (като потребител избира валидната за него опция с кликване на CheckBox). Да има бутон за съхраняване на отговора и ProgressBar, който да показва забавянето при изпращане на отговора към Service. Да има Activity, което да показва резултатите от конкретна анкета със заглавие и подходящ Chart. Може да се използва библиотека като MPAndroidChart.

17

 

Да се създаде дизайн за приложение на туристическа агенция, предлагаща организирани екскурзии.  Главното Activity предоставя филтри за търсене на екскурзии по следните категории: дата от; дата до; Континент; регион в континент; минимален брой оставащи места в екскурзията; Брой дни; минимална категория на хотелите в екскурзията, както и  скролируем TableLayout, който показва самите екскурзии, отговарящи на зададените филтри. При кликване на конкретна екскурзия, излиза Activity показващо повече информация за екскурзия като Заглавие, галерия със снимки, брой дни, информация за всеки ден, информация за допълнителни екстри (напр. разходка в музей Лувър с предплатени билети). В това Activity има бутон Резервирай, при кликването на който, ще се отваря Activity за резервация на избраната екскурзия, която включва: брой възрастни над 7г. възраст, брой деца, е-mail за контакт, адрес за контакт с (Държава, Град, П.К., Улица ред 1, Улица ред 2), телефон за контакт.

18

 

Да се създаде дизайн за приложение „Съветник за тренировки“. Главното Activity да съдържа меню с любими тренировки, бутон с картинка, при кликването на който да се показва текущ потребителски профил със снимка на потребител, Име на потребител, брой изгорени калории.  Да има подходящ скролируем Layout, който да показва списък с тренировки, като списъкът се състои от главна снимка, продължителност в минути, ниво на интензивност (високо, средно, ниско), ниво на трениращ (начинаещ, среден, напреднал). При кликване на бутон „Тренировки“, да се зарежда списък с категории на тренировки (например: за сила, за устойчивост, за бързина, др.). При кликване на категория тренировки, ще се зарежда Activity с TableLayout със съответните тренировки в категория. При кликване на конкретна тренировка се зарежда Activity за провеждане на тренировка, което се състои от брояч: колко секунди са преминали, заглавие на тренировката и VideoView, което зарежда и пуска видеото на тренировката.

19

 

Да се създаде част от дизайн за приложение „Моите часове за деня“, което да подпомага студент да проследява по-лесно дневната си учебна програма , което да реализира следните Activities: Главно Activity, което да показва TableLayout с възможност за скролване с наличните часове за текущия ден съгласно учебна програма. При кликване на конкретен час, ще се зарежда Activity с информация за конкретния час в следния вид: Име дисциплина, име преподавател, номер на текуща седмица, съгласно академичния календар. Да има бутони за споделяне на информацията за часа в социални мрежи (Facebook, Twitter, LinkedIn, Google+ и др.).

20

 

Да се създаде част от дизайн за приложение „Корупционни сигнали“, което да има за цел докладване на корумпирани служители в държавната администрация.  Главно Activity, което да реализира подходящ интерфейс за потребителско вписване с Username и Password. Да има подходящ бутон с 2 състояния, който ако е кликнат, отдолу да се появяват допълнителни елементи във формата, които да позволяват възстановяване на забравена парола, като e-mail с който е регистриран и името на потребителя, с което е регистриран. Това Activity да предвижда възможност за вписване през Facebook, Google Account, LinkedIn и др. Второ Activity, което да реализира списък с подадени от текущия потребител сигнали дотук, както и с бутон за подаване на нов сигнал. Списъкът с подадените вече сигнали да се реализира с TableLayout, отдолу да има бутони за страниране на елементите в TableLayout-a или скролер (по избор). Всеки ред от таблицата да има CheckBox, който при избиране и кликване на бутон „Delete”да позволява изтриване на подадения сигнал. Да има Activity за добавяне на сигнал, като всеки сигнал съдържа: Заглавие; Име на служител, за който се отнася; Име на отдел; Име на агенция, Име на министерство; Описание на сигнала.

21

 

Да се създаде дизайн за приложение „Видео уроци за програмисти“. Главното Activity да съдържа меню с любими уроци, бутон с картинка, при кликването на който да се показва текущ потребителски профил със снимка на потребител, Име на потребител, изгледани уроци.  Да има подходящ скролируем Layout, който да показва списък с уроци, като списъкът се състои от главна снимка, продължителност в минути, ниво на трудност (високо, средно, ниско), ниво на обучаван (начинаещ, среден, напреднал). При кликване на бутон „Уроци“, да се зарежда списък с категории на уроци (например: за уеб приложения, за декстоп приложения, др.). При кликване на категория уроци, ще се зарежда Activity с TableLayout със съответните уроци  в категория. При кликване на конкретен урок се зарежда Activity за провеждане на урок, което се състои от брояч: колко секунди са преминали, заглавие на урока и VideoView, което зарежда и пуска видеото на тренировката с възможност за пауза.

22

 

Да се създаде част от дизайн за мобилно приложение „Онлайн аптека“. Да реализира с подходящ интерфейс, разпределен по Activities по избор на студента, който да има най-малко следните елементи: бутони с изображения за: „Всички категории“, „Запитване към магазина“, „Най-популярни“, „Най-ново за този месец“, „Продукти в промоция“. В ScrollView да показва първите 3 подкатегории от категории „Козметика“, „Антивирусни препарати“, „Ваксини“. Да има TableLayout, показващ най-продавани артикули.

23

 

Да се създаде част от дизайн за мобилно приложение „Каталог на ресторанти“. Главното Activity ще показва скролируем TableLayout с най-близките до потребителя ресторанти, подредени по намаляващ ред на тяхната категория. Всеки ресторант в Layout-а ще е представен с главна снимка, име на ресторанта, оценка, получена по каталог. При кликване на конкретен ресторант, ще се зарежда Activity с информация за съответния ресторант: Главна снимка, Име, Оценка, Достойнства, Недостатъци, Адрес, Телефон за поръчка, MapFragment със заредена карта с точка в координатите, където е адреса на ресторанта. Да има бутони за споделяне на конкретен ресторант в социални мрежи.

24

 

Да се създаде част от дизайн за мобилно приложение, подпомагащо работата на мрежови администратори при поставяне на Wireless Access Points из сграда. Да има Activity с TableLayout, което да предоставя списък с имена на налични мрежи и колко dB е силата на сигнала на конкретната мрежа от списъка. При кликване на конкретна мрежа, да се показва инфо за нея в отделно Activity, което да съдържа името на мрежата, начина на кодиране на сигнала в мрежата, колко dB e измерената сила в тази точка за тази мрежа.

25

 

Да се създаде част от дизайн за мобилно приложение PriorityFeed, работещо с Facebook Graph API, което да предоставя функционалност за приоритизиране на постингите в News Feed-а на потребителя. Всяка една новина от NewsFeed-а излиза в главното Activity, заедно с число: изчислен коефициент на важност на новината, на базата на зададените лични критерии за приоритизиране. При кликване на конкретна новина, да се зарежда в Activity самата новина в WebView. Задаването на правилата на приоритизиране да става в отделни Activity, в което се задават тези приятели на потребителя, които са по-важни, както и думи, които трябва да съдържат важните постове, както и думи, които не трябва да съдържат важните постове.

26

 

Да се създаде дизайн за приложение „Каталог книги“. Главното Activity да съдържа меню с любими книги, бутон с картинка, при кликването на който да се показва текущ потребителски профил със снимка на потребител, Име на потребител, брой свалени книги.  Да има подходящ скролируем Layout, който да показва списък с книги, като списъкът се състои от главна снимка, брой страници, Жанр. При кликване на бутон „Книги“, да се зарежда списък с жанр на книги (например: фантастика, IT и др.). При кликване на категория книги, ще се зарежда Activity с TableLayout със съответните книги в категория. При кликване на конкретна книга, се зарежда Activity за четене, което се състои от брояч: колко секунди са преминали, заглавие на книгата и WebView, което зарежда самата книга.

27

 

Да се създаде дизайн за мобилно приложение „Игра Тетрис“. Да се създаде TableLayout с квадратите, които по време на изпълнение на програмата динамично ще стават светли или тъмни, в зависимост от падащите фигури. Да има бутони за преминаване наляво, надясно, завъртане наляво, завъртане надясно на падащата фигура. Да има подходящ изглед за нивото на играта и за спечелените точки.

28

 

Да се създаде дизайн за мобилно приложение за ресторант, в който поръчките вместо с викане на сервитьор/ка, стават с мобилното приложение.  В главното Activity има текстово поле, в който потребителя въвежда номера на масата си и при натискане на бутон влиза в Activity за поръчка. Това Activity съдържа филтър по име на артикула и група от радио бутони на категории атрикули (напр. безалкохолни, алкохолни коктейли и т.н.). Съдържа и TableLayout с възможност за страниране, който показва намерените артикули, отговарящи на зададения филтър. При кликване на конкретен артикул ще излиза Activity за поръчка на артикула, в което има снимка, име, допълнителна информация за него, текстово поле, в което да въведе брой и бутон за добавяне към поръчката с връщане към главното Activity. В главното Activity да има подходящ бутон за финализиране на поръчката, който да показва сметката дотук.

29

 

Да се създаде дизайн за мобилно приложение „Умен градски транспорт“. Да има необходимите Activities за потребителски логин, възстановяване на забравена парола и логин през акаунти на социални мрежи. Да има Activity с MapFragment, което да показва най-близките спирки до потребителя на картата и при кликване на конкретна спирка, да зарежда Activity, в което се показва разширена информация за тази спирка: Име, кои линии минават през нея, кои са най-скорошните линии, които ще минават и до колко минути ще дойдат. Информацията да се зарежда в подходящи скролируеми TableLayouts или ListViews.

30

 

Да се създаде дизайн за мобилно приложение „Агенция за недвижими имоти“.  Да има необходимите Activities за потребителски логин, възстановяване на забравена парола и логин през акаунти на социални мрежи. Да има Activity с MapFragment, което да показва най-близките недвижими имоти за продан до потребителя на картата и при кликване на конкретен имот, да зарежда Activity, в което се показва разширена информация за този имот: Име, метри до най-близката спирка на градския транспорт, колко квадрата, цена на квадрат, обща цена, снимки от имота (галерия със следните елементи: ImageView, бутон за Next и Previous ). Да има бутон „поръчай оглед“, за да може клиента да поръча оглед на този имот. Да има бутони за споделяне на конкретен имот в социални мрежи.

 


Обявления за извънредни занятия

 

 

 

 

 

 


 

За допълнителна информация и въпроси:

гл. ас. д-р инж. Георги Пашев;

e-mail: georgepashev (at) uni-plovdiv.bg;

 

 

 

 

 

 

 

 

 

Учебни материали по Въведение в компютърните науки

Здравейте, колеги. Тук си направих труда да извадя линк към учебни материали, които можете да сваляте свободно и безплатно и легално по дисциплината: Въведение в компютърните науки.

 

Те съдържат:

- решени задачи на упражнения

- записки от лекции, презентации

-други учебни материали

Можете да свалите учебните материали от тук.

 

Списък с учебници, които можете да търсите допълнително:

Тодорова М, Програмиране на C++, част 1., Сиела

Davis Stephen, C++ for Dummies

Wang Wallace, Beginning Programming for Dummies

Lajole Hose, C++ Primer

Различни учебници за 10. клас

за напреднали:

Тодорова М, Програмиране на C++, част 2., Сиела

Майерс Скот, По-ефективен C++: 35 нови начина да подобрите своите програми и проекти

Willemer Arnold, Coding for Fun mit C++ (Galileo Computing) (само на немски език)

Наков Преслав, Програмиране = ++ Алгоритми

 

 

 

За въпроси:

инж. Г. Пашев, e-mail: georgepashev@gmail.com

 

Размисли за бъдещето на браузърите

Бъдещето на браузърите.
За да бъде новият браузър смислен, трябва в него да има нещо уникално и ново, та да може да отмъкне дял от другите. Chrome е уникален в бързината си на работа и поради факта, че за доста неща разчита на огромния гръбнак от сървъри на Google, понеже така или иначе е тяхна собственост. Значи, трябва ти и огромен гръбнак от сървъри, но понеже туй няма как да стане, затуй може да се мисли за техна алтернатива: някакъв p2p протокол, подобен на торентите, чиято цел е да замести работата, която многото сървъри на google биха свършили: например кеширане на сайтове, кеширане на история на търсене, определяне на близост между потребители и персонализиране на резултати за търсене, подсказки за търсене и т.н. Според мен, обаче, все повече ще се засилва клауд елемента: т.е: тенденцията вече ще бъде операционната ти система да не бъде на локалния компютър, а на виртуален компютър в клауда, а локалната ти станция само ще съдържа съвсем олекотен линукс, чиято основна цел е да зареди основната операционна система от виртуалния компютър в клауда. Тогава има голяма вероятност да има голяма необходимост от браузъри, които са оптимизирани за отдалечено зареждане на уеб базирани операционни системи. Така, че според мен, който работи в тая насока, може и да направи удар при браузърите, независимо в коя държава се намира. Използване на браузър като входна точка към твоя операционна система в клауда: това е част от бъдещето на браузърите. Другото, което ще бъде тенденция, според мен е и появата на т.нар. мулти-браузъри: т.е такива браузъри, които да поддържат не само стандартни протоколи като http, ftp, но и такива протоколи, които засега са били смятани за не - уеб съвместими: например: скайп, торенти, winamp и документни поддръжки. Последното и сега се поддържа с инсталиране на плъгини, с които можеш да разглеждаш pdf, docx и др. файлове директно в браузъра, но в бъдещите браузъри това ще бъде вградено и няма да има нужда да се слагат плъгини. Дори може да се интегрира в http протокола. Представете си да имаш браузър, в който в единия таб ти е пуснат скайпа, в другия таб киснеш във фейсбук, в третия таб си пуснал winamp канал (например Venice Classic Radio), в четвъртия таб теглиш торенти, а ако си програмист, в петия таб си пуснал някаква интегрирана с браузъра среда за разработка на c++ приложение, а на шестия таб даже си стартирал една отдалечена конзола, с която управляваш нещо в ОСто ти в клауда. Ето за такова нещо говоря: браузъра да започне да върши работа едва ли не за всичко. Вариантите за това са два: или различни системи предлагат своя версия за сегашния уеб, или уеб да се пригоди за тях чрез браузър, който да ги поддържа. Кой да има тази инициатива? Според мен е по-логично браузърът да има инициативата да се развива и да предлага по-голямо разнообразие от разширения на http за комуникация. Другата тенденция, която определено ще я има е и вграждането в http и използването на периферни устройства за виртуална реалност като google glass например. Дори вече се говори за разработване на javascript api-та за това. В един момент сайтовете ще се считат за остаряли, ако не поддържат някои неща за google glass или виртуална реалност като цяло.

Упражненя по ОС - Серия Задачи 1: BASH

Задачи:

Да се напише bash shell script, който:

1) Приема име на файл и му добавя право за изпълнение. Ако няма такъв файл да изпише съобщение за грешка "No such file."

 

#!/bin/bash
if [ -e $1 ]; then
    chmod +x $1
else
  echo No such file $1.
fi

2) Приема от командния ред 2 числа, а ако не са подадени 2 числа като входни параметри, предлага на потребителя да ги въведе. Тези 2 числа са първите 2 числа на ред на Фибоначи, който скрипта трябва да генерира. Редът да е с размер 20 елемента. Генерираният ред да се запазва във файл: fib.txt.

#!/bin/bash

num_vh=$#
declare -i num1
declare -i num2
declare -a nums
#echo $num_vh
if [ $num_vh -le 1 ]; then
  echo "enter first number";
  read num1
  echo "enter second number";
  read num2
 else
 num1=$1
 num2=$2 
fi

nums[0]=$num1
nums[1]=$num2
echo "Fibonacci" > fib.txt
echo nums[0]=${nums[0]} >> fib.txt
echo nums[1]=${nums[1]} >> fib.txt
declare -i i=2
while [ $i -lt 20 ]; do
 
  nums[$i]=$(( ${nums[(( $i - 1 ))]} + ${nums[(( $i - 2 ))]} ))
  echo nums[$i]=${nums[$i]} >> fib.txt
  i=$i+1
 
done


3) Приема от командния ред цяло число и проверява дали е четно или не. Ако е четно, изписва "1", ако е нечетно "0".

#!/bin/bash
if [ $(( $1 % 2 )) -eq 0 ]; then
    echo "1"

else
  echo "0"

fi


4) Приема от командния ред променлив брой числа и връща сумата им.

#!/bin/bash
declare -i sum=0
for num in $@
do
sum=$(( $sum + $num ))
done
echo $sum



5) Приема от командния ред имена на 2 файла. Проверява дали по съдържание са еднакви. Ако са еднакви, да изтрие втория.

#!/bin/bash
fc1=""
fc2=""
if [ $# -lt 2 ]; then
    echo "not enough parameters"
    exit 1
fi
if  [ -e $1 ] && [ -e $2 ]; then 
  fc1=$( cat $1 )
  fc2=$( cat $2 )
  if [ $fc1 = $fc2 ]; then
    echo '1'
    rm $2
  else
    echo '0'
  fi  
else
    echo "one of the files do not exist"
    exit 2
fi


6) Приема от командния ред цяло число и връща неговия факториел.

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "Not enough input parameters"
    exit 1
fi
re='^[0-9]+$'
if ! [[ $1 =~ $re ]] ; then
   echo "error: Not a number" >&2; exit 2
fi
declare -i fac=1
if [ $1 -eq 1 ]; then
  echo $fac
  exit 0
fi
for (( nnum=1;  nnum <= $1 ; nnum=$(( $nnum+1 )) ))
do
  fac=$(( $fac * $nnum ))
done
echo $fac



7) Генерира файл variations.txt, който съдържа всички пермутации с повторения на числата 1, 2, 3.

#!/bin/bash
for i in 1 2 3; do
  for j in 1 2 3; do
    for k in 1 2 3; do
      echo [i, j, k]=[$i, $j, $k] >> variations.txt    
    done
  done
done