Events: add campfire 'idealni-kryptoportfolio'
This commit is contained in:
rodič
6460f79d9f
revize
02f6a4937e
|
@ -698,6 +698,8 @@
|
|||
- pujčky
|
||||
- liquidity mining
|
||||
- historie
|
||||
description: |
|
||||
Na prednáške budem hovoriť hlavne o projektoch ktoré bežia na Ethereu poprípade EVM forkoch ako je napríklad Polygon, Binance Smart Chain, Fantom atď. Prednášku som rozdelil na 4 hlavné časti: 1. Stablekoiny 2. Decentralizované burzy 3. Lending protokoli 4. Bridge / Mosty. Po alebo pred prednáškou budem tatkiež robiť workshop kde Vám ukážem ako to v skutočnosti funguju a ako sa s DeFi pracuje. Vy sami si teda budete môcť vyskúšať čo znamená byť DeFi liquidity providerom, investorom, farmárom, poprípade ako sa pripraviť na airdropy budúcich zaujímavých projektov.
|
||||
|
||||
- id: defi-pro-zacatecniky
|
||||
type: talk
|
||||
|
@ -1839,6 +1841,7 @@
|
|||
type: campfire
|
||||
name: Je krypto letadlo?
|
||||
track: zaklady
|
||||
difficulty: beginner
|
||||
speakers: [ vladimir-pinker ]
|
||||
duration: 30
|
||||
tags:
|
||||
|
@ -1848,19 +1851,12 @@
|
|||
type: campfire
|
||||
name: Žijeme bez fiatu
|
||||
track: zaklady
|
||||
difficulty: advanced
|
||||
speakers: [ vladimir-pinker ]
|
||||
duration: 60
|
||||
tags:
|
||||
- finanční nezávislost
|
||||
|
||||
- id: students-for-liberty-campfire
|
||||
type: campfire
|
||||
name: Students for liberty CZ campfire [TBD]
|
||||
track: spolecnost
|
||||
speakers: []
|
||||
duration: 60
|
||||
tags: []
|
||||
|
||||
- id: digitalni-identita-v-metaverse
|
||||
type: campfire
|
||||
name: Digitální identita v metaverse
|
||||
|
@ -1879,6 +1875,7 @@
|
|||
name: Skovo.cz - ukázka [TBD]
|
||||
track: zaklady
|
||||
speakers: [ jiri-skrivan ]
|
||||
difficulty: beginner
|
||||
duration: 30
|
||||
tags:
|
||||
- seed
|
||||
|
@ -1891,6 +1888,7 @@
|
|||
name: KodaDot nfts and chill
|
||||
track: nft
|
||||
duration: 60
|
||||
difficulty: advanced
|
||||
speakers:
|
||||
- damsky
|
||||
- matej-yangwao
|
||||
|
@ -1923,6 +1921,7 @@
|
|||
name: KryptoVláďa Q&A
|
||||
speakers: [ vladimir-pinker ]
|
||||
track: defi
|
||||
difficulty: beginner
|
||||
duration: 60
|
||||
fixed:
|
||||
time: '1/19:00-20:00'
|
||||
|
@ -1936,6 +1935,7 @@
|
|||
speakers: []
|
||||
track: nft
|
||||
duration: 30
|
||||
difficulty: beginner
|
||||
fixed:
|
||||
date: '2022-06-04'
|
||||
tags:
|
||||
|
@ -1958,6 +1958,7 @@
|
|||
duration: 30
|
||||
fixed:
|
||||
stage: campfire-indoor
|
||||
difficulty: beginner
|
||||
tags:
|
||||
- video
|
||||
- bezpečnost
|
||||
|
@ -1976,6 +1977,7 @@
|
|||
speakers: [ edvard-meliksetyan ]
|
||||
track: nft
|
||||
duration: 15
|
||||
difficulty: advanced
|
||||
description: |
|
||||
With the rapidly growing interest in the industry of crypto assets, blockchain and NFTs, the amount of scammers in the industry is growing just as fast and their techniques are getting more and more sophisticated. What are the common red flags? Is it possible to tell a cryptoscam? And how? Explained by Edvard Meliksetyan, NFT gaming expert from Altlift.
|
||||
|
||||
|
@ -1991,6 +1993,7 @@
|
|||
speakers: [ juraj-bednar ]
|
||||
track: spolecnost
|
||||
duration: 45
|
||||
difficulty: advanced
|
||||
description: |
|
||||
Ak podnikáte (v inej oblasti ako priamo v kryptomenách) a používate alebo by ste chceli používať kryptomeny vo svojom podnikaní, poďte sa porozprávať o tom ako využívate Bitcoin. Akceptovanie, mzdy v krypte, Bitcoin na súvahe, firemné krypto fondy, čo robiť v bear markete, príbehy o tom ako vám Bitcoin zachránil prdel alebo zlomil krk.
|
||||
tags:
|
||||
|
@ -2005,6 +2008,7 @@
|
|||
- dan-vorechovsky
|
||||
- jan-ruzicka
|
||||
track: btc
|
||||
difficulty: beginner
|
||||
duration: 60
|
||||
description: |
|
||||
Dva odborníci na Čínu a ekonomové, Dan Vořechovský a Jan Růžička, s vámi chtějí probrat situaci na asijských trzích. Jaké jsou rozdíly v asijském fintechu oproti situaci u nás? V čem jsou v Asii napřed? Jaká je budoucnost, jaká jsou místní specifika? Přijďte podebatovat, čínsky umět nemusíte. :)
|
||||
|
@ -2022,6 +2026,7 @@
|
|||
- jana-galvis
|
||||
track: spolecnost
|
||||
duration: 60
|
||||
difficulty: beginner
|
||||
description: |
|
||||
Jana Galvis z Liberálního institutu je expertka nejenom na Kolumbii, ale také na lidská práva a zastoupení žen. Co může liberál/ka dělat pro větší zastoupení žen v oborech, kde dominují muži, jako jsou IT a krypto? Aneb jde to i bez kvót. Pojďme o tom podebatovat.
|
||||
|
||||
|
@ -2038,6 +2043,7 @@
|
|||
- martin-vlach
|
||||
track: defi
|
||||
duration: 30
|
||||
difficulty: expert
|
||||
description: |
|
||||
Zmapování protokolů umožňujících nákup a prodej opcí (options) na EVM blockchainech a Solaně, zhodnocení jejich použitelnosti, trendy a prostor k vývoji. Kdy přeroste objem opčních obchodů spotové tak jako v TradFi, oblíbenost a perspektivy opčních vaultů, order-book vs. AMM design opčních DExů, ...
|
||||
tags:
|
||||
|
@ -2053,6 +2059,7 @@
|
|||
- tree
|
||||
track: btc
|
||||
duration: 30
|
||||
difficulty: expert
|
||||
description: |
|
||||
Jedni se radují z nízkých transakčních poplatků v Bitcoin síti, druzí se hrozí že jsou přiliš levné. Co se stane, až odměna těžařům za vytěžený blok (block reward) klesne na minimum nebo až tisknutí nových satů přestane úplně? Pokud tyto odměny nezastoupí poplatky, tak se bezpečnost Bitcoinu bude postupně snižovat. Budou lidé ochotni platit za bitcoinovou transakci tisíce dolarů? Proč se o to zajímat už teď? Co s tím má společného Lightning Network? A není to jenom FUD? - pojďme společně a věcně pohovořit o možných scénářích následujícího vývoje.
|
||||
|
||||
|
@ -2077,6 +2084,25 @@
|
|||
- anonymizace
|
||||
- finanční svoboda
|
||||
|
||||
- id: idealni-kryptoportfolio
|
||||
type: campfire
|
||||
name: Ideální kryptoportfolio
|
||||
track: defi
|
||||
speakers:
|
||||
- ondrej-bajer
|
||||
- m0xt
|
||||
duration: 30
|
||||
difficulty: advanced
|
||||
description: |
|
||||
Každý rozumný investor by měl zvážit investování do indexů nebo-li ETF, a ne se snažit stát se investorem přes noc a porazit trhy. Existuje několik obecných doporučení, jejichž aplikace by přinesla kýžené výsledky. Ne každý však tuto skutečnost akceptuje a spousta lidí stejně investuje peníze bez patřičných investičních dovedností. První rada, na kterou byste měli myslet, je vytvořit si portfolio.
|
||||
tags:
|
||||
- portfolio
|
||||
- investice
|
||||
- indexy
|
||||
fixed:
|
||||
date: '2022-06-04'
|
||||
|
||||
|
||||
# Ostatní
|
||||
# ==========================
|
||||
|
||||
|
|
Rozdílový obsah nebyl zobrazen, protože je příliš veliký
Načíst rozdílové porovnání
|
@ -335,7 +335,7 @@
|
|||
orgs: Spoluzakladatel konference [ChainCamp](https://chaincamp.cz/)
|
||||
country: cz
|
||||
available:
|
||||
- from: '2022-06-04T12:00:00'
|
||||
- from: '2022-06-04T14:00:00'
|
||||
to: '2022-06-04T23:59:59'
|
||||
desc: |
|
||||
Spoluzakladatel konference [ChainCamp](https://chaincamp.cz/), Cypherpunk v učení, knihomol, autor článků o Bitcoinu. Zabývá se Rakouskou školou ekonomie, filozofií, novými technologiemi a nadevše věří v decentralizaci.
|
||||
|
|
103
utils/plan.js
103
utils/plan.js
|
@ -53,6 +53,7 @@ class UTXOPlanner {
|
|||
this.unscheduled = [];
|
||||
this.priorityLevel = 10;
|
||||
this.tries = {};
|
||||
this.slotDuration = 30 * 60 * 1000;
|
||||
|
||||
// normalize stages
|
||||
for (const stage of this.stages) {
|
||||
|
@ -65,9 +66,17 @@ class UTXOPlanner {
|
|||
const rev = this.events.find((e) => e.rightAfter === ev.id);
|
||||
ev.rightAfterEvent = rev ? rev.id : null;
|
||||
|
||||
let haveAvailability = null
|
||||
for (const spId of ev.speakers) {
|
||||
const sp = specs.speakers.find((s) => s.id === spId);
|
||||
if (sp.available) {
|
||||
haveAvailability = true
|
||||
}
|
||||
}
|
||||
|
||||
ev.priority = haveAfter.length > 0
|
||||
? 10
|
||||
: (ev.after || ev.rightAfter ? 5 : 0);
|
||||
: (haveAvailability ? 5 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,8 +111,10 @@ class UTXOPlanner {
|
|||
}
|
||||
|
||||
findConflicts(stage, period) {
|
||||
const evs = this.schedule.filter((s) => s.stage === stage.id);
|
||||
for (const si of evs) {
|
||||
for (const si of this.schedule) {
|
||||
if (si.stage !== stage.id) {
|
||||
continue
|
||||
}
|
||||
if (
|
||||
si.period.start.getTime() < period.end.getTime() &&
|
||||
si.period.end.getTime() > period.start.getTime()
|
||||
|
@ -123,35 +134,40 @@ class UTXOPlanner {
|
|||
};
|
||||
}
|
||||
|
||||
findSlotInStage(ev, stage, fixedDate = null, randomize = true) {
|
||||
const slotDuration = 30 * 60 * 1000;
|
||||
const stageEvents = this.schedule.filter((s) => s.stage === stage.id);
|
||||
const skipSegments = Math.floor(Math.random() * stage.timesFull.length) - 1;
|
||||
let segmentCount = 0;
|
||||
findSlotInStages(ev, stages, fixedDate = null, randomize = true) {
|
||||
|
||||
const segments = stage.timesFull.filter((s) => {
|
||||
return !fixedDate ||
|
||||
(fixedDate && format(s.start, "yyyy-MM-dd") === fixedDate);
|
||||
});
|
||||
for (const stage of shuffle(stages)) {
|
||||
const segments = stage.timesFull.filter((s) => {
|
||||
return !fixedDate ||
|
||||
(fixedDate && format(s.start, "yyyy-MM-dd") === fixedDate);
|
||||
});
|
||||
|
||||
for (const segment of (randomize ? shuffle(segments) : segments)) {
|
||||
segmentCount++;
|
||||
if (segmentCount >= skipSegments) {
|
||||
let ctime = segment.start;
|
||||
while (ctime.getTime() < segment.end.getTime()) {
|
||||
const evPeriod = this.eventPeriod(ev, ctime);
|
||||
for (const segment of (randomize ? shuffle(segments) : segments)) {
|
||||
let slotInSegment = (segment.end.getTime() - segment.start.getTime())/this.slotDuration
|
||||
let slots = []
|
||||
for (let i = 0; i < slotInSegment; i++) {
|
||||
slots.push(new Date(segment.start.getTime() + (this.slotDuration * i)));
|
||||
}
|
||||
|
||||
const slotDir = Math.floor(Math.random() * 2)
|
||||
slots = slotDir === 1 ? slots.reverse() : slots
|
||||
|
||||
for (const slot of slots) {
|
||||
//console.log(slot, ctime)
|
||||
const evPeriod = this.eventPeriod(ev, slot);
|
||||
if (evPeriod.end.getTime() <= segment.end.getTime()) {
|
||||
const conflicts = this.findConflicts(stage, evPeriod);
|
||||
//console.log(evPeriod, conflicts)
|
||||
if (conflicts === 0) {
|
||||
if (this.eventSlotValidator(ev, evPeriod, stage)) {
|
||||
return evPeriod;
|
||||
return [ stage, evPeriod ];
|
||||
}
|
||||
}
|
||||
}
|
||||
ctime = new Date(ctime.getTime() + slotDuration);
|
||||
}
|
||||
}
|
||||
}
|
||||
return [ null, null ]
|
||||
}
|
||||
|
||||
isPeriodOverlap(x, y) {
|
||||
|
@ -233,8 +249,10 @@ class UTXOPlanner {
|
|||
const events = priorityEvents.length > 0 ? priorityEvents : this.events;
|
||||
//const events = this.events
|
||||
|
||||
const rand = Math.floor(Math.random() * events.length);
|
||||
const ev = events[rand];
|
||||
//const rand = Math.floor(Math.random() * events.length);
|
||||
//const ev = events[rand];
|
||||
|
||||
const ev = events[0];
|
||||
|
||||
if (!this.tries[ev.id]) {
|
||||
this.tries[ev.id] = 0;
|
||||
|
@ -243,43 +261,43 @@ class UTXOPlanner {
|
|||
if (this.tries[ev.id] > 30) {
|
||||
this.events.splice(this.events.indexOf(ev), 1);
|
||||
this.unscheduled.push(ev.id);
|
||||
//console.log(ev.id)
|
||||
//console.log('Max tries reached', ev.id)
|
||||
return null;
|
||||
}
|
||||
|
||||
const availStages = this.stages.filter((st) => st.types.includes(ev.type))
|
||||
.map((s) => s.id);
|
||||
if (availStages.length === 0) {
|
||||
this.events.splice(this.events.indexOf(ev), 1);
|
||||
this.unscheduled.push(ev.id);
|
||||
return null;
|
||||
}
|
||||
|
||||
let stage = null;
|
||||
let stages = availStages;
|
||||
|
||||
if (ev.fixed && ev.fixed.stage) {
|
||||
if (!availStages.includes(ev.fixed.stage)) {
|
||||
if (!availStages.find(s => s.id === ev.fixed.stage)) {
|
||||
return null;
|
||||
}
|
||||
stage = this.stages.find((s) => s.id === ev.fixed.stage);
|
||||
} else {
|
||||
const randStage = Math.floor(Math.random() * availStages.length);
|
||||
stage = this.stages.find((s) => s.id === availStages[randStage]);
|
||||
stages = availStages.filter((s) => s.id === ev.fixed.stage)
|
||||
}
|
||||
|
||||
const slot = this.findSlotInStage(
|
||||
const [stage, slot] = this.findSlotInStages(
|
||||
ev,
|
||||
stage,
|
||||
stages,
|
||||
ev.fixed && ev.fixed.date ? ev.fixed.date : null,
|
||||
);
|
||||
//console.log(stage,slot)
|
||||
|
||||
if (slot) {
|
||||
//console.log(format(slot.start, 'dd HH:mm'), stage.id, ev.id, ev.priority)
|
||||
this.addEvent(ev, { stage: stage.id, period: slot });
|
||||
|
||||
if (ev.rightAfterEvent) {
|
||||
const rev = this.events.find((e) => e.id === ev.rightAfterEvent);
|
||||
//console.log(ev.rightAfterEvent)
|
||||
const rslot = this.findSlotInStage(
|
||||
const [_, rslot] = this.findSlotInStages(
|
||||
rev,
|
||||
stage,
|
||||
[stage],
|
||||
ev.fixed && ev.fixed.date ? ev.fixed.date : null,
|
||||
false,
|
||||
);
|
||||
|
@ -290,6 +308,10 @@ class UTXOPlanner {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
///console.log('unscheduled', ev.id)
|
||||
this.unscheduled.push(ev)
|
||||
return
|
||||
}
|
||||
|
||||
const diff = (new Date()).getTime() - this.startTime.getTime();
|
||||
|
@ -404,10 +426,19 @@ class UTXOPlanner {
|
|||
}
|
||||
}
|
||||
|
||||
function infoStats (startTime, numResults) {
|
||||
const duration = ((new Date()).getTime() - startTime.getTime())
|
||||
const perSecond = Math.round((numResults/(duration/1000)) * 100)/100
|
||||
const timePerItem = Math.round((duration/numResults) * 100)/100
|
||||
return `Duration: ${duration/1000}s, ${perSecond} solutions/s, ${timePerItem/1000}s per item`
|
||||
}
|
||||
|
||||
|
||||
async function main() {
|
||||
const limit = null;
|
||||
let i = 0;
|
||||
const numResults = Deno.args[0] || 10;
|
||||
const startTime = new Date()
|
||||
|
||||
console.log("Planning started ..");
|
||||
console.log(`Looking for ${numResults} results`);
|
||||
|
@ -433,6 +464,8 @@ async function main() {
|
|||
}
|
||||
|
||||
if (plans.length >= numResults) {
|
||||
|
||||
console.log("---------------------\n" + infoStats(startTime, plans.length))
|
||||
const outputFn = "./dist/22/schedule-candidates.json";
|
||||
console.log(`Writing result: ${outputFn}`);
|
||||
const filtered = plans.sort((x, y) =>
|
||||
|
@ -443,7 +476,7 @@ async function main() {
|
|||
}
|
||||
|
||||
if (i % 1000 === 0) {
|
||||
console.log(`${i}/${limit} - solutions: ${plans.length}`);
|
||||
console.log(`${i}/${limit} - solutions: ${plans.length}, ${infoStats(startTime, plans.length)}`);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
|
Načítá se…
Odkázat v novém úkolu